module SwiftNav.SBP.Tracking
( module SwiftNav.SBP.Tracking
) where
import BasicPrelude
import Control.Lens
import Control.Monad.Loops
import Data.Binary
import Data.Binary.Get
import Data.Binary.IEEE754
import Data.Binary.Put
import Data.ByteString.Lazy hiding (ByteString)
import Data.Int
import Data.Word
import SwiftNav.SBP.Gnss
import SwiftNav.SBP.TH
import SwiftNav.SBP.Types
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
pure 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
$(makeSBP 'msgTrackingStateDetailed ''MsgTrackingStateDetailed)
$(makeJSON "_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
pure TrackingChannelState {..}
put TrackingChannelState {..} = do
put _trackingChannelState_sid
putWord8 _trackingChannelState_fcn
putWord8 _trackingChannelState_cn0
$(makeJSON "_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
pure MsgTrackingState {..}
put MsgTrackingState {..} = do
mapM_ put _msgTrackingState_states
$(makeSBP 'msgTrackingState ''MsgTrackingState)
$(makeJSON "_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
pure TrackingChannelCorrelation {..}
put TrackingChannelCorrelation {..} = do
putWord32le $ fromIntegral _trackingChannelCorrelation_I
putWord32le $ fromIntegral _trackingChannelCorrelation_Q
$(makeJSON "_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
pure MsgTrackingIq {..}
put MsgTrackingIq {..} = do
putWord8 _msgTrackingIq_channel
put _msgTrackingIq_sid
mapM_ put _msgTrackingIq_corrs
$(makeSBP 'msgTrackingIq ''MsgTrackingIq)
$(makeJSON "_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
pure TrackingChannelStateDepA {..}
put TrackingChannelStateDepA {..} = do
putWord8 _trackingChannelStateDepA_state
putWord8 _trackingChannelStateDepA_prn
putFloat32le _trackingChannelStateDepA_cn0
$(makeJSON "_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
pure MsgTrackingStateDepA {..}
put MsgTrackingStateDepA {..} = do
mapM_ put _msgTrackingStateDepA_states
$(makeSBP 'msgTrackingStateDepA ''MsgTrackingStateDepA)
$(makeJSON "_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
pure TrackingChannelStateDepB {..}
put TrackingChannelStateDepB {..} = do
putWord8 _trackingChannelStateDepB_state
put _trackingChannelStateDepB_sid
putFloat32le _trackingChannelStateDepB_cn0
$(makeJSON "_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
pure MsgTrackingStateDepB {..}
put MsgTrackingStateDepB {..} = do
mapM_ put _msgTrackingStateDepB_states
$(makeSBP 'msgTrackingStateDepB ''MsgTrackingStateDepB)
$(makeJSON "_msgTrackingStateDepB_" ''MsgTrackingStateDepB)
$(makeLenses ''MsgTrackingStateDepB)