{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE RecordWildCards #-}
module SwiftNav.SBP.Piksi
( module SwiftNav.SBP.Piksi
) where
import BasicPrelude
import Control.Lens
import Control.Monad.Loops
import Data.Binary
import Data.Binary.Get
import Data.Binary.IEEE754
import Data.Binary.Put
import Data.ByteString.Lazy hiding (ByteString)
import Data.Int
import Data.Word
import SwiftNav.SBP.TH
import SwiftNav.SBP.Types
import SwiftNav.SBP.Gnss
{-# ANN module ("HLint: ignore Use camelCase"::String) #-}
{-# ANN module ("HLint: ignore Redundant do"::String) #-}
{-# ANN module ("HLint: ignore Use newtype instead of data"::String) #-}
msgAlmanac :: Word16
msgAlmanac = 0x0069
data MsgAlmanac = MsgAlmanac
deriving ( Show, Read, Eq )
instance Binary MsgAlmanac where
get =
pure MsgAlmanac
put MsgAlmanac =
pure ()
$(makeSBP 'msgAlmanac ''MsgAlmanac)
$(makeJSON "_msgAlmanac_" ''MsgAlmanac)
$(makeLenses ''MsgAlmanac)
msgSetTime :: Word16
msgSetTime = 0x0068
data MsgSetTime = MsgSetTime
deriving ( Show, Read, Eq )
instance Binary MsgSetTime where
get =
pure MsgSetTime
put MsgSetTime =
pure ()
$(makeSBP 'msgSetTime ''MsgSetTime)
$(makeJSON "_msgSetTime_" ''MsgSetTime)
$(makeLenses ''MsgSetTime)
msgReset :: Word16
msgReset = 0x00B6
data MsgReset = MsgReset
{ _msgReset_flags :: !Word32
} deriving ( Show, Read, Eq )
instance Binary MsgReset where
get = do
_msgReset_flags <- getWord32le
pure MsgReset {..}
put MsgReset {..} = do
putWord32le _msgReset_flags
$(makeSBP 'msgReset ''MsgReset)
$(makeJSON "_msgReset_" ''MsgReset)
$(makeLenses ''MsgReset)
msgResetDep :: Word16
msgResetDep = 0x00B2
data MsgResetDep = MsgResetDep
deriving ( Show, Read, Eq )
instance Binary MsgResetDep where
get =
pure MsgResetDep
put MsgResetDep =
pure ()
$(makeSBP 'msgResetDep ''MsgResetDep)
$(makeJSON "_msgResetDep_" ''MsgResetDep)
$(makeLenses ''MsgResetDep)
msgCwResults :: Word16
msgCwResults = 0x00C0
data MsgCwResults = MsgCwResults
deriving ( Show, Read, Eq )
instance Binary MsgCwResults where
get =
pure MsgCwResults
put MsgCwResults =
pure ()
$(makeSBP 'msgCwResults ''MsgCwResults)
$(makeJSON "_msgCwResults_" ''MsgCwResults)
$(makeLenses ''MsgCwResults)
msgCwStart :: Word16
msgCwStart = 0x00C1
data MsgCwStart = MsgCwStart
deriving ( Show, Read, Eq )
instance Binary MsgCwStart where
get =
pure MsgCwStart
put MsgCwStart =
pure ()
$(makeSBP 'msgCwStart ''MsgCwStart)
$(makeJSON "_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
pure MsgResetFilters {..}
put MsgResetFilters {..} = do
putWord8 _msgResetFilters_filter
$(makeSBP 'msgResetFilters ''MsgResetFilters)
$(makeJSON "_msgResetFilters_" ''MsgResetFilters)
$(makeLenses ''MsgResetFilters)
msgInitBaseDep :: Word16
msgInitBaseDep = 0x0023
data MsgInitBaseDep = MsgInitBaseDep
deriving ( Show, Read, Eq )
instance Binary MsgInitBaseDep where
get =
pure MsgInitBaseDep
put MsgInitBaseDep =
pure ()
$(makeSBP 'msgInitBaseDep ''MsgInitBaseDep)
$(makeJSON "_msgInitBaseDep_" ''MsgInitBaseDep)
$(makeLenses ''MsgInitBaseDep)
msgThreadState :: Word16
msgThreadState = 0x0017
data MsgThreadState = MsgThreadState
{ _msgThreadState_name :: !Text
, _msgThreadState_cpu :: !Word16
, _msgThreadState_stack_free :: !Word32
} deriving ( Show, Read, Eq )
instance Binary MsgThreadState where
get = do
_msgThreadState_name <- decodeUtf8 <$> getByteString 20
_msgThreadState_cpu <- getWord16le
_msgThreadState_stack_free <- getWord32le
pure MsgThreadState {..}
put MsgThreadState {..} = do
putByteString $ encodeUtf8 _msgThreadState_name
putWord16le _msgThreadState_cpu
putWord32le _msgThreadState_stack_free
$(makeSBP 'msgThreadState ''MsgThreadState)
$(makeJSON "_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
pure 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
$(makeJSON "_uARTChannel_" ''UARTChannel)
$(makeLenses ''UARTChannel)
data Period = Period
{ _period_avg :: !Int32
, _period_pmin :: !Int32
, _period_pmax :: !Int32
, _period_current :: !Int32
} deriving ( Show, Read, Eq )
instance Binary Period where
get = do
_period_avg <- fromIntegral <$> getWord32le
_period_pmin <- fromIntegral <$> getWord32le
_period_pmax <- fromIntegral <$> getWord32le
_period_current <- fromIntegral <$> getWord32le
pure Period {..}
put Period {..} = do
(putWord32le . fromIntegral) _period_avg
(putWord32le . fromIntegral) _period_pmin
(putWord32le . fromIntegral) _period_pmax
(putWord32le . fromIntegral) _period_current
$(makeJSON "_period_" ''Period)
$(makeLenses ''Period)
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 <- fromIntegral <$> getWord32le
_latency_lmin <- fromIntegral <$> getWord32le
_latency_lmax <- fromIntegral <$> getWord32le
_latency_current <- fromIntegral <$> getWord32le
pure Latency {..}
put Latency {..} = do
(putWord32le . fromIntegral) _latency_avg
(putWord32le . fromIntegral) _latency_lmin
(putWord32le . fromIntegral) _latency_lmax
(putWord32le . fromIntegral) _latency_current
$(makeJSON "_latency_" ''Latency)
$(makeLenses ''Latency)
msgUartState :: Word16
msgUartState = 0x001D
data MsgUartState = MsgUartState
{ _msgUartState_uart_a :: !UARTChannel
, _msgUartState_uart_b :: !UARTChannel
, _msgUartState_uart_ftdi :: !UARTChannel
, _msgUartState_latency :: !Latency
, _msgUartState_obs_period :: !Period
} 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
_msgUartState_obs_period <- get
pure MsgUartState {..}
put MsgUartState {..} = do
put _msgUartState_uart_a
put _msgUartState_uart_b
put _msgUartState_uart_ftdi
put _msgUartState_latency
put _msgUartState_obs_period
$(makeSBP 'msgUartState ''MsgUartState)
$(makeJSON "_msgUartState_" ''MsgUartState)
$(makeLenses ''MsgUartState)
msgUartStateDepa :: Word16
msgUartStateDepa = 0x0018
data MsgUartStateDepa = MsgUartStateDepa
{ _msgUartStateDepa_uart_a :: !UARTChannel
, _msgUartStateDepa_uart_b :: !UARTChannel
, _msgUartStateDepa_uart_ftdi :: !UARTChannel
, _msgUartStateDepa_latency :: !Latency
} deriving ( Show, Read, Eq )
instance Binary MsgUartStateDepa where
get = do
_msgUartStateDepa_uart_a <- get
_msgUartStateDepa_uart_b <- get
_msgUartStateDepa_uart_ftdi <- get
_msgUartStateDepa_latency <- get
pure MsgUartStateDepa {..}
put MsgUartStateDepa {..} = do
put _msgUartStateDepa_uart_a
put _msgUartStateDepa_uart_b
put _msgUartStateDepa_uart_ftdi
put _msgUartStateDepa_latency
$(makeSBP 'msgUartStateDepa ''MsgUartStateDepa)
$(makeJSON "_msgUartStateDepa_" ''MsgUartStateDepa)
$(makeLenses ''MsgUartStateDepa)
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
pure MsgIarState {..}
put MsgIarState {..} = do
putWord32le _msgIarState_num_hyps
$(makeSBP 'msgIarState ''MsgIarState)
$(makeJSON "_msgIarState_" ''MsgIarState)
$(makeLenses ''MsgIarState)
msgMaskSatellite :: Word16
msgMaskSatellite = 0x002B
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
pure MsgMaskSatellite {..}
put MsgMaskSatellite {..} = do
putWord8 _msgMaskSatellite_mask
put _msgMaskSatellite_sid
$(makeSBP 'msgMaskSatellite ''MsgMaskSatellite)
$(makeJSON "_msgMaskSatellite_" ''MsgMaskSatellite)
$(makeLenses ''MsgMaskSatellite)
msgMaskSatelliteDep :: Word16
msgMaskSatelliteDep = 0x001B
data MsgMaskSatelliteDep = MsgMaskSatelliteDep
{ _msgMaskSatelliteDep_mask :: !Word8
, _msgMaskSatelliteDep_sid :: !GnssSignalDep
} deriving ( Show, Read, Eq )
instance Binary MsgMaskSatelliteDep where
get = do
_msgMaskSatelliteDep_mask <- getWord8
_msgMaskSatelliteDep_sid <- get
pure MsgMaskSatelliteDep {..}
put MsgMaskSatelliteDep {..} = do
putWord8 _msgMaskSatelliteDep_mask
put _msgMaskSatelliteDep_sid
$(makeSBP 'msgMaskSatelliteDep ''MsgMaskSatelliteDep)
$(makeJSON "_msgMaskSatelliteDep_" ''MsgMaskSatelliteDep)
$(makeLenses ''MsgMaskSatelliteDep)
msgDeviceMonitor :: Word16
msgDeviceMonitor = 0x00B5
data MsgDeviceMonitor = MsgDeviceMonitor
{ _msgDeviceMonitor_dev_vin :: !Int16
, _msgDeviceMonitor_cpu_vint :: !Int16
, _msgDeviceMonitor_cpu_vaux :: !Int16
, _msgDeviceMonitor_cpu_temperature :: !Int16
, _msgDeviceMonitor_fe_temperature :: !Int16
} deriving ( Show, Read, Eq )
instance Binary MsgDeviceMonitor where
get = do
_msgDeviceMonitor_dev_vin <- fromIntegral <$> getWord16le
_msgDeviceMonitor_cpu_vint <- fromIntegral <$> getWord16le
_msgDeviceMonitor_cpu_vaux <- fromIntegral <$> getWord16le
_msgDeviceMonitor_cpu_temperature <- fromIntegral <$> getWord16le
_msgDeviceMonitor_fe_temperature <- fromIntegral <$> getWord16le
pure MsgDeviceMonitor {..}
put MsgDeviceMonitor {..} = do
(putWord16le . fromIntegral) _msgDeviceMonitor_dev_vin
(putWord16le . fromIntegral) _msgDeviceMonitor_cpu_vint
(putWord16le . fromIntegral) _msgDeviceMonitor_cpu_vaux
(putWord16le . fromIntegral) _msgDeviceMonitor_cpu_temperature
(putWord16le . fromIntegral) _msgDeviceMonitor_fe_temperature
$(makeSBP 'msgDeviceMonitor ''MsgDeviceMonitor)
$(makeJSON "_msgDeviceMonitor_" ''MsgDeviceMonitor)
$(makeLenses ''MsgDeviceMonitor)
msgCommandReq :: Word16
msgCommandReq = 0x00B8
data MsgCommandReq = MsgCommandReq
{ _msgCommandReq_sequence :: !Word32
, _msgCommandReq_command :: !Text
} deriving ( Show, Read, Eq )
instance Binary MsgCommandReq where
get = do
_msgCommandReq_sequence <- getWord32le
_msgCommandReq_command <- decodeUtf8 . toStrict <$> getRemainingLazyByteString
pure MsgCommandReq {..}
put MsgCommandReq {..} = do
putWord32le _msgCommandReq_sequence
putByteString $ encodeUtf8 _msgCommandReq_command
$(makeSBP 'msgCommandReq ''MsgCommandReq)
$(makeJSON "_msgCommandReq_" ''MsgCommandReq)
$(makeLenses ''MsgCommandReq)
msgCommandResp :: Word16
msgCommandResp = 0x00B9
data MsgCommandResp = MsgCommandResp
{ _msgCommandResp_sequence :: !Word32
, _msgCommandResp_code :: !Int32
} deriving ( Show, Read, Eq )
instance Binary MsgCommandResp where
get = do
_msgCommandResp_sequence <- getWord32le
_msgCommandResp_code <- fromIntegral <$> getWord32le
pure MsgCommandResp {..}
put MsgCommandResp {..} = do
putWord32le _msgCommandResp_sequence
(putWord32le . fromIntegral) _msgCommandResp_code
$(makeSBP 'msgCommandResp ''MsgCommandResp)
$(makeJSON "_msgCommandResp_" ''MsgCommandResp)
$(makeLenses ''MsgCommandResp)
msgCommandOutput :: Word16
msgCommandOutput = 0x00BC
data MsgCommandOutput = MsgCommandOutput
{ _msgCommandOutput_sequence :: !Word32
, _msgCommandOutput_line :: !Text
} deriving ( Show, Read, Eq )
instance Binary MsgCommandOutput where
get = do
_msgCommandOutput_sequence <- getWord32le
_msgCommandOutput_line <- decodeUtf8 . toStrict <$> getRemainingLazyByteString
pure MsgCommandOutput {..}
put MsgCommandOutput {..} = do
putWord32le _msgCommandOutput_sequence
putByteString $ encodeUtf8 _msgCommandOutput_line
$(makeSBP 'msgCommandOutput ''MsgCommandOutput)
$(makeJSON "_msgCommandOutput_" ''MsgCommandOutput)
$(makeLenses ''MsgCommandOutput)
msgNetworkStateReq :: Word16
msgNetworkStateReq = 0x00BA
data MsgNetworkStateReq = MsgNetworkStateReq
deriving ( Show, Read, Eq )
instance Binary MsgNetworkStateReq where
get =
pure MsgNetworkStateReq
put MsgNetworkStateReq =
pure ()
$(makeSBP 'msgNetworkStateReq ''MsgNetworkStateReq)
$(makeJSON "_msgNetworkStateReq_" ''MsgNetworkStateReq)
$(makeLenses ''MsgNetworkStateReq)
msgNetworkStateResp :: Word16
msgNetworkStateResp = 0x00BB
data MsgNetworkStateResp = MsgNetworkStateResp
{ _msgNetworkStateResp_ipv4_address :: ![Word8]
, _msgNetworkStateResp_ipv4_mask_size :: !Word8
, _msgNetworkStateResp_ipv6_address :: ![Word8]
, _msgNetworkStateResp_ipv6_mask_size :: !Word8
, _msgNetworkStateResp_rx_bytes :: !Word32
, _msgNetworkStateResp_tx_bytes :: !Word32
, _msgNetworkStateResp_interface_name :: !Text
, _msgNetworkStateResp_flags :: !Word32
} deriving ( Show, Read, Eq )
instance Binary MsgNetworkStateResp where
get = do
_msgNetworkStateResp_ipv4_address <- replicateM 4 getWord8
_msgNetworkStateResp_ipv4_mask_size <- getWord8
_msgNetworkStateResp_ipv6_address <- replicateM 16 getWord8
_msgNetworkStateResp_ipv6_mask_size <- getWord8
_msgNetworkStateResp_rx_bytes <- getWord32le
_msgNetworkStateResp_tx_bytes <- getWord32le
_msgNetworkStateResp_interface_name <- decodeUtf8 <$> getByteString 16
_msgNetworkStateResp_flags <- getWord32le
pure MsgNetworkStateResp {..}
put MsgNetworkStateResp {..} = do
mapM_ putWord8 _msgNetworkStateResp_ipv4_address
putWord8 _msgNetworkStateResp_ipv4_mask_size
mapM_ putWord8 _msgNetworkStateResp_ipv6_address
putWord8 _msgNetworkStateResp_ipv6_mask_size
putWord32le _msgNetworkStateResp_rx_bytes
putWord32le _msgNetworkStateResp_tx_bytes
putByteString $ encodeUtf8 _msgNetworkStateResp_interface_name
putWord32le _msgNetworkStateResp_flags
$(makeSBP 'msgNetworkStateResp ''MsgNetworkStateResp)
$(makeJSON "_msgNetworkStateResp_" ''MsgNetworkStateResp)
$(makeLenses ''MsgNetworkStateResp)
data NetworkUsage = NetworkUsage
{ _networkUsage_duration :: !Word64
, _networkUsage_total_bytes :: !Word64
, _networkUsage_rx_bytes :: !Word32
, _networkUsage_tx_bytes :: !Word32
, _networkUsage_interface_name :: !Text
} deriving ( Show, Read, Eq )
instance Binary NetworkUsage where
get = do
_networkUsage_duration <- getWord64le
_networkUsage_total_bytes <- getWord64le
_networkUsage_rx_bytes <- getWord32le
_networkUsage_tx_bytes <- getWord32le
_networkUsage_interface_name <- decodeUtf8 <$> getByteString 16
pure NetworkUsage {..}
put NetworkUsage {..} = do
putWord64le _networkUsage_duration
putWord64le _networkUsage_total_bytes
putWord32le _networkUsage_rx_bytes
putWord32le _networkUsage_tx_bytes
putByteString $ encodeUtf8 _networkUsage_interface_name
$(makeJSON "_networkUsage_" ''NetworkUsage)
$(makeLenses ''NetworkUsage)
msgNetworkBandwidthUsage :: Word16
msgNetworkBandwidthUsage = 0x00BD
data MsgNetworkBandwidthUsage = MsgNetworkBandwidthUsage
{ _msgNetworkBandwidthUsage_interfaces :: ![NetworkUsage]
} deriving ( Show, Read, Eq )
instance Binary MsgNetworkBandwidthUsage where
get = do
_msgNetworkBandwidthUsage_interfaces <- whileM (not <$> isEmpty) get
pure MsgNetworkBandwidthUsage {..}
put MsgNetworkBandwidthUsage {..} = do
mapM_ put _msgNetworkBandwidthUsage_interfaces
$(makeSBP 'msgNetworkBandwidthUsage ''MsgNetworkBandwidthUsage)
$(makeJSON "_msgNetworkBandwidthUsage_" ''MsgNetworkBandwidthUsage)
$(makeLenses ''MsgNetworkBandwidthUsage)
msgCellModemStatus :: Word16
msgCellModemStatus = 0x00BE
data MsgCellModemStatus = MsgCellModemStatus
{ _msgCellModemStatus_signal_strength :: !Int8
, _msgCellModemStatus_signal_error_rate :: !Float
, _msgCellModemStatus_reserved :: ![Word8]
} deriving ( Show, Read, Eq )
instance Binary MsgCellModemStatus where
get = do
_msgCellModemStatus_signal_strength <- fromIntegral <$> getWord8
_msgCellModemStatus_signal_error_rate <- getFloat32le
_msgCellModemStatus_reserved <- whileM (not <$> isEmpty) getWord8
pure MsgCellModemStatus {..}
put MsgCellModemStatus {..} = do
(putWord8 . fromIntegral) _msgCellModemStatus_signal_strength
putFloat32le _msgCellModemStatus_signal_error_rate
mapM_ putWord8 _msgCellModemStatus_reserved
$(makeSBP 'msgCellModemStatus ''MsgCellModemStatus)
$(makeJSON "_msgCellModemStatus_" ''MsgCellModemStatus)
$(makeLenses ''MsgCellModemStatus)
msgSpecanDep :: Word16
msgSpecanDep = 0x0050
data MsgSpecanDep = MsgSpecanDep
{ _msgSpecanDep_channel_tag :: !Word16
, _msgSpecanDep_t :: !GpsTimeDep
, _msgSpecanDep_freq_ref :: !Float
, _msgSpecanDep_freq_step :: !Float
, _msgSpecanDep_amplitude_ref :: !Float
, _msgSpecanDep_amplitude_unit :: !Float
, _msgSpecanDep_amplitude_value :: ![Word8]
} deriving ( Show, Read, Eq )
instance Binary MsgSpecanDep where
get = do
_msgSpecanDep_channel_tag <- getWord16le
_msgSpecanDep_t <- get
_msgSpecanDep_freq_ref <- getFloat32le
_msgSpecanDep_freq_step <- getFloat32le
_msgSpecanDep_amplitude_ref <- getFloat32le
_msgSpecanDep_amplitude_unit <- getFloat32le
_msgSpecanDep_amplitude_value <- whileM (not <$> isEmpty) getWord8
pure MsgSpecanDep {..}
put MsgSpecanDep {..} = do
putWord16le _msgSpecanDep_channel_tag
put _msgSpecanDep_t
putFloat32le _msgSpecanDep_freq_ref
putFloat32le _msgSpecanDep_freq_step
putFloat32le _msgSpecanDep_amplitude_ref
putFloat32le _msgSpecanDep_amplitude_unit
mapM_ putWord8 _msgSpecanDep_amplitude_value
$(makeSBP 'msgSpecanDep ''MsgSpecanDep)
$(makeJSON "_msgSpecanDep_" ''MsgSpecanDep)
$(makeLenses ''MsgSpecanDep)
msgSpecan :: Word16
msgSpecan = 0x0051
data MsgSpecan = MsgSpecan
{ _msgSpecan_channel_tag :: !Word16
, _msgSpecan_t :: !GpsTime
, _msgSpecan_freq_ref :: !Float
, _msgSpecan_freq_step :: !Float
, _msgSpecan_amplitude_ref :: !Float
, _msgSpecan_amplitude_unit :: !Float
, _msgSpecan_amplitude_value :: ![Word8]
} deriving ( Show, Read, Eq )
instance Binary MsgSpecan where
get = do
_msgSpecan_channel_tag <- getWord16le
_msgSpecan_t <- get
_msgSpecan_freq_ref <- getFloat32le
_msgSpecan_freq_step <- getFloat32le
_msgSpecan_amplitude_ref <- getFloat32le
_msgSpecan_amplitude_unit <- getFloat32le
_msgSpecan_amplitude_value <- whileM (not <$> isEmpty) getWord8
pure MsgSpecan {..}
put MsgSpecan {..} = do
putWord16le _msgSpecan_channel_tag
put _msgSpecan_t
putFloat32le _msgSpecan_freq_ref
putFloat32le _msgSpecan_freq_step
putFloat32le _msgSpecan_amplitude_ref
putFloat32le _msgSpecan_amplitude_unit
mapM_ putWord8 _msgSpecan_amplitude_value
$(makeSBP 'msgSpecan ''MsgSpecan)
$(makeJSON "_msgSpecan_" ''MsgSpecan)
$(makeLenses ''MsgSpecan)
msgFrontEndGain :: Word16
msgFrontEndGain = 0x00BF
data MsgFrontEndGain = MsgFrontEndGain
{ _msgFrontEndGain_rf_gain :: ![Int8]
, _msgFrontEndGain_if_gain :: ![Int8]
} deriving ( Show, Read, Eq )
instance Binary MsgFrontEndGain where
get = do
_msgFrontEndGain_rf_gain <- replicateM 8 fromIntegral <$> getWord8
_msgFrontEndGain_if_gain <- replicateM 8 fromIntegral <$> getWord8
pure MsgFrontEndGain {..}
put MsgFrontEndGain {..} = do
mapM_ (putWord8 . fromIntegral) _msgFrontEndGain_rf_gain
mapM_ (putWord8 . fromIntegral) _msgFrontEndGain_if_gain
$(makeSBP 'msgFrontEndGain ''MsgFrontEndGain)
$(makeJSON "_msgFrontEndGain_" ''MsgFrontEndGain)
$(makeLenses ''MsgFrontEndGain)