module SwiftNav.SBP.Piksi 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
msgAlmanac :: Word16
msgAlmanac = 0x0069
data MsgAlmanac = MsgAlmanac
deriving ( Show, Read, Eq )
instance Binary MsgAlmanac where
get =
return MsgAlmanac
put MsgAlmanac =
return ()
msgSetTime :: Word16
msgSetTime = 0x0068
data MsgSetTime = MsgSetTime
deriving ( Show, Read, Eq )
instance Binary MsgSetTime where
get =
return MsgSetTime
put MsgSetTime =
return ()
msgReset :: Word16
msgReset = 0x00B2
data MsgReset = MsgReset
deriving ( Show, Read, Eq )
instance Binary MsgReset where
get =
return MsgReset
put MsgReset =
return ()
msgCwResults :: Word16
msgCwResults = 0x00C0
data MsgCwResults = MsgCwResults
deriving ( Show, Read, Eq )
instance Binary MsgCwResults where
get =
return MsgCwResults
put MsgCwResults =
return ()
msgCwStart :: Word16
msgCwStart = 0x00C1
data MsgCwStart = MsgCwStart
deriving ( Show, Read, Eq )
instance Binary MsgCwStart where
get =
return MsgCwStart
put MsgCwStart =
return ()
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)
msgInitBase :: Word16
msgInitBase = 0x0023
data MsgInitBase = MsgInitBase
deriving ( Show, Read, Eq )
instance Binary MsgInitBase where
get =
return MsgInitBase
put MsgInitBase =
return ()
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)
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)
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)
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)
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)
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)