{-# OPTIONS_GHC -fno-warn-unused-imports #-} -- | -- Module: SwiftNav.SBP.System -- Copyright: Copyright (C) 2015 Swift Navigation, Inc. -- License: LGPL-3 -- Maintainer: Mark Fine -- Stability: experimental -- Portability: portable -- -- Standardized system messages from Swift Navigation devices. module SwiftNav.SBP.System where import BasicPrelude as P 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 msgStartup :: Word16 msgStartup = 0xFF00 -- | SBP class for message MSG_STARTUP (0xFF00). -- -- The system start-up message is sent once on system start-up. It notifies the -- host or other attached devices that the system has started and is now ready -- to respond to commands or configuration requests. data MsgStartup = MsgStartup { _msgStartup_cause :: Word8 -- ^ Cause of startup , _msgStartup_startup_type :: Word8 -- ^ Startup type , _msgStartup_reserved :: Word16 -- ^ Reserved } deriving ( Show, Read, Eq ) instance Binary MsgStartup where get = do _msgStartup_cause <- getWord8 _msgStartup_startup_type <- getWord8 _msgStartup_reserved <- getWord16le return MsgStartup {..} put MsgStartup {..} = do putWord8 _msgStartup_cause putWord8 _msgStartup_startup_type putWord16le _msgStartup_reserved $(deriveSBP 'msgStartup ''MsgStartup) $(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgStartup_" . P.stripPrefix "_msgStartup_"} ''MsgStartup) $(makeLenses ''MsgStartup) msgDgnssStatus :: Word16 msgDgnssStatus = 0xFF02 -- | SBP class for message MSG_DGNSS_STATUS (0xFF02). -- -- This message provides information about the receipt of Differential -- corrections. It is expected to be sent with each receipt of a complete -- corrections packet. data MsgDgnssStatus = MsgDgnssStatus { _msgDgnssStatus_flags :: Word8 -- ^ Status flags , _msgDgnssStatus_latency :: Word16 -- ^ Latency of observation receipt , _msgDgnssStatus_num_signals :: Word8 -- ^ Number of signals from base station , _msgDgnssStatus_source :: Text -- ^ Corrections source string } deriving ( Show, Read, Eq ) instance Binary MsgDgnssStatus where get = do _msgDgnssStatus_flags <- getWord8 _msgDgnssStatus_latency <- getWord16le _msgDgnssStatus_num_signals <- getWord8 _msgDgnssStatus_source <- decodeUtf8 . toStrict <$> getRemainingLazyByteString return MsgDgnssStatus {..} put MsgDgnssStatus {..} = do putWord8 _msgDgnssStatus_flags putWord16le _msgDgnssStatus_latency putWord8 _msgDgnssStatus_num_signals putByteString $ encodeUtf8 _msgDgnssStatus_source $(deriveSBP 'msgDgnssStatus ''MsgDgnssStatus) $(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgDgnssStatus_" . P.stripPrefix "_msgDgnssStatus_"} ''MsgDgnssStatus) $(makeLenses ''MsgDgnssStatus) msgHeartbeat :: Word16 msgHeartbeat = 0xFFFF -- | SBP class for message MSG_HEARTBEAT (0xFFFF). -- -- The heartbeat message is sent periodically to inform the host or other -- attached devices that the system is running. It is used to monitor system -- malfunctions. It also contains status flags that indicate to the host the -- status of the system and whether it is operating correctly. Currently, the -- expected heartbeat interval is 1 sec. The system error flag is used to -- indicate that an error has occurred in the system. To determine the source -- of the error, the remaining error flags should be inspected. data MsgHeartbeat = MsgHeartbeat { _msgHeartbeat_flags :: Word32 -- ^ Status flags } deriving ( Show, Read, Eq ) instance Binary MsgHeartbeat where get = do _msgHeartbeat_flags <- getWord32le return MsgHeartbeat {..} put MsgHeartbeat {..} = do putWord32le _msgHeartbeat_flags $(deriveSBP 'msgHeartbeat ''MsgHeartbeat) $(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgHeartbeat_" . P.stripPrefix "_msgHeartbeat_"} ''MsgHeartbeat) $(makeLenses ''MsgHeartbeat)