packages feed

sbp 1.1.0 → 1.2.2

raw patch · 6 files changed

+667/−110 lines, 6 files

Files

main/JSON2SBP.hs view
@@ -16,6 +16,7 @@ import           Data.Conduit.Binary import qualified Data.Conduit.List as CL import           Data.Conduit.Serialization.Binary+import           Debug.Trace import           SwiftNav.SBP import           System.IO @@ -29,7 +30,11 @@  -- | Decode a SBPMsg from JSON. decodeSBPMsg :: ByteString -> Maybe SBPMsg-decodeSBPMsg v = decodeStrict v <|> sbpMsgData <$> decodeStrict v+decodeSBPMsg v = result+  where parsed = eitherDecodeStrict v <|> sbpMsgData <$> eitherDecodeStrict v+        result = case parsed of+                   Left s -> trace s Nothing+                   Right x -> Just x  main :: IO () main =
sbp.cabal view
@@ -1,5 +1,5 @@ name:                  sbp-version:               1.1.0+version:               1.2.2 synopsis:              SwiftNav's SBP Library homepage:              https://github.com/swift-nav/libsbp license:               LGPL-3
src/SwiftNav/SBP.hs view
@@ -56,6 +56,7 @@ data SBPMsg =      SBPMsgAcqResult MsgAcqResult Msg    | SBPMsgAcqResultDepA MsgAcqResultDepA Msg+   | SBPMsgAcqSvProfile MsgAcqSvProfile Msg    | SBPMsgAlmanac MsgAlmanac Msg    | SBPMsgBasePosEcef MsgBasePosEcef Msg    | SBPMsgBasePosLlh MsgBasePosLlh Msg@@ -68,11 +69,15 @@    | SBPMsgBootloaderJumpToApp MsgBootloaderJumpToApp Msg    | SBPMsgCwResults MsgCwResults Msg    | SBPMsgCwStart MsgCwStart Msg+   | SBPMsgDeviceMonitor MsgDeviceMonitor Msg    | SBPMsgDops MsgDops Msg-   | SBPMsgEphemeris MsgEphemeris Msg    | SBPMsgEphemerisDepA MsgEphemerisDepA Msg    | SBPMsgEphemerisDepB MsgEphemerisDepB Msg    | SBPMsgEphemerisDepC MsgEphemerisDepC Msg+   | SBPMsgEphemerisDepD MsgEphemerisDepD Msg+   | SBPMsgEphemerisGlo MsgEphemerisGlo Msg+   | SBPMsgEphemerisGps MsgEphemerisGps Msg+   | SBPMsgEphemerisSbas MsgEphemerisSbas Msg    | SBPMsgExtEvent MsgExtEvent Msg    | SBPMsgFileioReadDirReq MsgFileioReadDirReq Msg    | SBPMsgFileioReadDirResp MsgFileioReadDirResp Msg@@ -87,9 +92,11 @@    | SBPMsgFlashReadReq MsgFlashReadReq Msg    | SBPMsgFlashReadResp MsgFlashReadResp Msg    | SBPMsgGpsTime MsgGpsTime Msg+   | SBPMsgGroupDelay MsgGroupDelay Msg    | SBPMsgHeartbeat MsgHeartbeat Msg    | SBPMsgIarState MsgIarState Msg    | SBPMsgInitBase MsgInitBase Msg+   | SBPMsgIono MsgIono Msg    | SBPMsgLog MsgLog Msg    | SBPMsgM25FlashWriteStatus MsgM25FlashWriteStatus Msg    | SBPMsgMaskSatellite MsgMaskSatellite Msg@@ -117,6 +124,7 @@    | SBPMsgStmFlashUnlockSector MsgStmFlashUnlockSector Msg    | SBPMsgStmUniqueIdReq MsgStmUniqueIdReq Msg    | SBPMsgStmUniqueIdResp MsgStmUniqueIdResp Msg+   | SBPMsgSvConfigurationGps MsgSvConfigurationGps Msg    | SBPMsgThreadState MsgThreadState Msg    | SBPMsgTrackingIq MsgTrackingIq Msg    | SBPMsgTrackingState MsgTrackingState Msg@@ -142,6 +150,7 @@           | checkCrc m /= _msgSBPCrc = SBPMsgBadCrc m           | _msgSBPType == msgAcqResult = SBPMsgAcqResult (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgAcqResultDepA = SBPMsgAcqResultDepA (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgAcqSvProfile = SBPMsgAcqSvProfile (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgAlmanac = SBPMsgAlmanac (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgBasePosEcef = SBPMsgBasePosEcef (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgBasePosLlh = SBPMsgBasePosLlh (decode (fromStrict _msgSBPPayload)) m@@ -154,11 +163,15 @@           | _msgSBPType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgCwResults = SBPMsgCwResults (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgCwStart = SBPMsgCwStart (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgDeviceMonitor = SBPMsgDeviceMonitor (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgDops = SBPMsgDops (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemeris = SBPMsgEphemeris (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgEphemerisDepA = SBPMsgEphemerisDepA (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgEphemerisDepB = SBPMsgEphemerisDepB (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgEphemerisDepC = SBPMsgEphemerisDepC (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgEphemerisDepD = SBPMsgEphemerisDepD (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgEphemerisGlo = SBPMsgEphemerisGlo (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgEphemerisGps = SBPMsgEphemerisGps (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgEphemerisSbas = SBPMsgEphemerisSbas (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgExtEvent = SBPMsgExtEvent (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgFileioReadDirReq = SBPMsgFileioReadDirReq (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgFileioReadDirResp = SBPMsgFileioReadDirResp (decode (fromStrict _msgSBPPayload)) m@@ -173,9 +186,11 @@           | _msgSBPType == msgFlashReadReq = SBPMsgFlashReadReq (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgFlashReadResp = SBPMsgFlashReadResp (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgGpsTime = SBPMsgGpsTime (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgGroupDelay = SBPMsgGroupDelay (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgHeartbeat = SBPMsgHeartbeat (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgIarState = SBPMsgIarState (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgInitBase = SBPMsgInitBase (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgIono = SBPMsgIono (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgLog = SBPMsgLog (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgMaskSatellite = SBPMsgMaskSatellite (decode (fromStrict _msgSBPPayload)) m@@ -203,6 +218,7 @@           | _msgSBPType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgStmUniqueIdReq = SBPMsgStmUniqueIdReq (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgSvConfigurationGps = SBPMsgSvConfigurationGps (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgThreadState = SBPMsgThreadState (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgTrackingIq = SBPMsgTrackingIq (decode (fromStrict _msgSBPPayload)) m           | _msgSBPType == msgTrackingState = SBPMsgTrackingState (decode (fromStrict _msgSBPPayload)) m@@ -220,6 +236,7 @@     encode' sm where       encode' (SBPMsgAcqResult _ m) = put m       encode' (SBPMsgAcqResultDepA _ m) = put m+      encode' (SBPMsgAcqSvProfile _ m) = put m       encode' (SBPMsgAlmanac _ m) = put m       encode' (SBPMsgBasePosEcef _ m) = put m       encode' (SBPMsgBasePosLlh _ m) = put m@@ -232,11 +249,15 @@       encode' (SBPMsgBootloaderJumpToApp _ m) = put m       encode' (SBPMsgCwResults _ m) = put m       encode' (SBPMsgCwStart _ m) = put m+      encode' (SBPMsgDeviceMonitor _ m) = put m       encode' (SBPMsgDops _ m) = put m-      encode' (SBPMsgEphemeris _ m) = put m       encode' (SBPMsgEphemerisDepA _ m) = put m       encode' (SBPMsgEphemerisDepB _ m) = put m       encode' (SBPMsgEphemerisDepC _ m) = put m+      encode' (SBPMsgEphemerisDepD _ m) = put m+      encode' (SBPMsgEphemerisGlo _ m) = put m+      encode' (SBPMsgEphemerisGps _ m) = put m+      encode' (SBPMsgEphemerisSbas _ m) = put m       encode' (SBPMsgExtEvent _ m) = put m       encode' (SBPMsgFileioReadDirReq _ m) = put m       encode' (SBPMsgFileioReadDirResp _ m) = put m@@ -251,9 +272,11 @@       encode' (SBPMsgFlashReadReq _ m) = put m       encode' (SBPMsgFlashReadResp _ m) = put m       encode' (SBPMsgGpsTime _ m) = put m+      encode' (SBPMsgGroupDelay _ m) = put m       encode' (SBPMsgHeartbeat _ m) = put m       encode' (SBPMsgIarState _ m) = put m       encode' (SBPMsgInitBase _ m) = put m+      encode' (SBPMsgIono _ m) = put m       encode' (SBPMsgLog _ m) = put m       encode' (SBPMsgM25FlashWriteStatus _ m) = put m       encode' (SBPMsgMaskSatellite _ m) = put m@@ -281,6 +304,7 @@       encode' (SBPMsgStmFlashUnlockSector _ m) = put m       encode' (SBPMsgStmUniqueIdReq _ m) = put m       encode' (SBPMsgStmUniqueIdResp _ m) = put m+      encode' (SBPMsgSvConfigurationGps _ m) = put m       encode' (SBPMsgThreadState _ m) = put m       encode' (SBPMsgTrackingIq _ m) = put m       encode' (SBPMsgTrackingState _ m) = put m@@ -301,6 +325,7 @@       decode' msgType         | msgType == msgAcqResult = SBPMsgAcqResult <$> parseJSON obj <*> parseJSON obj         | msgType == msgAcqResultDepA = SBPMsgAcqResultDepA <$> parseJSON obj <*> parseJSON obj+        | msgType == msgAcqSvProfile = SBPMsgAcqSvProfile <$> parseJSON obj <*> parseJSON obj         | msgType == msgAlmanac = SBPMsgAlmanac <$> parseJSON obj <*> parseJSON obj         | msgType == msgBasePosEcef = SBPMsgBasePosEcef <$> parseJSON obj <*> parseJSON obj         | msgType == msgBasePosLlh = SBPMsgBasePosLlh <$> parseJSON obj <*> parseJSON obj@@ -313,11 +338,15 @@         | msgType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp <$> parseJSON obj <*> parseJSON obj         | msgType == msgCwResults = SBPMsgCwResults <$> parseJSON obj <*> parseJSON obj         | msgType == msgCwStart = SBPMsgCwStart <$> parseJSON obj <*> parseJSON obj+        | msgType == msgDeviceMonitor = SBPMsgDeviceMonitor <$> parseJSON obj <*> parseJSON obj         | msgType == msgDops = SBPMsgDops <$> parseJSON obj <*> parseJSON obj-        | msgType == msgEphemeris = SBPMsgEphemeris <$> parseJSON obj <*> parseJSON obj         | msgType == msgEphemerisDepA = SBPMsgEphemerisDepA <$> parseJSON obj <*> parseJSON obj         | msgType == msgEphemerisDepB = SBPMsgEphemerisDepB <$> parseJSON obj <*> parseJSON obj         | msgType == msgEphemerisDepC = SBPMsgEphemerisDepC <$> parseJSON obj <*> parseJSON obj+        | msgType == msgEphemerisDepD = SBPMsgEphemerisDepD <$> parseJSON obj <*> parseJSON obj+        | msgType == msgEphemerisGlo = SBPMsgEphemerisGlo <$> parseJSON obj <*> parseJSON obj+        | msgType == msgEphemerisGps = SBPMsgEphemerisGps <$> parseJSON obj <*> parseJSON obj+        | msgType == msgEphemerisSbas = SBPMsgEphemerisSbas <$> parseJSON obj <*> parseJSON obj         | msgType == msgExtEvent = SBPMsgExtEvent <$> parseJSON obj <*> parseJSON obj         | msgType == msgFileioReadDirReq = SBPMsgFileioReadDirReq <$> parseJSON obj <*> parseJSON obj         | msgType == msgFileioReadDirResp = SBPMsgFileioReadDirResp <$> parseJSON obj <*> parseJSON obj@@ -332,9 +361,11 @@         | msgType == msgFlashReadReq = SBPMsgFlashReadReq <$> parseJSON obj <*> parseJSON obj         | msgType == msgFlashReadResp = SBPMsgFlashReadResp <$> parseJSON obj <*> parseJSON obj         | msgType == msgGpsTime = SBPMsgGpsTime <$> parseJSON obj <*> parseJSON obj+        | msgType == msgGroupDelay = SBPMsgGroupDelay <$> parseJSON obj <*> parseJSON obj         | msgType == msgHeartbeat = SBPMsgHeartbeat <$> parseJSON obj <*> parseJSON obj         | msgType == msgIarState = SBPMsgIarState <$> parseJSON obj <*> parseJSON obj         | msgType == msgInitBase = SBPMsgInitBase <$> parseJSON obj <*> parseJSON obj+        | msgType == msgIono = SBPMsgIono <$> parseJSON obj <*> parseJSON obj         | msgType == msgLog = SBPMsgLog <$> parseJSON obj <*> parseJSON obj         | msgType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus <$> parseJSON obj <*> parseJSON obj         | msgType == msgMaskSatellite = SBPMsgMaskSatellite <$> parseJSON obj <*> parseJSON obj@@ -362,6 +393,7 @@         | msgType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector <$> parseJSON obj <*> parseJSON obj         | msgType == msgStmUniqueIdReq = SBPMsgStmUniqueIdReq <$> parseJSON obj <*> parseJSON obj         | msgType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp <$> parseJSON obj <*> parseJSON obj+        | msgType == msgSvConfigurationGps = SBPMsgSvConfigurationGps <$> parseJSON obj <*> parseJSON obj         | msgType == msgThreadState = SBPMsgThreadState <$> parseJSON obj <*> parseJSON obj         | msgType == msgTrackingIq = SBPMsgTrackingIq <$> parseJSON obj <*> parseJSON obj         | msgType == msgTrackingState = SBPMsgTrackingState <$> parseJSON obj <*> parseJSON obj@@ -384,6 +416,7 @@ instance ToJSON SBPMsg where   toJSON (SBPMsgAcqResult n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgAcqResultDepA n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgAcqSvProfile n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgAlmanac n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgBasePosEcef n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgBasePosLlh n m) = toJSON n `mergeValues` toJSON m@@ -396,11 +429,15 @@   toJSON (SBPMsgBootloaderJumpToApp n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgCwResults n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgCwStart n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgDeviceMonitor n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgDops n m) = toJSON n `mergeValues` toJSON m-  toJSON (SBPMsgEphemeris n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgEphemerisDepA n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgEphemerisDepB n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgEphemerisDepC n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgEphemerisDepD n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgEphemerisGlo n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgEphemerisGps n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgEphemerisSbas n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgExtEvent n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgFileioReadDirReq n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgFileioReadDirResp n m) = toJSON n `mergeValues` toJSON m@@ -415,9 +452,11 @@   toJSON (SBPMsgFlashReadReq n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgFlashReadResp n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgGpsTime n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgGroupDelay n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgHeartbeat n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgIarState n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgInitBase n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgIono n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgLog n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgM25FlashWriteStatus n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgMaskSatellite n m) = toJSON n `mergeValues` toJSON m@@ -445,6 +484,7 @@   toJSON (SBPMsgStmFlashUnlockSector n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgStmUniqueIdReq n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgStmUniqueIdResp n m) = toJSON n `mergeValues` toJSON m+  toJSON (SBPMsgSvConfigurationGps n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgThreadState n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgTrackingIq n m) = toJSON n `mergeValues` toJSON m   toJSON (SBPMsgTrackingState n m) = toJSON n `mergeValues` toJSON m@@ -461,6 +501,7 @@ instance HasMsg SBPMsg where   msg f (SBPMsgAcqResult n m) = SBPMsgAcqResult n <$> f m   msg f (SBPMsgAcqResultDepA n m) = SBPMsgAcqResultDepA n <$> f m+  msg f (SBPMsgAcqSvProfile n m) = SBPMsgAcqSvProfile n <$> f m   msg f (SBPMsgAlmanac n m) = SBPMsgAlmanac n <$> f m   msg f (SBPMsgBasePosEcef n m) = SBPMsgBasePosEcef n <$> f m   msg f (SBPMsgBasePosLlh n m) = SBPMsgBasePosLlh n <$> f m@@ -473,11 +514,15 @@   msg f (SBPMsgBootloaderJumpToApp n m) = SBPMsgBootloaderJumpToApp n <$> f m   msg f (SBPMsgCwResults n m) = SBPMsgCwResults n <$> f m   msg f (SBPMsgCwStart n m) = SBPMsgCwStart n <$> f m+  msg f (SBPMsgDeviceMonitor n m) = SBPMsgDeviceMonitor n <$> f m   msg f (SBPMsgDops n m) = SBPMsgDops n <$> f m-  msg f (SBPMsgEphemeris n m) = SBPMsgEphemeris n <$> f m   msg f (SBPMsgEphemerisDepA n m) = SBPMsgEphemerisDepA n <$> f m   msg f (SBPMsgEphemerisDepB n m) = SBPMsgEphemerisDepB n <$> f m   msg f (SBPMsgEphemerisDepC n m) = SBPMsgEphemerisDepC n <$> f m+  msg f (SBPMsgEphemerisDepD n m) = SBPMsgEphemerisDepD n <$> f m+  msg f (SBPMsgEphemerisGlo n m) = SBPMsgEphemerisGlo n <$> f m+  msg f (SBPMsgEphemerisGps n m) = SBPMsgEphemerisGps n <$> f m+  msg f (SBPMsgEphemerisSbas n m) = SBPMsgEphemerisSbas n <$> f m   msg f (SBPMsgExtEvent n m) = SBPMsgExtEvent n <$> f m   msg f (SBPMsgFileioReadDirReq n m) = SBPMsgFileioReadDirReq n <$> f m   msg f (SBPMsgFileioReadDirResp n m) = SBPMsgFileioReadDirResp n <$> f m@@ -492,9 +537,11 @@   msg f (SBPMsgFlashReadReq n m) = SBPMsgFlashReadReq n <$> f m   msg f (SBPMsgFlashReadResp n m) = SBPMsgFlashReadResp n <$> f m   msg f (SBPMsgGpsTime n m) = SBPMsgGpsTime n <$> f m+  msg f (SBPMsgGroupDelay n m) = SBPMsgGroupDelay n <$> f m   msg f (SBPMsgHeartbeat n m) = SBPMsgHeartbeat n <$> f m   msg f (SBPMsgIarState n m) = SBPMsgIarState n <$> f m   msg f (SBPMsgInitBase n m) = SBPMsgInitBase n <$> f m+  msg f (SBPMsgIono n m) = SBPMsgIono n <$> f m   msg f (SBPMsgLog n m) = SBPMsgLog n <$> f m   msg f (SBPMsgM25FlashWriteStatus n m) = SBPMsgM25FlashWriteStatus n <$> f m   msg f (SBPMsgMaskSatellite n m) = SBPMsgMaskSatellite n <$> f m@@ -522,6 +569,7 @@   msg f (SBPMsgStmFlashUnlockSector n m) = SBPMsgStmFlashUnlockSector n <$> f m   msg f (SBPMsgStmUniqueIdReq n m) = SBPMsgStmUniqueIdReq n <$> f m   msg f (SBPMsgStmUniqueIdResp n m) = SBPMsgStmUniqueIdResp n <$> f m+  msg f (SBPMsgSvConfigurationGps n m) = SBPMsgSvConfigurationGps n <$> f m   msg f (SBPMsgThreadState n m) = SBPMsgThreadState n <$> f m   msg f (SBPMsgTrackingIq n m) = SBPMsgTrackingIq n <$> f m   msg f (SBPMsgTrackingState n m) = SBPMsgTrackingState n <$> f m
src/SwiftNav/SBP/Acquisition.hs view
@@ -107,3 +107,94 @@ $(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgAcqResultDepA_" . stripPrefix "_msgAcqResultDepA_"}              ''MsgAcqResultDepA) $(makeLenses ''MsgAcqResultDepA)++-- | AcqSvProfile.+--+-- Profile for a specific SV for debugging purposes The message describes SV+-- profile during acquisition time. The message is used to debug and measure+-- the performance.+data AcqSvProfile = AcqSvProfile+  { _acqSvProfile_job_type :: Word8+    -- ^ SV search job type (deep, fallback, etc)+  , _acqSvProfile_status   :: Word8+    -- ^ Acquisition status 1 is Success, 0 is Failure+  , _acqSvProfile_cn0      :: Word16+    -- ^ CN0 value. Only valid if status is '1'+  , _acqSvProfile_int_time :: Word8+    -- ^ Acquisition integration time+  , _acqSvProfile_sid      :: GnssSignal+    -- ^ GNSS signal for which acquisition was attempted+  , _acqSvProfile_bin_width :: Word16+    -- ^ Acq frequency bin width+  , _acqSvProfile_timestamp :: Word32+    -- ^ Timestamp of the job complete event+  , _acqSvProfile_time_spent :: Word32+    -- ^ Time spent to search for sid.code+  , _acqSvProfile_cf_min   :: Word32+    -- ^ Doppler range lowest frequency+  , _acqSvProfile_cf_max   :: Word32+    -- ^ Doppler range highest frequency+  , _acqSvProfile_cf       :: Word32+    -- ^ Doppler value of detected peak. Only valid if status is '1'+  , _acqSvProfile_cp       :: Word32+    -- ^ Codephase of detected peak. Only valid if status is '1'+  } deriving ( Show, Read, Eq )++instance Binary AcqSvProfile where+  get = do+    _acqSvProfile_job_type <- getWord8+    _acqSvProfile_status <- getWord8+    _acqSvProfile_cn0 <- getWord16le+    _acqSvProfile_int_time <- getWord8+    _acqSvProfile_sid <- get+    _acqSvProfile_bin_width <- getWord16le+    _acqSvProfile_timestamp <- getWord32le+    _acqSvProfile_time_spent <- getWord32le+    _acqSvProfile_cf_min <- getWord32le+    _acqSvProfile_cf_max <- getWord32le+    _acqSvProfile_cf <- getWord32le+    _acqSvProfile_cp <- getWord32le+    return AcqSvProfile {..}++  put AcqSvProfile {..} = do+    putWord8 _acqSvProfile_job_type+    putWord8 _acqSvProfile_status+    putWord16le _acqSvProfile_cn0+    putWord8 _acqSvProfile_int_time+    put _acqSvProfile_sid+    putWord16le _acqSvProfile_bin_width+    putWord32le _acqSvProfile_timestamp+    putWord32le _acqSvProfile_time_spent+    putWord32le _acqSvProfile_cf_min+    putWord32le _acqSvProfile_cf_max+    putWord32le _acqSvProfile_cf+    putWord32le _acqSvProfile_cp+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_acqSvProfile_" . stripPrefix "_acqSvProfile_"}+             ''AcqSvProfile)+$(makeLenses ''AcqSvProfile)++msgAcqSvProfile :: Word16+msgAcqSvProfile = 0x001E++-- | SBP class for message MSG_ACQ_SV_PROFILE (0x001E).+--+-- The message describes all SV profiles during acquisition time. The message+-- is used to debug and measure the performance.+data MsgAcqSvProfile = MsgAcqSvProfile+  { _msgAcqSvProfile_acq_sv_profile :: [AcqSvProfile]+    -- ^ SV profiles during acquisition time+  } deriving ( Show, Read, Eq )++instance Binary MsgAcqSvProfile where+  get = do+    _msgAcqSvProfile_acq_sv_profile <- whileM (liftM not isEmpty) get+    return MsgAcqSvProfile {..}++  put MsgAcqSvProfile {..} = do+    mapM_ put _msgAcqSvProfile_acq_sv_profile++$(deriveSBP 'msgAcqSvProfile ''MsgAcqSvProfile)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgAcqSvProfile_" . stripPrefix "_msgAcqSvProfile_"}+             ''MsgAcqSvProfile)+$(makeLenses ''MsgAcqSvProfile)
src/SwiftNav/SBP/Observation.hs view
@@ -247,149 +247,396 @@              ''MsgBasePosEcef) $(makeLenses ''MsgBasePosEcef) -msgEphemeris :: Word16-msgEphemeris = 0x0080+data EphemerisCommonContent = EphemerisCommonContent+  { _ephemerisCommonContent_sid        :: GnssSignal+    -- ^ GNSS signal identifier+  , _ephemerisCommonContent_toe        :: ObsGPSTime+    -- ^ Time of Ephemerides+  , _ephemerisCommonContent_ura        :: Double+    -- ^ User Range Accuracy+  , _ephemerisCommonContent_fit_interval :: Word32+    -- ^ Curve fit interval+  , _ephemerisCommonContent_valid      :: Word8+    -- ^ Status of ephemeris, 1 = valid, 0 = invalid+  , _ephemerisCommonContent_health_bits :: Word8+    -- ^ Satellite health status. GPS: ICD-GPS-200, chapter 20.3.3.3.1.4 SBAS: 0+    -- = valid, non-zero = invalid GLO: 0 = valid, non-zero = invalid+  } deriving ( Show, Read, Eq ) --- | SBP class for message MSG_EPHEMERIS (0x0080).+instance Binary EphemerisCommonContent where+  get = do+    _ephemerisCommonContent_sid <- get+    _ephemerisCommonContent_toe <- get+    _ephemerisCommonContent_ura <- getFloat64le+    _ephemerisCommonContent_fit_interval <- getWord32le+    _ephemerisCommonContent_valid <- getWord8+    _ephemerisCommonContent_health_bits <- getWord8+    return EphemerisCommonContent {..}++  put EphemerisCommonContent {..} = do+    put _ephemerisCommonContent_sid+    put _ephemerisCommonContent_toe+    putFloat64le _ephemerisCommonContent_ura+    putWord32le _ephemerisCommonContent_fit_interval+    putWord8 _ephemerisCommonContent_valid+    putWord8 _ephemerisCommonContent_health_bits+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_ephemerisCommonContent_" . stripPrefix "_ephemerisCommonContent_"}+             ''EphemerisCommonContent)+$(makeLenses ''EphemerisCommonContent)++msgEphemerisGps :: Word16+msgEphemerisGps = 0x0081++-- | SBP class for message MSG_EPHEMERIS_GPS (0x0081). -- -- The ephemeris message returns a set of satellite orbit parameters that is -- used to calculate GPS satellite position, velocity, and clock offset. Please -- see the Navstar GPS Space Segment/Navigation user interfaces (ICD-GPS-200, -- Table 20-III) for more details.-data MsgEphemeris = MsgEphemeris-  { _msgEphemeris_tgd    :: Double+data MsgEphemerisGps = MsgEphemerisGps+  { _msgEphemerisGps_common :: EphemerisCommonContent+    -- ^ Values common for all ephemeris types+  , _msgEphemerisGps_tgd    :: Double     -- ^ Group delay differential between L1 and L2-  , _msgEphemeris_c_rs   :: Double+  , _msgEphemerisGps_c_rs   :: Double     -- ^ Amplitude of the sine harmonic correction term to the orbit radius-  , _msgEphemeris_c_rc   :: Double+  , _msgEphemerisGps_c_rc   :: Double     -- ^ Amplitude of the cosine harmonic correction term to the orbit radius-  , _msgEphemeris_c_uc   :: Double+  , _msgEphemerisGps_c_uc   :: Double     -- ^ Amplitude of the cosine harmonic correction term to the argument of     -- latitude-  , _msgEphemeris_c_us   :: Double+  , _msgEphemerisGps_c_us   :: Double     -- ^ Amplitude of the sine harmonic correction term to the argument of     -- latitude-  , _msgEphemeris_c_ic   :: Double+  , _msgEphemerisGps_c_ic   :: Double     -- ^ Amplitude of the cosine harmonic correction term to the angle of     -- inclination-  , _msgEphemeris_c_is   :: Double+  , _msgEphemerisGps_c_is   :: Double     -- ^ Amplitude of the sine harmonic correction term to the angle of     -- inclination-  , _msgEphemeris_dn     :: Double+  , _msgEphemerisGps_dn     :: Double     -- ^ Mean motion difference-  , _msgEphemeris_m0     :: Double+  , _msgEphemerisGps_m0     :: Double     -- ^ Mean anomaly at reference time-  , _msgEphemeris_ecc    :: Double+  , _msgEphemerisGps_ecc    :: Double     -- ^ Eccentricity of satellite orbit-  , _msgEphemeris_sqrta  :: Double+  , _msgEphemerisGps_sqrta  :: Double     -- ^ Square root of the semi-major axis of orbit-  , _msgEphemeris_omega0 :: Double+  , _msgEphemerisGps_omega0 :: Double     -- ^ Longitude of ascending node of orbit plane at weekly epoch-  , _msgEphemeris_omegadot :: Double+  , _msgEphemerisGps_omegadot :: Double     -- ^ Rate of right ascension-  , _msgEphemeris_w      :: Double+  , _msgEphemerisGps_w      :: Double     -- ^ Argument of perigee-  , _msgEphemeris_inc    :: Double+  , _msgEphemerisGps_inc    :: Double     -- ^ Inclination-  , _msgEphemeris_inc_dot :: Double+  , _msgEphemerisGps_inc_dot :: Double     -- ^ Inclination first derivative-  , _msgEphemeris_af0    :: Double+  , _msgEphemerisGps_af0    :: Double     -- ^ Polynomial clock correction coefficient (clock bias)-  , _msgEphemeris_af1    :: Double+  , _msgEphemerisGps_af1    :: Double     -- ^ Polynomial clock correction coefficient (clock drift)-  , _msgEphemeris_af2    :: Double+  , _msgEphemerisGps_af2    :: Double     -- ^ Polynomial clock correction coefficient (rate of clock drift)-  , _msgEphemeris_toe_tow :: Double+  , _msgEphemerisGps_toc    :: ObsGPSTime+    -- ^ Clock reference+  , _msgEphemerisGps_iode   :: Word8+    -- ^ Issue of ephemeris data+  , _msgEphemerisGps_iodc   :: Word16+    -- ^ Issue of clock data+  } deriving ( Show, Read, Eq )++instance Binary MsgEphemerisGps where+  get = do+    _msgEphemerisGps_common <- get+    _msgEphemerisGps_tgd <- getFloat64le+    _msgEphemerisGps_c_rs <- getFloat64le+    _msgEphemerisGps_c_rc <- getFloat64le+    _msgEphemerisGps_c_uc <- getFloat64le+    _msgEphemerisGps_c_us <- getFloat64le+    _msgEphemerisGps_c_ic <- getFloat64le+    _msgEphemerisGps_c_is <- getFloat64le+    _msgEphemerisGps_dn <- getFloat64le+    _msgEphemerisGps_m0 <- getFloat64le+    _msgEphemerisGps_ecc <- getFloat64le+    _msgEphemerisGps_sqrta <- getFloat64le+    _msgEphemerisGps_omega0 <- getFloat64le+    _msgEphemerisGps_omegadot <- getFloat64le+    _msgEphemerisGps_w <- getFloat64le+    _msgEphemerisGps_inc <- getFloat64le+    _msgEphemerisGps_inc_dot <- getFloat64le+    _msgEphemerisGps_af0 <- getFloat64le+    _msgEphemerisGps_af1 <- getFloat64le+    _msgEphemerisGps_af2 <- getFloat64le+    _msgEphemerisGps_toc <- get+    _msgEphemerisGps_iode <- getWord8+    _msgEphemerisGps_iodc <- getWord16le+    return MsgEphemerisGps {..}++  put MsgEphemerisGps {..} = do+    put _msgEphemerisGps_common+    putFloat64le _msgEphemerisGps_tgd+    putFloat64le _msgEphemerisGps_c_rs+    putFloat64le _msgEphemerisGps_c_rc+    putFloat64le _msgEphemerisGps_c_uc+    putFloat64le _msgEphemerisGps_c_us+    putFloat64le _msgEphemerisGps_c_ic+    putFloat64le _msgEphemerisGps_c_is+    putFloat64le _msgEphemerisGps_dn+    putFloat64le _msgEphemerisGps_m0+    putFloat64le _msgEphemerisGps_ecc+    putFloat64le _msgEphemerisGps_sqrta+    putFloat64le _msgEphemerisGps_omega0+    putFloat64le _msgEphemerisGps_omegadot+    putFloat64le _msgEphemerisGps_w+    putFloat64le _msgEphemerisGps_inc+    putFloat64le _msgEphemerisGps_inc_dot+    putFloat64le _msgEphemerisGps_af0+    putFloat64le _msgEphemerisGps_af1+    putFloat64le _msgEphemerisGps_af2+    put _msgEphemerisGps_toc+    putWord8 _msgEphemerisGps_iode+    putWord16le _msgEphemerisGps_iodc++$(deriveSBP 'msgEphemerisGps ''MsgEphemerisGps)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisGps_" . stripPrefix "_msgEphemerisGps_"}+             ''MsgEphemerisGps)+$(makeLenses ''MsgEphemerisGps)++msgEphemerisSbas :: Word16+msgEphemerisSbas = 0x0082++data MsgEphemerisSbas = MsgEphemerisSbas+  { _msgEphemerisSbas_common :: EphemerisCommonContent+    -- ^ Values common for all ephemeris types+  , _msgEphemerisSbas_pos  :: [Double]+    -- ^ Position of the GEO at time toe+  , _msgEphemerisSbas_vel  :: [Double]+    -- ^ Velocity of the GEO at time toe+  , _msgEphemerisSbas_acc  :: [Double]+    -- ^ Acceleration of the GEO at time toe+  , _msgEphemerisSbas_a_gf0 :: Double+    -- ^ Time offset of the GEO clock w.r.t. SBAS Network Time+  , _msgEphemerisSbas_a_gf1 :: Double+    -- ^ Drift of the GEO clock w.r.t. SBAS Network Time+  } deriving ( Show, Read, Eq )++instance Binary MsgEphemerisSbas where+  get = do+    _msgEphemerisSbas_common <- get+    _msgEphemerisSbas_pos <- replicateM 3 getFloat64le+    _msgEphemerisSbas_vel <- replicateM 3 getFloat64le+    _msgEphemerisSbas_acc <- replicateM 3 getFloat64le+    _msgEphemerisSbas_a_gf0 <- getFloat64le+    _msgEphemerisSbas_a_gf1 <- getFloat64le+    return MsgEphemerisSbas {..}++  put MsgEphemerisSbas {..} = do+    put _msgEphemerisSbas_common+    mapM_ putFloat64le _msgEphemerisSbas_pos+    mapM_ putFloat64le _msgEphemerisSbas_vel+    mapM_ putFloat64le _msgEphemerisSbas_acc+    putFloat64le _msgEphemerisSbas_a_gf0+    putFloat64le _msgEphemerisSbas_a_gf1++$(deriveSBP 'msgEphemerisSbas ''MsgEphemerisSbas)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisSbas_" . stripPrefix "_msgEphemerisSbas_"}+             ''MsgEphemerisSbas)+$(makeLenses ''MsgEphemerisSbas)++msgEphemerisGlo :: Word16+msgEphemerisGlo = 0x0083++-- | SBP class for message MSG_EPHEMERIS_GLO (0x0083).+--+-- The ephemeris message returns a set of satellite orbit parameters that is+-- used to calculate GLO satellite position, velocity, and clock offset. Please+-- see the GLO ICD 5.1 "Table 4.5 Characteristics of words of immediate+-- information (ephemeris parameters)" for more details.+data MsgEphemerisGlo = MsgEphemerisGlo+  { _msgEphemerisGlo_common :: EphemerisCommonContent+    -- ^ Values common for all ephemeris types+  , _msgEphemerisGlo_gamma :: Double+    -- ^ Relative deviation of predicted carrier frequency from nominal+  , _msgEphemerisGlo_tau  :: Double+    -- ^ Correction to the SV time+  , _msgEphemerisGlo_pos  :: [Double]+    -- ^ Position of the SV at tb in PZ-90.02 coordinates system+  , _msgEphemerisGlo_vel  :: [Double]+    -- ^ Velocity vector of the SV at tb in PZ-90.02 coordinates system+  , _msgEphemerisGlo_acc  :: [Double]+    -- ^ Acceleration vector of the SV at tb in PZ-90.02 coordinates sys+  } deriving ( Show, Read, Eq )++instance Binary MsgEphemerisGlo where+  get = do+    _msgEphemerisGlo_common <- get+    _msgEphemerisGlo_gamma <- getFloat64le+    _msgEphemerisGlo_tau <- getFloat64le+    _msgEphemerisGlo_pos <- replicateM 3 getFloat64le+    _msgEphemerisGlo_vel <- replicateM 3 getFloat64le+    _msgEphemerisGlo_acc <- replicateM 3 getFloat64le+    return MsgEphemerisGlo {..}++  put MsgEphemerisGlo {..} = do+    put _msgEphemerisGlo_common+    putFloat64le _msgEphemerisGlo_gamma+    putFloat64le _msgEphemerisGlo_tau+    mapM_ putFloat64le _msgEphemerisGlo_pos+    mapM_ putFloat64le _msgEphemerisGlo_vel+    mapM_ putFloat64le _msgEphemerisGlo_acc++$(deriveSBP 'msgEphemerisGlo ''MsgEphemerisGlo)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisGlo_" . stripPrefix "_msgEphemerisGlo_"}+             ''MsgEphemerisGlo)+$(makeLenses ''MsgEphemerisGlo)++msgEphemerisDepD :: Word16+msgEphemerisDepD = 0x0080++-- | SBP class for message MSG_EPHEMERIS_DEP_D (0x0080).+--+-- The ephemeris message returns a set of satellite orbit parameters that is+-- used to calculate GPS satellite position, velocity, and clock offset. Please+-- see the Navstar GPS Space Segment/Navigation user interfaces (ICD-GPS-200,+-- Table 20-III) for more details.+data MsgEphemerisDepD = MsgEphemerisDepD+  { _msgEphemerisDepD_tgd    :: Double+    -- ^ Group delay differential between L1 and L2+  , _msgEphemerisDepD_c_rs   :: Double+    -- ^ Amplitude of the sine harmonic correction term to the orbit radius+  , _msgEphemerisDepD_c_rc   :: Double+    -- ^ Amplitude of the cosine harmonic correction term to the orbit radius+  , _msgEphemerisDepD_c_uc   :: Double+    -- ^ Amplitude of the cosine harmonic correction term to the argument of+    -- latitude+  , _msgEphemerisDepD_c_us   :: Double+    -- ^ Amplitude of the sine harmonic correction term to the argument of+    -- latitude+  , _msgEphemerisDepD_c_ic   :: Double+    -- ^ Amplitude of the cosine harmonic correction term to the angle of+    -- inclination+  , _msgEphemerisDepD_c_is   :: Double+    -- ^ Amplitude of the sine harmonic correction term to the angle of+    -- inclination+  , _msgEphemerisDepD_dn     :: Double+    -- ^ Mean motion difference+  , _msgEphemerisDepD_m0     :: Double+    -- ^ Mean anomaly at reference time+  , _msgEphemerisDepD_ecc    :: Double+    -- ^ Eccentricity of satellite orbit+  , _msgEphemerisDepD_sqrta  :: Double+    -- ^ Square root of the semi-major axis of orbit+  , _msgEphemerisDepD_omega0 :: Double+    -- ^ Longitude of ascending node of orbit plane at weekly epoch+  , _msgEphemerisDepD_omegadot :: Double+    -- ^ Rate of right ascension+  , _msgEphemerisDepD_w      :: Double+    -- ^ Argument of perigee+  , _msgEphemerisDepD_inc    :: Double+    -- ^ Inclination+  , _msgEphemerisDepD_inc_dot :: Double+    -- ^ Inclination first derivative+  , _msgEphemerisDepD_af0    :: Double+    -- ^ Polynomial clock correction coefficient (clock bias)+  , _msgEphemerisDepD_af1    :: Double+    -- ^ Polynomial clock correction coefficient (clock drift)+  , _msgEphemerisDepD_af2    :: Double+    -- ^ Polynomial clock correction coefficient (rate of clock drift)+  , _msgEphemerisDepD_toe_tow :: Double     -- ^ Time of week-  , _msgEphemeris_toe_wn :: Word16+  , _msgEphemerisDepD_toe_wn :: Word16     -- ^ Week number-  , _msgEphemeris_toc_tow :: Double+  , _msgEphemerisDepD_toc_tow :: Double     -- ^ Clock reference time of week-  , _msgEphemeris_toc_wn :: Word16+  , _msgEphemerisDepD_toc_wn :: Word16     -- ^ Clock reference week number-  , _msgEphemeris_valid  :: Word8+  , _msgEphemerisDepD_valid  :: Word8     -- ^ Is valid?-  , _msgEphemeris_healthy :: Word8+  , _msgEphemerisDepD_healthy :: Word8     -- ^ Satellite is healthy?-  , _msgEphemeris_sid    :: GnssSignal+  , _msgEphemerisDepD_sid    :: GnssSignal     -- ^ GNSS signal identifier-  , _msgEphemeris_iode   :: Word8+  , _msgEphemerisDepD_iode   :: Word8     -- ^ Issue of ephemeris data-  , _msgEphemeris_iodc   :: Word16+  , _msgEphemerisDepD_iodc   :: Word16     -- ^ Issue of clock data-  , _msgEphemeris_reserved :: Word32+  , _msgEphemerisDepD_reserved :: Word32     -- ^ Reserved field   } deriving ( Show, Read, Eq ) -instance Binary MsgEphemeris where+instance Binary MsgEphemerisDepD where   get = do-    _msgEphemeris_tgd <- getFloat64le-    _msgEphemeris_c_rs <- getFloat64le-    _msgEphemeris_c_rc <- getFloat64le-    _msgEphemeris_c_uc <- getFloat64le-    _msgEphemeris_c_us <- getFloat64le-    _msgEphemeris_c_ic <- getFloat64le-    _msgEphemeris_c_is <- getFloat64le-    _msgEphemeris_dn <- getFloat64le-    _msgEphemeris_m0 <- getFloat64le-    _msgEphemeris_ecc <- getFloat64le-    _msgEphemeris_sqrta <- getFloat64le-    _msgEphemeris_omega0 <- getFloat64le-    _msgEphemeris_omegadot <- getFloat64le-    _msgEphemeris_w <- getFloat64le-    _msgEphemeris_inc <- getFloat64le-    _msgEphemeris_inc_dot <- getFloat64le-    _msgEphemeris_af0 <- getFloat64le-    _msgEphemeris_af1 <- getFloat64le-    _msgEphemeris_af2 <- getFloat64le-    _msgEphemeris_toe_tow <- getFloat64le-    _msgEphemeris_toe_wn <- getWord16le-    _msgEphemeris_toc_tow <- getFloat64le-    _msgEphemeris_toc_wn <- getWord16le-    _msgEphemeris_valid <- getWord8-    _msgEphemeris_healthy <- getWord8-    _msgEphemeris_sid <- get-    _msgEphemeris_iode <- getWord8-    _msgEphemeris_iodc <- getWord16le-    _msgEphemeris_reserved <- getWord32le-    return MsgEphemeris {..}+    _msgEphemerisDepD_tgd <- getFloat64le+    _msgEphemerisDepD_c_rs <- getFloat64le+    _msgEphemerisDepD_c_rc <- getFloat64le+    _msgEphemerisDepD_c_uc <- getFloat64le+    _msgEphemerisDepD_c_us <- getFloat64le+    _msgEphemerisDepD_c_ic <- getFloat64le+    _msgEphemerisDepD_c_is <- getFloat64le+    _msgEphemerisDepD_dn <- getFloat64le+    _msgEphemerisDepD_m0 <- getFloat64le+    _msgEphemerisDepD_ecc <- getFloat64le+    _msgEphemerisDepD_sqrta <- getFloat64le+    _msgEphemerisDepD_omega0 <- getFloat64le+    _msgEphemerisDepD_omegadot <- getFloat64le+    _msgEphemerisDepD_w <- getFloat64le+    _msgEphemerisDepD_inc <- getFloat64le+    _msgEphemerisDepD_inc_dot <- getFloat64le+    _msgEphemerisDepD_af0 <- getFloat64le+    _msgEphemerisDepD_af1 <- getFloat64le+    _msgEphemerisDepD_af2 <- getFloat64le+    _msgEphemerisDepD_toe_tow <- getFloat64le+    _msgEphemerisDepD_toe_wn <- getWord16le+    _msgEphemerisDepD_toc_tow <- getFloat64le+    _msgEphemerisDepD_toc_wn <- getWord16le+    _msgEphemerisDepD_valid <- getWord8+    _msgEphemerisDepD_healthy <- getWord8+    _msgEphemerisDepD_sid <- get+    _msgEphemerisDepD_iode <- getWord8+    _msgEphemerisDepD_iodc <- getWord16le+    _msgEphemerisDepD_reserved <- getWord32le+    return MsgEphemerisDepD {..} -  put MsgEphemeris {..} = do-    putFloat64le _msgEphemeris_tgd-    putFloat64le _msgEphemeris_c_rs-    putFloat64le _msgEphemeris_c_rc-    putFloat64le _msgEphemeris_c_uc-    putFloat64le _msgEphemeris_c_us-    putFloat64le _msgEphemeris_c_ic-    putFloat64le _msgEphemeris_c_is-    putFloat64le _msgEphemeris_dn-    putFloat64le _msgEphemeris_m0-    putFloat64le _msgEphemeris_ecc-    putFloat64le _msgEphemeris_sqrta-    putFloat64le _msgEphemeris_omega0-    putFloat64le _msgEphemeris_omegadot-    putFloat64le _msgEphemeris_w-    putFloat64le _msgEphemeris_inc-    putFloat64le _msgEphemeris_inc_dot-    putFloat64le _msgEphemeris_af0-    putFloat64le _msgEphemeris_af1-    putFloat64le _msgEphemeris_af2-    putFloat64le _msgEphemeris_toe_tow-    putWord16le _msgEphemeris_toe_wn-    putFloat64le _msgEphemeris_toc_tow-    putWord16le _msgEphemeris_toc_wn-    putWord8 _msgEphemeris_valid-    putWord8 _msgEphemeris_healthy-    put _msgEphemeris_sid-    putWord8 _msgEphemeris_iode-    putWord16le _msgEphemeris_iodc-    putWord32le _msgEphemeris_reserved+  put MsgEphemerisDepD {..} = do+    putFloat64le _msgEphemerisDepD_tgd+    putFloat64le _msgEphemerisDepD_c_rs+    putFloat64le _msgEphemerisDepD_c_rc+    putFloat64le _msgEphemerisDepD_c_uc+    putFloat64le _msgEphemerisDepD_c_us+    putFloat64le _msgEphemerisDepD_c_ic+    putFloat64le _msgEphemerisDepD_c_is+    putFloat64le _msgEphemerisDepD_dn+    putFloat64le _msgEphemerisDepD_m0+    putFloat64le _msgEphemerisDepD_ecc+    putFloat64le _msgEphemerisDepD_sqrta+    putFloat64le _msgEphemerisDepD_omega0+    putFloat64le _msgEphemerisDepD_omegadot+    putFloat64le _msgEphemerisDepD_w+    putFloat64le _msgEphemerisDepD_inc+    putFloat64le _msgEphemerisDepD_inc_dot+    putFloat64le _msgEphemerisDepD_af0+    putFloat64le _msgEphemerisDepD_af1+    putFloat64le _msgEphemerisDepD_af2+    putFloat64le _msgEphemerisDepD_toe_tow+    putWord16le _msgEphemerisDepD_toe_wn+    putFloat64le _msgEphemerisDepD_toc_tow+    putWord16le _msgEphemerisDepD_toc_wn+    putWord8 _msgEphemerisDepD_valid+    putWord8 _msgEphemerisDepD_healthy+    put _msgEphemerisDepD_sid+    putWord8 _msgEphemerisDepD_iode+    putWord16le _msgEphemerisDepD_iodc+    putWord32le _msgEphemerisDepD_reserved -$(deriveSBP 'msgEphemeris ''MsgEphemeris)+$(deriveSBP 'msgEphemerisDepD ''MsgEphemerisDepD) -$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemeris_" . stripPrefix "_msgEphemeris_"}-             ''MsgEphemeris)-$(makeLenses ''MsgEphemeris)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisDepD_" . stripPrefix "_msgEphemerisDepD_"}+             ''MsgEphemerisDepD)+$(makeLenses ''MsgEphemerisDepD)  msgEphemerisDepA :: Word16 msgEphemerisDepA = 0x001A@@ -958,3 +1205,126 @@ $(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgObsDepB_" . stripPrefix "_msgObsDepB_"}              ''MsgObsDepB) $(makeLenses ''MsgObsDepB)++msgIono :: Word16+msgIono = 0x0090++-- | SBP class for message MSG_IONO (0x0090).+--+-- The ionospheric parameters which allow the "L1 only" or "L2 only" user to+-- utilize the ionospheric model for computation of the ionospheric delay.+-- Please see ICD-GPS-200 (Chapter 20.3.3.5.1.7) for more details.+data MsgIono = MsgIono+  { _msgIono_t_nmct :: ObsGPSTime+    -- ^ Navigation Message Correction Table Valitidy Time+  , _msgIono_a0   :: Double+  , _msgIono_a1   :: Double+  , _msgIono_a2   :: Double+  , _msgIono_a3   :: Double+  , _msgIono_b0   :: Double+  , _msgIono_b1   :: Double+  , _msgIono_b2   :: Double+  , _msgIono_b3   :: Double+  } deriving ( Show, Read, Eq )++instance Binary MsgIono where+  get = do+    _msgIono_t_nmct <- get+    _msgIono_a0 <- getFloat64le+    _msgIono_a1 <- getFloat64le+    _msgIono_a2 <- getFloat64le+    _msgIono_a3 <- getFloat64le+    _msgIono_b0 <- getFloat64le+    _msgIono_b1 <- getFloat64le+    _msgIono_b2 <- getFloat64le+    _msgIono_b3 <- getFloat64le+    return MsgIono {..}++  put MsgIono {..} = do+    put _msgIono_t_nmct+    putFloat64le _msgIono_a0+    putFloat64le _msgIono_a1+    putFloat64le _msgIono_a2+    putFloat64le _msgIono_a3+    putFloat64le _msgIono_b0+    putFloat64le _msgIono_b1+    putFloat64le _msgIono_b2+    putFloat64le _msgIono_b3++$(deriveSBP 'msgIono ''MsgIono)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgIono_" . stripPrefix "_msgIono_"}+             ''MsgIono)+$(makeLenses ''MsgIono)++msgSvConfigurationGps :: Word16+msgSvConfigurationGps = 0x0091++-- | SBP class for message MSG_SV_CONFIGURATION_GPS (0x0091).+--+-- Please see ICD-GPS-200 (Chapter 20.3.3.5.1.4) for more details.+data MsgSvConfigurationGps = MsgSvConfigurationGps+  { _msgSvConfigurationGps_t_nmct :: ObsGPSTime+    -- ^ Navigation Message Correction Table Valitidy Time+  , _msgSvConfigurationGps_l2c_mask :: Word32+    -- ^ L2C capability mask, SV32 bit being MSB, SV1 bit being LSB+  } deriving ( Show, Read, Eq )++instance Binary MsgSvConfigurationGps where+  get = do+    _msgSvConfigurationGps_t_nmct <- get+    _msgSvConfigurationGps_l2c_mask <- getWord32le+    return MsgSvConfigurationGps {..}++  put MsgSvConfigurationGps {..} = do+    put _msgSvConfigurationGps_t_nmct+    putWord32le _msgSvConfigurationGps_l2c_mask++$(deriveSBP 'msgSvConfigurationGps ''MsgSvConfigurationGps)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgSvConfigurationGps_" . stripPrefix "_msgSvConfigurationGps_"}+             ''MsgSvConfigurationGps)+$(makeLenses ''MsgSvConfigurationGps)++msgGroupDelay :: Word16+msgGroupDelay = 0x0092++-- | SBP class for message MSG_GROUP_DELAY (0x0092).+--+-- Please see ICD-GPS-200 (30.3.3.3.1.1) for more details.+data MsgGroupDelay = MsgGroupDelay+  { _msgGroupDelay_t_op   :: ObsGPSTime+    -- ^ Data Predict Time of Week+  , _msgGroupDelay_prn    :: Word8+    -- ^ Satellite number+  , _msgGroupDelay_valid  :: Word8+    -- ^ bit-field indicating validity of the values, LSB indicating tgd validity+    -- etc. 1 = value is valid, 0 = value is not valid.+  , _msgGroupDelay_tgd    :: Int16+  , _msgGroupDelay_isc_l1ca :: Int16+  , _msgGroupDelay_isc_l2c :: Int16+  } deriving ( Show, Read, Eq )++instance Binary MsgGroupDelay where+  get = do+    _msgGroupDelay_t_op <- get+    _msgGroupDelay_prn <- getWord8+    _msgGroupDelay_valid <- getWord8+    _msgGroupDelay_tgd <- liftM fromIntegral getWord16le+    _msgGroupDelay_isc_l1ca <- liftM fromIntegral getWord16le+    _msgGroupDelay_isc_l2c <- liftM fromIntegral getWord16le+    return MsgGroupDelay {..}++  put MsgGroupDelay {..} = do+    put _msgGroupDelay_t_op+    putWord8 _msgGroupDelay_prn+    putWord8 _msgGroupDelay_valid+    putWord16le $ fromIntegral _msgGroupDelay_tgd+    putWord16le $ fromIntegral _msgGroupDelay_isc_l1ca+    putWord16le $ fromIntegral _msgGroupDelay_isc_l2c++$(deriveSBP 'msgGroupDelay ''MsgGroupDelay)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgGroupDelay_" . stripPrefix "_msgGroupDelay_"}+             ''MsgGroupDelay)+$(makeLenses ''MsgGroupDelay)
src/SwiftNav/SBP/Piksi.hs view
@@ -351,10 +351,10 @@ -- providing SBP I/O. On the default Piksi configuration, UARTs A and B are -- used for telemetry radios, but can also be host access ports for embedded -- hosts, or other interfaces in future. The reported percentage values must be--- normalized. Observations latency and period can be used to assess the--- health of the differential corrections link. Latency provides the timeliness--- of received base observations while the  period indicates their likelihood--- of transmission.+-- normalized. Observations latency and period can be used to assess the health+-- of the differential corrections link. Latency provides the timeliness of+-- received base observations while the period indicates their likelihood of+-- transmission. data MsgUartState = MsgUartState   { _msgUartState_uart_a   :: UARTChannel     -- ^ State of UART A@@ -483,3 +483,46 @@ $(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgMaskSatellite_" . stripPrefix "_msgMaskSatellite_"}              ''MsgMaskSatellite) $(makeLenses ''MsgMaskSatellite)++msgDeviceMonitor :: Word16+msgDeviceMonitor = 0x00B5++-- | SBP class for message MSG_DEVICE_MONITOR (0x00B5).+--+-- This message contains temperature and voltage level measurements from the+-- processor's monitoring system and the RF frontend die temperature if+-- available.+data MsgDeviceMonitor = MsgDeviceMonitor+  { _msgDeviceMonitor_dev_vin       :: Int16+    -- ^ Device V_in+  , _msgDeviceMonitor_cpu_vint      :: Int16+    -- ^ Processor V_int+  , _msgDeviceMonitor_cpu_vaux      :: Int16+    -- ^ Processor V_aux+  , _msgDeviceMonitor_cpu_temperature :: Int16+    -- ^ Processor temperature+  , _msgDeviceMonitor_fe_temperature :: Int16+    -- ^ Frontend temperature (if available)+  } deriving ( Show, Read, Eq )++instance Binary MsgDeviceMonitor where+  get = do+    _msgDeviceMonitor_dev_vin <- liftM fromIntegral getWord16le+    _msgDeviceMonitor_cpu_vint <- liftM fromIntegral getWord16le+    _msgDeviceMonitor_cpu_vaux <- liftM fromIntegral getWord16le+    _msgDeviceMonitor_cpu_temperature <- liftM fromIntegral getWord16le+    _msgDeviceMonitor_fe_temperature <- liftM fromIntegral getWord16le+    return MsgDeviceMonitor {..}++  put MsgDeviceMonitor {..} = do+    putWord16le $ fromIntegral _msgDeviceMonitor_dev_vin+    putWord16le $ fromIntegral _msgDeviceMonitor_cpu_vint+    putWord16le $ fromIntegral _msgDeviceMonitor_cpu_vaux+    putWord16le $ fromIntegral _msgDeviceMonitor_cpu_temperature+    putWord16le $ fromIntegral _msgDeviceMonitor_fe_temperature++$(deriveSBP 'msgDeviceMonitor ''MsgDeviceMonitor)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgDeviceMonitor_" . stripPrefix "_msgDeviceMonitor_"}+             ''MsgDeviceMonitor)+$(makeLenses ''MsgDeviceMonitor)