module SwiftNav.SBP.Observation where
import BasicPrelude
import Control.Monad
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)