module SwiftNav.SBP.Piksi where
import BasicPrelude
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.GnssSignal
msgAlmanac :: Word16
msgAlmanac = 0x0069
data MsgAlmanac = MsgAlmanac
deriving ( Show, Read, Eq )
instance Binary MsgAlmanac where
get =
return MsgAlmanac
put MsgAlmanac =
return ()
$(deriveSBP 'msgAlmanac ''MsgAlmanac)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgAlmanac_" . stripPrefix "_msgAlmanac_"}
''MsgAlmanac)
$(makeLenses ''MsgAlmanac)
msgSetTime :: Word16
msgSetTime = 0x0068
data MsgSetTime = MsgSetTime
deriving ( Show, Read, Eq )
instance Binary MsgSetTime where
get =
return MsgSetTime
put MsgSetTime =
return ()
$(deriveSBP 'msgSetTime ''MsgSetTime)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgSetTime_" . stripPrefix "_msgSetTime_"}
''MsgSetTime)
$(makeLenses ''MsgSetTime)
msgReset :: Word16
msgReset = 0x00B2
data MsgReset = MsgReset
deriving ( Show, Read, Eq )
instance Binary MsgReset where
get =
return MsgReset
put MsgReset =
return ()
$(deriveSBP 'msgReset ''MsgReset)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgReset_" . stripPrefix "_msgReset_"}
''MsgReset)
$(makeLenses ''MsgReset)
msgCwResults :: Word16
msgCwResults = 0x00C0
data MsgCwResults = MsgCwResults
deriving ( Show, Read, Eq )
instance Binary MsgCwResults where
get =
return MsgCwResults
put MsgCwResults =
return ()
$(deriveSBP 'msgCwResults ''MsgCwResults)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgCwResults_" . stripPrefix "_msgCwResults_"}
''MsgCwResults)
$(makeLenses ''MsgCwResults)
msgCwStart :: Word16
msgCwStart = 0x00C1
data MsgCwStart = MsgCwStart
deriving ( Show, Read, Eq )
instance Binary MsgCwStart where
get =
return MsgCwStart
put MsgCwStart =
return ()
$(deriveSBP 'msgCwStart ''MsgCwStart)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgCwStart_" . stripPrefix "_msgCwStart_"}
''MsgCwStart)
$(makeLenses ''MsgCwStart)
msgResetFilters :: Word16
msgResetFilters = 0x0022
data MsgResetFilters = MsgResetFilters
{ _msgResetFilters_filter :: Word8
} deriving ( Show, Read, Eq )
instance Binary MsgResetFilters where
get = do
_msgResetFilters_filter <- getWord8
return MsgResetFilters {..}
put MsgResetFilters {..} = do
putWord8 _msgResetFilters_filter
$(deriveSBP 'msgResetFilters ''MsgResetFilters)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgResetFilters_" . stripPrefix "_msgResetFilters_"}
''MsgResetFilters)
$(makeLenses ''MsgResetFilters)
msgInitBase :: Word16
msgInitBase = 0x0023
data MsgInitBase = MsgInitBase
deriving ( Show, Read, Eq )
instance Binary MsgInitBase where
get =
return MsgInitBase
put MsgInitBase =
return ()
$(deriveSBP 'msgInitBase ''MsgInitBase)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgInitBase_" . stripPrefix "_msgInitBase_"}
''MsgInitBase)
$(makeLenses ''MsgInitBase)
msgThreadState :: Word16
msgThreadState = 0x0017
data MsgThreadState = MsgThreadState
{ _msgThreadState_name :: ByteString
, _msgThreadState_cpu :: Word16
, _msgThreadState_stack_free :: Word32
} deriving ( Show, Read, Eq )
instance Binary MsgThreadState where
get = do
_msgThreadState_name <- getByteString 20
_msgThreadState_cpu <- getWord16le
_msgThreadState_stack_free <- getWord32le
return MsgThreadState {..}
put MsgThreadState {..} = do
putByteString _msgThreadState_name
putWord16le _msgThreadState_cpu
putWord32le _msgThreadState_stack_free
$(deriveSBP 'msgThreadState ''MsgThreadState)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgThreadState_" . stripPrefix "_msgThreadState_"}
''MsgThreadState)
$(makeLenses ''MsgThreadState)
data UARTChannel = UARTChannel
{ _uARTChannel_tx_throughput :: Float
, _uARTChannel_rx_throughput :: Float
, _uARTChannel_crc_error_count :: Word16
, _uARTChannel_io_error_count :: Word16
, _uARTChannel_tx_buffer_level :: Word8
, _uARTChannel_rx_buffer_level :: Word8
} deriving ( Show, Read, Eq )
instance Binary UARTChannel where
get = do
_uARTChannel_tx_throughput <- getFloat32le
_uARTChannel_rx_throughput <- getFloat32le
_uARTChannel_crc_error_count <- getWord16le
_uARTChannel_io_error_count <- getWord16le
_uARTChannel_tx_buffer_level <- getWord8
_uARTChannel_rx_buffer_level <- getWord8
return UARTChannel {..}
put UARTChannel {..} = do
putFloat32le _uARTChannel_tx_throughput
putFloat32le _uARTChannel_rx_throughput
putWord16le _uARTChannel_crc_error_count
putWord16le _uARTChannel_io_error_count
putWord8 _uARTChannel_tx_buffer_level
putWord8 _uARTChannel_rx_buffer_level
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_uARTChannel_" . stripPrefix "_uARTChannel_"}
''UARTChannel)
$(makeLenses ''UARTChannel)
data Latency = Latency
{ _latency_avg :: Int32
, _latency_lmin :: Int32
, _latency_lmax :: Int32
, _latency_current :: Int32
} deriving ( Show, Read, Eq )
instance Binary Latency where
get = do
_latency_avg <- liftM fromIntegral getWord32le
_latency_lmin <- liftM fromIntegral getWord32le
_latency_lmax <- liftM fromIntegral getWord32le
_latency_current <- liftM fromIntegral getWord32le
return Latency {..}
put Latency {..} = do
putWord32le $ fromIntegral _latency_avg
putWord32le $ fromIntegral _latency_lmin
putWord32le $ fromIntegral _latency_lmax
putWord32le $ fromIntegral _latency_current
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_latency_" . stripPrefix "_latency_"}
''Latency)
$(makeLenses ''Latency)
msgUartState :: Word16
msgUartState = 0x0018
data MsgUartState = MsgUartState
{ _msgUartState_uart_a :: UARTChannel
, _msgUartState_uart_b :: UARTChannel
, _msgUartState_uart_ftdi :: UARTChannel
, _msgUartState_latency :: Latency
} deriving ( Show, Read, Eq )
instance Binary MsgUartState where
get = do
_msgUartState_uart_a <- get
_msgUartState_uart_b <- get
_msgUartState_uart_ftdi <- get
_msgUartState_latency <- get
return MsgUartState {..}
put MsgUartState {..} = do
put _msgUartState_uart_a
put _msgUartState_uart_b
put _msgUartState_uart_ftdi
put _msgUartState_latency
$(deriveSBP 'msgUartState ''MsgUartState)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgUartState_" . stripPrefix "_msgUartState_"}
''MsgUartState)
$(makeLenses ''MsgUartState)
msgIarState :: Word16
msgIarState = 0x0019
data MsgIarState = MsgIarState
{ _msgIarState_num_hyps :: Word32
} deriving ( Show, Read, Eq )
instance Binary MsgIarState where
get = do
_msgIarState_num_hyps <- getWord32le
return MsgIarState {..}
put MsgIarState {..} = do
putWord32le _msgIarState_num_hyps
$(deriveSBP 'msgIarState ''MsgIarState)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgIarState_" . stripPrefix "_msgIarState_"}
''MsgIarState)
$(makeLenses ''MsgIarState)
msgMaskSatellite :: Word16
msgMaskSatellite = 0x001B
data MsgMaskSatellite = MsgMaskSatellite
{ _msgMaskSatellite_mask :: Word8
, _msgMaskSatellite_sid :: GnssSignal
} deriving ( Show, Read, Eq )
instance Binary MsgMaskSatellite where
get = do
_msgMaskSatellite_mask <- getWord8
_msgMaskSatellite_sid <- get
return MsgMaskSatellite {..}
put MsgMaskSatellite {..} = do
putWord8 _msgMaskSatellite_mask
put _msgMaskSatellite_sid
$(deriveSBP 'msgMaskSatellite ''MsgMaskSatellite)
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgMaskSatellite_" . stripPrefix "_msgMaskSatellite_"}
''MsgMaskSatellite)
$(makeLenses ''MsgMaskSatellite)