module Data.RTCM3.SSR
( module Data.RTCM3.SSR
) where
import BasicPrelude
import Control.Lens
import Data.Aeson.TH
import Data.Binary
import Data.Binary.Bits
import qualified Data.Binary.Bits.Get as B
import qualified Data.Binary.Bits.Put as B
import Data.RTCM3.Extras
import Data.RTCM3.TH
data GpsOrbitCorrectionHeader = GpsOrbitCorrectionHeader
{ _gpsOrbitCorrectionHeader_num :: Word16
, _gpsOrbitCorrectionHeader_epochs :: Word32
, _gpsOrbitCorrectionHeader_updateInterval :: Word8
, _gpsOrbitCorrectionHeader_multiple :: Bool
, _gpsOrbitCorrectionHeader_datum :: Bool
, _gpsOrbitCorrectionHeader_iod :: Word8
, _gpsOrbitCorrectionHeader_provider :: Word16
, _gpsOrbitCorrectionHeader_solution :: Word8
, _gpsOrbitCorrectionHeader_n :: Word8
} deriving ( Show, Read, Eq )
$(makeLenses ''GpsOrbitCorrectionHeader)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsOrbitCorrectionHeader_" . stripPrefix "_gpsOrbitCorrectionHeader_"} ''GpsOrbitCorrectionHeader)
instance BinaryBit GpsOrbitCorrectionHeader where
getBits _n = do
_gpsOrbitCorrectionHeader_num <- B.getWord16be 12
_gpsOrbitCorrectionHeader_epochs <- B.getWord32be 20
_gpsOrbitCorrectionHeader_updateInterval <- B.getWord8 4
_gpsOrbitCorrectionHeader_multiple <- B.getBool
_gpsOrbitCorrectionHeader_datum <- B.getBool
_gpsOrbitCorrectionHeader_iod <- B.getWord8 4
_gpsOrbitCorrectionHeader_provider <- B.getWord16be 16
_gpsOrbitCorrectionHeader_solution <- B.getWord8 4
_gpsOrbitCorrectionHeader_n <- B.getWord8 6
pure GpsOrbitCorrectionHeader {..}
putBits _n GpsOrbitCorrectionHeader {..} = do
B.putWord16be 12 _gpsOrbitCorrectionHeader_num
B.putWord32be 20 _gpsOrbitCorrectionHeader_epochs
B.putWord8 4 _gpsOrbitCorrectionHeader_updateInterval
B.putBool _gpsOrbitCorrectionHeader_multiple
B.putBool _gpsOrbitCorrectionHeader_datum
B.putWord8 4 _gpsOrbitCorrectionHeader_iod
B.putWord16be 16 _gpsOrbitCorrectionHeader_provider
B.putWord8 4 _gpsOrbitCorrectionHeader_solution
B.putWord8 6 _gpsOrbitCorrectionHeader_n
data GpsOrbitCorrection = GpsOrbitCorrection
{ _gpsOrbitCorrection_sat :: Word8
, _gpsOrbitCorrection_iode :: Word8
, _gpsOrbitCorrection_deltaRadial :: Int32
, _gpsOrbitCorrection_deltaAlongTrack :: Int32
, _gpsOrbitCorrection_deltaCrossTrack :: Int32
, _gpsOrbitCorrection_dotDeltaRadial :: Int32
, _gpsOrbitCorrection_dotDeltaAlongTrack :: Int32
, _gpsOrbitCorrection_dotDeltaCrossTrack :: Int32
} deriving ( Show, Read, Eq )
$(makeLenses ''GpsOrbitCorrection)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsOrbitCorrection_" . stripPrefix "_gpsOrbitCorrection_"} ''GpsOrbitCorrection)
instance BinaryBit GpsOrbitCorrection where
getBits _n = do
_gpsOrbitCorrection_sat <- B.getWord8 6
_gpsOrbitCorrection_iode <- B.getWord8 8
_gpsOrbitCorrection_deltaRadial <- getInt32be 22
_gpsOrbitCorrection_deltaAlongTrack <- getInt32be 20
_gpsOrbitCorrection_deltaCrossTrack <- getInt32be 20
_gpsOrbitCorrection_dotDeltaRadial <- getInt32be 21
_gpsOrbitCorrection_dotDeltaAlongTrack <- getInt32be 19
_gpsOrbitCorrection_dotDeltaCrossTrack <- getInt32be 19
pure GpsOrbitCorrection {..}
putBits _n GpsOrbitCorrection {..} = do
B.putWord8 6 _gpsOrbitCorrection_sat
B.putWord8 8 _gpsOrbitCorrection_iode
putInt32be 22 _gpsOrbitCorrection_deltaRadial
putInt32be 20 _gpsOrbitCorrection_deltaAlongTrack
putInt32be 20 _gpsOrbitCorrection_deltaCrossTrack
putInt32be 21 _gpsOrbitCorrection_dotDeltaRadial
putInt32be 19 _gpsOrbitCorrection_dotDeltaAlongTrack
putInt32be 19 _gpsOrbitCorrection_dotDeltaCrossTrack
data GpsClockCorrectionHeader = GpsClockCorrectionHeader
{ _gpsClockCorrectionHeader_num :: Word16
, _gpsClockCorrectionHeader_epochs :: Word32
, _gpsClockCorrectionHeader_updateInterval :: Word8
, _gpsClockCorrectionHeader_multiple :: Bool
, _gpsClockCorrectionHeader_iod :: Word8
, _gpsClockCorrectionHeader_provider :: Word16
, _gpsClockCorrectionHeader_solution :: Word8
, _gpsClockCorrectionHeader_n :: Word8
} deriving ( Show, Read, Eq )
$(makeLenses ''GpsClockCorrectionHeader)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsClockCorrectionHeader_" . stripPrefix "_gpsClockCorrectionHeader_"} ''GpsClockCorrectionHeader)
instance BinaryBit GpsClockCorrectionHeader where
getBits _n = do
_gpsClockCorrectionHeader_num <- B.getWord16be 12
_gpsClockCorrectionHeader_epochs <- B.getWord32be 20
_gpsClockCorrectionHeader_updateInterval <- B.getWord8 4
_gpsClockCorrectionHeader_multiple <- B.getBool
_gpsClockCorrectionHeader_iod <- B.getWord8 4
_gpsClockCorrectionHeader_provider <- B.getWord16be 16
_gpsClockCorrectionHeader_solution <- B.getWord8 4
_gpsClockCorrectionHeader_n <- B.getWord8 6
pure GpsClockCorrectionHeader {..}
putBits _n GpsClockCorrectionHeader {..} = do
B.putWord16be 12 _gpsClockCorrectionHeader_num
B.putWord32be 20 _gpsClockCorrectionHeader_epochs
B.putWord8 4 _gpsClockCorrectionHeader_updateInterval
B.putBool _gpsClockCorrectionHeader_multiple
B.putWord8 4 _gpsClockCorrectionHeader_iod
B.putWord16be 16 _gpsClockCorrectionHeader_provider
B.putWord8 4 _gpsClockCorrectionHeader_solution
B.putWord8 6 _gpsClockCorrectionHeader_n
data GpsClockCorrection = GpsClockCorrection
{ _gpsClockCorrection_sat :: Word8
, _gpsClockCorrection_deltaClockC0 :: Int32
, _gpsClockCorrection_deltaClockC1 :: Int32
, _gpsClockCorrection_deltaClockC2 :: Int32
} deriving ( Show, Read, Eq )
$(makeLenses ''GpsClockCorrection)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsClockCorrection_" . stripPrefix "_gpsClockCorrection_"} ''GpsClockCorrection)
instance BinaryBit GpsClockCorrection where
getBits _n = do
_gpsClockCorrection_sat <- B.getWord8 6
_gpsClockCorrection_deltaClockC0 <- getInt32be 22
_gpsClockCorrection_deltaClockC1 <- getInt32be 21
_gpsClockCorrection_deltaClockC2 <- getInt32be 27
pure GpsClockCorrection {..}
putBits _n GpsClockCorrection {..} = do
B.putWord8 6 _gpsClockCorrection_sat
putInt32be 22 _gpsClockCorrection_deltaClockC0
putInt32be 21 _gpsClockCorrection_deltaClockC1
putInt32be 27 _gpsClockCorrection_deltaClockC2
data GlonassOrbitCorrectionHeader = GlonassOrbitCorrectionHeader
{ _glonassOrbitCorrectionHeader_num :: Word16
, _glonassOrbitCorrectionHeader_epochs :: Word32
, _glonassOrbitCorrectionHeader_updateInterval :: Word8
, _glonassOrbitCorrectionHeader_multiple :: Bool
, _glonassOrbitCorrectionHeader_datum :: Bool
, _glonassOrbitCorrectionHeader_iod :: Word8
, _glonassOrbitCorrectionHeader_provider :: Word16
, _glonassOrbitCorrectionHeader_solution :: Word8
, _glonassOrbitCorrectionHeader_n :: Word8
} deriving ( Show, Read, Eq )
$(makeLenses ''GlonassOrbitCorrectionHeader)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassOrbitCorrectionHeader_" . stripPrefix "_glonassOrbitCorrectionHeader_"} ''GlonassOrbitCorrectionHeader)
instance BinaryBit GlonassOrbitCorrectionHeader where
getBits _n = do
_glonassOrbitCorrectionHeader_num <- B.getWord16be 12
_glonassOrbitCorrectionHeader_epochs <- B.getWord32be 17
_glonassOrbitCorrectionHeader_updateInterval <- B.getWord8 4
_glonassOrbitCorrectionHeader_multiple <- B.getBool
_glonassOrbitCorrectionHeader_datum <- B.getBool
_glonassOrbitCorrectionHeader_iod <- B.getWord8 4
_glonassOrbitCorrectionHeader_provider <- B.getWord16be 16
_glonassOrbitCorrectionHeader_solution <- B.getWord8 4
_glonassOrbitCorrectionHeader_n <- B.getWord8 6
pure GlonassOrbitCorrectionHeader {..}
putBits _n GlonassOrbitCorrectionHeader {..} = do
B.putWord16be 12 _glonassOrbitCorrectionHeader_num
B.putWord32be 17 _glonassOrbitCorrectionHeader_epochs
B.putWord8 4 _glonassOrbitCorrectionHeader_updateInterval
B.putBool _glonassOrbitCorrectionHeader_multiple
B.putBool _glonassOrbitCorrectionHeader_datum
B.putWord8 4 _glonassOrbitCorrectionHeader_iod
B.putWord16be 16 _glonassOrbitCorrectionHeader_provider
B.putWord8 4 _glonassOrbitCorrectionHeader_solution
B.putWord8 6 _glonassOrbitCorrectionHeader_n
data GlonassOrbitCorrection = GlonassOrbitCorrection
{ _glonassOrbitCorrection_sat :: Word8
, _glonassOrbitCorrection_iode :: Word8
, _glonassOrbitCorrection_deltaRadial :: Int32
, _glonassOrbitCorrection_deltaAlongTrack :: Int32
, _glonassOrbitCorrection_deltaCrossTrack :: Int32
, _glonassOrbitCorrection_dotDeltaRadial :: Int32
, _glonassOrbitCorrection_dotDeltaAlongTrack :: Int32
, _glonassOrbitCorrection_dotDeltaCrossTrack :: Int32
} deriving ( Show, Read, Eq )
$(makeLenses ''GlonassOrbitCorrection)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassOrbitCorrection_" . stripPrefix "_glonassOrbitCorrection_"} ''GlonassOrbitCorrection)
instance BinaryBit GlonassOrbitCorrection where
getBits _n = do
_glonassOrbitCorrection_sat <- B.getWord8 5
_glonassOrbitCorrection_iode <- B.getWord8 8
_glonassOrbitCorrection_deltaRadial <- getInt32be 22
_glonassOrbitCorrection_deltaAlongTrack <- getInt32be 20
_glonassOrbitCorrection_deltaCrossTrack <- getInt32be 20
_glonassOrbitCorrection_dotDeltaRadial <- getInt32be 21
_glonassOrbitCorrection_dotDeltaAlongTrack <- getInt32be 19
_glonassOrbitCorrection_dotDeltaCrossTrack <- getInt32be 19
pure GlonassOrbitCorrection {..}
putBits _n GlonassOrbitCorrection {..} = do
B.putWord8 5 _glonassOrbitCorrection_sat
B.putWord8 8 _glonassOrbitCorrection_iode
putInt32be 22 _glonassOrbitCorrection_deltaRadial
putInt32be 20 _glonassOrbitCorrection_deltaAlongTrack
putInt32be 20 _glonassOrbitCorrection_deltaCrossTrack
putInt32be 21 _glonassOrbitCorrection_dotDeltaRadial
putInt32be 19 _glonassOrbitCorrection_dotDeltaAlongTrack
putInt32be 19 _glonassOrbitCorrection_dotDeltaCrossTrack
data GlonassClockCorrectionHeader = GlonassClockCorrectionHeader
{ _glonassClockCorrectionHeader_num :: Word16
, _glonassClockCorrectionHeader_epochs :: Word32
, _glonassClockCorrectionHeader_updateInterval :: Word8
, _glonassClockCorrectionHeader_multiple :: Bool
, _glonassClockCorrectionHeader_iod :: Word8
, _glonassClockCorrectionHeader_provider :: Word16
, _glonassClockCorrectionHeader_solution :: Word8
, _glonassClockCorrectionHeader_n :: Word8
} deriving ( Show, Read, Eq )
$(makeLenses ''GlonassClockCorrectionHeader)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassClockCorrectionHeader_" . stripPrefix "_glonassClockCorrectionHeader_"} ''GlonassClockCorrectionHeader)
instance BinaryBit GlonassClockCorrectionHeader where
getBits _n = do
_glonassClockCorrectionHeader_num <- B.getWord16be 12
_glonassClockCorrectionHeader_epochs <- B.getWord32be 17
_glonassClockCorrectionHeader_updateInterval <- B.getWord8 4
_glonassClockCorrectionHeader_multiple <- B.getBool
_glonassClockCorrectionHeader_iod <- B.getWord8 4
_glonassClockCorrectionHeader_provider <- B.getWord16be 16
_glonassClockCorrectionHeader_solution <- B.getWord8 4
_glonassClockCorrectionHeader_n <- B.getWord8 6
pure GlonassClockCorrectionHeader {..}
putBits _n GlonassClockCorrectionHeader {..} = do
B.putWord16be 12 _glonassClockCorrectionHeader_num
B.putWord32be 17 _glonassClockCorrectionHeader_epochs
B.putWord8 4 _glonassClockCorrectionHeader_updateInterval
B.putBool _glonassClockCorrectionHeader_multiple
B.putWord8 4 _glonassClockCorrectionHeader_iod
B.putWord16be 16 _glonassClockCorrectionHeader_provider
B.putWord8 4 _glonassClockCorrectionHeader_solution
B.putWord8 6 _glonassClockCorrectionHeader_n
data GlonassClockCorrection = GlonassClockCorrection
{ _glonassClockCorrection_sat :: Word8
, _glonassClockCorrection_deltaClockC0 :: Int32
, _glonassClockCorrection_deltaClockC1 :: Int32
, _glonassClockCorrection_deltaClockC2 :: Int32
} deriving ( Show, Read, Eq )
$(makeLenses ''GlonassClockCorrection)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_glonassClockCorrection_" . stripPrefix "_glonassClockCorrection_"} ''GlonassClockCorrection)
instance BinaryBit GlonassClockCorrection where
getBits _n = do
_glonassClockCorrection_sat <- B.getWord8 5
_glonassClockCorrection_deltaClockC0 <- getInt32be 22
_glonassClockCorrection_deltaClockC1 <- getInt32be 21
_glonassClockCorrection_deltaClockC2 <- getInt32be 27
pure GlonassClockCorrection {..}
putBits _n GlonassClockCorrection {..} = do
B.putWord8 5 _glonassClockCorrection_sat
putInt32be 22 _glonassClockCorrection_deltaClockC0
putInt32be 21 _glonassClockCorrection_deltaClockC1
putInt32be 27 _glonassClockCorrection_deltaClockC2
msg1057 :: Word16
msg1057 = 1057
data Msg1057 = Msg1057
{ _msg1057_header :: GpsOrbitCorrectionHeader
, _msg1057_corrections :: [GpsOrbitCorrection]
} deriving ( Show, Read, Eq )
$(makeLenses ''Msg1057)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1057_" . stripPrefix "_msg1057_"} ''Msg1057)
instance Binary Msg1057 where
get = B.runBitGet $ do
_msg1057_header <- getBits 0
_msg1057_corrections <- replicateM (fromIntegral $ _msg1057_header ^. gpsOrbitCorrectionHeader_n) $ getBits 0
pure Msg1057 {..}
put Msg1057 {..} = B.runBitPut $ do
putBits 0 _msg1057_header
forM_ _msg1057_corrections $ putBits 0
$(deriveRTCM3 ''Msg1057)
msg1058 :: Word16
msg1058 = 1058
data Msg1058 = Msg1058
{ _msg1058_header :: GpsClockCorrectionHeader
, _msg1058_corrections :: [GpsClockCorrection]
} deriving ( Show, Read, Eq )
$(makeLenses ''Msg1058)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1058_" . stripPrefix "_msg1058_"} ''Msg1058)
instance Binary Msg1058 where
get = B.runBitGet $ do
_msg1058_header <- getBits 0
_msg1058_corrections <- replicateM (fromIntegral $ _msg1058_header ^. gpsClockCorrectionHeader_n) $ getBits 0
pure Msg1058 {..}
put Msg1058 {..} = B.runBitPut $ do
putBits 0 _msg1058_header
forM_ _msg1058_corrections $ putBits 0
$(deriveRTCM3 ''Msg1058)
msg1063 :: Word16
msg1063 = 1063
data Msg1063 = Msg1063
{ _msg1063_header :: GlonassOrbitCorrectionHeader
, _msg1063_corrections :: [GlonassOrbitCorrection]
} deriving ( Show, Read, Eq )
$(makeLenses ''Msg1063)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1063_" . stripPrefix "_msg1063_"} ''Msg1063)
instance Binary Msg1063 where
get = B.runBitGet $ do
_msg1063_header <- getBits 0
_msg1063_corrections <- replicateM (fromIntegral $ _msg1063_header ^. glonassOrbitCorrectionHeader_n) $ getBits 0
pure Msg1063 {..}
put Msg1063 {..} = B.runBitPut $ do
putBits 0 _msg1063_header
forM_ _msg1063_corrections $ putBits 0
$(deriveRTCM3 ''Msg1063)
msg1064 :: Word16
msg1064 = 1064
data Msg1064 = Msg1064
{ _msg1064_header :: GlonassClockCorrectionHeader
, _msg1064_corrections :: [GlonassClockCorrection]
} deriving ( Show, Read, Eq )
$(makeLenses ''Msg1064)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1064_" . stripPrefix "_msg1064_"} ''Msg1064)
instance Binary Msg1064 where
get = B.runBitGet $ do
_msg1064_header <- getBits 0
_msg1064_corrections <- replicateM (fromIntegral $ _msg1064_header ^. glonassClockCorrectionHeader_n) $ getBits 0
pure Msg1064 {..}
put Msg1064 {..} = B.runBitPut $ do
putBits 0 _msg1064_header
forM_ _msg1064_corrections $ putBits 0
$(deriveRTCM3 ''Msg1064)