module SwiftNav.SBP.Bootload where
import Control.Monad
import Control.Monad.Loops
import Data.Binary
import Data.Binary.Get
import Data.Binary.IEEE754
import Data.Binary.Put
import Data.ByteString
import Data.ByteString.Lazy hiding ( ByteString )
import Data.Int
import Data.Word
msgBootloaderHandshakeReq :: Word16
msgBootloaderHandshakeReq = 0x00B3
data MsgBootloaderHandshakeReq = MsgBootloaderHandshakeReq
deriving ( Show, Read, Eq )
instance Binary MsgBootloaderHandshakeReq where
get =
return MsgBootloaderHandshakeReq
put MsgBootloaderHandshakeReq =
return ()
msgBootloaderHandshakeResp :: Word16
msgBootloaderHandshakeResp = 0x00B4
data MsgBootloaderHandshakeResp = MsgBootloaderHandshakeResp
{ msgBootloaderHandshakeRespFlags :: Word32
, msgBootloaderHandshakeRespVersion :: ByteString
} deriving ( Show, Read, Eq )
instance Binary MsgBootloaderHandshakeResp where
get = do
msgBootloaderHandshakeRespFlags <- getWord32le
msgBootloaderHandshakeRespVersion <- liftM toStrict getRemainingLazyByteString
return MsgBootloaderHandshakeResp {..}
put MsgBootloaderHandshakeResp {..} = do
putWord32le msgBootloaderHandshakeRespFlags
putByteString msgBootloaderHandshakeRespVersion
msgBootloaderJumpToApp :: Word16
msgBootloaderJumpToApp = 0x00B1
data MsgBootloaderJumpToApp = MsgBootloaderJumpToApp
{ msgBootloaderJumpToAppJump :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgBootloaderJumpToApp where
get = do
msgBootloaderJumpToAppJump <- getWord8
return MsgBootloaderJumpToApp {..}
put MsgBootloaderJumpToApp {..} = do
putWord8 msgBootloaderJumpToAppJump
msgNapDeviceDnaReq :: Word16
msgNapDeviceDnaReq = 0x00DE
data MsgNapDeviceDnaReq = MsgNapDeviceDnaReq
deriving ( Show, Read, Eq )
instance Binary MsgNapDeviceDnaReq where
get =
return MsgNapDeviceDnaReq
put MsgNapDeviceDnaReq =
return ()
msgNapDeviceDnaResp :: Word16
msgNapDeviceDnaResp = 0x00DD
data MsgNapDeviceDnaResp = MsgNapDeviceDnaResp
{ msgNapDeviceDnaRespDna :: [Word8]
} deriving ( Show, Read, Eq )
instance Binary MsgNapDeviceDnaResp where
get = do
msgNapDeviceDnaRespDna <- replicateM 8 getWord8
return MsgNapDeviceDnaResp {..}
put MsgNapDeviceDnaResp {..} = do
mapM_ putWord8 msgNapDeviceDnaRespDna
msgBootloaderHandshakeDepA :: Word16
msgBootloaderHandshakeDepA = 0x00B0
data MsgBootloaderHandshakeDepA = MsgBootloaderHandshakeDepA
{ msgBootloaderHandshakeDepAHandshake :: [Word8]
} deriving ( Show, Read, Eq )
instance Binary MsgBootloaderHandshakeDepA where
get = do
msgBootloaderHandshakeDepAHandshake <- whileM (liftM not isEmpty) getWord8
return MsgBootloaderHandshakeDepA {..}
put MsgBootloaderHandshakeDepA {..} = do
mapM_ putWord8 msgBootloaderHandshakeDepAHandshake