module SwiftNav.SBP.Piksi 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
msgAlmanac :: Word16
msgAlmanac = 0x0069
data MsgAlmanac = MsgAlmanac
deriving ( Show, Read, Eq )
instance Binary MsgAlmanac where
get =
return MsgAlmanac
put MsgAlmanac =
return ()
$(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 ()
$(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 ()
$(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 ()
$(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 ()
$(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
$(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 ()
$(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
$(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
$(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
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgIarState_" . stripPrefix "_msgIarState_"}
''MsgIarState)
$(makeLenses ''MsgIarState)
msgMaskSatellite :: Word16
msgMaskSatellite = 0x001B
data MsgMaskSatellite = MsgMaskSatellite
{ _msgMaskSatellite_mask :: Word8
, _msgMaskSatellite_sid :: Word32
} deriving ( Show, Read, Eq )
instance Binary MsgMaskSatellite where
get = do
_msgMaskSatellite_mask <- getWord8
_msgMaskSatellite_sid <- getWord32le
return MsgMaskSatellite {..}
put MsgMaskSatellite {..} = do
putWord8 _msgMaskSatellite_mask
putWord32le _msgMaskSatellite_sid
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgMaskSatellite_" . stripPrefix "_msgMaskSatellite_"}
''MsgMaskSatellite)
$(makeLenses ''MsgMaskSatellite)