module SwiftNav.SBP.Observation where
import BasicPrelude
import Control.Lens
import Control.Monad.Loops
import Data.Aeson.TH (deriveJSON, defaultOptions, fieldLabelModifier)
import Data.Binary
import Data.Binary.Get
import Data.Binary.IEEE754
import Data.Binary.Put
import Data.ByteString
import Data.ByteString.Lazy hiding ( ByteString )
import Data.Int
import Data.Word
import SwiftNav.SBP.Encoding
data ObsGPSTime = ObsGPSTime
{ _obsGPSTime_tow :: Word32
, _obsGPSTime_wn :: Word16
} deriving ( Show, Read, Eq )
instance Binary ObsGPSTime where
get = do
_obsGPSTime_tow <- getWord32le
_obsGPSTime_wn <- getWord16le
return ObsGPSTime {..}
put ObsGPSTime {..} = do
putWord32le _obsGPSTime_tow
putWord16le _obsGPSTime_wn
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_obsGPSTime_" . stripPrefix "_obsGPSTime_"}
''ObsGPSTime)
$(makeLenses ''ObsGPSTime)
data CarrierPhase = CarrierPhase
{ _carrierPhase_i :: Int32
, _carrierPhase_f :: Word8
} deriving ( Show, Read, Eq )
instance Binary CarrierPhase where
get = do
_carrierPhase_i <- liftM fromIntegral getWord32le
_carrierPhase_f <- getWord8
return CarrierPhase {..}
put CarrierPhase {..} = do
putWord32le $ fromIntegral _carrierPhase_i
putWord8 _carrierPhase_f
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_carrierPhase_" . stripPrefix "_carrierPhase_"}
''CarrierPhase)
$(makeLenses ''CarrierPhase)
data ObservationHeader = ObservationHeader
{ _observationHeader_t :: ObsGPSTime
, _observationHeader_n_obs :: Word8
} deriving ( Show, Read, Eq )
instance Binary ObservationHeader where
get = do
_observationHeader_t <- get
_observationHeader_n_obs <- getWord8
return ObservationHeader {..}
put ObservationHeader {..} = do
put _observationHeader_t
putWord8 _observationHeader_n_obs
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_observationHeader_" . stripPrefix "_observationHeader_"}
''ObservationHeader)
$(makeLenses ''ObservationHeader)
data PackedObsContent = PackedObsContent
{ _packedObsContent_P :: Word32
, _packedObsContent_L :: CarrierPhase
, _packedObsContent_cn0 :: Word8
, _packedObsContent_lock :: Word16
, _packedObsContent_sid :: Word32
} deriving ( Show, Read, Eq )
instance Binary PackedObsContent where
get = do
_packedObsContent_P <- getWord32le
_packedObsContent_L <- get
_packedObsContent_cn0 <- getWord8
_packedObsContent_lock <- getWord16le
_packedObsContent_sid <- getWord32le
return PackedObsContent {..}
put PackedObsContent {..} = do
putWord32le _packedObsContent_P
put _packedObsContent_L
putWord8 _packedObsContent_cn0
putWord16le _packedObsContent_lock
putWord32le _packedObsContent_sid
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_packedObsContent_" . stripPrefix "_packedObsContent_"}
''PackedObsContent)
$(makeLenses ''PackedObsContent)
msgObs :: Word16
msgObs = 0x0043
data MsgObs = MsgObs
{ _msgObs_header :: ObservationHeader
, _msgObs_obs :: [PackedObsContent]
} deriving ( Show, Read, Eq )
instance Binary MsgObs where
get = do
_msgObs_header <- get
_msgObs_obs <- whileM (liftM not isEmpty) get
return MsgObs {..}
put MsgObs {..} = do
put _msgObs_header
mapM_ put _msgObs_obs
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgObs_" . stripPrefix "_msgObs_"}
''MsgObs)
$(makeLenses ''MsgObs)
msgBasePos :: Word16
msgBasePos = 0x0044
data MsgBasePos = MsgBasePos
{ _msgBasePos_lat :: Double
, _msgBasePos_lon :: Double
, _msgBasePos_height :: Double
} deriving ( Show, Read, Eq )
instance Binary MsgBasePos where
get = do
_msgBasePos_lat <- getFloat64le
_msgBasePos_lon <- getFloat64le
_msgBasePos_height <- getFloat64le
return MsgBasePos {..}
put MsgBasePos {..} = do
putFloat64le _msgBasePos_lat
putFloat64le _msgBasePos_lon
putFloat64le _msgBasePos_height
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgBasePos_" . stripPrefix "_msgBasePos_"}
''MsgBasePos)
$(makeLenses ''MsgBasePos)
msgEphemeris :: Word16
msgEphemeris = 0x0047
data MsgEphemeris = MsgEphemeris
{ _msgEphemeris_tgd :: Double
, _msgEphemeris_c_rs :: Double
, _msgEphemeris_c_rc :: Double
, _msgEphemeris_c_uc :: Double
, _msgEphemeris_c_us :: Double
, _msgEphemeris_c_ic :: Double
, _msgEphemeris_c_is :: Double
, _msgEphemeris_dn :: Double
, _msgEphemeris_m0 :: Double
, _msgEphemeris_ecc :: Double
, _msgEphemeris_sqrta :: Double
, _msgEphemeris_omega0 :: Double
, _msgEphemeris_omegadot :: Double
, _msgEphemeris_w :: Double
, _msgEphemeris_inc :: Double
, _msgEphemeris_inc_dot :: Double
, _msgEphemeris_af0 :: Double
, _msgEphemeris_af1 :: Double
, _msgEphemeris_af2 :: Double
, _msgEphemeris_toe_tow :: Double
, _msgEphemeris_toe_wn :: Word16
, _msgEphemeris_toc_tow :: Double
, _msgEphemeris_toc_wn :: Word16
, _msgEphemeris_valid :: Word8
, _msgEphemeris_healthy :: Word8
, _msgEphemeris_sid :: Word32
, _msgEphemeris_iode :: Word8
, _msgEphemeris_iodc :: Word16
, _msgEphemeris_reserved :: Word32
} deriving ( Show, Read, Eq )
instance Binary MsgEphemeris where
get = do
_msgEphemeris_tgd <- getFloat64le
_msgEphemeris_c_rs <- getFloat64le
_msgEphemeris_c_rc <- getFloat64le
_msgEphemeris_c_uc <- getFloat64le
_msgEphemeris_c_us <- getFloat64le
_msgEphemeris_c_ic <- getFloat64le
_msgEphemeris_c_is <- getFloat64le
_msgEphemeris_dn <- getFloat64le
_msgEphemeris_m0 <- getFloat64le
_msgEphemeris_ecc <- getFloat64le
_msgEphemeris_sqrta <- getFloat64le
_msgEphemeris_omega0 <- getFloat64le
_msgEphemeris_omegadot <- getFloat64le
_msgEphemeris_w <- getFloat64le
_msgEphemeris_inc <- getFloat64le
_msgEphemeris_inc_dot <- getFloat64le
_msgEphemeris_af0 <- getFloat64le
_msgEphemeris_af1 <- getFloat64le
_msgEphemeris_af2 <- getFloat64le
_msgEphemeris_toe_tow <- getFloat64le
_msgEphemeris_toe_wn <- getWord16le
_msgEphemeris_toc_tow <- getFloat64le
_msgEphemeris_toc_wn <- getWord16le
_msgEphemeris_valid <- getWord8
_msgEphemeris_healthy <- getWord8
_msgEphemeris_sid <- getWord32le
_msgEphemeris_iode <- getWord8
_msgEphemeris_iodc <- getWord16le
_msgEphemeris_reserved <- getWord32le
return MsgEphemeris {..}
put MsgEphemeris {..} = do
putFloat64le _msgEphemeris_tgd
putFloat64le _msgEphemeris_c_rs
putFloat64le _msgEphemeris_c_rc
putFloat64le _msgEphemeris_c_uc
putFloat64le _msgEphemeris_c_us
putFloat64le _msgEphemeris_c_ic
putFloat64le _msgEphemeris_c_is
putFloat64le _msgEphemeris_dn
putFloat64le _msgEphemeris_m0
putFloat64le _msgEphemeris_ecc
putFloat64le _msgEphemeris_sqrta
putFloat64le _msgEphemeris_omega0
putFloat64le _msgEphemeris_omegadot
putFloat64le _msgEphemeris_w
putFloat64le _msgEphemeris_inc
putFloat64le _msgEphemeris_inc_dot
putFloat64le _msgEphemeris_af0
putFloat64le _msgEphemeris_af1
putFloat64le _msgEphemeris_af2
putFloat64le _msgEphemeris_toe_tow
putWord16le _msgEphemeris_toe_wn
putFloat64le _msgEphemeris_toc_tow
putWord16le _msgEphemeris_toc_wn
putWord8 _msgEphemeris_valid
putWord8 _msgEphemeris_healthy
putWord32le _msgEphemeris_sid
putWord8 _msgEphemeris_iode
putWord16le _msgEphemeris_iodc
putWord32le _msgEphemeris_reserved
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemeris_" . stripPrefix "_msgEphemeris_"}
''MsgEphemeris)
$(makeLenses ''MsgEphemeris)
msgEphemerisDepA :: Word16
msgEphemerisDepA = 0x001A
data MsgEphemerisDepA = MsgEphemerisDepA
{ _msgEphemerisDepA_tgd :: Double
, _msgEphemerisDepA_c_rs :: Double
, _msgEphemerisDepA_c_rc :: Double
, _msgEphemerisDepA_c_uc :: Double
, _msgEphemerisDepA_c_us :: Double
, _msgEphemerisDepA_c_ic :: Double
, _msgEphemerisDepA_c_is :: Double
, _msgEphemerisDepA_dn :: Double
, _msgEphemerisDepA_m0 :: Double
, _msgEphemerisDepA_ecc :: Double
, _msgEphemerisDepA_sqrta :: Double
, _msgEphemerisDepA_omega0 :: Double
, _msgEphemerisDepA_omegadot :: Double
, _msgEphemerisDepA_w :: Double
, _msgEphemerisDepA_inc :: Double
, _msgEphemerisDepA_inc_dot :: Double
, _msgEphemerisDepA_af0 :: Double
, _msgEphemerisDepA_af1 :: Double
, _msgEphemerisDepA_af2 :: Double
, _msgEphemerisDepA_toe_tow :: Double
, _msgEphemerisDepA_toe_wn :: Word16
, _msgEphemerisDepA_toc_tow :: Double
, _msgEphemerisDepA_toc_wn :: Word16
, _msgEphemerisDepA_valid :: Word8
, _msgEphemerisDepA_healthy :: Word8
, _msgEphemerisDepA_prn :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgEphemerisDepA where
get = do
_msgEphemerisDepA_tgd <- getFloat64le
_msgEphemerisDepA_c_rs <- getFloat64le
_msgEphemerisDepA_c_rc <- getFloat64le
_msgEphemerisDepA_c_uc <- getFloat64le
_msgEphemerisDepA_c_us <- getFloat64le
_msgEphemerisDepA_c_ic <- getFloat64le
_msgEphemerisDepA_c_is <- getFloat64le
_msgEphemerisDepA_dn <- getFloat64le
_msgEphemerisDepA_m0 <- getFloat64le
_msgEphemerisDepA_ecc <- getFloat64le
_msgEphemerisDepA_sqrta <- getFloat64le
_msgEphemerisDepA_omega0 <- getFloat64le
_msgEphemerisDepA_omegadot <- getFloat64le
_msgEphemerisDepA_w <- getFloat64le
_msgEphemerisDepA_inc <- getFloat64le
_msgEphemerisDepA_inc_dot <- getFloat64le
_msgEphemerisDepA_af0 <- getFloat64le
_msgEphemerisDepA_af1 <- getFloat64le
_msgEphemerisDepA_af2 <- getFloat64le
_msgEphemerisDepA_toe_tow <- getFloat64le
_msgEphemerisDepA_toe_wn <- getWord16le
_msgEphemerisDepA_toc_tow <- getFloat64le
_msgEphemerisDepA_toc_wn <- getWord16le
_msgEphemerisDepA_valid <- getWord8
_msgEphemerisDepA_healthy <- getWord8
_msgEphemerisDepA_prn <- getWord8
return MsgEphemerisDepA {..}
put MsgEphemerisDepA {..} = do
putFloat64le _msgEphemerisDepA_tgd
putFloat64le _msgEphemerisDepA_c_rs
putFloat64le _msgEphemerisDepA_c_rc
putFloat64le _msgEphemerisDepA_c_uc
putFloat64le _msgEphemerisDepA_c_us
putFloat64le _msgEphemerisDepA_c_ic
putFloat64le _msgEphemerisDepA_c_is
putFloat64le _msgEphemerisDepA_dn
putFloat64le _msgEphemerisDepA_m0
putFloat64le _msgEphemerisDepA_ecc
putFloat64le _msgEphemerisDepA_sqrta
putFloat64le _msgEphemerisDepA_omega0
putFloat64le _msgEphemerisDepA_omegadot
putFloat64le _msgEphemerisDepA_w
putFloat64le _msgEphemerisDepA_inc
putFloat64le _msgEphemerisDepA_inc_dot
putFloat64le _msgEphemerisDepA_af0
putFloat64le _msgEphemerisDepA_af1
putFloat64le _msgEphemerisDepA_af2
putFloat64le _msgEphemerisDepA_toe_tow
putWord16le _msgEphemerisDepA_toe_wn
putFloat64le _msgEphemerisDepA_toc_tow
putWord16le _msgEphemerisDepA_toc_wn
putWord8 _msgEphemerisDepA_valid
putWord8 _msgEphemerisDepA_healthy
putWord8 _msgEphemerisDepA_prn
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisDepA_" . stripPrefix "_msgEphemerisDepA_"}
''MsgEphemerisDepA)
$(makeLenses ''MsgEphemerisDepA)
msgEphemerisDepB :: Word16
msgEphemerisDepB = 0x0046
data MsgEphemerisDepB = MsgEphemerisDepB
{ _msgEphemerisDepB_tgd :: Double
, _msgEphemerisDepB_c_rs :: Double
, _msgEphemerisDepB_c_rc :: Double
, _msgEphemerisDepB_c_uc :: Double
, _msgEphemerisDepB_c_us :: Double
, _msgEphemerisDepB_c_ic :: Double
, _msgEphemerisDepB_c_is :: Double
, _msgEphemerisDepB_dn :: Double
, _msgEphemerisDepB_m0 :: Double
, _msgEphemerisDepB_ecc :: Double
, _msgEphemerisDepB_sqrta :: Double
, _msgEphemerisDepB_omega0 :: Double
, _msgEphemerisDepB_omegadot :: Double
, _msgEphemerisDepB_w :: Double
, _msgEphemerisDepB_inc :: Double
, _msgEphemerisDepB_inc_dot :: Double
, _msgEphemerisDepB_af0 :: Double
, _msgEphemerisDepB_af1 :: Double
, _msgEphemerisDepB_af2 :: Double
, _msgEphemerisDepB_toe_tow :: Double
, _msgEphemerisDepB_toe_wn :: Word16
, _msgEphemerisDepB_toc_tow :: Double
, _msgEphemerisDepB_toc_wn :: Word16
, _msgEphemerisDepB_valid :: Word8
, _msgEphemerisDepB_healthy :: Word8
, _msgEphemerisDepB_prn :: Word8
, _msgEphemerisDepB_iode :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgEphemerisDepB where
get = do
_msgEphemerisDepB_tgd <- getFloat64le
_msgEphemerisDepB_c_rs <- getFloat64le
_msgEphemerisDepB_c_rc <- getFloat64le
_msgEphemerisDepB_c_uc <- getFloat64le
_msgEphemerisDepB_c_us <- getFloat64le
_msgEphemerisDepB_c_ic <- getFloat64le
_msgEphemerisDepB_c_is <- getFloat64le
_msgEphemerisDepB_dn <- getFloat64le
_msgEphemerisDepB_m0 <- getFloat64le
_msgEphemerisDepB_ecc <- getFloat64le
_msgEphemerisDepB_sqrta <- getFloat64le
_msgEphemerisDepB_omega0 <- getFloat64le
_msgEphemerisDepB_omegadot <- getFloat64le
_msgEphemerisDepB_w <- getFloat64le
_msgEphemerisDepB_inc <- getFloat64le
_msgEphemerisDepB_inc_dot <- getFloat64le
_msgEphemerisDepB_af0 <- getFloat64le
_msgEphemerisDepB_af1 <- getFloat64le
_msgEphemerisDepB_af2 <- getFloat64le
_msgEphemerisDepB_toe_tow <- getFloat64le
_msgEphemerisDepB_toe_wn <- getWord16le
_msgEphemerisDepB_toc_tow <- getFloat64le
_msgEphemerisDepB_toc_wn <- getWord16le
_msgEphemerisDepB_valid <- getWord8
_msgEphemerisDepB_healthy <- getWord8
_msgEphemerisDepB_prn <- getWord8
_msgEphemerisDepB_iode <- getWord8
return MsgEphemerisDepB {..}
put MsgEphemerisDepB {..} = do
putFloat64le _msgEphemerisDepB_tgd
putFloat64le _msgEphemerisDepB_c_rs
putFloat64le _msgEphemerisDepB_c_rc
putFloat64le _msgEphemerisDepB_c_uc
putFloat64le _msgEphemerisDepB_c_us
putFloat64le _msgEphemerisDepB_c_ic
putFloat64le _msgEphemerisDepB_c_is
putFloat64le _msgEphemerisDepB_dn
putFloat64le _msgEphemerisDepB_m0
putFloat64le _msgEphemerisDepB_ecc
putFloat64le _msgEphemerisDepB_sqrta
putFloat64le _msgEphemerisDepB_omega0
putFloat64le _msgEphemerisDepB_omegadot
putFloat64le _msgEphemerisDepB_w
putFloat64le _msgEphemerisDepB_inc
putFloat64le _msgEphemerisDepB_inc_dot
putFloat64le _msgEphemerisDepB_af0
putFloat64le _msgEphemerisDepB_af1
putFloat64le _msgEphemerisDepB_af2
putFloat64le _msgEphemerisDepB_toe_tow
putWord16le _msgEphemerisDepB_toe_wn
putFloat64le _msgEphemerisDepB_toc_tow
putWord16le _msgEphemerisDepB_toc_wn
putWord8 _msgEphemerisDepB_valid
putWord8 _msgEphemerisDepB_healthy
putWord8 _msgEphemerisDepB_prn
putWord8 _msgEphemerisDepB_iode
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgEphemerisDepB_" . stripPrefix "_msgEphemerisDepB_"}
''MsgEphemerisDepB)
$(makeLenses ''MsgEphemerisDepB)
data PackedObsContentDepA = PackedObsContentDepA
{ _packedObsContentDepA_P :: Word32
, _packedObsContentDepA_L :: CarrierPhase
, _packedObsContentDepA_cn0 :: Word8
, _packedObsContentDepA_lock :: Word16
, _packedObsContentDepA_prn :: Word8
} deriving ( Show, Read, Eq )
instance Binary PackedObsContentDepA where
get = do
_packedObsContentDepA_P <- getWord32le
_packedObsContentDepA_L <- get
_packedObsContentDepA_cn0 <- getWord8
_packedObsContentDepA_lock <- getWord16le
_packedObsContentDepA_prn <- getWord8
return PackedObsContentDepA {..}
put PackedObsContentDepA {..} = do
putWord32le _packedObsContentDepA_P
put _packedObsContentDepA_L
putWord8 _packedObsContentDepA_cn0
putWord16le _packedObsContentDepA_lock
putWord8 _packedObsContentDepA_prn
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_packedObsContentDepA_" . stripPrefix "_packedObsContentDepA_"}
''PackedObsContentDepA)
$(makeLenses ''PackedObsContentDepA)
msgObsDepA :: Word16
msgObsDepA = 0x0045
data MsgObsDepA = MsgObsDepA
{ _msgObsDepA_header :: ObservationHeader
, _msgObsDepA_obs :: [PackedObsContentDepA]
} deriving ( Show, Read, Eq )
instance Binary MsgObsDepA where
get = do
_msgObsDepA_header <- get
_msgObsDepA_obs <- whileM (liftM not isEmpty) get
return MsgObsDepA {..}
put MsgObsDepA {..} = do
put _msgObsDepA_header
mapM_ put _msgObsDepA_obs
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgObsDepA_" . stripPrefix "_msgObsDepA_"}
''MsgObsDepA)
$(makeLenses ''MsgObsDepA)