{-# OPTIONS_GHC -fno-warn-unused-imports #-} -- | -- Module: SwiftNav.SBP.ExtEvents -- Copyright: Copyright (C) 2015 Swift Navigation, Inc. -- License: LGPL-3 -- Maintainer: Mark Fine -- Stability: experimental -- Portability: portable -- -- Messages reporting accurately-timestamped external events, e.g. camera -- shutter time. module SwiftNav.SBP.ExtEvents 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 msgExtEvent :: Word16 msgExtEvent = 0x0101 -- | SBP class for message MSG_EXT_EVENT (0x0101). -- -- Reports detection of an external event, the GPS time it occurred, which pin -- it was and whether it was rising or falling. data MsgExtEvent = MsgExtEvent { _msgExtEvent_wn :: Word16 -- ^ GPS week number , _msgExtEvent_tow :: Word32 -- ^ GPS time of week rounded to the nearest millisecond , _msgExtEvent_ns_residual :: Int32 -- ^ Nanosecond residual of millisecond-rounded TOW (ranges from -500000 to -- 500000) , _msgExtEvent_flags :: Word8 -- ^ Flags , _msgExtEvent_pin :: Word8 -- ^ Pin number. 0..9 = DEBUG0..9. } deriving ( Show, Read, Eq ) instance Binary MsgExtEvent where get = do _msgExtEvent_wn <- getWord16le _msgExtEvent_tow <- getWord32le _msgExtEvent_ns_residual <- fromIntegral <$> getWord32le _msgExtEvent_flags <- getWord8 _msgExtEvent_pin <- getWord8 return MsgExtEvent {..} put MsgExtEvent {..} = do putWord16le _msgExtEvent_wn putWord32le _msgExtEvent_tow putWord32le $ fromIntegral _msgExtEvent_ns_residual putWord8 _msgExtEvent_flags putWord8 _msgExtEvent_pin $(deriveSBP 'msgExtEvent ''MsgExtEvent) $(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msgExtEvent_" . P.stripPrefix "_msgExtEvent_"} ''MsgExtEvent) $(makeLenses ''MsgExtEvent)