module SwiftNav.SBP.Tracking 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 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)
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)
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)
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)
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)
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)