module SwiftNav.SBP.Tracking 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 TrackingChannelState = TrackingChannelState
{ _trackingChannelState_state :: Word8
, _trackingChannelState_sid :: Word32
, _trackingChannelState_cn0 :: Float
} deriving ( Show, Read, Eq )
instance Binary TrackingChannelState where
get = do
_trackingChannelState_state <- getWord8
_trackingChannelState_sid <- getWord32le
_trackingChannelState_cn0 <- getFloat32le
return TrackingChannelState {..}
put TrackingChannelState {..} = do
putWord8 _trackingChannelState_state
putWord32le _trackingChannelState_sid
putFloat32le _trackingChannelState_cn0
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_trackingChannelState_" . stripPrefix "_trackingChannelState_"}
''TrackingChannelState)
$(makeLenses ''TrackingChannelState)
msgTrackingState :: Word16
msgTrackingState = 0x0013
data MsgTrackingState = MsgTrackingState
{ _msgTrackingState_states :: [TrackingChannelState]
} deriving ( Show, Read, Eq )
instance Binary MsgTrackingState where
get = do
_msgTrackingState_states <- whileM (liftM not isEmpty) get
return MsgTrackingState {..}
put MsgTrackingState {..} = do
mapM_ put _msgTrackingState_states
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingState_" . 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 <- liftM fromIntegral getWord32le
_trackingChannelCorrelation_Q <- liftM fromIntegral getWord32le
return TrackingChannelCorrelation {..}
put TrackingChannelCorrelation {..} = do
putWord32le $ fromIntegral _trackingChannelCorrelation_I
putWord32le $ fromIntegral _trackingChannelCorrelation_Q
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_trackingChannelCorrelation_" . stripPrefix "_trackingChannelCorrelation_"}
''TrackingChannelCorrelation)
$(makeLenses ''TrackingChannelCorrelation)
msgTrackingIq :: Word16
msgTrackingIq = 0x001C
data MsgTrackingIq = MsgTrackingIq
{ _msgTrackingIq_channel :: Word8
, _msgTrackingIq_sid :: Word32
, _msgTrackingIq_corrs :: [TrackingChannelCorrelation]
} deriving ( Show, Read, Eq )
instance Binary MsgTrackingIq where
get = do
_msgTrackingIq_channel <- getWord8
_msgTrackingIq_sid <- getWord32le
_msgTrackingIq_corrs <- replicateM 3 get
return MsgTrackingIq {..}
put MsgTrackingIq {..} = do
putWord8 _msgTrackingIq_channel
putWord32le _msgTrackingIq_sid
mapM_ put _msgTrackingIq_corrs
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingIq_" . 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_" . 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 (liftM not isEmpty) get
return MsgTrackingStateDepA {..}
put MsgTrackingStateDepA {..} = do
mapM_ put _msgTrackingStateDepA_states
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgTrackingStateDepA_" . stripPrefix "_msgTrackingStateDepA_"}
''MsgTrackingStateDepA)
$(makeLenses ''MsgTrackingStateDepA)