packages feed

rtcm 0.2.13 → 0.2.14

raw patch · 4 files changed

+1113/−1 lines, 4 files

Files

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     ]