rtcm 0.2.13 → 0.2.14
raw patch · 4 files changed
+1113/−1 lines, 4 files
Files
- rtcm.cabal +1/−1
- src/Data/RTCM3.hs +35/−0
- src/Data/RTCM3/SSR.hs +835/−0
- test/Test/Data/RTCM3/SSR.hs +242/−0
rtcm.cabal view
@@ -1,5 +1,5 @@ name: rtcm-version: 0.2.13+version: 0.2.14 synopsis: RTCM Library. description: Haskell bindings for RTCM. homepage: http://github.com/swift-nav/librtcm
src/Data/RTCM3.hs view
@@ -54,9 +54,15 @@ | RTCM3Msg1033 Msg1033 Msg | RTCM3Msg1057 Msg1057 Msg | RTCM3Msg1058 Msg1058 Msg+ | RTCM3Msg1059 Msg1059 Msg+ | RTCM3Msg1060 Msg1060 Msg | RTCM3Msg1063 Msg1063 Msg | RTCM3Msg1064 Msg1064 Msg+ | RTCM3Msg1065 Msg1065 Msg+ | RTCM3Msg1066 Msg1066 Msg | RTCM3Msg1230 Msg1230 Msg+ | RTCM3Msg1265 Msg1265 Msg+ | RTCM3Msg1266 Msg1266 Msg | RTCM3MsgUnknown Word16 Msg | RTCM3MsgBadCrc Msg | RTCM3MsgEmpty Msg@@ -90,9 +96,15 @@ | num == msg1033 = RTCM3Msg1033 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1057 = RTCM3Msg1057 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1058 = RTCM3Msg1058 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m+ | num == msg1059 = RTCM3Msg1059 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m+ | num == msg1060 = RTCM3Msg1060 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1063 = RTCM3Msg1063 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1064 = RTCM3Msg1064 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m+ | num == msg1065 = RTCM3Msg1065 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m+ | num == msg1066 = RTCM3Msg1066 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1230 = RTCM3Msg1230 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m+ | num == msg1265 = RTCM3Msg1265 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m+ | num == msg1266 = RTCM3Msg1266 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | otherwise = RTCM3MsgUnknown num m where crc = checkCrc _msgRTCM3Len $ unBytes _msgRTCM3Payload num = checkNum $ unBytes _msgRTCM3Payload@@ -118,9 +130,15 @@ encoder (RTCM3Msg1033 _n m) = put m encoder (RTCM3Msg1057 _n m) = put m encoder (RTCM3Msg1058 _n m) = put m+ encoder (RTCM3Msg1059 _n m) = put m+ encoder (RTCM3Msg1060 _n m) = put m encoder (RTCM3Msg1063 _n m) = put m encoder (RTCM3Msg1064 _n m) = put m+ encoder (RTCM3Msg1065 _n m) = put m+ encoder (RTCM3Msg1066 _n m) = put m encoder (RTCM3Msg1230 _n m) = put m+ encoder (RTCM3Msg1265 _n m) = put m+ encoder (RTCM3Msg1266 _n m) = put m encoder (RTCM3MsgUnknown _n m) = put m encoder (RTCM3MsgBadCrc m) = put m encoder (RTCM3MsgEmpty m) = put m@@ -144,9 +162,15 @@ msg f (RTCM3Msg1033 n m) = RTCM3Msg1033 n <$> f m msg f (RTCM3Msg1057 n m) = RTCM3Msg1057 n <$> f m msg f (RTCM3Msg1058 n m) = RTCM3Msg1058 n <$> f m+ msg f (RTCM3Msg1059 n m) = RTCM3Msg1059 n <$> f m+ msg f (RTCM3Msg1060 n m) = RTCM3Msg1060 n <$> f m msg f (RTCM3Msg1063 n m) = RTCM3Msg1063 n <$> f m msg f (RTCM3Msg1064 n m) = RTCM3Msg1064 n <$> f m+ msg f (RTCM3Msg1065 n m) = RTCM3Msg1065 n <$> f m+ msg f (RTCM3Msg1066 n m) = RTCM3Msg1066 n <$> f m msg f (RTCM3Msg1230 n m) = RTCM3Msg1230 n <$> f m+ msg f (RTCM3Msg1265 n m) = RTCM3Msg1265 n <$> f m+ msg f (RTCM3Msg1266 n m) = RTCM3Msg1266 n <$> f m msg f (RTCM3MsgUnknown n m) = RTCM3MsgUnknown n <$> f m msg f (RTCM3MsgBadCrc m) = RTCM3MsgBadCrc <$> f m msg f (RTCM3MsgEmpty m) = RTCM3MsgEmpty <$> f m@@ -176,9 +200,15 @@ toJSON (RTCM3Msg1033 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1057 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1058 n m) = toJSON n <<>> toJSON m+ toJSON (RTCM3Msg1059 n m) = toJSON n <<>> toJSON m+ toJSON (RTCM3Msg1060 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1063 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1064 n m) = toJSON n <<>> toJSON m+ toJSON (RTCM3Msg1065 n m) = toJSON n <<>> toJSON m+ toJSON (RTCM3Msg1066 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1230 n m) = toJSON n <<>> toJSON m+ toJSON (RTCM3Msg1265 n m) = toJSON n <<>> toJSON m+ toJSON (RTCM3Msg1266 n m) = toJSON n <<>> toJSON m toJSON (RTCM3MsgUnknown n m) = object [ "num" .= n ] <<>> toJSON m toJSON (RTCM3MsgBadCrc m) = toJSON m toJSON (RTCM3MsgEmpty m) = toJSON m@@ -206,8 +236,13 @@ | num == msg1033 = RTCM3Msg1033 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1057 = RTCM3Msg1057 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1058 = RTCM3Msg1058 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj+ | num == msg1059 = RTCM3Msg1059 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj+ | num == msg1060 = RTCM3Msg1060 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1063 = RTCM3Msg1063 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1064 = RTCM3Msg1064 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj+ | num == msg1065 = RTCM3Msg1065 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj+ | num == msg1066 = RTCM3Msg1066 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1230 = RTCM3Msg1230 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj+ | num == msg1265 = RTCM3Msg1265 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | otherwise = RTCM3MsgUnknown <$> pure num <*> parseJSON obj parseJSON _ = mzero
src/Data/RTCM3/SSR.hs view
@@ -23,6 +23,7 @@ import Data.Binary.Bits import qualified Data.Binary.Bits.Get as B import qualified Data.Binary.Bits.Put as B+import Data.Int import Data.RTCM3.Extras import Data.RTCM3.TH @@ -380,6 +381,672 @@ putInt32be 21 _glonassClockCorrection_deltaClockC1 putInt32be 27 _glonassClockCorrection_deltaClockC2 +-- | GpsOrbitClockCorrectionHeader.+--+-- GPS orbit and clock correction header.++data GpsOrbitClockCorrectionHeader = GpsOrbitClockCorrectionHeader+ { _gpsOrbitClockCorrectionHeader_num :: Word16+ -- ^ Message number.+ , _gpsOrbitClockCorrectionHeader_epochs :: Word32+ -- ^ GPS epoch time.+ , _gpsOrbitClockCorrectionHeader_updateInterval :: Word8+ -- ^ SSR update interval.+ , _gpsOrbitClockCorrectionHeader_multiple :: Bool+ -- ^ Multiple message indicator.+ , _gpsOrbitClockCorrectionHeader_datum :: Bool+ -- ^ Satellite reference datum.+ , _gpsOrbitClockCorrectionHeader_iod :: Word8+ -- ^ IOD SSR.+ , _gpsOrbitClockCorrectionHeader_provider :: Word16+ -- ^ SSR provider id.+ , _gpsOrbitClockCorrectionHeader_solution :: Word8+ -- ^ SSR solution id.+ , _gpsOrbitClockCorrectionHeader_n :: Word8+ -- ^ Number of satellites.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsOrbitClockCorrectionHeader)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsOrbitClockCorrectionHeader_" . stripPrefix "_gpsOrbitClockCorrectionHeader_"} ''GpsOrbitClockCorrectionHeader)++instance BinaryBit GpsOrbitClockCorrectionHeader where+ getBits _n = do+ _gpsOrbitClockCorrectionHeader_num <- B.getWord16be 12+ _gpsOrbitClockCorrectionHeader_epochs <- B.getWord32be 20+ _gpsOrbitClockCorrectionHeader_updateInterval <- B.getWord8 4+ _gpsOrbitClockCorrectionHeader_multiple <- B.getBool+ _gpsOrbitClockCorrectionHeader_datum <- B.getBool+ _gpsOrbitClockCorrectionHeader_iod <- B.getWord8 4+ _gpsOrbitClockCorrectionHeader_provider <- B.getWord16be 16+ _gpsOrbitClockCorrectionHeader_solution <- B.getWord8 4+ _gpsOrbitClockCorrectionHeader_n <- B.getWord8 6+ pure GpsOrbitClockCorrectionHeader {..}++ putBits _n GpsOrbitClockCorrectionHeader {..} = do+ B.putWord16be 12 _gpsOrbitClockCorrectionHeader_num+ B.putWord32be 20 _gpsOrbitClockCorrectionHeader_epochs+ B.putWord8 4 _gpsOrbitClockCorrectionHeader_updateInterval+ B.putBool _gpsOrbitClockCorrectionHeader_multiple+ B.putBool _gpsOrbitClockCorrectionHeader_datum+ B.putWord8 4 _gpsOrbitClockCorrectionHeader_iod+ B.putWord16be 16 _gpsOrbitClockCorrectionHeader_provider+ B.putWord8 4 _gpsOrbitClockCorrectionHeader_solution+ B.putWord8 6 _gpsOrbitClockCorrectionHeader_n++-- | GpsOrbitClockCorrectionMessage.+--+-- GPS orbit correction message.+data GpsOrbitClockCorrection = GpsOrbitClockCorrection+ { _gpsOrbitClockCorrection_sat :: Word8+ -- ^ GPS satellite id.+ , _gpsOrbitClockCorrection_iode :: Word8+ -- ^ GPS IODE.+ , _gpsOrbitClockCorrection_deltaRadial :: Int32+ -- ^ Delta Radial.+ , _gpsOrbitClockCorrection_deltaAlongTrack :: Int32+ -- ^ Delta Along-Track.+ , _gpsOrbitClockCorrection_deltaCrossTrack :: Int32+ -- ^ Delta Cross-Track.+ , _gpsOrbitClockCorrection_dotDeltaRadial :: Int32+ -- ^ Dot Delta Radial.+ , _gpsOrbitClockCorrection_dotDeltaAlongTrack :: Int32+ -- ^ Dot Delta Along-Track.+ , _gpsOrbitClockCorrection_dotDeltaCrossTrack :: Int32+ -- ^ Dot Delta Cross-Track.+ , _gpsOrbitClockCorrection_deltaClockC0 :: Int32+ -- ^ Delta clock C0.+ , _gpsOrbitClockCorrection_deltaClockC1 :: Int32+ -- ^ Delta clock C1.+ , _gpsOrbitClockCorrection_deltaClockC2 :: Int32+ -- ^ Delta clock C2.++ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsOrbitClockCorrection)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsOrbitClockCorrection_" . stripPrefix "_gpsOrbitClockCorrection_"} ''GpsOrbitClockCorrection)++instance BinaryBit GpsOrbitClockCorrection where+ getBits _n = do+ _gpsOrbitClockCorrection_sat <- B.getWord8 6+ _gpsOrbitClockCorrection_iode <- B.getWord8 8+ _gpsOrbitClockCorrection_deltaRadial <- getInt32be 22+ _gpsOrbitClockCorrection_deltaAlongTrack <- getInt32be 20+ _gpsOrbitClockCorrection_deltaCrossTrack <- getInt32be 20+ _gpsOrbitClockCorrection_dotDeltaRadial <- getInt32be 21+ _gpsOrbitClockCorrection_dotDeltaAlongTrack <- getInt32be 19+ _gpsOrbitClockCorrection_dotDeltaCrossTrack <- getInt32be 19+ _gpsOrbitClockCorrection_deltaClockC0 <- getInt32be 22+ _gpsOrbitClockCorrection_deltaClockC1 <- getInt32be 21+ _gpsOrbitClockCorrection_deltaClockC2 <- getInt32be 27+ pure GpsOrbitClockCorrection {..}++ putBits _n GpsOrbitClockCorrection {..} = do+ B.putWord8 6 _gpsOrbitClockCorrection_sat+ B.putWord8 8 _gpsOrbitClockCorrection_iode+ putInt32be 22 _gpsOrbitClockCorrection_deltaRadial+ putInt32be 20 _gpsOrbitClockCorrection_deltaAlongTrack+ putInt32be 20 _gpsOrbitClockCorrection_deltaCrossTrack+ putInt32be 21 _gpsOrbitClockCorrection_dotDeltaRadial+ putInt32be 19 _gpsOrbitClockCorrection_dotDeltaAlongTrack+ putInt32be 19 _gpsOrbitClockCorrection_dotDeltaCrossTrack+ putInt32be 22 _gpsOrbitClockCorrection_deltaClockC0+ putInt32be 21 _gpsOrbitClockCorrection_deltaClockC1+ putInt32be 27 _gpsOrbitClockCorrection_deltaClockC2++-- | GlonassOrbitClockCorrectionHeader.+--+-- GLONASS orbit correction header.+data GlonassOrbitClockCorrectionHeader = GlonassOrbitClockCorrectionHeader+ { _glonassOrbitClockCorrectionHeader_num :: Word16+ -- ^ Message number.+ , _glonassOrbitClockCorrectionHeader_epochs :: Word32+ -- ^ GLONASS epoch time.+ , _glonassOrbitClockCorrectionHeader_updateInterval :: Word8+ -- ^ SSR update interval.+ , _glonassOrbitClockCorrectionHeader_multiple :: Bool+ -- ^ Multiple message indicator.+ , _glonassOrbitClockCorrectionHeader_datum :: Bool+ -- ^ Satellite reference datum.+ , _glonassOrbitClockCorrectionHeader_iod :: Word8+ -- ^ IOD SSR.+ , _glonassOrbitClockCorrectionHeader_provider :: Word16+ -- ^ SSR provider id.+ , _glonassOrbitClockCorrectionHeader_solution :: Word8+ -- ^ SSR solution id.+ , _glonassOrbitClockCorrectionHeader_n :: Word8+ -- ^ Number of satellites.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassOrbitClockCorrectionHeader)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassOrbitClockCorrectionHeader_" . stripPrefix "_glonassOrbitClockCorrectionHeader_"} ''GlonassOrbitClockCorrectionHeader)++instance BinaryBit GlonassOrbitClockCorrectionHeader where+ getBits _n = do+ _glonassOrbitClockCorrectionHeader_num <- B.getWord16be 12+ _glonassOrbitClockCorrectionHeader_epochs <- B.getWord32be 17+ _glonassOrbitClockCorrectionHeader_updateInterval <- B.getWord8 4+ _glonassOrbitClockCorrectionHeader_multiple <- B.getBool+ _glonassOrbitClockCorrectionHeader_datum <- B.getBool+ _glonassOrbitClockCorrectionHeader_iod <- B.getWord8 4+ _glonassOrbitClockCorrectionHeader_provider <- B.getWord16be 16+ _glonassOrbitClockCorrectionHeader_solution <- B.getWord8 4+ _glonassOrbitClockCorrectionHeader_n <- B.getWord8 6+ pure GlonassOrbitClockCorrectionHeader {..}++ putBits _n GlonassOrbitClockCorrectionHeader {..} = do+ B.putWord16be 12 _glonassOrbitClockCorrectionHeader_num+ B.putWord32be 17 _glonassOrbitClockCorrectionHeader_epochs+ B.putWord8 4 _glonassOrbitClockCorrectionHeader_updateInterval+ B.putBool _glonassOrbitClockCorrectionHeader_multiple+ B.putBool _glonassOrbitClockCorrectionHeader_datum+ B.putWord8 4 _glonassOrbitClockCorrectionHeader_iod+ B.putWord16be 16 _glonassOrbitClockCorrectionHeader_provider+ B.putWord8 4 _glonassOrbitClockCorrectionHeader_solution+ B.putWord8 6 _glonassOrbitClockCorrectionHeader_n++-- | GlonassOrbitClockCorrectionMessage.+--+-- GLONASS orbit correction message.+data GlonassOrbitClockCorrection = GlonassOrbitClockCorrection+ { _glonassOrbitClockCorrection_sat :: Word8+ -- ^ GLONASS satellite id.+ , _glonassOrbitClockCorrection_iode :: Word8+ -- ^ GLONASS IODE.+ , _glonassOrbitClockCorrection_deltaRadial :: Int32+ -- ^ Delta Radial.+ , _glonassOrbitClockCorrection_deltaAlongTrack :: Int32+ -- ^ Delta Along-Track.+ , _glonassOrbitClockCorrection_deltaCrossTrack :: Int32+ -- ^ Delta Cross-Track.+ , _glonassOrbitClockCorrection_dotDeltaRadial :: Int32+ -- ^ Dot Delta Radial.+ , _glonassOrbitClockCorrection_dotDeltaAlongTrack :: Int32+ -- ^ Dot Delta Along-Track.+ , _glonassOrbitClockCorrection_dotDeltaCrossTrack :: Int32+ -- ^ Dot Delta Cross-Track.+ , _glonassOrbitClockCorrection_deltaClockC0 :: Int32+ -- ^ Delta clock C0.+ , _glonassOrbitClockCorrection_deltaClockC1 :: Int32+ -- ^ Delta clock C1.+ , _glonassOrbitClockCorrection_deltaClockC2 :: Int32+ -- ^ Delta clock C2.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassOrbitClockCorrection)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassOrbitClockCorrection_" . stripPrefix "_glonassOrbitClockCorrection_"} ''GlonassOrbitClockCorrection)++instance BinaryBit GlonassOrbitClockCorrection where+ getBits _n = do+ _glonassOrbitClockCorrection_sat <- B.getWord8 5+ _glonassOrbitClockCorrection_iode <- B.getWord8 8+ _glonassOrbitClockCorrection_deltaRadial <- getInt32be 22+ _glonassOrbitClockCorrection_deltaAlongTrack <- getInt32be 20+ _glonassOrbitClockCorrection_deltaCrossTrack <- getInt32be 20+ _glonassOrbitClockCorrection_dotDeltaRadial <- getInt32be 21+ _glonassOrbitClockCorrection_dotDeltaAlongTrack <- getInt32be 19+ _glonassOrbitClockCorrection_dotDeltaCrossTrack <- getInt32be 19+ _glonassOrbitClockCorrection_deltaClockC0 <- getInt32be 22+ _glonassOrbitClockCorrection_deltaClockC1 <- getInt32be 21+ _glonassOrbitClockCorrection_deltaClockC2 <- getInt32be 27+ pure GlonassOrbitClockCorrection {..}++ putBits _n GlonassOrbitClockCorrection {..} = do+ B.putWord8 5 _glonassOrbitClockCorrection_sat+ B.putWord8 8 _glonassOrbitClockCorrection_iode+ putInt32be 22 _glonassOrbitClockCorrection_deltaRadial+ putInt32be 20 _glonassOrbitClockCorrection_deltaAlongTrack+ putInt32be 20 _glonassOrbitClockCorrection_deltaCrossTrack+ putInt32be 21 _glonassOrbitClockCorrection_dotDeltaRadial+ putInt32be 19 _glonassOrbitClockCorrection_dotDeltaAlongTrack+ putInt32be 19 _glonassOrbitClockCorrection_dotDeltaCrossTrack+ putInt32be 22 _glonassOrbitClockCorrection_deltaClockC0+ putInt32be 21 _glonassOrbitClockCorrection_deltaClockC1+ putInt32be 27 _glonassOrbitClockCorrection_deltaClockC2++-- | GpsCodeBiasCorrectionHeader.+--+-- GPS code bias correction header.+data GpsCodeBiasCorrectionHeader = GpsCodeBiasCorrectionHeader+ { _gpsCodeBiasCorrectionHeader_num :: Word16+ -- ^ Message number.+ , _gpsCodeBiasCorrectionHeader_epochs :: Word32+ -- ^ GPS epoch time.+ , _gpsCodeBiasCorrectionHeader_updateInterval :: Word8+ -- ^ SSR update interval.+ , _gpsCodeBiasCorrectionHeader_multiple :: Bool+ -- ^ Multiple message indicator.+ , _gpsCodeBiasCorrectionHeader_iod :: Word8+ -- ^ IOD SSR.+ , _gpsCodeBiasCorrectionHeader_provider :: Word16+ -- ^ SSR provider id.+ , _gpsCodeBiasCorrectionHeader_solution :: Word8+ -- ^ SSR solution id.+ , _gpsCodeBiasCorrectionHeader_n :: Word8+ -- ^ Number of satellites.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsCodeBiasCorrectionHeader)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsCodeBiasCorrectionHeader_" . stripPrefix "_gpsCodeBiasCorrectionHeader_"} ''GpsCodeBiasCorrectionHeader)++instance BinaryBit GpsCodeBiasCorrectionHeader where+ getBits _n = do+ _gpsCodeBiasCorrectionHeader_num <- B.getWord16be 12+ _gpsCodeBiasCorrectionHeader_epochs <- B.getWord32be 20+ _gpsCodeBiasCorrectionHeader_updateInterval <- B.getWord8 4+ _gpsCodeBiasCorrectionHeader_multiple <- B.getBool+ _gpsCodeBiasCorrectionHeader_iod <- B.getWord8 4+ _gpsCodeBiasCorrectionHeader_provider <- B.getWord16be 16+ _gpsCodeBiasCorrectionHeader_solution <- B.getWord8 4+ _gpsCodeBiasCorrectionHeader_n <- B.getWord8 6+ pure GpsCodeBiasCorrectionHeader {..}++ putBits _n GpsCodeBiasCorrectionHeader {..} = do+ B.putWord16be 12 _gpsCodeBiasCorrectionHeader_num+ B.putWord32be 20 _gpsCodeBiasCorrectionHeader_epochs+ B.putWord8 4 _gpsCodeBiasCorrectionHeader_updateInterval+ B.putBool _gpsCodeBiasCorrectionHeader_multiple+ B.putWord8 4 _gpsCodeBiasCorrectionHeader_iod+ B.putWord16be 16 _gpsCodeBiasCorrectionHeader_provider+ B.putWord8 4 _gpsCodeBiasCorrectionHeader_solution+ B.putWord8 6 _gpsCodeBiasCorrectionHeader_n++-- | GpsCodeBias.+--+-- GPS code bias.+data GpsCodeBias = GpsCodeBias+ { _gpsCodeBias_signal :: Word8+ -- ^ GPS signal.+ , _gpsCodeBias_codeBias :: Int16+ -- ^ GPS code bias.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsCodeBias)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsCodeBias_" . stripPrefix "_gpsCodeBias_"} ''GpsCodeBias)++instance BinaryBit GpsCodeBias where+ getBits _n = do+ _gpsCodeBias_signal <- B.getWord8 5+ _gpsCodeBias_codeBias <- getInt16be 14+ pure GpsCodeBias {..}++ putBits _n GpsCodeBias {..} = do+ B.putWord8 5 _gpsCodeBias_signal+ putInt16be 14 _gpsCodeBias_codeBias++-- | GpsCodeBiasCorrectionMessage.+--+-- GPS code bias correction message.+data GpsCodeBiasCorrection = GpsCodeBiasCorrection+ { _gpsCodeBiasCorrection_sat :: Word8+ -- ^ GPS satellite id.+ , _gpsCodeBiasCorrection_n :: Word8+ -- ^ Number of biases.+ , _gpsCodeBiasCorrection_codeBiases :: [GpsCodeBias]+ -- ^ GPS code biases.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsCodeBiasCorrection)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsCodeBiasCorrection_" . stripPrefix "_gpsCodeBiasCorrection_"} ''GpsCodeBiasCorrection)++instance BinaryBit GpsCodeBiasCorrection where+ getBits _n = do+ _gpsCodeBiasCorrection_sat <- B.getWord8 6+ _gpsCodeBiasCorrection_n <- B.getWord8 5+ _gpsCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _gpsCodeBiasCorrection_n) $ getBits 0+ pure GpsCodeBiasCorrection {..}++ putBits _n GpsCodeBiasCorrection {..} = do+ B.putWord8 6 _gpsCodeBiasCorrection_sat+ B.putWord8 5 _gpsCodeBiasCorrection_n+ forM_ _gpsCodeBiasCorrection_codeBiases $ putBits 0++-- | GlonassCodeBiasCorrectionHeader.+--+-- GLONASS code bias correction header.+data GlonassCodeBiasCorrectionHeader = GlonassCodeBiasCorrectionHeader+ { _glonassCodeBiasCorrectionHeader_num :: Word16+ -- ^ Message number.+ , _glonassCodeBiasCorrectionHeader_epochs :: Word32+ -- ^ GLONASS epoch time.+ , _glonassCodeBiasCorrectionHeader_updateInterval :: Word8+ -- ^ SSR update interval.+ , _glonassCodeBiasCorrectionHeader_multiple :: Bool+ -- ^ Multiple message indicator.+ , _glonassCodeBiasCorrectionHeader_iod :: Word8+ -- ^ IOD SSR.+ , _glonassCodeBiasCorrectionHeader_provider :: Word16+ -- ^ SSR provider id.+ , _glonassCodeBiasCorrectionHeader_solution :: Word8+ -- ^ SSR solution id.+ , _glonassCodeBiasCorrectionHeader_n :: Word8+ -- ^ Number of satellites.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassCodeBiasCorrectionHeader)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassCodeBiasCorrectionHeader_" . stripPrefix "_glonassCodeBiasCorrectionHeader_"} ''GlonassCodeBiasCorrectionHeader)++instance BinaryBit GlonassCodeBiasCorrectionHeader where+ getBits _n = do+ _glonassCodeBiasCorrectionHeader_num <- B.getWord16be 12+ _glonassCodeBiasCorrectionHeader_epochs <- B.getWord32be 17+ _glonassCodeBiasCorrectionHeader_updateInterval <- B.getWord8 4+ _glonassCodeBiasCorrectionHeader_multiple <- B.getBool+ _glonassCodeBiasCorrectionHeader_iod <- B.getWord8 4+ _glonassCodeBiasCorrectionHeader_provider <- B.getWord16be 16+ _glonassCodeBiasCorrectionHeader_solution <- B.getWord8 4+ _glonassCodeBiasCorrectionHeader_n <- B.getWord8 6+ pure GlonassCodeBiasCorrectionHeader {..}++ putBits _n GlonassCodeBiasCorrectionHeader {..} = do+ B.putWord16be 12 _glonassCodeBiasCorrectionHeader_num+ B.putWord32be 17 _glonassCodeBiasCorrectionHeader_epochs+ B.putWord8 4 _glonassCodeBiasCorrectionHeader_updateInterval+ B.putBool _glonassCodeBiasCorrectionHeader_multiple+ B.putWord8 4 _glonassCodeBiasCorrectionHeader_iod+ B.putWord16be 16 _glonassCodeBiasCorrectionHeader_provider+ B.putWord8 4 _glonassCodeBiasCorrectionHeader_solution+ B.putWord8 6 _glonassCodeBiasCorrectionHeader_n++-- | GlonassCodeBias.+--+-- GLONASS code bias.+data GlonassCodeBias = GlonassCodeBias+ { _glonassCodeBias_signal :: Word8+ -- ^ GLONASS signal.+ , _glonassCodeBias_codeBias :: Int16+ -- ^ GLONASS code bias.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassCodeBias)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassCodeBias_" . stripPrefix "_glonassCodeBias_"} ''GlonassCodeBias)++instance BinaryBit GlonassCodeBias where+ getBits _n = do+ _glonassCodeBias_signal <- B.getWord8 5+ _glonassCodeBias_codeBias <- getInt16be 14+ pure GlonassCodeBias {..}++ putBits _n GlonassCodeBias {..} = do+ B.putWord8 5 _glonassCodeBias_signal+ putInt16be 14 _glonassCodeBias_codeBias++-- | GlonassCodeBiasCorrectionMessage.+--+-- GLONASS code bias correction message.+data GlonassCodeBiasCorrection = GlonassCodeBiasCorrection+ { _glonassCodeBiasCorrection_sat :: Word8+ -- ^ GLONASS satellite id.+ , _glonassCodeBiasCorrection_n :: Word8+ -- ^ Number of biases.+ , _glonassCodeBiasCorrection_codeBiases :: [GlonassCodeBias]+ -- ^ GLONASS code biases.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassCodeBiasCorrection)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassCodeBiasCorrection_" . stripPrefix "_glonassCodeBiasCorrection_"} ''GlonassCodeBiasCorrection)++instance BinaryBit GlonassCodeBiasCorrection where+ getBits _n = do+ _glonassCodeBiasCorrection_sat <- B.getWord8 5+ _glonassCodeBiasCorrection_n <- B.getWord8 5+ _glonassCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _glonassCodeBiasCorrection_n) $ getBits 0+ pure GlonassCodeBiasCorrection {..}++ putBits _n GlonassCodeBiasCorrection {..} = do+ B.putWord8 5 _glonassCodeBiasCorrection_sat+ B.putWord8 5 _glonassCodeBiasCorrection_n+ forM_ _glonassCodeBiasCorrection_codeBiases $ putBits 0++-- | GpsPhaseBiasCorrectionHeader.+--+-- GPS phase bias correction header.+data GpsPhaseBiasCorrectionHeader = GpsPhaseBiasCorrectionHeader+ { _gpsPhaseBiasCorrectionHeader_num :: Word16+ -- ^ Message number.+ , _gpsPhaseBiasCorrectionHeader_epochs :: Word32+ -- ^ GPS epoch time.+ , _gpsPhaseBiasCorrectionHeader_updateInterval :: Word8+ -- ^ SSR update interval.+ , _gpsPhaseBiasCorrectionHeader_multiple :: Bool+ -- ^ Multiple message indicator.+ , _gpsPhaseBiasCorrectionHeader_iod :: Word8+ -- ^ IOD SSR.+ , _gpsPhaseBiasCorrectionHeader_provider :: Word16+ -- ^ SSR provider id.+ , _gpsPhaseBiasCorrectionHeader_solution :: Word8+ -- ^ SSR solution id.+ , _gpsPhaseBiasCorrectionHeader_dispersive :: Bool+ -- ^ Dispersive Bias Consistency Indicator.+ , _gpsPhaseBiasCorrectionHeader_mw :: Bool+ -- ^ MW Consistency Indicator.+ , _gpsPhaseBiasCorrectionHeader_n :: Word8+ -- ^ Number of satellites.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsPhaseBiasCorrectionHeader)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsPhaseBiasCorrectionHeader_" . stripPrefix "_gpsPhaseBiasCorrectionHeader_"} ''GpsPhaseBiasCorrectionHeader)++instance BinaryBit GpsPhaseBiasCorrectionHeader where+ getBits _n = do+ _gpsPhaseBiasCorrectionHeader_num <- B.getWord16be 12+ _gpsPhaseBiasCorrectionHeader_epochs <- B.getWord32be 20+ _gpsPhaseBiasCorrectionHeader_updateInterval <- B.getWord8 4+ _gpsPhaseBiasCorrectionHeader_multiple <- B.getBool+ _gpsPhaseBiasCorrectionHeader_iod <- B.getWord8 4+ _gpsPhaseBiasCorrectionHeader_provider <- B.getWord16be 16+ _gpsPhaseBiasCorrectionHeader_solution <- B.getWord8 4+ _gpsPhaseBiasCorrectionHeader_dispersive <- B.getBool+ _gpsPhaseBiasCorrectionHeader_mw <- B.getBool+ _gpsPhaseBiasCorrectionHeader_n <- B.getWord8 6+ pure GpsPhaseBiasCorrectionHeader {..}++ putBits _n GpsPhaseBiasCorrectionHeader {..} = do+ B.putWord16be 12 _gpsPhaseBiasCorrectionHeader_num+ B.putWord32be 20 _gpsPhaseBiasCorrectionHeader_epochs+ B.putWord8 4 _gpsPhaseBiasCorrectionHeader_updateInterval+ B.putBool _gpsPhaseBiasCorrectionHeader_multiple+ B.putWord8 4 _gpsPhaseBiasCorrectionHeader_iod+ B.putWord16be 16 _gpsPhaseBiasCorrectionHeader_provider+ B.putWord8 4 _gpsPhaseBiasCorrectionHeader_solution+ B.putBool _gpsPhaseBiasCorrectionHeader_dispersive+ B.putBool _gpsPhaseBiasCorrectionHeader_mw+ B.putWord8 6 _gpsPhaseBiasCorrectionHeader_n++-- | GpsPhaseBias.+--+-- GPS phase bias.+data GpsPhaseBias = GpsPhaseBias+ { _gpsPhaseBias_signal :: Word8+ -- ^ GPS signal.+ , _gpsPhaseBias_integer :: Bool+ -- ^ Signal Integer Indicator.+ , _gpsPhaseBias_wideLaneInteger :: Word8+ -- ^ Signals wide-lane integer indicator.+ , _gpsPhaseBias_discontinuityCounter :: Word8+ -- ^ Signal Discontinuity Counter.+ , _gpsPhaseBias_phaseBias :: Int32+ -- ^ GPS phase bias.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsPhaseBias)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsPhaseBias_" . stripPrefix "_gpsPhaseBias_"} ''GpsPhaseBias)++instance BinaryBit GpsPhaseBias where+ getBits _n = do+ _gpsPhaseBias_signal <- B.getWord8 5+ _gpsPhaseBias_integer <- B.getBool+ _gpsPhaseBias_wideLaneInteger <- B.getWord8 2+ _gpsPhaseBias_discontinuityCounter <- B.getWord8 4+ _gpsPhaseBias_phaseBias <- getInt32be 20+ pure GpsPhaseBias {..}++ putBits _n GpsPhaseBias {..} = do+ B.putWord8 5 _gpsPhaseBias_signal+ B.putBool _gpsPhaseBias_integer+ B.putWord8 2 _gpsPhaseBias_wideLaneInteger+ B.putWord8 4 _gpsPhaseBias_discontinuityCounter+ putInt32be 20 _gpsPhaseBias_phaseBias++-- | GpsPhaseBiasCorrectionMessage.+--+-- GPS phase bias correction message.+data GpsPhaseBiasCorrection = GpsPhaseBiasCorrection+ { _gpsPhaseBiasCorrection_sat :: Word8+ -- ^ GPS satellite id.+ , _gpsPhaseBiasCorrection_n :: Word8+ -- ^ Number of biases.+ , _gpsPhaseBiasCorrection_yawAngle :: Word16+ -- ^ Yaw angle.+ , _gpsPhaseBiasCorrection_yawRate :: Int8+ -- ^ Yaw rate.+ , _gpsPhaseBiasCorrection_phaseBiases :: [GpsPhaseBias]+ -- ^ GPS phase biases.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GpsPhaseBiasCorrection)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsPhaseBiasCorrection_" . stripPrefix "_gpsPhaseBiasCorrection_"} ''GpsPhaseBiasCorrection)++instance BinaryBit GpsPhaseBiasCorrection where+ getBits _n = do+ _gpsPhaseBiasCorrection_sat <- B.getWord8 6+ _gpsPhaseBiasCorrection_n <- B.getWord8 5+ _gpsPhaseBiasCorrection_yawAngle <- B.getWord16be 9+ _gpsPhaseBiasCorrection_yawRate <- getInt8 8+ _gpsPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _gpsPhaseBiasCorrection_n) $ getBits 0+ pure GpsPhaseBiasCorrection {..}++ putBits _n GpsPhaseBiasCorrection {..} = do+ B.putWord8 6 _gpsPhaseBiasCorrection_sat+ B.putWord8 5 _gpsPhaseBiasCorrection_n+ B.putWord16be 9 _gpsPhaseBiasCorrection_yawAngle+ putInt8 8 _gpsPhaseBiasCorrection_yawRate+ forM_ _gpsPhaseBiasCorrection_phaseBiases $ putBits 0++-- | GlonassPhaseBiasCorrectionHeader.+--+-- GLONASS phase bias correction header.+data GlonassPhaseBiasCorrectionHeader = GlonassPhaseBiasCorrectionHeader+ { _glonassPhaseBiasCorrectionHeader_num :: Word16+ -- ^ Message number.+ , _glonassPhaseBiasCorrectionHeader_epochs :: Word32+ -- ^ GLONASS epoch time.+ , _glonassPhaseBiasCorrectionHeader_updateInterval :: Word8+ -- ^ SSR update interval.+ , _glonassPhaseBiasCorrectionHeader_multiple :: Bool+ -- ^ Multiple message indicator.+ , _glonassPhaseBiasCorrectionHeader_iod :: Word8+ -- ^ IOD SSR.+ , _glonassPhaseBiasCorrectionHeader_provider :: Word16+ -- ^ SSR provider id.+ , _glonassPhaseBiasCorrectionHeader_solution :: Word8+ -- ^ SSR solution id.+ , _glonassPhaseBiasCorrectionHeader_dispersive :: Bool+ -- ^ Dispersive Bias Consistency Indicator.+ , _glonassPhaseBiasCorrectionHeader_mw :: Bool+ -- ^ MW Consistency Indicator.+ , _glonassPhaseBiasCorrectionHeader_n :: Word8+ -- ^ Number of satellites.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassPhaseBiasCorrectionHeader)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassPhaseBiasCorrectionHeader_" . stripPrefix "_glonassPhaseBiasCorrectionHeader_"} ''GlonassPhaseBiasCorrectionHeader)++instance BinaryBit GlonassPhaseBiasCorrectionHeader where+ getBits _n = do+ _glonassPhaseBiasCorrectionHeader_num <- B.getWord16be 12+ _glonassPhaseBiasCorrectionHeader_epochs <- B.getWord32be 17+ _glonassPhaseBiasCorrectionHeader_updateInterval <- B.getWord8 4+ _glonassPhaseBiasCorrectionHeader_multiple <- B.getBool+ _glonassPhaseBiasCorrectionHeader_iod <- B.getWord8 4+ _glonassPhaseBiasCorrectionHeader_provider <- B.getWord16be 16+ _glonassPhaseBiasCorrectionHeader_solution <- B.getWord8 4+ _glonassPhaseBiasCorrectionHeader_dispersive <- B.getBool+ _glonassPhaseBiasCorrectionHeader_mw <- B.getBool+ _glonassPhaseBiasCorrectionHeader_n <- B.getWord8 6+ pure GlonassPhaseBiasCorrectionHeader {..}++ putBits _n GlonassPhaseBiasCorrectionHeader {..} = do+ B.putWord16be 12 _glonassPhaseBiasCorrectionHeader_num+ B.putWord32be 17 _glonassPhaseBiasCorrectionHeader_epochs+ B.putWord8 4 _glonassPhaseBiasCorrectionHeader_updateInterval+ B.putBool _glonassPhaseBiasCorrectionHeader_multiple+ B.putWord8 4 _glonassPhaseBiasCorrectionHeader_iod+ B.putWord16be 16 _glonassPhaseBiasCorrectionHeader_provider+ B.putWord8 4 _glonassPhaseBiasCorrectionHeader_solution+ B.putBool _glonassPhaseBiasCorrectionHeader_dispersive+ B.putBool _glonassPhaseBiasCorrectionHeader_mw+ B.putWord8 6 _glonassPhaseBiasCorrectionHeader_n++-- | GlonassPhaseBias.+--+-- GLONASS phase bias.+data GlonassPhaseBias = GlonassPhaseBias+ { _glonassPhaseBias_signal :: Word8+ -- ^ GLONASS signal.+ , _glonassPhaseBias_integer :: Bool+ -- ^ Signal Integer Indicator.+ , _glonassPhaseBias_wideLaneInteger :: Word8+ -- ^ Signals wide-lane integer indicator.+ , _glonassPhaseBias_discontinuityCounter :: Word8+ -- ^ Signal Discontinuity Counter.+ , _glonassPhaseBias_phaseBias :: Int32+ -- ^ GLONASS phase bias.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassPhaseBias)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassPhaseBias_" . stripPrefix "_glonassPhaseBias_"} ''GlonassPhaseBias)++instance BinaryBit GlonassPhaseBias where+ getBits _n = do+ _glonassPhaseBias_signal <- B.getWord8 5+ _glonassPhaseBias_integer <- B.getBool+ _glonassPhaseBias_wideLaneInteger <- B.getWord8 2+ _glonassPhaseBias_discontinuityCounter <- B.getWord8 4+ _glonassPhaseBias_phaseBias <- getInt32be 20+ pure GlonassPhaseBias {..}++ putBits _n GlonassPhaseBias {..} = do+ B.putWord8 5 _glonassPhaseBias_signal+ B.putBool _glonassPhaseBias_integer+ B.putWord8 2 _glonassPhaseBias_wideLaneInteger+ B.putWord8 4 _glonassPhaseBias_discontinuityCounter+ putInt32be 20 _glonassPhaseBias_phaseBias++-- | GlonassPhaseBiasCorrectionMessage.+--+-- GLONASS phase bias correction message.+data GlonassPhaseBiasCorrection = GlonassPhaseBiasCorrection+ { _glonassPhaseBiasCorrection_sat :: Word8+ -- ^ GLONASS satellite id.+ , _glonassPhaseBiasCorrection_n :: Word8+ -- ^ Number of biases.+ , _glonassPhaseBiasCorrection_yawAngle :: Word16+ -- ^ Yaw angle.+ , _glonassPhaseBiasCorrection_yawRate :: Int8+ -- ^ Yaw rate.+ , _glonassPhaseBiasCorrection_phaseBiases :: [GlonassPhaseBias]+ -- ^ GLONASS phase biases.+ } deriving ( Show, Read, Eq )++$(makeLenses ''GlonassPhaseBiasCorrection)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassPhaseBiasCorrection_" . stripPrefix "_glonassPhaseBiasCorrection_"} ''GlonassPhaseBiasCorrection)++instance BinaryBit GlonassPhaseBiasCorrection where+ getBits _n = do+ _glonassPhaseBiasCorrection_sat <- B.getWord8 5+ _glonassPhaseBiasCorrection_n <- B.getWord8 5+ _glonassPhaseBiasCorrection_yawAngle <- B.getWord16be 9+ _glonassPhaseBiasCorrection_yawRate <- getInt8 8+ _glonassPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _glonassPhaseBiasCorrection_n) $ getBits 0+ pure GlonassPhaseBiasCorrection {..}++ putBits _n GlonassPhaseBiasCorrection {..} = do+ B.putWord8 5 _glonassPhaseBiasCorrection_sat+ B.putWord8 5 _glonassPhaseBiasCorrection_n+ B.putWord16be 9 _glonassPhaseBiasCorrection_yawAngle+ putInt8 8 _glonassPhaseBiasCorrection_yawRate+ forM_ _glonassPhaseBiasCorrection_phaseBiases $ putBits 0+ msg1057 :: Word16 msg1057 = 1057 @@ -491,3 +1158,171 @@ forM_ _msg1064_corrections $ putBits 0 $(deriveRTCM3 ''Msg1064)++msg1060 :: Word16+msg1060 = 1060++-- | Msg 1060.+--+-- RTCMv3 message 1060.+data Msg1060 = Msg1060+ { _msg1060_header :: GpsOrbitClockCorrectionHeader+ -- ^ GPS orbit correction header.+ , _msg1060_corrections :: [GpsOrbitClockCorrection]+ -- ^ GPS orbit corrections.+ } deriving ( Show, Read, Eq )++$(makeLenses ''Msg1060)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1060_" . stripPrefix "_msg1060_"} ''Msg1060)++instance Binary Msg1060 where+ get = B.runBitGet $ do+ _msg1060_header <- getBits 0+ _msg1060_corrections <- replicateM (fromIntegral $ _msg1060_header ^. gpsOrbitClockCorrectionHeader_n) $ getBits 0+ pure Msg1060 {..}++ put Msg1060 {..} = B.runBitPut $ do+ putBits 0 _msg1060_header+ forM_ _msg1060_corrections $ putBits 0++$(deriveRTCM3 ''Msg1060)++msg1066 :: Word16+msg1066 = 1066++-- | Msg 1066.+--+-- RTCMv3 message 1066.+data Msg1066 = Msg1066+ { _msg1066_header :: GlonassOrbitClockCorrectionHeader+ -- ^ GLONASS orbit correction header.+ , _msg1066_corrections :: [GlonassOrbitClockCorrection]+ -- ^ GLONASS orbit corrections.+ } deriving ( Show, Read, Eq )++$(makeLenses ''Msg1066)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1066_" . stripPrefix "_msg1066_"} ''Msg1066)++instance Binary Msg1066 where+ get = B.runBitGet $ do+ _msg1066_header <- getBits 0+ _msg1066_corrections <- replicateM (fromIntegral $ _msg1066_header ^. glonassOrbitClockCorrectionHeader_n) $ getBits 0+ pure Msg1066 {..}++ put Msg1066 {..} = B.runBitPut $ do+ putBits 0 _msg1066_header+ forM_ _msg1066_corrections $ putBits 0++$(deriveRTCM3 ''Msg1066)++msg1059 :: Word16+msg1059 = 1059++-- | Msg 1059.+--+-- RTCMv3 message 1059.+data Msg1059 = Msg1059+ { _msg1059_header :: GpsCodeBiasCorrectionHeader+ -- ^ GPS code bias correction header.+ , _msg1059_corrections :: [GpsCodeBiasCorrection]+ -- ^ GPS code bias corrections.+ } deriving ( Show, Read, Eq )++$(makeLenses ''Msg1059)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1059_" . stripPrefix "_msg1059_"} ''Msg1059)++instance Binary Msg1059 where+ get = B.runBitGet $ do+ _msg1059_header <- getBits 0+ _msg1059_corrections <- replicateM (fromIntegral $ _msg1059_header ^. gpsCodeBiasCorrectionHeader_n) $ getBits 0+ pure Msg1059 {..}++ put Msg1059 {..} = B.runBitPut $ do+ putBits 0 _msg1059_header+ forM_ _msg1059_corrections $ putBits 0++$(deriveRTCM3 ''Msg1059)++msg1065 :: Word16+msg1065 = 1065++-- | Msg 1065.+--+-- RTCMv3 message 1065.+data Msg1065 = Msg1065+ { _msg1065_header :: GlonassCodeBiasCorrectionHeader+ -- ^ GLONASS code bias correction header.+ , _msg1065_corrections :: [GlonassCodeBiasCorrection]+ -- ^ GLONASS code bias corrections.+ } deriving ( Show, Read, Eq )++$(makeLenses ''Msg1065)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1065_" . stripPrefix "_msg1065_"} ''Msg1065)++instance Binary Msg1065 where+ get = B.runBitGet $ do+ _msg1065_header <- getBits 0+ _msg1065_corrections <- replicateM (fromIntegral $ _msg1065_header ^. glonassCodeBiasCorrectionHeader_n) $ getBits 0+ pure Msg1065 {..}++ put Msg1065 {..} = B.runBitPut $ do+ putBits 0 _msg1065_header+ forM_ _msg1065_corrections $ putBits 0++$(deriveRTCM3 ''Msg1065)++msg1265 :: Word16+msg1265 = 1265++-- | Msg 1265.+--+-- RTCMv3 message 1265.+data Msg1265 = Msg1265+ { _msg1265_header :: GpsPhaseBiasCorrectionHeader+ -- ^ GPS phase bias correction header.+ , _msg1265_corrections :: [GpsPhaseBiasCorrection]+ -- ^ GPS phase bias corrections.+ } deriving ( Show, Read, Eq )++$(makeLenses ''Msg1265)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1265_" . stripPrefix "_msg1265_"} ''Msg1265)++instance Binary Msg1265 where+ get = B.runBitGet $ do+ _msg1265_header <- getBits 0+ _msg1265_corrections <- replicateM (fromIntegral $ _msg1265_header ^. gpsPhaseBiasCorrectionHeader_n) $ getBits 0+ pure Msg1265 {..}++ put Msg1265 {..} = B.runBitPut $ do+ putBits 0 _msg1265_header+ forM_ _msg1265_corrections $ putBits 0++$(deriveRTCM3 ''Msg1265)++msg1266 :: Word16+msg1266 = 1266++-- | Msg 1266.+--+-- RTCMv3 message 1266.+data Msg1266 = Msg1266+ { _msg1266_header :: GlonassPhaseBiasCorrectionHeader+ -- ^ GLONASS phase bias correction header.+ , _msg1266_corrections :: [GlonassPhaseBiasCorrection]+ -- ^ GLONASS phase bias corrections.+ } deriving ( Show, Read, Eq )++$(makeLenses ''Msg1266)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1266_" . stripPrefix "_msg1266_"} ''Msg1266)++instance Binary Msg1266 where+ get = B.runBitGet $ do+ _msg1266_header <- getBits 0+ _msg1266_corrections <- replicateM (fromIntegral $ _msg1266_header ^. glonassPhaseBiasCorrectionHeader_n) $ getBits 0+ pure Msg1266 {..}++ put Msg1266 {..} = B.runBitPut $ do+ putBits 0 _msg1266_header+ forM_ _msg1266_corrections $ putBits 0++$(deriveRTCM3 ''Msg1266)
test/Test/Data/RTCM3/SSR.hs view
@@ -112,6 +112,176 @@ _glonassClockCorrection_deltaClockC2 <- arbitraryInt 27 pure GlonassClockCorrection {..} +instance Arbitrary GpsOrbitClockCorrectionHeader where+ arbitrary = do+ _gpsOrbitClockCorrectionHeader_num <- arbitraryWord 12+ _gpsOrbitClockCorrectionHeader_epochs <- arbitraryWord 20+ _gpsOrbitClockCorrectionHeader_updateInterval <- arbitraryWord 4+ _gpsOrbitClockCorrectionHeader_multiple <- arbitrary+ _gpsOrbitClockCorrectionHeader_datum <- arbitrary+ _gpsOrbitClockCorrectionHeader_iod <- arbitraryWord 4+ _gpsOrbitClockCorrectionHeader_provider <- arbitraryWord 16+ _gpsOrbitClockCorrectionHeader_solution <- arbitraryWord 4+ _gpsOrbitClockCorrectionHeader_n <- arbitraryWord 6+ pure GpsOrbitClockCorrectionHeader {..}++instance Arbitrary GpsOrbitClockCorrection where+ arbitrary = do+ _gpsOrbitClockCorrection_sat <- arbitraryWord 6+ _gpsOrbitClockCorrection_iode <- arbitraryWord 8+ _gpsOrbitClockCorrection_deltaRadial <- arbitraryInt 22+ _gpsOrbitClockCorrection_deltaAlongTrack <- arbitraryInt 20+ _gpsOrbitClockCorrection_deltaCrossTrack <- arbitraryInt 20+ _gpsOrbitClockCorrection_dotDeltaRadial <- arbitraryInt 21+ _gpsOrbitClockCorrection_dotDeltaAlongTrack <- arbitraryInt 19+ _gpsOrbitClockCorrection_dotDeltaCrossTrack <- arbitraryInt 19+ _gpsOrbitClockCorrection_deltaClockC0 <- arbitraryInt 22+ _gpsOrbitClockCorrection_deltaClockC1 <- arbitraryInt 21+ _gpsOrbitClockCorrection_deltaClockC2 <- arbitraryInt 27+ pure GpsOrbitClockCorrection {..}++instance Arbitrary GlonassOrbitClockCorrectionHeader where+ arbitrary = do+ _glonassOrbitClockCorrectionHeader_num <- arbitraryWord 12+ _glonassOrbitClockCorrectionHeader_epochs <- arbitraryWord 17+ _glonassOrbitClockCorrectionHeader_updateInterval <- arbitraryWord 4+ _glonassOrbitClockCorrectionHeader_multiple <- arbitrary+ _glonassOrbitClockCorrectionHeader_datum <- arbitrary+ _glonassOrbitClockCorrectionHeader_iod <- arbitraryWord 4+ _glonassOrbitClockCorrectionHeader_provider <- arbitraryWord 16+ _glonassOrbitClockCorrectionHeader_solution <- arbitraryWord 4+ _glonassOrbitClockCorrectionHeader_n <- arbitraryWord 6+ pure GlonassOrbitClockCorrectionHeader {..}++instance Arbitrary GlonassOrbitClockCorrection where+ arbitrary = do+ _glonassOrbitClockCorrection_sat <- arbitraryWord 5+ _glonassOrbitClockCorrection_iode <- arbitraryWord 8+ _glonassOrbitClockCorrection_deltaRadial <- arbitraryInt 22+ _glonassOrbitClockCorrection_deltaAlongTrack <- arbitraryInt 20+ _glonassOrbitClockCorrection_deltaCrossTrack <- arbitraryInt 20+ _glonassOrbitClockCorrection_dotDeltaRadial <- arbitraryInt 21+ _glonassOrbitClockCorrection_dotDeltaAlongTrack <- arbitraryInt 19+ _glonassOrbitClockCorrection_dotDeltaCrossTrack <- arbitraryInt 19+ _glonassOrbitClockCorrection_deltaClockC0 <- arbitraryInt 22+ _glonassOrbitClockCorrection_deltaClockC1 <- arbitraryInt 21+ _glonassOrbitClockCorrection_deltaClockC2 <- arbitraryInt 27+ pure GlonassOrbitClockCorrection {..}++instance Arbitrary GpsCodeBiasCorrectionHeader where+ arbitrary = do+ _gpsCodeBiasCorrectionHeader_num <- arbitraryWord 12+ _gpsCodeBiasCorrectionHeader_epochs <- arbitraryWord 20+ _gpsCodeBiasCorrectionHeader_updateInterval <- arbitraryWord 4+ _gpsCodeBiasCorrectionHeader_multiple <- arbitrary+ _gpsCodeBiasCorrectionHeader_iod <- arbitraryWord 4+ _gpsCodeBiasCorrectionHeader_provider <- arbitraryWord 16+ _gpsCodeBiasCorrectionHeader_solution <- arbitraryWord 4+ _gpsCodeBiasCorrectionHeader_n <- arbitraryWord 6+ pure GpsCodeBiasCorrectionHeader {..}++instance Arbitrary GpsCodeBias where+ arbitrary = do+ _gpsCodeBias_signal <- arbitraryWord 5+ _gpsCodeBias_codeBias <- arbitraryInt 14+ pure GpsCodeBias {..}++instance Arbitrary GpsCodeBiasCorrection where+ arbitrary = do+ _gpsCodeBiasCorrection_sat <- arbitraryWord 6+ _gpsCodeBiasCorrection_n <- arbitraryWord 5+ _gpsCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _gpsCodeBiasCorrection_n) arbitrary+ pure GpsCodeBiasCorrection {..}++instance Arbitrary GlonassCodeBiasCorrectionHeader where+ arbitrary = do+ _glonassCodeBiasCorrectionHeader_num <- arbitraryWord 12+ _glonassCodeBiasCorrectionHeader_epochs <- arbitraryWord 17+ _glonassCodeBiasCorrectionHeader_updateInterval <- arbitraryWord 4+ _glonassCodeBiasCorrectionHeader_multiple <- arbitrary+ _glonassCodeBiasCorrectionHeader_iod <- arbitraryWord 4+ _glonassCodeBiasCorrectionHeader_provider <- arbitraryWord 16+ _glonassCodeBiasCorrectionHeader_solution <- arbitraryWord 4+ _glonassCodeBiasCorrectionHeader_n <- arbitraryWord 6+ pure GlonassCodeBiasCorrectionHeader {..}++instance Arbitrary GlonassCodeBias where+ arbitrary = do+ _glonassCodeBias_signal <- arbitraryWord 5+ _glonassCodeBias_codeBias <- arbitraryInt 14+ pure GlonassCodeBias {..}++instance Arbitrary GlonassCodeBiasCorrection where+ arbitrary = do+ _glonassCodeBiasCorrection_sat <- arbitraryWord 5+ _glonassCodeBiasCorrection_n <- arbitraryWord 5+ _glonassCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _glonassCodeBiasCorrection_n) arbitrary+ pure GlonassCodeBiasCorrection {..}++instance Arbitrary GpsPhaseBiasCorrectionHeader where+ arbitrary = do+ _gpsPhaseBiasCorrectionHeader_num <- arbitraryWord 12+ _gpsPhaseBiasCorrectionHeader_epochs <- arbitraryWord 20+ _gpsPhaseBiasCorrectionHeader_updateInterval <- arbitraryWord 4+ _gpsPhaseBiasCorrectionHeader_multiple <- arbitrary+ _gpsPhaseBiasCorrectionHeader_iod <- arbitraryWord 4+ _gpsPhaseBiasCorrectionHeader_provider <- arbitraryWord 16+ _gpsPhaseBiasCorrectionHeader_solution <- arbitraryWord 4+ _gpsPhaseBiasCorrectionHeader_dispersive <- arbitrary+ _gpsPhaseBiasCorrectionHeader_mw <- arbitrary+ _gpsPhaseBiasCorrectionHeader_n <- arbitraryWord 6+ pure GpsPhaseBiasCorrectionHeader {..}++instance Arbitrary GpsPhaseBias where+ arbitrary = do+ _gpsPhaseBias_signal <- arbitraryWord 5+ _gpsPhaseBias_integer <- arbitrary+ _gpsPhaseBias_wideLaneInteger <- arbitraryWord 2+ _gpsPhaseBias_discontinuityCounter <- arbitraryWord 4+ _gpsPhaseBias_phaseBias <- arbitraryInt 20+ pure GpsPhaseBias {..}++instance Arbitrary GpsPhaseBiasCorrection where+ arbitrary = do+ _gpsPhaseBiasCorrection_sat <- arbitraryWord 6+ _gpsPhaseBiasCorrection_n <- arbitraryWord 5+ _gpsPhaseBiasCorrection_yawAngle <- arbitraryWord 9+ _gpsPhaseBiasCorrection_yawRate <- arbitraryInt 8+ _gpsPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _gpsPhaseBiasCorrection_n) arbitrary+ pure GpsPhaseBiasCorrection {..}++instance Arbitrary GlonassPhaseBiasCorrectionHeader where+ arbitrary = do+ _glonassPhaseBiasCorrectionHeader_num <- arbitraryWord 12+ _glonassPhaseBiasCorrectionHeader_epochs <- arbitraryWord 17+ _glonassPhaseBiasCorrectionHeader_updateInterval <- arbitraryWord 4+ _glonassPhaseBiasCorrectionHeader_multiple <- arbitrary+ _glonassPhaseBiasCorrectionHeader_iod <- arbitraryWord 4+ _glonassPhaseBiasCorrectionHeader_provider <- arbitraryWord 16+ _glonassPhaseBiasCorrectionHeader_solution <- arbitraryWord 4+ _glonassPhaseBiasCorrectionHeader_dispersive <- arbitrary+ _glonassPhaseBiasCorrectionHeader_mw <- arbitrary+ _glonassPhaseBiasCorrectionHeader_n <- arbitraryWord 6+ pure GlonassPhaseBiasCorrectionHeader {..}++instance Arbitrary GlonassPhaseBias where+ arbitrary = do+ _glonassPhaseBias_signal <- arbitraryWord 5+ _glonassPhaseBias_integer <- arbitrary+ _glonassPhaseBias_wideLaneInteger <- arbitraryWord 2+ _glonassPhaseBias_discontinuityCounter <- arbitraryWord 4+ _glonassPhaseBias_phaseBias <- arbitraryInt 20+ pure GlonassPhaseBias {..}++instance Arbitrary GlonassPhaseBiasCorrection where+ arbitrary = do+ _glonassPhaseBiasCorrection_sat <- arbitraryWord 5+ _glonassPhaseBiasCorrection_n <- arbitraryWord 5+ _glonassPhaseBiasCorrection_yawAngle <- arbitraryWord 9+ _glonassPhaseBiasCorrection_yawRate <- arbitraryInt 8+ _glonassPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _glonassPhaseBiasCorrection_n) arbitrary+ pure GlonassPhaseBiasCorrection {..}+ instance Arbitrary Msg1057 where arbitrary = do _msg1057_header <- arbitrary@@ -136,6 +306,42 @@ _msg1064_corrections <- replicateM (fromIntegral $ _msg1064_header ^. glonassClockCorrectionHeader_n) arbitrary pure Msg1064 {..} +instance Arbitrary Msg1060 where+ arbitrary = do+ _msg1060_header <- arbitrary+ _msg1060_corrections <- replicateM (fromIntegral $ _msg1060_header ^. gpsOrbitClockCorrectionHeader_n) arbitrary+ pure Msg1060 {..}++instance Arbitrary Msg1066 where+ arbitrary = do+ _msg1066_header <- arbitrary+ _msg1066_corrections <- replicateM (fromIntegral $ _msg1066_header ^. glonassOrbitClockCorrectionHeader_n) arbitrary+ pure Msg1066 {..}++instance Arbitrary Msg1059 where+ arbitrary = do+ _msg1059_header <- arbitrary+ _msg1059_corrections <- replicateM (fromIntegral $ _msg1059_header ^. gpsCodeBiasCorrectionHeader_n) arbitrary+ pure Msg1059 {..}++instance Arbitrary Msg1065 where+ arbitrary = do+ _msg1065_header <- arbitrary+ _msg1065_corrections <- replicateM (fromIntegral $ _msg1065_header ^. glonassCodeBiasCorrectionHeader_n) arbitrary+ pure Msg1065 {..}++instance Arbitrary Msg1265 where+ arbitrary = do+ _msg1265_header <- arbitrary+ _msg1265_corrections <- replicateM (fromIntegral $ _msg1265_header ^. gpsPhaseBiasCorrectionHeader_n) arbitrary+ pure Msg1265 {..}++instance Arbitrary Msg1266 where+ arbitrary = do+ _msg1266_header <- arbitrary+ _msg1266_corrections <- replicateM (fromIntegral $ _msg1266_header ^. glonassPhaseBiasCorrectionHeader_n) arbitrary+ pure Msg1266 {..}+ testMsg1057 :: TestTree testMsg1057 = testProperty "Roundtrip Msg1057" $ \m ->@@ -156,6 +362,36 @@ testProperty "Roundtrip Msg1064" $ \m -> decode (encode m) == (m :: Msg1064) +testMsg1060 :: TestTree+testMsg1060 =+ testProperty "Roundtrip Msg1060" $ \m ->+ decode (encode m) == (m :: Msg1060)++testMsg1066 :: TestTree+testMsg1066 =+ testProperty "Roundtrip Msg1066" $ \m ->+ decode (encode m) == (m :: Msg1066)++testMsg1059 :: TestTree+testMsg1059 =+ testProperty "Roundtrip Msg1059" $ \m ->+ decode (encode m) == (m :: Msg1059)++testMsg1065 :: TestTree+testMsg1065 =+ testProperty "Roundtrip Msg1065" $ \m ->+ decode (encode m) == (m :: Msg1065)++testMsg1265 :: TestTree+testMsg1265 =+ testProperty "Roundtrip Msg1265" $ \m ->+ decode (encode m) == (m :: Msg1265)++testMsg1266 :: TestTree+testMsg1266 =+ testProperty "Roundtrip Msg1266" $ \m ->+ decode (encode m) == (m :: Msg1266)+ tests :: TestTree tests = testGroup "SSR tests"@@ -163,4 +399,10 @@ , testMsg1058 , testMsg1063 , testMsg1064+ , testMsg1060+ , testMsg1066+ , testMsg1059+ , testMsg1065+ , testMsg1265+ , testMsg1266 ]