sbp 4.1.6 → 4.2.0
raw patch · 3 files changed
+77/−4 lines, 3 files
Files
- sbp.cabal +1/−1
- src/SwiftNav/SBP/Msg.hs +6/−0
- src/SwiftNav/SBP/System.hs +70/−3
sbp.cabal view
@@ -1,5 +1,5 @@ name: sbp-version: 4.1.6+version: 4.2.0 synopsis: SwiftNav's SBP Library homepage: https://github.com/swift-nav/libsbp license: MIT
@@ -225,6 +225,7 @@ | SBPMsgSsrStecCorrectionDepA MsgSsrStecCorrectionDepA Msg | SBPMsgSsrTileDefinition MsgSsrTileDefinition Msg | SBPMsgStartup MsgStartup Msg+ | SBPMsgStatusJournal MsgStatusJournal Msg | SBPMsgStatusReport MsgStatusReport Msg | SBPMsgStmFlashLockSector MsgStmFlashLockSector Msg | SBPMsgStmFlashUnlockSector MsgStmFlashUnlockSector Msg@@ -442,6 +443,7 @@ | _msgSBPType == msgSsrStecCorrectionDepA = SBPMsgSsrStecCorrectionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrTileDefinition = SBPMsgSsrTileDefinition (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict (unBytes _msgSBPPayload))) m+ | _msgSBPType == msgStatusJournal = SBPMsgStatusJournal (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStatusReport = SBPMsgStatusReport (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStmFlashLockSector = SBPMsgStmFlashLockSector (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector (decode (fromStrict (unBytes _msgSBPPayload))) m@@ -651,6 +653,7 @@ encoder (SBPMsgSsrStecCorrectionDepA _ m) = put m encoder (SBPMsgSsrTileDefinition _ m) = put m encoder (SBPMsgStartup _ m) = put m+ encoder (SBPMsgStatusJournal _ m) = put m encoder (SBPMsgStatusReport _ m) = put m encoder (SBPMsgStmFlashLockSector _ m) = put m encoder (SBPMsgStmFlashUnlockSector _ m) = put m@@ -864,6 +867,7 @@ | msgType == msgSsrStecCorrectionDepA = SBPMsgSsrStecCorrectionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrTileDefinition = SBPMsgSsrTileDefinition <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+ | msgType == msgStatusJournal = SBPMsgStatusJournal <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStatusReport = SBPMsgStatusReport <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStmFlashLockSector = SBPMsgStmFlashLockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj@@ -1078,6 +1082,7 @@ toJSON (SBPMsgSsrStecCorrectionDepA n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrTileDefinition n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStartup n m) = toJSON n <<>> toJSON m+ toJSON (SBPMsgStatusJournal n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStatusReport n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStmFlashLockSector n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStmFlashUnlockSector n m) = toJSON n <<>> toJSON m@@ -1286,6 +1291,7 @@ msg f (SBPMsgSsrStecCorrectionDepA n m) = SBPMsgSsrStecCorrectionDepA n <$> f m msg f (SBPMsgSsrTileDefinition n m) = SBPMsgSsrTileDefinition n <$> f m msg f (SBPMsgStartup n m) = SBPMsgStartup n <$> f m+ msg f (SBPMsgStatusJournal n m) = SBPMsgStatusJournal n <$> f m msg f (SBPMsgStatusReport n m) = SBPMsgStatusReport n <$> f m msg f (SBPMsgStmFlashLockSector n m) = SBPMsgStmFlashLockSector n <$> f m msg f (SBPMsgStmFlashUnlockSector n m) = SBPMsgStmFlashUnlockSector n <$> f m
@@ -138,8 +138,8 @@ -- | SubSystemReport. ----- Report the general and specific state of a sub-system. If the generic--- state is reported as initializing, the specific state should be ignored.+-- Report the general and specific state of a subsystem. If the generic state+-- is reported as initializing, the specific state should be ignored. data SubSystemReport = SubSystemReport { _subSystemReport_component :: !Word16 -- ^ Identity of reporting subsystem@@ -172,7 +172,7 @@ -- The status report is sent periodically to inform the host or other attached -- devices that the system is running. It is used to monitor system -- malfunctions. It contains status reports that indicate to the host the--- status of each sub-system and whether it is operating correctly.+-- status of each subsystem and whether it is operating correctly. -- -- Interpretation of the subsystem specific status code is product dependent, -- but if the generic status code is initializing, it should be ignored.@@ -209,6 +209,73 @@ $(makeSBP 'msgStatusReport ''MsgStatusReport) $(makeJSON "_msgStatusReport_" ''MsgStatusReport) $(makeLenses ''MsgStatusReport)++-- | StatusJournalItem.+--+-- Reports the uptime and the state of a subsystem via generic and specific+-- status codes. If the generic state is reported as initializing, the+-- specific state should be ignored.+data StatusJournalItem = StatusJournalItem+ { _statusJournalItem_uptime :: !Word32+ -- ^ Milliseconds since system startup+ , _statusJournalItem_report :: !SubSystemReport+ } deriving ( Show, Read, Eq )++instance Binary StatusJournalItem where+ get = do+ _statusJournalItem_uptime <- getWord32le+ _statusJournalItem_report <- get+ pure StatusJournalItem {..}++ put StatusJournalItem {..} = do+ putWord32le _statusJournalItem_uptime+ put _statusJournalItem_report++$(makeJSON "_statusJournalItem_" ''StatusJournalItem)+$(makeLenses ''StatusJournalItem)++msgStatusJournal :: Word16+msgStatusJournal = 0xFFFD++-- | SBP class for message MSG_STATUS_JOURNAL (0xFFFD).+--+-- The status journal message contains past status reports (see+-- MSG_STATUS_REPORT) and functions as a error/event storage for telemetry+-- purposes.+data MsgStatusJournal = MsgStatusJournal+ { _msgStatusJournal_reporting_system :: !Word16+ -- ^ Identity of reporting system+ , _msgStatusJournal_sbp_version :: !Word16+ -- ^ SBP protocol version+ , _msgStatusJournal_total_status_reports :: !Word32+ -- ^ Total number of status reports sent since system startup+ , _msgStatusJournal_sequence_descriptor :: !Word8+ -- ^ Index and number of messages in this sequence. First nibble is the size+ -- of the sequence (n), second nibble is the zero-indexed counter (ith+ -- packet of n)+ , _msgStatusJournal_journal :: ![StatusJournalItem]+ -- ^ Status journal+ } deriving ( Show, Read, Eq )++instance Binary MsgStatusJournal where+ get = do+ _msgStatusJournal_reporting_system <- getWord16le+ _msgStatusJournal_sbp_version <- getWord16le+ _msgStatusJournal_total_status_reports <- getWord32le+ _msgStatusJournal_sequence_descriptor <- getWord8+ _msgStatusJournal_journal <- whileM (not <$> isEmpty) get+ pure MsgStatusJournal {..}++ put MsgStatusJournal {..} = do+ putWord16le _msgStatusJournal_reporting_system+ putWord16le _msgStatusJournal_sbp_version+ putWord32le _msgStatusJournal_total_status_reports+ putWord8 _msgStatusJournal_sequence_descriptor+ mapM_ put _msgStatusJournal_journal++$(makeSBP 'msgStatusJournal ''MsgStatusJournal)+$(makeJSON "_msgStatusJournal_" ''MsgStatusJournal)+$(makeLenses ''MsgStatusJournal) msgInsStatus :: Word16 msgInsStatus = 0xFF03