module SwiftNav.SBP.Tracking where
import BasicPrelude as P
import Control.Lens
import Control.Monad.Loops
import Data.Aeson.TH (defaultOptions, deriveJSON, 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
import SwiftNav.SBP.TH
import SwiftNav.SBP.Types
import SwiftNav.SBP.Gnss
msgTrackingStateDetailed :: Word16
msgTrackingStateDetailed = 0x0011
data MsgTrackingStateDetailed = MsgTrackingStateDetailed
{ _msgTrackingStateDetailed_recv_time :: !Word64
, _msgTrackingStateDetailed_tot :: !GpsTime
, _msgTrackingStateDetailed_P :: !Word32
, _msgTrackingStateDetailed_P_std :: !Word16
, _msgTrackingStateDetailed_L :: !CarrierPhase
, _msgTrackingStateDetailed_cn0 :: !Word8
, _msgTrackingStateDetailed_lock :: !Word16
, _msgTrackingStateDetailed_sid :: !GnssSignal
, _msgTrackingStateDetailed_doppler :: !Int32
, _msgTrackingStateDetailed_doppler_std :: !Word16
, _msgTrackingStateDetailed_uptime :: !Word32
, _msgTrackingStateDetailed_clock_offset :: !Int16
, _msgTrackingStateDetailed_clock_drift :: !Int16
, _msgTrackingStateDetailed_corr_spacing :: !Word16
, _msgTrackingStateDetailed_acceleration :: !Int8
, _msgTrackingStateDetailed_sync_flags :: !Word8
, _msgTrackingStateDetailed_tow_flags :: !Word8
, _msgTrackingStateDetailed_track_flags :: !Word8
, _msgTrackingStateDetailed_nav_flags :: !Word8
, _msgTrackingStateDetailed_pset_flags :: !Word8
, _msgTrackingStateDetailed_misc_flags :: !Word8
} deriving ( Show, Read, Eq )
instance Binary MsgTrackingStateDetailed where
get = do
_msgTrackingStateDetailed_recv_time <- getWord64le
_msgTrackingStateDetailed_tot <- get
_msgTrackingStateDetailed_P <- getWord32le
_msgTrackingStateDetailed_P_std <- getWord16le
_msgTrackingStateDetailed_L <- get
_msgTrackingStateDetailed_cn0 <- getWord8
_msgTrackingStateDetailed_lock <- getWord16le
_msgTrackingStateDetailed_sid <- get
_msgTrackingStateDetailed_doppler <- fromIntegral <$> getWord32le
_msgTrackingStateDetailed_doppler_std <- getWord16le
_msgTrackingStateDetailed_uptime <- getWord32le
_msgTrackingStateDetailed_clock_offset <- fromIntegral <$> getWord16le
_msgTrackingStateDetailed_clock_drift <- fromIntegral <$> getWord16le
_msgTrackingStateDetailed_corr_spacing <- getWord16le
_msgTrackingStateDetailed_acceleration <- fromIntegral <$> getWord8
_msgTrackingStateDetailed_sync_flags <- getWord8
_msgTrackingStateDetailed_tow_flags <- getWord8
_msgTrackingStateDetailed_track_flags <- getWord8
_msgTrackingStateDetailed_nav_flags <- getWord8
_msgTrackingStateDetailed_pset_flags <- getWord8
_msgTrackingStateDetailed_misc_flags <- getWord8
return MsgTrackingStateDetailed {..}
put MsgTrackingStateDetailed {..} = do
putWord64le _msgTrackingStateDetailed_recv_time
put _msgTrackingStateDetailed_tot
putWord32le _msgTrackingStateDetailed_P
putWord16le _msgTrackingStateDetailed_P_std
put _msgTrackingStateDetailed_L
putWord8 _msgTrackingStateDetailed_cn0
putWord16le _msgTrackingStateDetailed_lock
put _msgTrackingStateDetailed_sid
putWord32le $ fromIntegral _msgTrackingStateDetailed_doppler
putWord16le _msgTrackingStateDetailed_doppler_std
putWord32le _msgTrackingStateDetailed_uptime
putWord16le $ fromIntegral _msgTrackingStateDetailed_clock_offset
putWord16le $ fromIntegral _msgTrackingStateDetailed_clock_drift
putWord16le _msgTrackingStateDetailed_corr_spacing
putWord8 $ fromIntegral _msgTrackingStateDetailed_acceleration
putWord8 _msgTrackingStateDetailed_sync_flags
putWord8 _msgTrackingStateDetailed_tow_flags
putWord8 _msgTrackingStateDetailed_track_flags
putWord8 _msgTrackingStateDetailed_nav_flags
putWord8 _msgTrackingStateDetailed_pset_flags
putWord8 _msgTrackingStateDetailed_misc_flags
$(deriveSBP 'msgTrackingStateDetailed ''MsgTrackingStateDetailed)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingStateDetailed_" . P.stripPrefix "_msgTrackingStateDetailed_"}
''MsgTrackingStateDetailed)
$(makeLenses ''MsgTrackingStateDetailed)
data TrackingChannelState = TrackingChannelState
{ _trackingChannelState_sid :: !GnssSignal16
, _trackingChannelState_fcn :: !Word8
, _trackingChannelState_cn0 :: !Word8
} deriving ( Show, Read, Eq )
instance Binary TrackingChannelState where
get = do
_trackingChannelState_sid <- get
_trackingChannelState_fcn <- getWord8
_trackingChannelState_cn0 <- getWord8
return TrackingChannelState {..}
put TrackingChannelState {..} = do
put _trackingChannelState_sid
putWord8 _trackingChannelState_fcn
putWord8 _trackingChannelState_cn0
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_trackingChannelState_" . P.stripPrefix "_trackingChannelState_"}
''TrackingChannelState)
$(makeLenses ''TrackingChannelState)
msgTrackingState :: Word16
msgTrackingState = 0x0041
data MsgTrackingState = MsgTrackingState
{ _msgTrackingState_states :: ![TrackingChannelState]
} deriving ( Show, Read, Eq )
instance Binary MsgTrackingState where
get = do
_msgTrackingState_states <- whileM (not <$> isEmpty) get
return MsgTrackingState {..}
put MsgTrackingState {..} = do
mapM_ put _msgTrackingState_states
$(deriveSBP 'msgTrackingState ''MsgTrackingState)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingState_" . P.stripPrefix "_msgTrackingState_"}
''MsgTrackingState)
$(makeLenses ''MsgTrackingState)
data TrackingChannelCorrelation = TrackingChannelCorrelation
{ _trackingChannelCorrelation_I :: !Int32
, _trackingChannelCorrelation_Q :: !Int32
} deriving ( Show, Read, Eq )
instance Binary TrackingChannelCorrelation where
get = do
_trackingChannelCorrelation_I <- fromIntegral <$> getWord32le
_trackingChannelCorrelation_Q <- fromIntegral <$> getWord32le
return TrackingChannelCorrelation {..}
put TrackingChannelCorrelation {..} = do
putWord32le $ fromIntegral _trackingChannelCorrelation_I
putWord32le $ fromIntegral _trackingChannelCorrelation_Q
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_trackingChannelCorrelation_" . P.stripPrefix "_trackingChannelCorrelation_"}
''TrackingChannelCorrelation)
$(makeLenses ''TrackingChannelCorrelation)
msgTrackingIq :: Word16
msgTrackingIq = 0x001C
data MsgTrackingIq = MsgTrackingIq
{ _msgTrackingIq_channel :: !Word8
, _msgTrackingIq_sid :: !GnssSignal
, _msgTrackingIq_corrs :: ![TrackingChannelCorrelation]
} deriving ( Show, Read, Eq )
instance Binary MsgTrackingIq where
get = do
_msgTrackingIq_channel <- getWord8
_msgTrackingIq_sid <- get
_msgTrackingIq_corrs <- replicateM 3 get
return MsgTrackingIq {..}
put MsgTrackingIq {..} = do
putWord8 _msgTrackingIq_channel
put _msgTrackingIq_sid
mapM_ put _msgTrackingIq_corrs
$(deriveSBP 'msgTrackingIq ''MsgTrackingIq)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingIq_" . P.stripPrefix "_msgTrackingIq_"}
''MsgTrackingIq)
$(makeLenses ''MsgTrackingIq)
data TrackingChannelStateDepA = TrackingChannelStateDepA
{ _trackingChannelStateDepA_state :: !Word8
, _trackingChannelStateDepA_prn :: !Word8
, _trackingChannelStateDepA_cn0 :: !Float
} deriving ( Show, Read, Eq )
instance Binary TrackingChannelStateDepA where
get = do
_trackingChannelStateDepA_state <- getWord8
_trackingChannelStateDepA_prn <- getWord8
_trackingChannelStateDepA_cn0 <- getFloat32le
return TrackingChannelStateDepA {..}
put TrackingChannelStateDepA {..} = do
putWord8 _trackingChannelStateDepA_state
putWord8 _trackingChannelStateDepA_prn
putFloat32le _trackingChannelStateDepA_cn0
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_trackingChannelStateDepA_" . P.stripPrefix "_trackingChannelStateDepA_"}
''TrackingChannelStateDepA)
$(makeLenses ''TrackingChannelStateDepA)
msgTrackingStateDepA :: Word16
msgTrackingStateDepA = 0x0016
data MsgTrackingStateDepA = MsgTrackingStateDepA
{ _msgTrackingStateDepA_states :: ![TrackingChannelStateDepA]
} deriving ( Show, Read, Eq )
instance Binary MsgTrackingStateDepA where
get = do
_msgTrackingStateDepA_states <- whileM (not <$> isEmpty) get
return MsgTrackingStateDepA {..}
put MsgTrackingStateDepA {..} = do
mapM_ put _msgTrackingStateDepA_states
$(deriveSBP 'msgTrackingStateDepA ''MsgTrackingStateDepA)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingStateDepA_" . P.stripPrefix "_msgTrackingStateDepA_"}
''MsgTrackingStateDepA)
$(makeLenses ''MsgTrackingStateDepA)
data TrackingChannelStateDepB = TrackingChannelStateDepB
{ _trackingChannelStateDepB_state :: !Word8
, _trackingChannelStateDepB_sid :: !GnssSignal
, _trackingChannelStateDepB_cn0 :: !Float
} deriving ( Show, Read, Eq )
instance Binary TrackingChannelStateDepB where
get = do
_trackingChannelStateDepB_state <- getWord8
_trackingChannelStateDepB_sid <- get
_trackingChannelStateDepB_cn0 <- getFloat32le
return TrackingChannelStateDepB {..}
put TrackingChannelStateDepB {..} = do
putWord8 _trackingChannelStateDepB_state
put _trackingChannelStateDepB_sid
putFloat32le _trackingChannelStateDepB_cn0
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_trackingChannelStateDepB_" . P.stripPrefix "_trackingChannelStateDepB_"}
''TrackingChannelStateDepB)
$(makeLenses ''TrackingChannelStateDepB)
msgTrackingStateDepB :: Word16
msgTrackingStateDepB = 0x0013
data MsgTrackingStateDepB = MsgTrackingStateDepB
{ _msgTrackingStateDepB_states :: ![TrackingChannelStateDepB]
} deriving ( Show, Read, Eq )
instance Binary MsgTrackingStateDepB where
get = do
_msgTrackingStateDepB_states <- whileM (not <$> isEmpty) get
return MsgTrackingStateDepB {..}
put MsgTrackingStateDepB {..} = do
mapM_ put _msgTrackingStateDepB_states
$(deriveSBP 'msgTrackingStateDepB ''MsgTrackingStateDepB)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingStateDepB_" . P.stripPrefix "_msgTrackingStateDepB_"}
''MsgTrackingStateDepB)
$(makeLenses ''MsgTrackingStateDepB)