module SwiftNav.SBP.Gnss 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
data GnssSignal16 = GnssSignal16
{ _gnssSignal16_sat :: Word8
, _gnssSignal16_code :: Word8
} deriving ( Show, Read, Eq )
instance Binary GnssSignal16 where
get = do
_gnssSignal16_sat <- getWord8
_gnssSignal16_code <- getWord8
return GnssSignal16 {..}
put GnssSignal16 {..} = do
putWord8 _gnssSignal16_sat
putWord8 _gnssSignal16_code
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gnssSignal16_" . P.stripPrefix "_gnssSignal16_"}
''GnssSignal16)
$(makeLenses ''GnssSignal16)
data GnssSignal = GnssSignal
{ _gnssSignal_sat :: Word16
, _gnssSignal_code :: Word8
, _gnssSignal_reserved :: Word8
} deriving ( Show, Read, Eq )
instance Binary GnssSignal where
get = do
_gnssSignal_sat <- getWord16le
_gnssSignal_code <- getWord8
_gnssSignal_reserved <- getWord8
return GnssSignal {..}
put GnssSignal {..} = do
putWord16le _gnssSignal_sat
putWord8 _gnssSignal_code
putWord8 _gnssSignal_reserved
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gnssSignal_" . P.stripPrefix "_gnssSignal_"}
''GnssSignal)
$(makeLenses ''GnssSignal)
data GpsTime = GpsTime
{ _gpsTime_tow :: Word32
, _gpsTime_wn :: Word16
} deriving ( Show, Read, Eq )
instance Binary GpsTime where
get = do
_gpsTime_tow <- getWord32le
_gpsTime_wn <- getWord16le
return GpsTime {..}
put GpsTime {..} = do
putWord32le _gpsTime_tow
putWord16le _gpsTime_wn
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsTime_" . P.stripPrefix "_gpsTime_"}
''GpsTime)
$(makeLenses ''GpsTime)
data GpsTimeSec = GpsTimeSec
{ _gpsTimeSec_tow :: Word32
, _gpsTimeSec_wn :: Word16
} deriving ( Show, Read, Eq )
instance Binary GpsTimeSec where
get = do
_gpsTimeSec_tow <- getWord32le
_gpsTimeSec_wn <- getWord16le
return GpsTimeSec {..}
put GpsTimeSec {..} = do
putWord32le _gpsTimeSec_tow
putWord16le _gpsTimeSec_wn
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsTimeSec_" . P.stripPrefix "_gpsTimeSec_"}
''GpsTimeSec)
$(makeLenses ''GpsTimeSec)
data GpsTimeNano = GpsTimeNano
{ _gpsTimeNano_tow :: Word32
, _gpsTimeNano_ns_residual :: Int32
, _gpsTimeNano_wn :: Word16
} deriving ( Show, Read, Eq )
instance Binary GpsTimeNano where
get = do
_gpsTimeNano_tow <- getWord32le
_gpsTimeNano_ns_residual <- fromIntegral <$> getWord32le
_gpsTimeNano_wn <- getWord16le
return GpsTimeNano {..}
put GpsTimeNano {..} = do
putWord32le _gpsTimeNano_tow
putWord32le $ fromIntegral _gpsTimeNano_ns_residual
putWord16le _gpsTimeNano_wn
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_gpsTimeNano_" . P.stripPrefix "_gpsTimeNano_"}
''GpsTimeNano)
$(makeLenses ''GpsTimeNano)
data CarrierPhase = CarrierPhase
{ _carrierPhase_i :: Int32
, _carrierPhase_f :: Word8
} deriving ( Show, Read, Eq )
instance Binary CarrierPhase where
get = do
_carrierPhase_i <- fromIntegral <$> getWord32le
_carrierPhase_f <- getWord8
return CarrierPhase {..}
put CarrierPhase {..} = do
putWord32le $ fromIntegral _carrierPhase_i
putWord8 _carrierPhase_f
$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_carrierPhase_" . P.stripPrefix "_carrierPhase_"}
''CarrierPhase)
$(makeLenses ''CarrierPhase)