module SwiftNav.SBP.Navigation 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
msgGpsTime :: Word16
msgGpsTime = 0x0100
data MsgGpsTime = MsgGpsTime
{ _msgGpsTime_wn :: Word16
, _msgGpsTime_tow :: Word32
, _msgGpsTime_ns :: Int32
, _msgGpsTime_flags :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgGpsTime where
get = do
_msgGpsTime_wn <- getWord16le
_msgGpsTime_tow <- getWord32le
_msgGpsTime_ns <- liftM fromIntegral getWord32le
_msgGpsTime_flags <- getWord8
return MsgGpsTime {..}
put MsgGpsTime {..} = do
putWord16le _msgGpsTime_wn
putWord32le _msgGpsTime_tow
putWord32le $ fromIntegral _msgGpsTime_ns
putWord8 _msgGpsTime_flags
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgGpsTime_" . stripPrefix "_msgGpsTime_"}
''MsgGpsTime)
$(makeLenses ''MsgGpsTime)
msgDops :: Word16
msgDops = 0x0206
data MsgDops = MsgDops
{ _msgDops_tow :: Word32
, _msgDops_gdop :: Word16
, _msgDops_pdop :: Word16
, _msgDops_tdop :: Word16
, _msgDops_hdop :: Word16
, _msgDops_vdop :: Word16
} deriving ( Show, Read, Eq )
instance Binary MsgDops where
get = do
_msgDops_tow <- getWord32le
_msgDops_gdop <- getWord16le
_msgDops_pdop <- getWord16le
_msgDops_tdop <- getWord16le
_msgDops_hdop <- getWord16le
_msgDops_vdop <- getWord16le
return MsgDops {..}
put MsgDops {..} = do
putWord32le _msgDops_tow
putWord16le _msgDops_gdop
putWord16le _msgDops_pdop
putWord16le _msgDops_tdop
putWord16le _msgDops_hdop
putWord16le _msgDops_vdop
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgDops_" . stripPrefix "_msgDops_"}
''MsgDops)
$(makeLenses ''MsgDops)
msgPosEcef :: Word16
msgPosEcef = 0x0200
data MsgPosEcef = MsgPosEcef
{ _msgPosEcef_tow :: Word32
, _msgPosEcef_x :: Double
, _msgPosEcef_y :: Double
, _msgPosEcef_z :: Double
, _msgPosEcef_accuracy :: Word16
, _msgPosEcef_n_sats :: Word8
, _msgPosEcef_flags :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgPosEcef where
get = do
_msgPosEcef_tow <- getWord32le
_msgPosEcef_x <- getFloat64le
_msgPosEcef_y <- getFloat64le
_msgPosEcef_z <- getFloat64le
_msgPosEcef_accuracy <- getWord16le
_msgPosEcef_n_sats <- getWord8
_msgPosEcef_flags <- getWord8
return MsgPosEcef {..}
put MsgPosEcef {..} = do
putWord32le _msgPosEcef_tow
putFloat64le _msgPosEcef_x
putFloat64le _msgPosEcef_y
putFloat64le _msgPosEcef_z
putWord16le _msgPosEcef_accuracy
putWord8 _msgPosEcef_n_sats
putWord8 _msgPosEcef_flags
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgPosEcef_" . stripPrefix "_msgPosEcef_"}
''MsgPosEcef)
$(makeLenses ''MsgPosEcef)
msgPosLlh :: Word16
msgPosLlh = 0x0201
data MsgPosLlh = MsgPosLlh
{ _msgPosLlh_tow :: Word32
, _msgPosLlh_lat :: Double
, _msgPosLlh_lon :: Double
, _msgPosLlh_height :: Double
, _msgPosLlh_h_accuracy :: Word16
, _msgPosLlh_v_accuracy :: Word16
, _msgPosLlh_n_sats :: Word8
, _msgPosLlh_flags :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgPosLlh where
get = do
_msgPosLlh_tow <- getWord32le
_msgPosLlh_lat <- getFloat64le
_msgPosLlh_lon <- getFloat64le
_msgPosLlh_height <- getFloat64le
_msgPosLlh_h_accuracy <- getWord16le
_msgPosLlh_v_accuracy <- getWord16le
_msgPosLlh_n_sats <- getWord8
_msgPosLlh_flags <- getWord8
return MsgPosLlh {..}
put MsgPosLlh {..} = do
putWord32le _msgPosLlh_tow
putFloat64le _msgPosLlh_lat
putFloat64le _msgPosLlh_lon
putFloat64le _msgPosLlh_height
putWord16le _msgPosLlh_h_accuracy
putWord16le _msgPosLlh_v_accuracy
putWord8 _msgPosLlh_n_sats
putWord8 _msgPosLlh_flags
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgPosLlh_" . stripPrefix "_msgPosLlh_"}
''MsgPosLlh)
$(makeLenses ''MsgPosLlh)
msgBaselineEcef :: Word16
msgBaselineEcef = 0x0202
data MsgBaselineEcef = MsgBaselineEcef
{ _msgBaselineEcef_tow :: Word32
, _msgBaselineEcef_x :: Int32
, _msgBaselineEcef_y :: Int32
, _msgBaselineEcef_z :: Int32
, _msgBaselineEcef_accuracy :: Word16
, _msgBaselineEcef_n_sats :: Word8
, _msgBaselineEcef_flags :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgBaselineEcef where
get = do
_msgBaselineEcef_tow <- getWord32le
_msgBaselineEcef_x <- liftM fromIntegral getWord32le
_msgBaselineEcef_y <- liftM fromIntegral getWord32le
_msgBaselineEcef_z <- liftM fromIntegral getWord32le
_msgBaselineEcef_accuracy <- getWord16le
_msgBaselineEcef_n_sats <- getWord8
_msgBaselineEcef_flags <- getWord8
return MsgBaselineEcef {..}
put MsgBaselineEcef {..} = do
putWord32le _msgBaselineEcef_tow
putWord32le $ fromIntegral _msgBaselineEcef_x
putWord32le $ fromIntegral _msgBaselineEcef_y
putWord32le $ fromIntegral _msgBaselineEcef_z
putWord16le _msgBaselineEcef_accuracy
putWord8 _msgBaselineEcef_n_sats
putWord8 _msgBaselineEcef_flags
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgBaselineEcef_" . stripPrefix "_msgBaselineEcef_"}
''MsgBaselineEcef)
$(makeLenses ''MsgBaselineEcef)
msgBaselineNed :: Word16
msgBaselineNed = 0x0203
data MsgBaselineNed = MsgBaselineNed
{ _msgBaselineNed_tow :: Word32
, _msgBaselineNed_n :: Int32
, _msgBaselineNed_e :: Int32
, _msgBaselineNed_d :: Int32
, _msgBaselineNed_h_accuracy :: Word16
, _msgBaselineNed_v_accuracy :: Word16
, _msgBaselineNed_n_sats :: Word8
, _msgBaselineNed_flags :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgBaselineNed where
get = do
_msgBaselineNed_tow <- getWord32le
_msgBaselineNed_n <- liftM fromIntegral getWord32le
_msgBaselineNed_e <- liftM fromIntegral getWord32le
_msgBaselineNed_d <- liftM fromIntegral getWord32le
_msgBaselineNed_h_accuracy <- getWord16le
_msgBaselineNed_v_accuracy <- getWord16le
_msgBaselineNed_n_sats <- getWord8
_msgBaselineNed_flags <- getWord8
return MsgBaselineNed {..}
put MsgBaselineNed {..} = do
putWord32le _msgBaselineNed_tow
putWord32le $ fromIntegral _msgBaselineNed_n
putWord32le $ fromIntegral _msgBaselineNed_e
putWord32le $ fromIntegral _msgBaselineNed_d
putWord16le _msgBaselineNed_h_accuracy
putWord16le _msgBaselineNed_v_accuracy
putWord8 _msgBaselineNed_n_sats
putWord8 _msgBaselineNed_flags
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgBaselineNed_" . stripPrefix "_msgBaselineNed_"}
''MsgBaselineNed)
$(makeLenses ''MsgBaselineNed)
msgVelEcef :: Word16
msgVelEcef = 0x0204
data MsgVelEcef = MsgVelEcef
{ _msgVelEcef_tow :: Word32
, _msgVelEcef_x :: Int32
, _msgVelEcef_y :: Int32
, _msgVelEcef_z :: Int32
, _msgVelEcef_accuracy :: Word16
, _msgVelEcef_n_sats :: Word8
, _msgVelEcef_flags :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgVelEcef where
get = do
_msgVelEcef_tow <- getWord32le
_msgVelEcef_x <- liftM fromIntegral getWord32le
_msgVelEcef_y <- liftM fromIntegral getWord32le
_msgVelEcef_z <- liftM fromIntegral getWord32le
_msgVelEcef_accuracy <- getWord16le
_msgVelEcef_n_sats <- getWord8
_msgVelEcef_flags <- getWord8
return MsgVelEcef {..}
put MsgVelEcef {..} = do
putWord32le _msgVelEcef_tow
putWord32le $ fromIntegral _msgVelEcef_x
putWord32le $ fromIntegral _msgVelEcef_y
putWord32le $ fromIntegral _msgVelEcef_z
putWord16le _msgVelEcef_accuracy
putWord8 _msgVelEcef_n_sats
putWord8 _msgVelEcef_flags
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgVelEcef_" . stripPrefix "_msgVelEcef_"}
''MsgVelEcef)
$(makeLenses ''MsgVelEcef)
msgVelNed :: Word16
msgVelNed = 0x0205
data MsgVelNed = MsgVelNed
{ _msgVelNed_tow :: Word32
, _msgVelNed_n :: Int32
, _msgVelNed_e :: Int32
, _msgVelNed_d :: Int32
, _msgVelNed_h_accuracy :: Word16
, _msgVelNed_v_accuracy :: Word16
, _msgVelNed_n_sats :: Word8
, _msgVelNed_flags :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgVelNed where
get = do
_msgVelNed_tow <- getWord32le
_msgVelNed_n <- liftM fromIntegral getWord32le
_msgVelNed_e <- liftM fromIntegral getWord32le
_msgVelNed_d <- liftM fromIntegral getWord32le
_msgVelNed_h_accuracy <- getWord16le
_msgVelNed_v_accuracy <- getWord16le
_msgVelNed_n_sats <- getWord8
_msgVelNed_flags <- getWord8
return MsgVelNed {..}
put MsgVelNed {..} = do
putWord32le _msgVelNed_tow
putWord32le $ fromIntegral _msgVelNed_n
putWord32le $ fromIntegral _msgVelNed_e
putWord32le $ fromIntegral _msgVelNed_d
putWord16le _msgVelNed_h_accuracy
putWord16le _msgVelNed_v_accuracy
putWord8 _msgVelNed_n_sats
putWord8 _msgVelNed_flags
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgVelNed_" . stripPrefix "_msgVelNed_"}
''MsgVelNed)
$(makeLenses ''MsgVelNed)