sbp 2.2.3 → 2.2.6
raw patch · 5 files changed
+177/−8 lines, 5 files
Files
- sbp.cabal +1/−1
- src/SwiftNav/SBP/Msg.hs +18/−0
- src/SwiftNav/SBP/Navigation.hs +4/−4
- src/SwiftNav/SBP/Observation.hs +118/−2
- src/SwiftNav/SBP/Piksi.hs +36/−1
sbp.cabal view
@@ -1,5 +1,5 @@ name: sbp-version: 2.2.3+version: 2.2.6 synopsis: SwiftNav's SBP Library homepage: https://github.com/swift-nav/libsbp license: LGPL-3
@@ -59,6 +59,7 @@ | SBPMsgBootloaderHandshakeReq MsgBootloaderHandshakeReq Msg | SBPMsgBootloaderHandshakeResp MsgBootloaderHandshakeResp Msg | SBPMsgBootloaderJumpToApp MsgBootloaderJumpToApp Msg+ | SBPMsgCommandOutput MsgCommandOutput Msg | SBPMsgCommandReq MsgCommandReq Msg | SBPMsgCommandResp MsgCommandResp Msg | SBPMsgCwResults MsgCwResults Msg@@ -73,6 +74,8 @@ | SBPMsgEphemerisDepD MsgEphemerisDepD Msg | SBPMsgEphemerisGlo MsgEphemerisGlo Msg | SBPMsgEphemerisGloDepA MsgEphemerisGloDepA Msg+ | SBPMsgEphemerisGloDepB MsgEphemerisGloDepB Msg+ | SBPMsgEphemerisGloDepC MsgEphemerisGloDepC Msg | SBPMsgEphemerisGps MsgEphemerisGps Msg | SBPMsgEphemerisGpsDepE MsgEphemerisGpsDepE Msg | SBPMsgEphemerisSbas MsgEphemerisSbas Msg@@ -186,6 +189,7 @@ | _msgSBPType == msgBootloaderHandshakeReq = SBPMsgBootloaderHandshakeReq (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgBootloaderHandshakeResp = SBPMsgBootloaderHandshakeResp (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp (decode (fromStrict _msgSBPPayload)) m+ | _msgSBPType == msgCommandOutput = SBPMsgCommandOutput (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgCommandReq = SBPMsgCommandReq (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgCommandResp = SBPMsgCommandResp (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgCwResults = SBPMsgCwResults (decode (fromStrict _msgSBPPayload)) m@@ -200,6 +204,8 @@ | _msgSBPType == msgEphemerisDepD = SBPMsgEphemerisDepD (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgEphemerisGlo = SBPMsgEphemerisGlo (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA (decode (fromStrict _msgSBPPayload)) m+ | _msgSBPType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB (decode (fromStrict _msgSBPPayload)) m+ | _msgSBPType == msgEphemerisGloDepC = SBPMsgEphemerisGloDepC (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgEphemerisGps = SBPMsgEphemerisGps (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgEphemerisGpsDepE = SBPMsgEphemerisGpsDepE (decode (fromStrict _msgSBPPayload)) m | _msgSBPType == msgEphemerisSbas = SBPMsgEphemerisSbas (decode (fromStrict _msgSBPPayload)) m@@ -305,6 +311,7 @@ encode' (SBPMsgBootloaderHandshakeReq _ m) = put m encode' (SBPMsgBootloaderHandshakeResp _ m) = put m encode' (SBPMsgBootloaderJumpToApp _ m) = put m+ encode' (SBPMsgCommandOutput _ m) = put m encode' (SBPMsgCommandReq _ m) = put m encode' (SBPMsgCommandResp _ m) = put m encode' (SBPMsgCwResults _ m) = put m@@ -319,6 +326,8 @@ encode' (SBPMsgEphemerisDepD _ m) = put m encode' (SBPMsgEphemerisGlo _ m) = put m encode' (SBPMsgEphemerisGloDepA _ m) = put m+ encode' (SBPMsgEphemerisGloDepB _ m) = put m+ encode' (SBPMsgEphemerisGloDepC _ m) = put m encode' (SBPMsgEphemerisGps _ m) = put m encode' (SBPMsgEphemerisGpsDepE _ m) = put m encode' (SBPMsgEphemerisSbas _ m) = put m@@ -427,6 +436,7 @@ | msgType == msgBootloaderHandshakeReq = SBPMsgBootloaderHandshakeReq <$> parseJSON obj <*> parseJSON obj | msgType == msgBootloaderHandshakeResp = SBPMsgBootloaderHandshakeResp <$> parseJSON obj <*> parseJSON obj | msgType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp <$> parseJSON obj <*> parseJSON obj+ | msgType == msgCommandOutput = SBPMsgCommandOutput <$> parseJSON obj <*> parseJSON obj | msgType == msgCommandReq = SBPMsgCommandReq <$> parseJSON obj <*> parseJSON obj | msgType == msgCommandResp = SBPMsgCommandResp <$> parseJSON obj <*> parseJSON obj | msgType == msgCwResults = SBPMsgCwResults <$> parseJSON obj <*> parseJSON obj@@ -441,6 +451,8 @@ | msgType == msgEphemerisDepD = SBPMsgEphemerisDepD <$> parseJSON obj <*> parseJSON obj | msgType == msgEphemerisGlo = SBPMsgEphemerisGlo <$> parseJSON obj <*> parseJSON obj | msgType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA <$> parseJSON obj <*> parseJSON obj+ | msgType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB <$> parseJSON obj <*> parseJSON obj+ | msgType == msgEphemerisGloDepC = SBPMsgEphemerisGloDepC <$> parseJSON obj <*> parseJSON obj | msgType == msgEphemerisGps = SBPMsgEphemerisGps <$> parseJSON obj <*> parseJSON obj | msgType == msgEphemerisGpsDepE = SBPMsgEphemerisGpsDepE <$> parseJSON obj <*> parseJSON obj | msgType == msgEphemerisSbas = SBPMsgEphemerisSbas <$> parseJSON obj <*> parseJSON obj@@ -551,6 +563,7 @@ toJSON (SBPMsgBootloaderHandshakeReq n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgBootloaderHandshakeResp n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgBootloaderJumpToApp n m) = toJSON n `mergeValues` toJSON m+ toJSON (SBPMsgCommandOutput n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgCommandReq n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgCommandResp n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgCwResults n m) = toJSON n `mergeValues` toJSON m@@ -565,6 +578,8 @@ toJSON (SBPMsgEphemerisDepD n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgEphemerisGlo n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgEphemerisGloDepA n m) = toJSON n `mergeValues` toJSON m+ toJSON (SBPMsgEphemerisGloDepB n m) = toJSON n `mergeValues` toJSON m+ toJSON (SBPMsgEphemerisGloDepC n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgEphemerisGps n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgEphemerisGpsDepE n m) = toJSON n `mergeValues` toJSON m toJSON (SBPMsgEphemerisSbas n m) = toJSON n `mergeValues` toJSON m@@ -669,6 +684,7 @@ msg f (SBPMsgBootloaderHandshakeReq n m) = SBPMsgBootloaderHandshakeReq n <$> f m msg f (SBPMsgBootloaderHandshakeResp n m) = SBPMsgBootloaderHandshakeResp n <$> f m msg f (SBPMsgBootloaderJumpToApp n m) = SBPMsgBootloaderJumpToApp n <$> f m+ msg f (SBPMsgCommandOutput n m) = SBPMsgCommandOutput n <$> f m msg f (SBPMsgCommandReq n m) = SBPMsgCommandReq n <$> f m msg f (SBPMsgCommandResp n m) = SBPMsgCommandResp n <$> f m msg f (SBPMsgCwResults n m) = SBPMsgCwResults n <$> f m@@ -683,6 +699,8 @@ msg f (SBPMsgEphemerisDepD n m) = SBPMsgEphemerisDepD n <$> f m msg f (SBPMsgEphemerisGlo n m) = SBPMsgEphemerisGlo n <$> f m msg f (SBPMsgEphemerisGloDepA n m) = SBPMsgEphemerisGloDepA n <$> f m+ msg f (SBPMsgEphemerisGloDepB n m) = SBPMsgEphemerisGloDepB n <$> f m+ msg f (SBPMsgEphemerisGloDepC n m) = SBPMsgEphemerisGloDepC n <$> f m msg f (SBPMsgEphemerisGps n m) = SBPMsgEphemerisGps n <$> f m msg f (SBPMsgEphemerisGpsDepE n m) = SBPMsgEphemerisGpsDepE n <$> f m msg f (SBPMsgEphemerisSbas n m) = SBPMsgEphemerisSbas n <$> f m
@@ -434,7 +434,7 @@ , _msgVelEcef_z :: Int32 -- ^ Velocity ECEF Z coordinate , _msgVelEcef_accuracy :: Word16- -- ^ Velocity accuracy estimate (not implemented). Defaults to 0.+ -- ^ Velocity accuracy estimate , _msgVelEcef_n_sats :: Word8 -- ^ Number of satellites used in solution , _msgVelEcef_flags :: Word8@@ -486,9 +486,9 @@ , _msgVelNed_d :: Int32 -- ^ Velocity Down coordinate , _msgVelNed_h_accuracy :: Word16- -- ^ Horizontal velocity accuracy estimate (not implemented). Defaults to 0.+ -- ^ Horizontal velocity accuracy estimate , _msgVelNed_v_accuracy :: Word16- -- ^ Vertical velocity accuracy estimate (not implemented). Defaults to 0.+ -- ^ Vertical velocity accuracy estimate , _msgVelNed_n_sats :: Word8 -- ^ Number of satellites used in solution , _msgVelNed_flags :: Word8@@ -818,7 +818,7 @@ , _msgBaselineEcefDepA_z :: Int32 -- ^ Baseline ECEF Z coordinate , _msgBaselineEcefDepA_accuracy :: Word16- -- ^ Position accuracy estimate (not implemented). Defaults to 0.+ -- ^ Position accuracy estimate , _msgBaselineEcefDepA_n_sats :: Word8 -- ^ Number of satellites used in solution , _msgBaselineEcefDepA_flags :: Word8
@@ -682,10 +682,114 @@ ''MsgEphemerisSbas) $(makeLenses ''MsgEphemerisSbas) +msgEphemerisGloDepB :: Word16+msgEphemerisGloDepB = 0x0085++-- | SBP class for message MSG_EPHEMERIS_GLO_DEP_B (0x0085).+--+-- 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 MsgEphemerisGloDepB = MsgEphemerisGloDepB+ { _msgEphemerisGloDepB_common :: EphemerisCommonContent+ -- ^ Values common for all ephemeris types+ , _msgEphemerisGloDepB_gamma :: Double+ -- ^ Relative deviation of predicted carrier frequency from nominal+ , _msgEphemerisGloDepB_tau :: Double+ -- ^ Correction to the SV time+ , _msgEphemerisGloDepB_pos :: [Double]+ -- ^ Position of the SV at tb in PZ-90.02 coordinates system+ , _msgEphemerisGloDepB_vel :: [Double]+ -- ^ Velocity vector of the SV at tb in PZ-90.02 coordinates system+ , _msgEphemerisGloDepB_acc :: [Double]+ -- ^ Acceleration vector of the SV at tb in PZ-90.02 coordinates sys+ } deriving ( Show, Read, Eq )++instance Binary MsgEphemerisGloDepB where+ get = do+ _msgEphemerisGloDepB_common <- get+ _msgEphemerisGloDepB_gamma <- getFloat64le+ _msgEphemerisGloDepB_tau <- getFloat64le+ _msgEphemerisGloDepB_pos <- replicateM 3 getFloat64le+ _msgEphemerisGloDepB_vel <- replicateM 3 getFloat64le+ _msgEphemerisGloDepB_acc <- replicateM 3 getFloat64le+ return MsgEphemerisGloDepB {..}++ put MsgEphemerisGloDepB {..} = do+ put _msgEphemerisGloDepB_common+ putFloat64le _msgEphemerisGloDepB_gamma+ putFloat64le _msgEphemerisGloDepB_tau+ mapM_ putFloat64le _msgEphemerisGloDepB_pos+ mapM_ putFloat64le _msgEphemerisGloDepB_vel+ mapM_ putFloat64le _msgEphemerisGloDepB_acc++$(deriveSBP 'msgEphemerisGloDepB ''MsgEphemerisGloDepB)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisGloDepB_" . P.stripPrefix "_msgEphemerisGloDepB_"}+ ''MsgEphemerisGloDepB)+$(makeLenses ''MsgEphemerisGloDepB)++msgEphemerisGloDepC :: Word16+msgEphemerisGloDepC = 0x0087++-- | SBP class for message MSG_EPHEMERIS_GLO_DEP_C (0x0087).+--+-- 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 MsgEphemerisGloDepC = MsgEphemerisGloDepC+ { _msgEphemerisGloDepC_common :: EphemerisCommonContent+ -- ^ Values common for all ephemeris types+ , _msgEphemerisGloDepC_gamma :: Double+ -- ^ Relative deviation of predicted carrier frequency from nominal+ , _msgEphemerisGloDepC_tau :: Double+ -- ^ Correction to the SV time+ , _msgEphemerisGloDepC_d_tau :: Double+ -- ^ Equipment delay between L1 and L2+ , _msgEphemerisGloDepC_pos :: [Double]+ -- ^ Position of the SV at tb in PZ-90.02 coordinates system+ , _msgEphemerisGloDepC_vel :: [Double]+ -- ^ Velocity vector of the SV at tb in PZ-90.02 coordinates system+ , _msgEphemerisGloDepC_acc :: [Double]+ -- ^ Acceleration vector of the SV at tb in PZ-90.02 coordinates sys+ , _msgEphemerisGloDepC_fcn :: Word8+ -- ^ Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid+ } deriving ( Show, Read, Eq )++instance Binary MsgEphemerisGloDepC where+ get = do+ _msgEphemerisGloDepC_common <- get+ _msgEphemerisGloDepC_gamma <- getFloat64le+ _msgEphemerisGloDepC_tau <- getFloat64le+ _msgEphemerisGloDepC_d_tau <- getFloat64le+ _msgEphemerisGloDepC_pos <- replicateM 3 getFloat64le+ _msgEphemerisGloDepC_vel <- replicateM 3 getFloat64le+ _msgEphemerisGloDepC_acc <- replicateM 3 getFloat64le+ _msgEphemerisGloDepC_fcn <- getWord8+ return MsgEphemerisGloDepC {..}++ put MsgEphemerisGloDepC {..} = do+ put _msgEphemerisGloDepC_common+ putFloat64le _msgEphemerisGloDepC_gamma+ putFloat64le _msgEphemerisGloDepC_tau+ putFloat64le _msgEphemerisGloDepC_d_tau+ mapM_ putFloat64le _msgEphemerisGloDepC_pos+ mapM_ putFloat64le _msgEphemerisGloDepC_vel+ mapM_ putFloat64le _msgEphemerisGloDepC_acc+ putWord8 _msgEphemerisGloDepC_fcn++$(deriveSBP 'msgEphemerisGloDepC ''MsgEphemerisGloDepC)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisGloDepC_" . P.stripPrefix "_msgEphemerisGloDepC_"}+ ''MsgEphemerisGloDepC)+$(makeLenses ''MsgEphemerisGloDepC)+ msgEphemerisGlo :: Word16-msgEphemerisGlo = 0x0085+msgEphemerisGlo = 0x0088 --- | SBP class for message MSG_EPHEMERIS_GLO (0x0085).+-- | SBP class for message MSG_EPHEMERIS_GLO (0x0088). -- -- The ephemeris message returns a set of satellite orbit parameters that is -- used to calculate GLO satellite position, velocity, and clock offset. Please@@ -698,12 +802,18 @@ -- ^ Relative deviation of predicted carrier frequency from nominal , _msgEphemerisGlo_tau :: Double -- ^ Correction to the SV time+ , _msgEphemerisGlo_d_tau :: Double+ -- ^ Equipment delay between L1 and L2 , _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+ , _msgEphemerisGlo_fcn :: Word8+ -- ^ Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid+ , _msgEphemerisGlo_iod :: Word8+ -- ^ Issue of ephemeris data } deriving ( Show, Read, Eq ) instance Binary MsgEphemerisGlo where@@ -711,18 +821,24 @@ _msgEphemerisGlo_common <- get _msgEphemerisGlo_gamma <- getFloat64le _msgEphemerisGlo_tau <- getFloat64le+ _msgEphemerisGlo_d_tau <- getFloat64le _msgEphemerisGlo_pos <- replicateM 3 getFloat64le _msgEphemerisGlo_vel <- replicateM 3 getFloat64le _msgEphemerisGlo_acc <- replicateM 3 getFloat64le+ _msgEphemerisGlo_fcn <- getWord8+ _msgEphemerisGlo_iod <- getWord8 return MsgEphemerisGlo {..} put MsgEphemerisGlo {..} = do put _msgEphemerisGlo_common putFloat64le _msgEphemerisGlo_gamma putFloat64le _msgEphemerisGlo_tau+ putFloat64le _msgEphemerisGlo_d_tau mapM_ putFloat64le _msgEphemerisGlo_pos mapM_ putFloat64le _msgEphemerisGlo_vel mapM_ putFloat64le _msgEphemerisGlo_acc+ putWord8 _msgEphemerisGlo_fcn+ putWord8 _msgEphemerisGlo_iod $(deriveSBP 'msgEphemerisGlo ''MsgEphemerisGlo)
@@ -612,6 +612,37 @@ ''MsgCommandResp) $(makeLenses ''MsgCommandResp) +msgCommandOutput :: Word16+msgCommandOutput = 0x00BC++-- | SBP class for message MSG_COMMAND_OUTPUT (0x00BC).+--+-- Returns the standard output and standard error of the command requested by+-- MSG_COMMAND_REQ. The sequence number can be used to filter for filtering the+-- correct command.+data MsgCommandOutput = MsgCommandOutput+ { _msgCommandOutput_sequence :: Word32+ -- ^ Sequence number+ , _msgCommandOutput_line :: Text+ -- ^ Line of standard output or standard error+ } deriving ( Show, Read, Eq )++instance Binary MsgCommandOutput where+ get = do+ _msgCommandOutput_sequence <- getWord32le+ _msgCommandOutput_line <- decodeUtf8 . toStrict <$> getRemainingLazyByteString+ return MsgCommandOutput {..}++ put MsgCommandOutput {..} = do+ putWord32le _msgCommandOutput_sequence+ putByteString $ encodeUtf8 _msgCommandOutput_line++$(deriveSBP 'msgCommandOutput ''MsgCommandOutput)++$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgCommandOutput_" . P.stripPrefix "_msgCommandOutput_"}+ ''MsgCommandOutput)+$(makeLenses ''MsgCommandOutput)+ msgNetworkStateReq :: Word16 msgNetworkStateReq = 0x00BA @@ -696,7 +727,9 @@ -- -- Spectrum analyzer packet. data MsgSpecan = MsgSpecan- { _msgSpecan_t :: GpsTime+ { _msgSpecan_channel_tag :: Word16+ -- ^ Channel ID+ , _msgSpecan_t :: GpsTime -- ^ Receiver time of this observation , _msgSpecan_freq_ref :: Float -- ^ Reference frequency of this packet@@ -712,6 +745,7 @@ instance Binary MsgSpecan where get = do+ _msgSpecan_channel_tag <- getWord16le _msgSpecan_t <- get _msgSpecan_freq_ref <- getFloat32le _msgSpecan_freq_step <- getFloat32le@@ -721,6 +755,7 @@ return MsgSpecan {..} put MsgSpecan {..} = do+ putWord16le _msgSpecan_channel_tag put _msgSpecan_t putFloat32le _msgSpecan_freq_ref putFloat32le _msgSpecan_freq_step