module SwiftNav.SBP.ExtEvents where

import Control.Monad
import Control.Monad.Loops
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

msgExtEvent :: Word16
msgExtEvent = 0x0101

data MsgExtEvent = MsgExtEvent
  { msgExtEventWn    :: Word16
  , msgExtEventTow   :: Word32
  , msgExtEventNs    :: Int32
  , msgExtEventFlags :: Word8
  , msgExtEventPin   :: Word8
  } deriving ( Show, Read, Eq )

instance Binary MsgExtEvent where
  get = do
    msgExtEventWn <- getWord16le
    msgExtEventTow <- getWord32le
    msgExtEventNs <- liftM fromIntegral getWord32le
    msgExtEventFlags <- getWord8
    msgExtEventPin <- getWord8
    return MsgExtEvent {..}

  put MsgExtEvent {..} = do
    putWord16le msgExtEventWn
    putWord32le msgExtEventTow
    putWord32le $ fromIntegral msgExtEventNs
    putWord8 msgExtEventFlags
    putWord8 msgExtEventPin