sbp 1.1.0 → 1.2.2
raw patch · 6 files changed
+667/−110 lines, 6 files
Files
- main/JSON2SBP.hs +6/−1
- sbp.cabal +1/−1
- src/SwiftNav/SBP.hs +54/−6
- src/SwiftNav/SBP/Acquisition.hs +91/−0
- src/SwiftNav/SBP/Observation.hs +468/−98
- src/SwiftNav/SBP/Piksi.hs +47/−4
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
@@ -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
@@ -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)
@@ -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)
@@ -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)