module SwiftNav.SBP.Flash 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 msgFlashProgram :: Word16 msgFlashProgram = 0x00E6 data MsgFlashProgram = MsgFlashProgram { msgFlashProgramTarget :: Word8 , msgFlashProgramAddrStart :: [Word8] , msgFlashProgramAddrLen :: Word8 , msgFlashProgramData :: [Word8] } deriving ( Show, Read, Eq ) instance Binary MsgFlashProgram where get = do msgFlashProgramTarget <- getWord8 msgFlashProgramAddrStart <- replicateM 3 getWord8 msgFlashProgramAddrLen <- getWord8 msgFlashProgramData <- whileM (liftM not isEmpty) getWord8 return MsgFlashProgram {..} put MsgFlashProgram {..} = do putWord8 msgFlashProgramTarget mapM_ putWord8 msgFlashProgramAddrStart putWord8 msgFlashProgramAddrLen mapM_ putWord8 msgFlashProgramData msgFlashDone :: Word16 msgFlashDone = 0x00E0 data MsgFlashDone = MsgFlashDone { msgFlashDoneResponse :: Word8 } deriving ( Show, Read, Eq ) instance Binary MsgFlashDone where get = do msgFlashDoneResponse <- getWord8 return MsgFlashDone {..} put MsgFlashDone {..} = do putWord8 msgFlashDoneResponse msgFlashReadReq :: Word16 msgFlashReadReq = 0x00E7 data MsgFlashReadReq = MsgFlashReadReq { msgFlashReadReqTarget :: Word8 , msgFlashReadReqAddrStart :: [Word8] , msgFlashReadReqAddrLen :: Word8 } deriving ( Show, Read, Eq ) instance Binary MsgFlashReadReq where get = do msgFlashReadReqTarget <- getWord8 msgFlashReadReqAddrStart <- replicateM 3 getWord8 msgFlashReadReqAddrLen <- getWord8 return MsgFlashReadReq {..} put MsgFlashReadReq {..} = do putWord8 msgFlashReadReqTarget mapM_ putWord8 msgFlashReadReqAddrStart putWord8 msgFlashReadReqAddrLen msgFlashReadResp :: Word16 msgFlashReadResp = 0x00E1 data MsgFlashReadResp = MsgFlashReadResp { msgFlashReadRespTarget :: Word8 , msgFlashReadRespAddrStart :: [Word8] , msgFlashReadRespAddrLen :: Word8 } deriving ( Show, Read, Eq ) instance Binary MsgFlashReadResp where get = do msgFlashReadRespTarget <- getWord8 msgFlashReadRespAddrStart <- replicateM 3 getWord8 msgFlashReadRespAddrLen <- getWord8 return MsgFlashReadResp {..} put MsgFlashReadResp {..} = do putWord8 msgFlashReadRespTarget mapM_ putWord8 msgFlashReadRespAddrStart putWord8 msgFlashReadRespAddrLen msgFlashErase :: Word16 msgFlashErase = 0x00E2 data MsgFlashErase = MsgFlashErase { msgFlashEraseTarget :: Word8 , msgFlashEraseSectorNum :: Word32 } deriving ( Show, Read, Eq ) instance Binary MsgFlashErase where get = do msgFlashEraseTarget <- getWord8 msgFlashEraseSectorNum <- getWord32le return MsgFlashErase {..} put MsgFlashErase {..} = do putWord8 msgFlashEraseTarget putWord32le msgFlashEraseSectorNum msgStmFlashLockSector :: Word16 msgStmFlashLockSector = 0x00E3 data MsgStmFlashLockSector = MsgStmFlashLockSector { msgStmFlashLockSectorSector :: Word32 } deriving ( Show, Read, Eq ) instance Binary MsgStmFlashLockSector where get = do msgStmFlashLockSectorSector <- getWord32le return MsgStmFlashLockSector {..} put MsgStmFlashLockSector {..} = do putWord32le msgStmFlashLockSectorSector msgStmFlashUnlockSector :: Word16 msgStmFlashUnlockSector = 0x00E4 data MsgStmFlashUnlockSector = MsgStmFlashUnlockSector { msgStmFlashUnlockSectorSector :: Word32 } deriving ( Show, Read, Eq ) instance Binary MsgStmFlashUnlockSector where get = do msgStmFlashUnlockSectorSector <- getWord32le return MsgStmFlashUnlockSector {..} put MsgStmFlashUnlockSector {..} = do putWord32le msgStmFlashUnlockSectorSector msgStmUniqueIdReq :: Word16 msgStmUniqueIdReq = 0x00E8 data MsgStmUniqueIdReq = MsgStmUniqueIdReq deriving ( Show, Read, Eq ) instance Binary MsgStmUniqueIdReq where get = return MsgStmUniqueIdReq put MsgStmUniqueIdReq = return () msgStmUniqueIdResp :: Word16 msgStmUniqueIdResp = 0x00E5 data MsgStmUniqueIdResp = MsgStmUniqueIdResp { msgStmUniqueIdRespStmId :: [Word8] } deriving ( Show, Read, Eq ) instance Binary MsgStmUniqueIdResp where get = do msgStmUniqueIdRespStmId <- replicateM 12 getWord8 return MsgStmUniqueIdResp {..} put MsgStmUniqueIdResp {..} = do mapM_ putWord8 msgStmUniqueIdRespStmId msgM25FlashWriteStatus :: Word16 msgM25FlashWriteStatus = 0x00F3 data MsgM25FlashWriteStatus = MsgM25FlashWriteStatus { msgM25FlashWriteStatusStatus :: [Word8] } deriving ( Show, Read, Eq ) instance Binary MsgM25FlashWriteStatus where get = do msgM25FlashWriteStatusStatus <- replicateM 1 getWord8 return MsgM25FlashWriteStatus {..} put MsgM25FlashWriteStatus {..} = do mapM_ putWord8 msgM25FlashWriteStatusStatus