{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# LANGUAGE NoImplicitPrelude           #-}
{-# LANGUAGE TemplateHaskell             #-}
{-# LANGUAGE RecordWildCards             #-}

-- |
-- Module:      SwiftNav.SBP.Ssr
-- Copyright:   Copyright (C) 2015-2021 Swift Navigation, Inc.
-- License:     MIT
-- Contact:     https://support.swiftnav.com
-- Stability:   experimental
-- Portability: portable
--
-- \< Precise State Space Representation (SSR) corrections format \>

module SwiftNav.SBP.Ssr
  ( module SwiftNav.SBP.Ssr
  ) 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) #-}


-- | CodeBiasesContent.
--
-- Code biases are to be added to pseudorange. The corrections conform with
-- RTCMv3 MT 1059 / 1065.
data CodeBiasesContent = CodeBiasesContent
  { CodeBiasesContent -> Word8
_codeBiasesContent_code :: !Word8
    -- ^ Signal encoded following RTCM specifications (DF380, DF381, DF382 and
    -- DF467).
  , CodeBiasesContent -> Int16
_codeBiasesContent_value :: !Int16
    -- ^ Code bias value
  } deriving ( Int -> CodeBiasesContent -> ShowS
[CodeBiasesContent] -> ShowS
CodeBiasesContent -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CodeBiasesContent] -> ShowS
$cshowList :: [CodeBiasesContent] -> ShowS
show :: CodeBiasesContent -> String
$cshow :: CodeBiasesContent -> String
showsPrec :: Int -> CodeBiasesContent -> ShowS
$cshowsPrec :: Int -> CodeBiasesContent -> ShowS
Show, ReadPrec [CodeBiasesContent]
ReadPrec CodeBiasesContent
Int -> ReadS CodeBiasesContent
ReadS [CodeBiasesContent]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CodeBiasesContent]
$creadListPrec :: ReadPrec [CodeBiasesContent]
readPrec :: ReadPrec CodeBiasesContent
$creadPrec :: ReadPrec CodeBiasesContent
readList :: ReadS [CodeBiasesContent]
$creadList :: ReadS [CodeBiasesContent]
readsPrec :: Int -> ReadS CodeBiasesContent
$creadsPrec :: Int -> ReadS CodeBiasesContent
Read, CodeBiasesContent -> CodeBiasesContent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CodeBiasesContent -> CodeBiasesContent -> Bool
$c/= :: CodeBiasesContent -> CodeBiasesContent -> Bool
== :: CodeBiasesContent -> CodeBiasesContent -> Bool
$c== :: CodeBiasesContent -> CodeBiasesContent -> Bool
Eq )

instance Binary CodeBiasesContent where
  get :: Get CodeBiasesContent
get = do
    Word8
_codeBiasesContent_code <- Get Word8
getWord8
    Int16
_codeBiasesContent_value <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure CodeBiasesContent {Int16
Word8
_codeBiasesContent_value :: Int16
_codeBiasesContent_code :: Word8
_codeBiasesContent_value :: Int16
_codeBiasesContent_code :: Word8
..}

  put :: CodeBiasesContent -> Put
put CodeBiasesContent {Int16
Word8
_codeBiasesContent_value :: Int16
_codeBiasesContent_code :: Word8
_codeBiasesContent_value :: CodeBiasesContent -> Int16
_codeBiasesContent_code :: CodeBiasesContent -> Word8
..} = do
    Word8 -> Put
putWord8 Word8
_codeBiasesContent_code
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_codeBiasesContent_value

$(makeJSON "_codeBiasesContent_" ''CodeBiasesContent)
$(makeLenses ''CodeBiasesContent)

-- | PhaseBiasesContent.
--
-- Phase biases are to be added to carrier phase measurements.
data PhaseBiasesContent = PhaseBiasesContent
  { PhaseBiasesContent -> Word8
_phaseBiasesContent_code                     :: !Word8
    -- ^ Signal encoded following RTCM specifications (DF380, DF381, DF382 and
    -- DF467)
  , PhaseBiasesContent -> Word8
_phaseBiasesContent_integer_indicator        :: !Word8
    -- ^ Indicator for integer property
  , PhaseBiasesContent -> Word8
_phaseBiasesContent_widelane_integer_indicator :: !Word8
    -- ^ Indicator for two groups of Wide-Lane(s) integer property
  , PhaseBiasesContent -> Word8
_phaseBiasesContent_discontinuity_counter    :: !Word8
    -- ^ Signal phase discontinuity counter. Increased for every discontinuity
    -- in phase.
  , PhaseBiasesContent -> Int32
_phaseBiasesContent_bias                     :: !Int32
    -- ^ Phase bias for specified signal
  } deriving ( Int -> PhaseBiasesContent -> ShowS
[PhaseBiasesContent] -> ShowS
PhaseBiasesContent -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PhaseBiasesContent] -> ShowS
$cshowList :: [PhaseBiasesContent] -> ShowS
show :: PhaseBiasesContent -> String
$cshow :: PhaseBiasesContent -> String
showsPrec :: Int -> PhaseBiasesContent -> ShowS
$cshowsPrec :: Int -> PhaseBiasesContent -> ShowS
Show, ReadPrec [PhaseBiasesContent]
ReadPrec PhaseBiasesContent
Int -> ReadS PhaseBiasesContent
ReadS [PhaseBiasesContent]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PhaseBiasesContent]
$creadListPrec :: ReadPrec [PhaseBiasesContent]
readPrec :: ReadPrec PhaseBiasesContent
$creadPrec :: ReadPrec PhaseBiasesContent
readList :: ReadS [PhaseBiasesContent]
$creadList :: ReadS [PhaseBiasesContent]
readsPrec :: Int -> ReadS PhaseBiasesContent
$creadsPrec :: Int -> ReadS PhaseBiasesContent
Read, PhaseBiasesContent -> PhaseBiasesContent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhaseBiasesContent -> PhaseBiasesContent -> Bool
$c/= :: PhaseBiasesContent -> PhaseBiasesContent -> Bool
== :: PhaseBiasesContent -> PhaseBiasesContent -> Bool
$c== :: PhaseBiasesContent -> PhaseBiasesContent -> Bool
Eq )

instance Binary PhaseBiasesContent where
  get :: Get PhaseBiasesContent
get = do
    Word8
_phaseBiasesContent_code <- Get Word8
getWord8
    Word8
_phaseBiasesContent_integer_indicator <- Get Word8
getWord8
    Word8
_phaseBiasesContent_widelane_integer_indicator <- Get Word8
getWord8
    Word8
_phaseBiasesContent_discontinuity_counter <- Get Word8
getWord8
    Int32
_phaseBiasesContent_bias <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure PhaseBiasesContent {Int32
Word8
_phaseBiasesContent_bias :: Int32
_phaseBiasesContent_discontinuity_counter :: Word8
_phaseBiasesContent_widelane_integer_indicator :: Word8
_phaseBiasesContent_integer_indicator :: Word8
_phaseBiasesContent_code :: Word8
_phaseBiasesContent_bias :: Int32
_phaseBiasesContent_discontinuity_counter :: Word8
_phaseBiasesContent_widelane_integer_indicator :: Word8
_phaseBiasesContent_integer_indicator :: Word8
_phaseBiasesContent_code :: Word8
..}

  put :: PhaseBiasesContent -> Put
put PhaseBiasesContent {Int32
Word8
_phaseBiasesContent_bias :: Int32
_phaseBiasesContent_discontinuity_counter :: Word8
_phaseBiasesContent_widelane_integer_indicator :: Word8
_phaseBiasesContent_integer_indicator :: Word8
_phaseBiasesContent_code :: Word8
_phaseBiasesContent_bias :: PhaseBiasesContent -> Int32
_phaseBiasesContent_discontinuity_counter :: PhaseBiasesContent -> Word8
_phaseBiasesContent_widelane_integer_indicator :: PhaseBiasesContent -> Word8
_phaseBiasesContent_integer_indicator :: PhaseBiasesContent -> Word8
_phaseBiasesContent_code :: PhaseBiasesContent -> Word8
..} = do
    Word8 -> Put
putWord8 Word8
_phaseBiasesContent_code
    Word8 -> Put
putWord8 Word8
_phaseBiasesContent_integer_indicator
    Word8 -> Put
putWord8 Word8
_phaseBiasesContent_widelane_integer_indicator
    Word8 -> Put
putWord8 Word8
_phaseBiasesContent_discontinuity_counter
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_phaseBiasesContent_bias

$(makeJSON "_phaseBiasesContent_" ''PhaseBiasesContent)
$(makeLenses ''PhaseBiasesContent)

-- | STECHeader.
--
-- A full set of STEC information will likely span multiple SBP messages,
-- since SBP message a limited to 255 bytes.  The header is used to tie
-- multiple SBP messages into a sequence.
data STECHeader = STECHeader
  { STECHeader -> Word16
_sTECHeader_tile_set_id   :: !Word16
    -- ^ Unique identifier of the tile set this tile belongs to.
  , STECHeader -> Word16
_sTECHeader_tile_id       :: !Word16
    -- ^ Unique identifier of this tile in the tile set.
  , STECHeader -> GpsTimeSec
_sTECHeader_time          :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , STECHeader -> Word8
_sTECHeader_num_msgs      :: !Word8
    -- ^ Number of messages in the dataset
  , STECHeader -> Word8
_sTECHeader_seq_num       :: !Word8
    -- ^ Position of this message in the dataset
  , STECHeader -> Word8
_sTECHeader_update_interval :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , STECHeader -> Word8
_sTECHeader_iod_atmo      :: !Word8
    -- ^ IOD of the SSR atmospheric correction
  } deriving ( Int -> STECHeader -> ShowS
[STECHeader] -> ShowS
STECHeader -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [STECHeader] -> ShowS
$cshowList :: [STECHeader] -> ShowS
show :: STECHeader -> String
$cshow :: STECHeader -> String
showsPrec :: Int -> STECHeader -> ShowS
$cshowsPrec :: Int -> STECHeader -> ShowS
Show, ReadPrec [STECHeader]
ReadPrec STECHeader
Int -> ReadS STECHeader
ReadS [STECHeader]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [STECHeader]
$creadListPrec :: ReadPrec [STECHeader]
readPrec :: ReadPrec STECHeader
$creadPrec :: ReadPrec STECHeader
readList :: ReadS [STECHeader]
$creadList :: ReadS [STECHeader]
readsPrec :: Int -> ReadS STECHeader
$creadsPrec :: Int -> ReadS STECHeader
Read, STECHeader -> STECHeader -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: STECHeader -> STECHeader -> Bool
$c/= :: STECHeader -> STECHeader -> Bool
== :: STECHeader -> STECHeader -> Bool
$c== :: STECHeader -> STECHeader -> Bool
Eq )

instance Binary STECHeader where
  get :: Get STECHeader
get = do
    Word16
_sTECHeader_tile_set_id <- Get Word16
getWord16le
    Word16
_sTECHeader_tile_id <- Get Word16
getWord16le
    GpsTimeSec
_sTECHeader_time <- forall t. Binary t => Get t
get
    Word8
_sTECHeader_num_msgs <- Get Word8
getWord8
    Word8
_sTECHeader_seq_num <- Get Word8
getWord8
    Word8
_sTECHeader_update_interval <- Get Word8
getWord8
    Word8
_sTECHeader_iod_atmo <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure STECHeader {Word8
Word16
GpsTimeSec
_sTECHeader_iod_atmo :: Word8
_sTECHeader_update_interval :: Word8
_sTECHeader_seq_num :: Word8
_sTECHeader_num_msgs :: Word8
_sTECHeader_time :: GpsTimeSec
_sTECHeader_tile_id :: Word16
_sTECHeader_tile_set_id :: Word16
_sTECHeader_iod_atmo :: Word8
_sTECHeader_update_interval :: Word8
_sTECHeader_seq_num :: Word8
_sTECHeader_num_msgs :: Word8
_sTECHeader_time :: GpsTimeSec
_sTECHeader_tile_id :: Word16
_sTECHeader_tile_set_id :: Word16
..}

  put :: STECHeader -> Put
put STECHeader {Word8
Word16
GpsTimeSec
_sTECHeader_iod_atmo :: Word8
_sTECHeader_update_interval :: Word8
_sTECHeader_seq_num :: Word8
_sTECHeader_num_msgs :: Word8
_sTECHeader_time :: GpsTimeSec
_sTECHeader_tile_id :: Word16
_sTECHeader_tile_set_id :: Word16
_sTECHeader_iod_atmo :: STECHeader -> Word8
_sTECHeader_update_interval :: STECHeader -> Word8
_sTECHeader_seq_num :: STECHeader -> Word8
_sTECHeader_num_msgs :: STECHeader -> Word8
_sTECHeader_time :: STECHeader -> GpsTimeSec
_sTECHeader_tile_id :: STECHeader -> Word16
_sTECHeader_tile_set_id :: STECHeader -> Word16
..} = do
    Word16 -> Put
putWord16le Word16
_sTECHeader_tile_set_id
    Word16 -> Put
putWord16le Word16
_sTECHeader_tile_id
    forall t. Binary t => t -> Put
put GpsTimeSec
_sTECHeader_time
    Word8 -> Put
putWord8 Word8
_sTECHeader_num_msgs
    Word8 -> Put
putWord8 Word8
_sTECHeader_seq_num
    Word8 -> Put
putWord8 Word8
_sTECHeader_update_interval
    Word8 -> Put
putWord8 Word8
_sTECHeader_iod_atmo

$(makeJSON "_sTECHeader_" ''STECHeader)
$(makeLenses ''STECHeader)

-- | GriddedCorrectionHeader.
--
-- The LPP message contains nested variable length arrays which are not
-- supported in SBP, so each grid point will be identified by the index.
data GriddedCorrectionHeader = GriddedCorrectionHeader
  { GriddedCorrectionHeader -> Word16
_griddedCorrectionHeader_tile_set_id           :: !Word16
    -- ^ Unique identifier of the tile set this tile belongs to.
  , GriddedCorrectionHeader -> Word16
_griddedCorrectionHeader_tile_id               :: !Word16
    -- ^ Unique identifier of this tile in the tile set.
  , GriddedCorrectionHeader -> GpsTimeSec
_griddedCorrectionHeader_time                  :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , GriddedCorrectionHeader -> Word16
_griddedCorrectionHeader_num_msgs              :: !Word16
    -- ^ Number of messages in the dataset
  , GriddedCorrectionHeader -> Word16
_griddedCorrectionHeader_seq_num               :: !Word16
    -- ^ Position of this message in the dataset
  , GriddedCorrectionHeader -> Word8
_griddedCorrectionHeader_update_interval       :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , GriddedCorrectionHeader -> Word8
_griddedCorrectionHeader_iod_atmo              :: !Word8
    -- ^ IOD of the SSR atmospheric correction
  , GriddedCorrectionHeader -> Word8
_griddedCorrectionHeader_tropo_quality_indicator :: !Word8
    -- ^ Quality of the troposphere data. Encoded following RTCM DF389
    -- specification in units of m.
  } deriving ( Int -> GriddedCorrectionHeader -> ShowS
[GriddedCorrectionHeader] -> ShowS
GriddedCorrectionHeader -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GriddedCorrectionHeader] -> ShowS
$cshowList :: [GriddedCorrectionHeader] -> ShowS
show :: GriddedCorrectionHeader -> String
$cshow :: GriddedCorrectionHeader -> String
showsPrec :: Int -> GriddedCorrectionHeader -> ShowS
$cshowsPrec :: Int -> GriddedCorrectionHeader -> ShowS
Show, ReadPrec [GriddedCorrectionHeader]
ReadPrec GriddedCorrectionHeader
Int -> ReadS GriddedCorrectionHeader
ReadS [GriddedCorrectionHeader]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GriddedCorrectionHeader]
$creadListPrec :: ReadPrec [GriddedCorrectionHeader]
readPrec :: ReadPrec GriddedCorrectionHeader
$creadPrec :: ReadPrec GriddedCorrectionHeader
readList :: ReadS [GriddedCorrectionHeader]
$creadList :: ReadS [GriddedCorrectionHeader]
readsPrec :: Int -> ReadS GriddedCorrectionHeader
$creadsPrec :: Int -> ReadS GriddedCorrectionHeader
Read, GriddedCorrectionHeader -> GriddedCorrectionHeader -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GriddedCorrectionHeader -> GriddedCorrectionHeader -> Bool
$c/= :: GriddedCorrectionHeader -> GriddedCorrectionHeader -> Bool
== :: GriddedCorrectionHeader -> GriddedCorrectionHeader -> Bool
$c== :: GriddedCorrectionHeader -> GriddedCorrectionHeader -> Bool
Eq )

instance Binary GriddedCorrectionHeader where
  get :: Get GriddedCorrectionHeader
get = do
    Word16
_griddedCorrectionHeader_tile_set_id <- Get Word16
getWord16le
    Word16
_griddedCorrectionHeader_tile_id <- Get Word16
getWord16le
    GpsTimeSec
_griddedCorrectionHeader_time <- forall t. Binary t => Get t
get
    Word16
_griddedCorrectionHeader_num_msgs <- Get Word16
getWord16le
    Word16
_griddedCorrectionHeader_seq_num <- Get Word16
getWord16le
    Word8
_griddedCorrectionHeader_update_interval <- Get Word8
getWord8
    Word8
_griddedCorrectionHeader_iod_atmo <- Get Word8
getWord8
    Word8
_griddedCorrectionHeader_tropo_quality_indicator <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure GriddedCorrectionHeader {Word8
Word16
GpsTimeSec
_griddedCorrectionHeader_tropo_quality_indicator :: Word8
_griddedCorrectionHeader_iod_atmo :: Word8
_griddedCorrectionHeader_update_interval :: Word8
_griddedCorrectionHeader_seq_num :: Word16
_griddedCorrectionHeader_num_msgs :: Word16
_griddedCorrectionHeader_time :: GpsTimeSec
_griddedCorrectionHeader_tile_id :: Word16
_griddedCorrectionHeader_tile_set_id :: Word16
_griddedCorrectionHeader_tropo_quality_indicator :: Word8
_griddedCorrectionHeader_iod_atmo :: Word8
_griddedCorrectionHeader_update_interval :: Word8
_griddedCorrectionHeader_seq_num :: Word16
_griddedCorrectionHeader_num_msgs :: Word16
_griddedCorrectionHeader_time :: GpsTimeSec
_griddedCorrectionHeader_tile_id :: Word16
_griddedCorrectionHeader_tile_set_id :: Word16
..}

  put :: GriddedCorrectionHeader -> Put
put GriddedCorrectionHeader {Word8
Word16
GpsTimeSec
_griddedCorrectionHeader_tropo_quality_indicator :: Word8
_griddedCorrectionHeader_iod_atmo :: Word8
_griddedCorrectionHeader_update_interval :: Word8
_griddedCorrectionHeader_seq_num :: Word16
_griddedCorrectionHeader_num_msgs :: Word16
_griddedCorrectionHeader_time :: GpsTimeSec
_griddedCorrectionHeader_tile_id :: Word16
_griddedCorrectionHeader_tile_set_id :: Word16
_griddedCorrectionHeader_tropo_quality_indicator :: GriddedCorrectionHeader -> Word8
_griddedCorrectionHeader_iod_atmo :: GriddedCorrectionHeader -> Word8
_griddedCorrectionHeader_update_interval :: GriddedCorrectionHeader -> Word8
_griddedCorrectionHeader_seq_num :: GriddedCorrectionHeader -> Word16
_griddedCorrectionHeader_num_msgs :: GriddedCorrectionHeader -> Word16
_griddedCorrectionHeader_time :: GriddedCorrectionHeader -> GpsTimeSec
_griddedCorrectionHeader_tile_id :: GriddedCorrectionHeader -> Word16
_griddedCorrectionHeader_tile_set_id :: GriddedCorrectionHeader -> Word16
..} = do
    Word16 -> Put
putWord16le Word16
_griddedCorrectionHeader_tile_set_id
    Word16 -> Put
putWord16le Word16
_griddedCorrectionHeader_tile_id
    forall t. Binary t => t -> Put
put GpsTimeSec
_griddedCorrectionHeader_time
    Word16 -> Put
putWord16le Word16
_griddedCorrectionHeader_num_msgs
    Word16 -> Put
putWord16le Word16
_griddedCorrectionHeader_seq_num
    Word8 -> Put
putWord8 Word8
_griddedCorrectionHeader_update_interval
    Word8 -> Put
putWord8 Word8
_griddedCorrectionHeader_iod_atmo
    Word8 -> Put
putWord8 Word8
_griddedCorrectionHeader_tropo_quality_indicator

$(makeJSON "_griddedCorrectionHeader_" ''GriddedCorrectionHeader)
$(makeLenses ''GriddedCorrectionHeader)

-- | STECSatElement.
--
-- STEC polynomial for the given satellite.
data STECSatElement = STECSatElement
  { STECSatElement -> SvId
_sTECSatElement_sv_id                :: !SvId
    -- ^ Unique space vehicle identifier
  , STECSatElement -> Word8
_sTECSatElement_stec_quality_indicator :: !Word8
    -- ^ Quality of the STEC data. Encoded following RTCM DF389 specification
    -- but in units of TECU instead of m.
  , STECSatElement -> [Int16]
_sTECSatElement_stec_coeff           :: ![Int16]
    -- ^ Coefficients of the STEC polynomial in the order of C00, C01, C10, C11.
    -- C00 = 0.05 TECU, C01/C10 = 0.02 TECU/deg, C11 0.02 TECU/deg^2
  } deriving ( Int -> STECSatElement -> ShowS
[STECSatElement] -> ShowS
STECSatElement -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [STECSatElement] -> ShowS
$cshowList :: [STECSatElement] -> ShowS
show :: STECSatElement -> String
$cshow :: STECSatElement -> String
showsPrec :: Int -> STECSatElement -> ShowS
$cshowsPrec :: Int -> STECSatElement -> ShowS
Show, ReadPrec [STECSatElement]
ReadPrec STECSatElement
Int -> ReadS STECSatElement
ReadS [STECSatElement]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [STECSatElement]
$creadListPrec :: ReadPrec [STECSatElement]
readPrec :: ReadPrec STECSatElement
$creadPrec :: ReadPrec STECSatElement
readList :: ReadS [STECSatElement]
$creadList :: ReadS [STECSatElement]
readsPrec :: Int -> ReadS STECSatElement
$creadsPrec :: Int -> ReadS STECSatElement
Read, STECSatElement -> STECSatElement -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: STECSatElement -> STECSatElement -> Bool
$c/= :: STECSatElement -> STECSatElement -> Bool
== :: STECSatElement -> STECSatElement -> Bool
$c== :: STECSatElement -> STECSatElement -> Bool
Eq )

instance Binary STECSatElement where
  get :: Get STECSatElement
get = do
    SvId
_sTECSatElement_sv_id <- forall t. Binary t => Get t
get
    Word8
_sTECSatElement_stec_quality_indicator <- Get Word8
getWord8
    [Int16]
_sTECSatElement_stec_coeff <- forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
4 (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure STECSatElement {[Int16]
Word8
SvId
_sTECSatElement_stec_coeff :: [Int16]
_sTECSatElement_stec_quality_indicator :: Word8
_sTECSatElement_sv_id :: SvId
_sTECSatElement_stec_coeff :: [Int16]
_sTECSatElement_stec_quality_indicator :: Word8
_sTECSatElement_sv_id :: SvId
..}

  put :: STECSatElement -> Put
put STECSatElement {[Int16]
Word8
SvId
_sTECSatElement_stec_coeff :: [Int16]
_sTECSatElement_stec_quality_indicator :: Word8
_sTECSatElement_sv_id :: SvId
_sTECSatElement_stec_coeff :: STECSatElement -> [Int16]
_sTECSatElement_stec_quality_indicator :: STECSatElement -> Word8
_sTECSatElement_sv_id :: STECSatElement -> SvId
..} = do
    forall t. Binary t => t -> Put
put SvId
_sTECSatElement_sv_id
    Word8 -> Put
putWord8 Word8
_sTECSatElement_stec_quality_indicator
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Int16]
_sTECSatElement_stec_coeff

$(makeJSON "_sTECSatElement_" ''STECSatElement)
$(makeLenses ''STECSatElement)

-- | TroposphericDelayCorrectionNoStd.
--
-- Troposphere vertical delays at the grid point.
data TroposphericDelayCorrectionNoStd = TroposphericDelayCorrectionNoStd
  { TroposphericDelayCorrectionNoStd -> Int16
_troposphericDelayCorrectionNoStd_hydro :: !Int16
    -- ^ Hydrostatic vertical delay
  , TroposphericDelayCorrectionNoStd -> Int8
_troposphericDelayCorrectionNoStd_wet :: !Int8
    -- ^ Wet vertical delay
  } deriving ( Int -> TroposphericDelayCorrectionNoStd -> ShowS
[TroposphericDelayCorrectionNoStd] -> ShowS
TroposphericDelayCorrectionNoStd -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TroposphericDelayCorrectionNoStd] -> ShowS
$cshowList :: [TroposphericDelayCorrectionNoStd] -> ShowS
show :: TroposphericDelayCorrectionNoStd -> String
$cshow :: TroposphericDelayCorrectionNoStd -> String
showsPrec :: Int -> TroposphericDelayCorrectionNoStd -> ShowS
$cshowsPrec :: Int -> TroposphericDelayCorrectionNoStd -> ShowS
Show, ReadPrec [TroposphericDelayCorrectionNoStd]
ReadPrec TroposphericDelayCorrectionNoStd
Int -> ReadS TroposphericDelayCorrectionNoStd
ReadS [TroposphericDelayCorrectionNoStd]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TroposphericDelayCorrectionNoStd]
$creadListPrec :: ReadPrec [TroposphericDelayCorrectionNoStd]
readPrec :: ReadPrec TroposphericDelayCorrectionNoStd
$creadPrec :: ReadPrec TroposphericDelayCorrectionNoStd
readList :: ReadS [TroposphericDelayCorrectionNoStd]
$creadList :: ReadS [TroposphericDelayCorrectionNoStd]
readsPrec :: Int -> ReadS TroposphericDelayCorrectionNoStd
$creadsPrec :: Int -> ReadS TroposphericDelayCorrectionNoStd
Read, TroposphericDelayCorrectionNoStd
-> TroposphericDelayCorrectionNoStd -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TroposphericDelayCorrectionNoStd
-> TroposphericDelayCorrectionNoStd -> Bool
$c/= :: TroposphericDelayCorrectionNoStd
-> TroposphericDelayCorrectionNoStd -> Bool
== :: TroposphericDelayCorrectionNoStd
-> TroposphericDelayCorrectionNoStd -> Bool
$c== :: TroposphericDelayCorrectionNoStd
-> TroposphericDelayCorrectionNoStd -> Bool
Eq )

instance Binary TroposphericDelayCorrectionNoStd where
  get :: Get TroposphericDelayCorrectionNoStd
get = do
    Int16
_troposphericDelayCorrectionNoStd_hydro <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    Int8
_troposphericDelayCorrectionNoStd_wet <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word8
getWord8)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure TroposphericDelayCorrectionNoStd {Int8
Int16
_troposphericDelayCorrectionNoStd_wet :: Int8
_troposphericDelayCorrectionNoStd_hydro :: Int16
_troposphericDelayCorrectionNoStd_wet :: Int8
_troposphericDelayCorrectionNoStd_hydro :: Int16
..}

  put :: TroposphericDelayCorrectionNoStd -> Put
put TroposphericDelayCorrectionNoStd {Int8
Int16
_troposphericDelayCorrectionNoStd_wet :: Int8
_troposphericDelayCorrectionNoStd_hydro :: Int16
_troposphericDelayCorrectionNoStd_wet :: TroposphericDelayCorrectionNoStd -> Int8
_troposphericDelayCorrectionNoStd_hydro :: TroposphericDelayCorrectionNoStd -> Int16
..} = do
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_troposphericDelayCorrectionNoStd_hydro
    (Word8 -> Put
putWord8 forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int8
_troposphericDelayCorrectionNoStd_wet

$(makeJSON "_troposphericDelayCorrectionNoStd_" ''TroposphericDelayCorrectionNoStd)
$(makeLenses ''TroposphericDelayCorrectionNoStd)

-- | TroposphericDelayCorrection.
--
-- Troposphere vertical delays (mean and standard deviation) at the grid
-- point.
data TroposphericDelayCorrection = TroposphericDelayCorrection
  { TroposphericDelayCorrection -> Int16
_troposphericDelayCorrection_hydro :: !Int16
    -- ^ Hydrostatic vertical delay. Add 2.3 m to get actual value.
  , TroposphericDelayCorrection -> Int8
_troposphericDelayCorrection_wet  :: !Int8
    -- ^ Wet vertical delay. Add 0.252 m to get actual value.
  , TroposphericDelayCorrection -> Word8
_troposphericDelayCorrection_stddev :: !Word8
    -- ^ Modified DF389. class 3 MSB, value 5 LSB. stddev = (3^class * (1 +
    -- value/16) - 1)
  } deriving ( Int -> TroposphericDelayCorrection -> ShowS
[TroposphericDelayCorrection] -> ShowS
TroposphericDelayCorrection -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TroposphericDelayCorrection] -> ShowS
$cshowList :: [TroposphericDelayCorrection] -> ShowS
show :: TroposphericDelayCorrection -> String
$cshow :: TroposphericDelayCorrection -> String
showsPrec :: Int -> TroposphericDelayCorrection -> ShowS
$cshowsPrec :: Int -> TroposphericDelayCorrection -> ShowS
Show, ReadPrec [TroposphericDelayCorrection]
ReadPrec TroposphericDelayCorrection
Int -> ReadS TroposphericDelayCorrection
ReadS [TroposphericDelayCorrection]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TroposphericDelayCorrection]
$creadListPrec :: ReadPrec [TroposphericDelayCorrection]
readPrec :: ReadPrec TroposphericDelayCorrection
$creadPrec :: ReadPrec TroposphericDelayCorrection
readList :: ReadS [TroposphericDelayCorrection]
$creadList :: ReadS [TroposphericDelayCorrection]
readsPrec :: Int -> ReadS TroposphericDelayCorrection
$creadsPrec :: Int -> ReadS TroposphericDelayCorrection
Read, TroposphericDelayCorrection -> TroposphericDelayCorrection -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TroposphericDelayCorrection -> TroposphericDelayCorrection -> Bool
$c/= :: TroposphericDelayCorrection -> TroposphericDelayCorrection -> Bool
== :: TroposphericDelayCorrection -> TroposphericDelayCorrection -> Bool
$c== :: TroposphericDelayCorrection -> TroposphericDelayCorrection -> Bool
Eq )

instance Binary TroposphericDelayCorrection where
  get :: Get TroposphericDelayCorrection
get = do
    Int16
_troposphericDelayCorrection_hydro <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    Int8
_troposphericDelayCorrection_wet <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word8
getWord8)
    Word8
_troposphericDelayCorrection_stddev <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure TroposphericDelayCorrection {Int8
Int16
Word8
_troposphericDelayCorrection_stddev :: Word8
_troposphericDelayCorrection_wet :: Int8
_troposphericDelayCorrection_hydro :: Int16
_troposphericDelayCorrection_stddev :: Word8
_troposphericDelayCorrection_wet :: Int8
_troposphericDelayCorrection_hydro :: Int16
..}

  put :: TroposphericDelayCorrection -> Put
put TroposphericDelayCorrection {Int8
Int16
Word8
_troposphericDelayCorrection_stddev :: Word8
_troposphericDelayCorrection_wet :: Int8
_troposphericDelayCorrection_hydro :: Int16
_troposphericDelayCorrection_stddev :: TroposphericDelayCorrection -> Word8
_troposphericDelayCorrection_wet :: TroposphericDelayCorrection -> Int8
_troposphericDelayCorrection_hydro :: TroposphericDelayCorrection -> Int16
..} = do
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_troposphericDelayCorrection_hydro
    (Word8 -> Put
putWord8 forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int8
_troposphericDelayCorrection_wet
    Word8 -> Put
putWord8 Word8
_troposphericDelayCorrection_stddev

$(makeJSON "_troposphericDelayCorrection_" ''TroposphericDelayCorrection)
$(makeLenses ''TroposphericDelayCorrection)

-- | STECResidualNoStd.
--
-- STEC residual for the given satellite at the grid point.
data STECResidualNoStd = STECResidualNoStd
  { STECResidualNoStd -> SvId
_sTECResidualNoStd_sv_id  :: !SvId
    -- ^ space vehicle identifier
  , STECResidualNoStd -> Int16
_sTECResidualNoStd_residual :: !Int16
    -- ^ STEC residual
  } deriving ( Int -> STECResidualNoStd -> ShowS
[STECResidualNoStd] -> ShowS
STECResidualNoStd -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [STECResidualNoStd] -> ShowS
$cshowList :: [STECResidualNoStd] -> ShowS
show :: STECResidualNoStd -> String
$cshow :: STECResidualNoStd -> String
showsPrec :: Int -> STECResidualNoStd -> ShowS
$cshowsPrec :: Int -> STECResidualNoStd -> ShowS
Show, ReadPrec [STECResidualNoStd]
ReadPrec STECResidualNoStd
Int -> ReadS STECResidualNoStd
ReadS [STECResidualNoStd]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [STECResidualNoStd]
$creadListPrec :: ReadPrec [STECResidualNoStd]
readPrec :: ReadPrec STECResidualNoStd
$creadPrec :: ReadPrec STECResidualNoStd
readList :: ReadS [STECResidualNoStd]
$creadList :: ReadS [STECResidualNoStd]
readsPrec :: Int -> ReadS STECResidualNoStd
$creadsPrec :: Int -> ReadS STECResidualNoStd
Read, STECResidualNoStd -> STECResidualNoStd -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: STECResidualNoStd -> STECResidualNoStd -> Bool
$c/= :: STECResidualNoStd -> STECResidualNoStd -> Bool
== :: STECResidualNoStd -> STECResidualNoStd -> Bool
$c== :: STECResidualNoStd -> STECResidualNoStd -> Bool
Eq )

instance Binary STECResidualNoStd where
  get :: Get STECResidualNoStd
get = do
    SvId
_sTECResidualNoStd_sv_id <- forall t. Binary t => Get t
get
    Int16
_sTECResidualNoStd_residual <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure STECResidualNoStd {Int16
SvId
_sTECResidualNoStd_residual :: Int16
_sTECResidualNoStd_sv_id :: SvId
_sTECResidualNoStd_residual :: Int16
_sTECResidualNoStd_sv_id :: SvId
..}

  put :: STECResidualNoStd -> Put
put STECResidualNoStd {Int16
SvId
_sTECResidualNoStd_residual :: Int16
_sTECResidualNoStd_sv_id :: SvId
_sTECResidualNoStd_residual :: STECResidualNoStd -> Int16
_sTECResidualNoStd_sv_id :: STECResidualNoStd -> SvId
..} = do
    forall t. Binary t => t -> Put
put SvId
_sTECResidualNoStd_sv_id
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_sTECResidualNoStd_residual

$(makeJSON "_sTECResidualNoStd_" ''STECResidualNoStd)
$(makeLenses ''STECResidualNoStd)

-- | STECResidual.
--
-- STEC residual (mean and standard deviation) for the given satellite at the
-- grid point.
data STECResidual = STECResidual
  { STECResidual -> SvId
_sTECResidual_sv_id  :: !SvId
    -- ^ space vehicle identifier
  , STECResidual -> Int16
_sTECResidual_residual :: !Int16
    -- ^ STEC residual
  , STECResidual -> Word8
_sTECResidual_stddev :: !Word8
    -- ^ Modified DF389. class 3 MSB, value 5 LSB. stddev = (3^class * (1 +
    -- value/16) - 1) * 10
  } deriving ( Int -> STECResidual -> ShowS
[STECResidual] -> ShowS
STECResidual -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [STECResidual] -> ShowS
$cshowList :: [STECResidual] -> ShowS
show :: STECResidual -> String
$cshow :: STECResidual -> String
showsPrec :: Int -> STECResidual -> ShowS
$cshowsPrec :: Int -> STECResidual -> ShowS
Show, ReadPrec [STECResidual]
ReadPrec STECResidual
Int -> ReadS STECResidual
ReadS [STECResidual]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [STECResidual]
$creadListPrec :: ReadPrec [STECResidual]
readPrec :: ReadPrec STECResidual
$creadPrec :: ReadPrec STECResidual
readList :: ReadS [STECResidual]
$creadList :: ReadS [STECResidual]
readsPrec :: Int -> ReadS STECResidual
$creadsPrec :: Int -> ReadS STECResidual
Read, STECResidual -> STECResidual -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: STECResidual -> STECResidual -> Bool
$c/= :: STECResidual -> STECResidual -> Bool
== :: STECResidual -> STECResidual -> Bool
$c== :: STECResidual -> STECResidual -> Bool
Eq )

instance Binary STECResidual where
  get :: Get STECResidual
get = do
    SvId
_sTECResidual_sv_id <- forall t. Binary t => Get t
get
    Int16
_sTECResidual_residual <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    Word8
_sTECResidual_stddev <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure STECResidual {Int16
Word8
SvId
_sTECResidual_stddev :: Word8
_sTECResidual_residual :: Int16
_sTECResidual_sv_id :: SvId
_sTECResidual_stddev :: Word8
_sTECResidual_residual :: Int16
_sTECResidual_sv_id :: SvId
..}

  put :: STECResidual -> Put
put STECResidual {Int16
Word8
SvId
_sTECResidual_stddev :: Word8
_sTECResidual_residual :: Int16
_sTECResidual_sv_id :: SvId
_sTECResidual_stddev :: STECResidual -> Word8
_sTECResidual_residual :: STECResidual -> Int16
_sTECResidual_sv_id :: STECResidual -> SvId
..} = do
    forall t. Binary t => t -> Put
put SvId
_sTECResidual_sv_id
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_sTECResidual_residual
    Word8 -> Put
putWord8 Word8
_sTECResidual_stddev

$(makeJSON "_sTECResidual_" ''STECResidual)
$(makeLenses ''STECResidual)

msgSsrOrbitClock :: Word16
msgSsrOrbitClock :: Word16
msgSsrOrbitClock = Word16
0x05DD

-- | SBP class for message MSG_SSR_ORBIT_CLOCK (0x05DD).
--
-- The precise orbit and clock correction message is to be applied as a delta
-- correction to broadcast ephemeris and is an equivalent to the 1060 /1066
-- RTCM message types.
data MsgSsrOrbitClock = MsgSsrOrbitClock
  { MsgSsrOrbitClock -> GpsTimeSec
_msgSsrOrbitClock_time          :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , MsgSsrOrbitClock -> GnssSignal
_msgSsrOrbitClock_sid           :: !GnssSignal
    -- ^ GNSS signal identifier (16 bit)
  , MsgSsrOrbitClock -> Word8
_msgSsrOrbitClock_update_interval :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , MsgSsrOrbitClock -> Word8
_msgSsrOrbitClock_iod_ssr       :: !Word8
    -- ^ IOD of the SSR correction. A change of Issue Of Data SSR is used to
    -- indicate a change in the SSR generating configuration
  , MsgSsrOrbitClock -> Word32
_msgSsrOrbitClock_iod           :: !Word32
    -- ^ Issue of broadcast ephemeris data or IODCRC (Beidou)
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_radial        :: !Int32
    -- ^ Orbit radial delta correction
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_along         :: !Int32
    -- ^ Orbit along delta correction
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_cross         :: !Int32
    -- ^ Orbit along delta correction
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_dot_radial    :: !Int32
    -- ^ Velocity of orbit radial delta correction
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_dot_along     :: !Int32
    -- ^ Velocity of orbit along delta correction
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_dot_cross     :: !Int32
    -- ^ Velocity of orbit cross delta correction
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_c0            :: !Int32
    -- ^ C0 polynomial coefficient for correction of broadcast satellite clock
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_c1            :: !Int32
    -- ^ C1 polynomial coefficient for correction of broadcast satellite clock
  , MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_c2            :: !Int32
    -- ^ C2 polynomial coefficient for correction of broadcast satellite clock
  } deriving ( Int -> MsgSsrOrbitClock -> ShowS
[MsgSsrOrbitClock] -> ShowS
MsgSsrOrbitClock -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrOrbitClock] -> ShowS
$cshowList :: [MsgSsrOrbitClock] -> ShowS
show :: MsgSsrOrbitClock -> String
$cshow :: MsgSsrOrbitClock -> String
showsPrec :: Int -> MsgSsrOrbitClock -> ShowS
$cshowsPrec :: Int -> MsgSsrOrbitClock -> ShowS
Show, ReadPrec [MsgSsrOrbitClock]
ReadPrec MsgSsrOrbitClock
Int -> ReadS MsgSsrOrbitClock
ReadS [MsgSsrOrbitClock]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrOrbitClock]
$creadListPrec :: ReadPrec [MsgSsrOrbitClock]
readPrec :: ReadPrec MsgSsrOrbitClock
$creadPrec :: ReadPrec MsgSsrOrbitClock
readList :: ReadS [MsgSsrOrbitClock]
$creadList :: ReadS [MsgSsrOrbitClock]
readsPrec :: Int -> ReadS MsgSsrOrbitClock
$creadsPrec :: Int -> ReadS MsgSsrOrbitClock
Read, MsgSsrOrbitClock -> MsgSsrOrbitClock -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrOrbitClock -> MsgSsrOrbitClock -> Bool
$c/= :: MsgSsrOrbitClock -> MsgSsrOrbitClock -> Bool
== :: MsgSsrOrbitClock -> MsgSsrOrbitClock -> Bool
$c== :: MsgSsrOrbitClock -> MsgSsrOrbitClock -> Bool
Eq )

instance Binary MsgSsrOrbitClock where
  get :: Get MsgSsrOrbitClock
get = do
    GpsTimeSec
_msgSsrOrbitClock_time <- forall t. Binary t => Get t
get
    GnssSignal
_msgSsrOrbitClock_sid <- forall t. Binary t => Get t
get
    Word8
_msgSsrOrbitClock_update_interval <- Get Word8
getWord8
    Word8
_msgSsrOrbitClock_iod_ssr <- Get Word8
getWord8
    Word32
_msgSsrOrbitClock_iod <- Get Word32
getWord32le
    Int32
_msgSsrOrbitClock_radial <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_along <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_cross <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_dot_radial <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_dot_along <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_dot_cross <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_c0 <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_c1 <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClock_c2 <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrOrbitClock {Int32
Word8
Word32
GnssSignal
GpsTimeSec
_msgSsrOrbitClock_c2 :: Int32
_msgSsrOrbitClock_c1 :: Int32
_msgSsrOrbitClock_c0 :: Int32
_msgSsrOrbitClock_dot_cross :: Int32
_msgSsrOrbitClock_dot_along :: Int32
_msgSsrOrbitClock_dot_radial :: Int32
_msgSsrOrbitClock_cross :: Int32
_msgSsrOrbitClock_along :: Int32
_msgSsrOrbitClock_radial :: Int32
_msgSsrOrbitClock_iod :: Word32
_msgSsrOrbitClock_iod_ssr :: Word8
_msgSsrOrbitClock_update_interval :: Word8
_msgSsrOrbitClock_sid :: GnssSignal
_msgSsrOrbitClock_time :: GpsTimeSec
_msgSsrOrbitClock_c2 :: Int32
_msgSsrOrbitClock_c1 :: Int32
_msgSsrOrbitClock_c0 :: Int32
_msgSsrOrbitClock_dot_cross :: Int32
_msgSsrOrbitClock_dot_along :: Int32
_msgSsrOrbitClock_dot_radial :: Int32
_msgSsrOrbitClock_cross :: Int32
_msgSsrOrbitClock_along :: Int32
_msgSsrOrbitClock_radial :: Int32
_msgSsrOrbitClock_iod :: Word32
_msgSsrOrbitClock_iod_ssr :: Word8
_msgSsrOrbitClock_update_interval :: Word8
_msgSsrOrbitClock_sid :: GnssSignal
_msgSsrOrbitClock_time :: GpsTimeSec
..}

  put :: MsgSsrOrbitClock -> Put
put MsgSsrOrbitClock {Int32
Word8
Word32
GnssSignal
GpsTimeSec
_msgSsrOrbitClock_c2 :: Int32
_msgSsrOrbitClock_c1 :: Int32
_msgSsrOrbitClock_c0 :: Int32
_msgSsrOrbitClock_dot_cross :: Int32
_msgSsrOrbitClock_dot_along :: Int32
_msgSsrOrbitClock_dot_radial :: Int32
_msgSsrOrbitClock_cross :: Int32
_msgSsrOrbitClock_along :: Int32
_msgSsrOrbitClock_radial :: Int32
_msgSsrOrbitClock_iod :: Word32
_msgSsrOrbitClock_iod_ssr :: Word8
_msgSsrOrbitClock_update_interval :: Word8
_msgSsrOrbitClock_sid :: GnssSignal
_msgSsrOrbitClock_time :: GpsTimeSec
_msgSsrOrbitClock_c2 :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_c1 :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_c0 :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_dot_cross :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_dot_along :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_dot_radial :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_cross :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_along :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_radial :: MsgSsrOrbitClock -> Int32
_msgSsrOrbitClock_iod :: MsgSsrOrbitClock -> Word32
_msgSsrOrbitClock_iod_ssr :: MsgSsrOrbitClock -> Word8
_msgSsrOrbitClock_update_interval :: MsgSsrOrbitClock -> Word8
_msgSsrOrbitClock_sid :: MsgSsrOrbitClock -> GnssSignal
_msgSsrOrbitClock_time :: MsgSsrOrbitClock -> GpsTimeSec
..} = do
    forall t. Binary t => t -> Put
put GpsTimeSec
_msgSsrOrbitClock_time
    forall t. Binary t => t -> Put
put GnssSignal
_msgSsrOrbitClock_sid
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClock_update_interval
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClock_iod_ssr
    Word32 -> Put
putWord32le Word32
_msgSsrOrbitClock_iod
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_radial
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_along
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_cross
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_dot_radial
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_dot_along
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_dot_cross
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_c0
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_c1
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClock_c2

$(makeSBP 'msgSsrOrbitClock ''MsgSsrOrbitClock)
$(makeJSON "_msgSsrOrbitClock_" ''MsgSsrOrbitClock)
$(makeLenses ''MsgSsrOrbitClock)

msgSsrCodeBiases :: Word16
msgSsrCodeBiases :: Word16
msgSsrCodeBiases = Word16
0x05E1

-- | SBP class for message MSG_SSR_CODE_BIASES (0x05E1).
--
-- The precise code biases message is to be added to the pseudorange of the
-- corresponding signal to get corrected pseudorange. It is an equivalent to
-- the 1059 / 1065 RTCM message types.
data MsgSsrCodeBiases = MsgSsrCodeBiases
  { MsgSsrCodeBiases -> GpsTimeSec
_msgSsrCodeBiases_time          :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , MsgSsrCodeBiases -> GnssSignal
_msgSsrCodeBiases_sid           :: !GnssSignal
    -- ^ GNSS signal identifier (16 bit)
  , MsgSsrCodeBiases -> Word8
_msgSsrCodeBiases_update_interval :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , MsgSsrCodeBiases -> Word8
_msgSsrCodeBiases_iod_ssr       :: !Word8
    -- ^ IOD of the SSR correction. A change of Issue Of Data SSR is used to
    -- indicate a change in the SSR generating configuration
  , MsgSsrCodeBiases -> [CodeBiasesContent]
_msgSsrCodeBiases_biases        :: ![CodeBiasesContent]
    -- ^ Code biases for the different satellite signals
  } deriving ( Int -> MsgSsrCodeBiases -> ShowS
[MsgSsrCodeBiases] -> ShowS
MsgSsrCodeBiases -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrCodeBiases] -> ShowS
$cshowList :: [MsgSsrCodeBiases] -> ShowS
show :: MsgSsrCodeBiases -> String
$cshow :: MsgSsrCodeBiases -> String
showsPrec :: Int -> MsgSsrCodeBiases -> ShowS
$cshowsPrec :: Int -> MsgSsrCodeBiases -> ShowS
Show, ReadPrec [MsgSsrCodeBiases]
ReadPrec MsgSsrCodeBiases
Int -> ReadS MsgSsrCodeBiases
ReadS [MsgSsrCodeBiases]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrCodeBiases]
$creadListPrec :: ReadPrec [MsgSsrCodeBiases]
readPrec :: ReadPrec MsgSsrCodeBiases
$creadPrec :: ReadPrec MsgSsrCodeBiases
readList :: ReadS [MsgSsrCodeBiases]
$creadList :: ReadS [MsgSsrCodeBiases]
readsPrec :: Int -> ReadS MsgSsrCodeBiases
$creadsPrec :: Int -> ReadS MsgSsrCodeBiases
Read, MsgSsrCodeBiases -> MsgSsrCodeBiases -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrCodeBiases -> MsgSsrCodeBiases -> Bool
$c/= :: MsgSsrCodeBiases -> MsgSsrCodeBiases -> Bool
== :: MsgSsrCodeBiases -> MsgSsrCodeBiases -> Bool
$c== :: MsgSsrCodeBiases -> MsgSsrCodeBiases -> Bool
Eq )

instance Binary MsgSsrCodeBiases where
  get :: Get MsgSsrCodeBiases
get = do
    GpsTimeSec
_msgSsrCodeBiases_time <- forall t. Binary t => Get t
get
    GnssSignal
_msgSsrCodeBiases_sid <- forall t. Binary t => Get t
get
    Word8
_msgSsrCodeBiases_update_interval <- Get Word8
getWord8
    Word8
_msgSsrCodeBiases_iod_ssr <- Get Word8
getWord8
    [CodeBiasesContent]
_msgSsrCodeBiases_biases <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrCodeBiases {[CodeBiasesContent]
Word8
GnssSignal
GpsTimeSec
_msgSsrCodeBiases_biases :: [CodeBiasesContent]
_msgSsrCodeBiases_iod_ssr :: Word8
_msgSsrCodeBiases_update_interval :: Word8
_msgSsrCodeBiases_sid :: GnssSignal
_msgSsrCodeBiases_time :: GpsTimeSec
_msgSsrCodeBiases_biases :: [CodeBiasesContent]
_msgSsrCodeBiases_iod_ssr :: Word8
_msgSsrCodeBiases_update_interval :: Word8
_msgSsrCodeBiases_sid :: GnssSignal
_msgSsrCodeBiases_time :: GpsTimeSec
..}

  put :: MsgSsrCodeBiases -> Put
put MsgSsrCodeBiases {[CodeBiasesContent]
Word8
GnssSignal
GpsTimeSec
_msgSsrCodeBiases_biases :: [CodeBiasesContent]
_msgSsrCodeBiases_iod_ssr :: Word8
_msgSsrCodeBiases_update_interval :: Word8
_msgSsrCodeBiases_sid :: GnssSignal
_msgSsrCodeBiases_time :: GpsTimeSec
_msgSsrCodeBiases_biases :: MsgSsrCodeBiases -> [CodeBiasesContent]
_msgSsrCodeBiases_iod_ssr :: MsgSsrCodeBiases -> Word8
_msgSsrCodeBiases_update_interval :: MsgSsrCodeBiases -> Word8
_msgSsrCodeBiases_sid :: MsgSsrCodeBiases -> GnssSignal
_msgSsrCodeBiases_time :: MsgSsrCodeBiases -> GpsTimeSec
..} = do
    forall t. Binary t => t -> Put
put GpsTimeSec
_msgSsrCodeBiases_time
    forall t. Binary t => t -> Put
put GnssSignal
_msgSsrCodeBiases_sid
    Word8 -> Put
putWord8 Word8
_msgSsrCodeBiases_update_interval
    Word8 -> Put
putWord8 Word8
_msgSsrCodeBiases_iod_ssr
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [CodeBiasesContent]
_msgSsrCodeBiases_biases

$(makeSBP 'msgSsrCodeBiases ''MsgSsrCodeBiases)
$(makeJSON "_msgSsrCodeBiases_" ''MsgSsrCodeBiases)
$(makeLenses ''MsgSsrCodeBiases)

msgSsrPhaseBiases :: Word16
msgSsrPhaseBiases :: Word16
msgSsrPhaseBiases = Word16
0x05E6

-- | SBP class for message MSG_SSR_PHASE_BIASES (0x05E6).
--
-- The precise phase biases message contains the biases to be added to the
-- carrier phase of the corresponding signal to get corrected carrier phase
-- measurement, as well as the satellite yaw angle to be applied to compute
-- the phase wind-up correction. It is typically an equivalent to the 1265
-- RTCM message types.
data MsgSsrPhaseBiases = MsgSsrPhaseBiases
  { MsgSsrPhaseBiases -> GpsTimeSec
_msgSsrPhaseBiases_time          :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , MsgSsrPhaseBiases -> GnssSignal
_msgSsrPhaseBiases_sid           :: !GnssSignal
    -- ^ GNSS signal identifier (16 bit)
  , MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_update_interval :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_iod_ssr       :: !Word8
    -- ^ IOD of the SSR correction. A change of Issue Of Data SSR is used to
    -- indicate a change in the SSR generating configuration
  , MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_dispersive_bias :: !Word8
    -- ^ Indicator for the dispersive phase biases property.
  , MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_mw_consistency :: !Word8
    -- ^ Consistency indicator for Melbourne-Wubbena linear combinations
  , MsgSsrPhaseBiases -> Word16
_msgSsrPhaseBiases_yaw           :: !Word16
    -- ^ Satellite yaw angle
  , MsgSsrPhaseBiases -> Int8
_msgSsrPhaseBiases_yaw_rate      :: !Int8
    -- ^ Satellite yaw angle rate
  , MsgSsrPhaseBiases -> [PhaseBiasesContent]
_msgSsrPhaseBiases_biases        :: ![PhaseBiasesContent]
    -- ^ Phase biases corrections for a satellite being tracked.
  } deriving ( Int -> MsgSsrPhaseBiases -> ShowS
[MsgSsrPhaseBiases] -> ShowS
MsgSsrPhaseBiases -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrPhaseBiases] -> ShowS
$cshowList :: [MsgSsrPhaseBiases] -> ShowS
show :: MsgSsrPhaseBiases -> String
$cshow :: MsgSsrPhaseBiases -> String
showsPrec :: Int -> MsgSsrPhaseBiases -> ShowS
$cshowsPrec :: Int -> MsgSsrPhaseBiases -> ShowS
Show, ReadPrec [MsgSsrPhaseBiases]
ReadPrec MsgSsrPhaseBiases
Int -> ReadS MsgSsrPhaseBiases
ReadS [MsgSsrPhaseBiases]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrPhaseBiases]
$creadListPrec :: ReadPrec [MsgSsrPhaseBiases]
readPrec :: ReadPrec MsgSsrPhaseBiases
$creadPrec :: ReadPrec MsgSsrPhaseBiases
readList :: ReadS [MsgSsrPhaseBiases]
$creadList :: ReadS [MsgSsrPhaseBiases]
readsPrec :: Int -> ReadS MsgSsrPhaseBiases
$creadsPrec :: Int -> ReadS MsgSsrPhaseBiases
Read, MsgSsrPhaseBiases -> MsgSsrPhaseBiases -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrPhaseBiases -> MsgSsrPhaseBiases -> Bool
$c/= :: MsgSsrPhaseBiases -> MsgSsrPhaseBiases -> Bool
== :: MsgSsrPhaseBiases -> MsgSsrPhaseBiases -> Bool
$c== :: MsgSsrPhaseBiases -> MsgSsrPhaseBiases -> Bool
Eq )

instance Binary MsgSsrPhaseBiases where
  get :: Get MsgSsrPhaseBiases
get = do
    GpsTimeSec
_msgSsrPhaseBiases_time <- forall t. Binary t => Get t
get
    GnssSignal
_msgSsrPhaseBiases_sid <- forall t. Binary t => Get t
get
    Word8
_msgSsrPhaseBiases_update_interval <- Get Word8
getWord8
    Word8
_msgSsrPhaseBiases_iod_ssr <- Get Word8
getWord8
    Word8
_msgSsrPhaseBiases_dispersive_bias <- Get Word8
getWord8
    Word8
_msgSsrPhaseBiases_mw_consistency <- Get Word8
getWord8
    Word16
_msgSsrPhaseBiases_yaw <- Get Word16
getWord16le
    Int8
_msgSsrPhaseBiases_yaw_rate <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word8
getWord8)
    [PhaseBiasesContent]
_msgSsrPhaseBiases_biases <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrPhaseBiases {Int8
[PhaseBiasesContent]
Word8
Word16
GnssSignal
GpsTimeSec
_msgSsrPhaseBiases_biases :: [PhaseBiasesContent]
_msgSsrPhaseBiases_yaw_rate :: Int8
_msgSsrPhaseBiases_yaw :: Word16
_msgSsrPhaseBiases_mw_consistency :: Word8
_msgSsrPhaseBiases_dispersive_bias :: Word8
_msgSsrPhaseBiases_iod_ssr :: Word8
_msgSsrPhaseBiases_update_interval :: Word8
_msgSsrPhaseBiases_sid :: GnssSignal
_msgSsrPhaseBiases_time :: GpsTimeSec
_msgSsrPhaseBiases_biases :: [PhaseBiasesContent]
_msgSsrPhaseBiases_yaw_rate :: Int8
_msgSsrPhaseBiases_yaw :: Word16
_msgSsrPhaseBiases_mw_consistency :: Word8
_msgSsrPhaseBiases_dispersive_bias :: Word8
_msgSsrPhaseBiases_iod_ssr :: Word8
_msgSsrPhaseBiases_update_interval :: Word8
_msgSsrPhaseBiases_sid :: GnssSignal
_msgSsrPhaseBiases_time :: GpsTimeSec
..}

  put :: MsgSsrPhaseBiases -> Put
put MsgSsrPhaseBiases {Int8
[PhaseBiasesContent]
Word8
Word16
GnssSignal
GpsTimeSec
_msgSsrPhaseBiases_biases :: [PhaseBiasesContent]
_msgSsrPhaseBiases_yaw_rate :: Int8
_msgSsrPhaseBiases_yaw :: Word16
_msgSsrPhaseBiases_mw_consistency :: Word8
_msgSsrPhaseBiases_dispersive_bias :: Word8
_msgSsrPhaseBiases_iod_ssr :: Word8
_msgSsrPhaseBiases_update_interval :: Word8
_msgSsrPhaseBiases_sid :: GnssSignal
_msgSsrPhaseBiases_time :: GpsTimeSec
_msgSsrPhaseBiases_biases :: MsgSsrPhaseBiases -> [PhaseBiasesContent]
_msgSsrPhaseBiases_yaw_rate :: MsgSsrPhaseBiases -> Int8
_msgSsrPhaseBiases_yaw :: MsgSsrPhaseBiases -> Word16
_msgSsrPhaseBiases_mw_consistency :: MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_dispersive_bias :: MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_iod_ssr :: MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_update_interval :: MsgSsrPhaseBiases -> Word8
_msgSsrPhaseBiases_sid :: MsgSsrPhaseBiases -> GnssSignal
_msgSsrPhaseBiases_time :: MsgSsrPhaseBiases -> GpsTimeSec
..} = do
    forall t. Binary t => t -> Put
put GpsTimeSec
_msgSsrPhaseBiases_time
    forall t. Binary t => t -> Put
put GnssSignal
_msgSsrPhaseBiases_sid
    Word8 -> Put
putWord8 Word8
_msgSsrPhaseBiases_update_interval
    Word8 -> Put
putWord8 Word8
_msgSsrPhaseBiases_iod_ssr
    Word8 -> Put
putWord8 Word8
_msgSsrPhaseBiases_dispersive_bias
    Word8 -> Put
putWord8 Word8
_msgSsrPhaseBiases_mw_consistency
    Word16 -> Put
putWord16le Word16
_msgSsrPhaseBiases_yaw
    (Word8 -> Put
putWord8 forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int8
_msgSsrPhaseBiases_yaw_rate
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [PhaseBiasesContent]
_msgSsrPhaseBiases_biases

$(makeSBP 'msgSsrPhaseBiases ''MsgSsrPhaseBiases)
$(makeJSON "_msgSsrPhaseBiases_" ''MsgSsrPhaseBiases)
$(makeLenses ''MsgSsrPhaseBiases)

msgSsrStecCorrectionDep :: Word16
msgSsrStecCorrectionDep :: Word16
msgSsrStecCorrectionDep = Word16
0x05FB

-- | SBP class for message MSG_SSR_STEC_CORRECTION_DEP (0x05FB).
--
-- The Slant Total Electron Content per space vehicle, given as polynomial
-- approximation for a given tile. This should be combined with the
-- MSG_SSR_GRIDDED_CORRECTION message to get the state space representation of
-- the atmospheric delay.
--
-- It is typically equivalent to the QZSS CLAS Sub Type 8 messages.
data MsgSsrStecCorrectionDep = MsgSsrStecCorrectionDep
  { MsgSsrStecCorrectionDep -> STECHeader
_msgSsrStecCorrectionDep_header      :: !STECHeader
    -- ^ Header of a STEC polynomial coefficient message.
  , MsgSsrStecCorrectionDep -> [STECSatElement]
_msgSsrStecCorrectionDep_stec_sat_list :: ![STECSatElement]
    -- ^ Array of STEC polynomial coefficients for each space vehicle.
  } deriving ( Int -> MsgSsrStecCorrectionDep -> ShowS
[MsgSsrStecCorrectionDep] -> ShowS
MsgSsrStecCorrectionDep -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrStecCorrectionDep] -> ShowS
$cshowList :: [MsgSsrStecCorrectionDep] -> ShowS
show :: MsgSsrStecCorrectionDep -> String
$cshow :: MsgSsrStecCorrectionDep -> String
showsPrec :: Int -> MsgSsrStecCorrectionDep -> ShowS
$cshowsPrec :: Int -> MsgSsrStecCorrectionDep -> ShowS
Show, ReadPrec [MsgSsrStecCorrectionDep]
ReadPrec MsgSsrStecCorrectionDep
Int -> ReadS MsgSsrStecCorrectionDep
ReadS [MsgSsrStecCorrectionDep]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrStecCorrectionDep]
$creadListPrec :: ReadPrec [MsgSsrStecCorrectionDep]
readPrec :: ReadPrec MsgSsrStecCorrectionDep
$creadPrec :: ReadPrec MsgSsrStecCorrectionDep
readList :: ReadS [MsgSsrStecCorrectionDep]
$creadList :: ReadS [MsgSsrStecCorrectionDep]
readsPrec :: Int -> ReadS MsgSsrStecCorrectionDep
$creadsPrec :: Int -> ReadS MsgSsrStecCorrectionDep
Read, MsgSsrStecCorrectionDep -> MsgSsrStecCorrectionDep -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrStecCorrectionDep -> MsgSsrStecCorrectionDep -> Bool
$c/= :: MsgSsrStecCorrectionDep -> MsgSsrStecCorrectionDep -> Bool
== :: MsgSsrStecCorrectionDep -> MsgSsrStecCorrectionDep -> Bool
$c== :: MsgSsrStecCorrectionDep -> MsgSsrStecCorrectionDep -> Bool
Eq )

instance Binary MsgSsrStecCorrectionDep where
  get :: Get MsgSsrStecCorrectionDep
get = do
    STECHeader
_msgSsrStecCorrectionDep_header <- forall t. Binary t => Get t
get
    [STECSatElement]
_msgSsrStecCorrectionDep_stec_sat_list <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrStecCorrectionDep {[STECSatElement]
STECHeader
_msgSsrStecCorrectionDep_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrectionDep_header :: STECHeader
_msgSsrStecCorrectionDep_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrectionDep_header :: STECHeader
..}

  put :: MsgSsrStecCorrectionDep -> Put
put MsgSsrStecCorrectionDep {[STECSatElement]
STECHeader
_msgSsrStecCorrectionDep_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrectionDep_header :: STECHeader
_msgSsrStecCorrectionDep_stec_sat_list :: MsgSsrStecCorrectionDep -> [STECSatElement]
_msgSsrStecCorrectionDep_header :: MsgSsrStecCorrectionDep -> STECHeader
..} = do
    forall t. Binary t => t -> Put
put STECHeader
_msgSsrStecCorrectionDep_header
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [STECSatElement]
_msgSsrStecCorrectionDep_stec_sat_list

$(makeSBP 'msgSsrStecCorrectionDep ''MsgSsrStecCorrectionDep)
$(makeJSON "_msgSsrStecCorrectionDep_" ''MsgSsrStecCorrectionDep)
$(makeLenses ''MsgSsrStecCorrectionDep)

data BoundsHeader = BoundsHeader
  { BoundsHeader -> GpsTimeSec
_boundsHeader_time          :: !GpsTimeSec
    -- ^ GNSS reference time of the bound
  , BoundsHeader -> Word8
_boundsHeader_num_msgs      :: !Word8
    -- ^ Number of messages in the dataset
  , BoundsHeader -> Word8
_boundsHeader_seq_num       :: !Word8
    -- ^ Position of this message in the dataset
  , BoundsHeader -> Word8
_boundsHeader_update_interval :: !Word8
    -- ^ Update interval between consecutive bounds. Similar to RTCM DF391.
  , BoundsHeader -> Word8
_boundsHeader_sol_id        :: !Word8
    -- ^ SSR Solution ID.
  } deriving ( Int -> BoundsHeader -> ShowS
[BoundsHeader] -> ShowS
BoundsHeader -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BoundsHeader] -> ShowS
$cshowList :: [BoundsHeader] -> ShowS
show :: BoundsHeader -> String
$cshow :: BoundsHeader -> String
showsPrec :: Int -> BoundsHeader -> ShowS
$cshowsPrec :: Int -> BoundsHeader -> ShowS
Show, ReadPrec [BoundsHeader]
ReadPrec BoundsHeader
Int -> ReadS BoundsHeader
ReadS [BoundsHeader]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [BoundsHeader]
$creadListPrec :: ReadPrec [BoundsHeader]
readPrec :: ReadPrec BoundsHeader
$creadPrec :: ReadPrec BoundsHeader
readList :: ReadS [BoundsHeader]
$creadList :: ReadS [BoundsHeader]
readsPrec :: Int -> ReadS BoundsHeader
$creadsPrec :: Int -> ReadS BoundsHeader
Read, BoundsHeader -> BoundsHeader -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BoundsHeader -> BoundsHeader -> Bool
$c/= :: BoundsHeader -> BoundsHeader -> Bool
== :: BoundsHeader -> BoundsHeader -> Bool
$c== :: BoundsHeader -> BoundsHeader -> Bool
Eq )

instance Binary BoundsHeader where
  get :: Get BoundsHeader
get = do
    GpsTimeSec
_boundsHeader_time <- forall t. Binary t => Get t
get
    Word8
_boundsHeader_num_msgs <- Get Word8
getWord8
    Word8
_boundsHeader_seq_num <- Get Word8
getWord8
    Word8
_boundsHeader_update_interval <- Get Word8
getWord8
    Word8
_boundsHeader_sol_id <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure BoundsHeader {Word8
GpsTimeSec
_boundsHeader_sol_id :: Word8
_boundsHeader_update_interval :: Word8
_boundsHeader_seq_num :: Word8
_boundsHeader_num_msgs :: Word8
_boundsHeader_time :: GpsTimeSec
_boundsHeader_sol_id :: Word8
_boundsHeader_update_interval :: Word8
_boundsHeader_seq_num :: Word8
_boundsHeader_num_msgs :: Word8
_boundsHeader_time :: GpsTimeSec
..}

  put :: BoundsHeader -> Put
put BoundsHeader {Word8
GpsTimeSec
_boundsHeader_sol_id :: Word8
_boundsHeader_update_interval :: Word8
_boundsHeader_seq_num :: Word8
_boundsHeader_num_msgs :: Word8
_boundsHeader_time :: GpsTimeSec
_boundsHeader_sol_id :: BoundsHeader -> Word8
_boundsHeader_update_interval :: BoundsHeader -> Word8
_boundsHeader_seq_num :: BoundsHeader -> Word8
_boundsHeader_num_msgs :: BoundsHeader -> Word8
_boundsHeader_time :: BoundsHeader -> GpsTimeSec
..} = do
    forall t. Binary t => t -> Put
put GpsTimeSec
_boundsHeader_time
    Word8 -> Put
putWord8 Word8
_boundsHeader_num_msgs
    Word8 -> Put
putWord8 Word8
_boundsHeader_seq_num
    Word8 -> Put
putWord8 Word8
_boundsHeader_update_interval
    Word8 -> Put
putWord8 Word8
_boundsHeader_sol_id

$(makeJSON "_boundsHeader_" ''BoundsHeader)
$(makeLenses ''BoundsHeader)

msgSsrStecCorrection :: Word16
msgSsrStecCorrection :: Word16
msgSsrStecCorrection = Word16
0x05FD

data MsgSsrStecCorrection = MsgSsrStecCorrection
  { MsgSsrStecCorrection -> BoundsHeader
_msgSsrStecCorrection_header      :: !BoundsHeader
    -- ^ Header of a STEC correction with bounds message.
  , MsgSsrStecCorrection -> Word8
_msgSsrStecCorrection_ssr_iod_atmo :: !Word8
    -- ^ IOD of the SSR atmospheric correction
  , MsgSsrStecCorrection -> Word16
_msgSsrStecCorrection_tile_set_id :: !Word16
    -- ^ Tile set ID
  , MsgSsrStecCorrection -> Word16
_msgSsrStecCorrection_tile_id     :: !Word16
    -- ^ Tile ID
  , MsgSsrStecCorrection -> Word8
_msgSsrStecCorrection_n_sats      :: !Word8
    -- ^ Number of satellites.
  , MsgSsrStecCorrection -> [STECSatElement]
_msgSsrStecCorrection_stec_sat_list :: ![STECSatElement]
    -- ^ Array of STEC polynomial coefficients for each space vehicle.
  } deriving ( Int -> MsgSsrStecCorrection -> ShowS
[MsgSsrStecCorrection] -> ShowS
MsgSsrStecCorrection -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrStecCorrection] -> ShowS
$cshowList :: [MsgSsrStecCorrection] -> ShowS
show :: MsgSsrStecCorrection -> String
$cshow :: MsgSsrStecCorrection -> String
showsPrec :: Int -> MsgSsrStecCorrection -> ShowS
$cshowsPrec :: Int -> MsgSsrStecCorrection -> ShowS
Show, ReadPrec [MsgSsrStecCorrection]
ReadPrec MsgSsrStecCorrection
Int -> ReadS MsgSsrStecCorrection
ReadS [MsgSsrStecCorrection]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrStecCorrection]
$creadListPrec :: ReadPrec [MsgSsrStecCorrection]
readPrec :: ReadPrec MsgSsrStecCorrection
$creadPrec :: ReadPrec MsgSsrStecCorrection
readList :: ReadS [MsgSsrStecCorrection]
$creadList :: ReadS [MsgSsrStecCorrection]
readsPrec :: Int -> ReadS MsgSsrStecCorrection
$creadsPrec :: Int -> ReadS MsgSsrStecCorrection
Read, MsgSsrStecCorrection -> MsgSsrStecCorrection -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrStecCorrection -> MsgSsrStecCorrection -> Bool
$c/= :: MsgSsrStecCorrection -> MsgSsrStecCorrection -> Bool
== :: MsgSsrStecCorrection -> MsgSsrStecCorrection -> Bool
$c== :: MsgSsrStecCorrection -> MsgSsrStecCorrection -> Bool
Eq )

instance Binary MsgSsrStecCorrection where
  get :: Get MsgSsrStecCorrection
get = do
    BoundsHeader
_msgSsrStecCorrection_header <- forall t. Binary t => Get t
get
    Word8
_msgSsrStecCorrection_ssr_iod_atmo <- Get Word8
getWord8
    Word16
_msgSsrStecCorrection_tile_set_id <- Get Word16
getWord16le
    Word16
_msgSsrStecCorrection_tile_id <- Get Word16
getWord16le
    Word8
_msgSsrStecCorrection_n_sats <- Get Word8
getWord8
    [STECSatElement]
_msgSsrStecCorrection_stec_sat_list <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrStecCorrection {[STECSatElement]
Word8
Word16
BoundsHeader
_msgSsrStecCorrection_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrection_n_sats :: Word8
_msgSsrStecCorrection_tile_id :: Word16
_msgSsrStecCorrection_tile_set_id :: Word16
_msgSsrStecCorrection_ssr_iod_atmo :: Word8
_msgSsrStecCorrection_header :: BoundsHeader
_msgSsrStecCorrection_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrection_n_sats :: Word8
_msgSsrStecCorrection_tile_id :: Word16
_msgSsrStecCorrection_tile_set_id :: Word16
_msgSsrStecCorrection_ssr_iod_atmo :: Word8
_msgSsrStecCorrection_header :: BoundsHeader
..}

  put :: MsgSsrStecCorrection -> Put
put MsgSsrStecCorrection {[STECSatElement]
Word8
Word16
BoundsHeader
_msgSsrStecCorrection_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrection_n_sats :: Word8
_msgSsrStecCorrection_tile_id :: Word16
_msgSsrStecCorrection_tile_set_id :: Word16
_msgSsrStecCorrection_ssr_iod_atmo :: Word8
_msgSsrStecCorrection_header :: BoundsHeader
_msgSsrStecCorrection_stec_sat_list :: MsgSsrStecCorrection -> [STECSatElement]
_msgSsrStecCorrection_n_sats :: MsgSsrStecCorrection -> Word8
_msgSsrStecCorrection_tile_id :: MsgSsrStecCorrection -> Word16
_msgSsrStecCorrection_tile_set_id :: MsgSsrStecCorrection -> Word16
_msgSsrStecCorrection_ssr_iod_atmo :: MsgSsrStecCorrection -> Word8
_msgSsrStecCorrection_header :: MsgSsrStecCorrection -> BoundsHeader
..} = do
    forall t. Binary t => t -> Put
put BoundsHeader
_msgSsrStecCorrection_header
    Word8 -> Put
putWord8 Word8
_msgSsrStecCorrection_ssr_iod_atmo
    Word16 -> Put
putWord16le Word16
_msgSsrStecCorrection_tile_set_id
    Word16 -> Put
putWord16le Word16
_msgSsrStecCorrection_tile_id
    Word8 -> Put
putWord8 Word8
_msgSsrStecCorrection_n_sats
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [STECSatElement]
_msgSsrStecCorrection_stec_sat_list

$(makeSBP 'msgSsrStecCorrection ''MsgSsrStecCorrection)
$(makeJSON "_msgSsrStecCorrection_" ''MsgSsrStecCorrection)
$(makeLenses ''MsgSsrStecCorrection)

msgSsrGriddedCorrection :: Word16
msgSsrGriddedCorrection :: Word16
msgSsrGriddedCorrection = Word16
0x05FC

-- | SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FC).
--
-- STEC residuals are per space vehicle, troposphere is not.
--
-- It is typically equivalent to the QZSS CLAS Sub Type 9 messages.
data MsgSsrGriddedCorrection = MsgSsrGriddedCorrection
  { MsgSsrGriddedCorrection -> GriddedCorrectionHeader
_msgSsrGriddedCorrection_header               :: !GriddedCorrectionHeader
    -- ^ Header of a gridded correction message
  , MsgSsrGriddedCorrection -> Word16
_msgSsrGriddedCorrection_index                :: !Word16
    -- ^ Index of the grid point.
  , MsgSsrGriddedCorrection -> TroposphericDelayCorrection
_msgSsrGriddedCorrection_tropo_delay_correction :: !TroposphericDelayCorrection
    -- ^ Wet and hydrostatic vertical delays (mean, stddev).
  , MsgSsrGriddedCorrection -> [STECResidual]
_msgSsrGriddedCorrection_stec_residuals       :: ![STECResidual]
    -- ^ STEC residuals for each satellite (mean, stddev).
  } deriving ( Int -> MsgSsrGriddedCorrection -> ShowS
[MsgSsrGriddedCorrection] -> ShowS
MsgSsrGriddedCorrection -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrGriddedCorrection] -> ShowS
$cshowList :: [MsgSsrGriddedCorrection] -> ShowS
show :: MsgSsrGriddedCorrection -> String
$cshow :: MsgSsrGriddedCorrection -> String
showsPrec :: Int -> MsgSsrGriddedCorrection -> ShowS
$cshowsPrec :: Int -> MsgSsrGriddedCorrection -> ShowS
Show, ReadPrec [MsgSsrGriddedCorrection]
ReadPrec MsgSsrGriddedCorrection
Int -> ReadS MsgSsrGriddedCorrection
ReadS [MsgSsrGriddedCorrection]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrGriddedCorrection]
$creadListPrec :: ReadPrec [MsgSsrGriddedCorrection]
readPrec :: ReadPrec MsgSsrGriddedCorrection
$creadPrec :: ReadPrec MsgSsrGriddedCorrection
readList :: ReadS [MsgSsrGriddedCorrection]
$creadList :: ReadS [MsgSsrGriddedCorrection]
readsPrec :: Int -> ReadS MsgSsrGriddedCorrection
$creadsPrec :: Int -> ReadS MsgSsrGriddedCorrection
Read, MsgSsrGriddedCorrection -> MsgSsrGriddedCorrection -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrGriddedCorrection -> MsgSsrGriddedCorrection -> Bool
$c/= :: MsgSsrGriddedCorrection -> MsgSsrGriddedCorrection -> Bool
== :: MsgSsrGriddedCorrection -> MsgSsrGriddedCorrection -> Bool
$c== :: MsgSsrGriddedCorrection -> MsgSsrGriddedCorrection -> Bool
Eq )

instance Binary MsgSsrGriddedCorrection where
  get :: Get MsgSsrGriddedCorrection
get = do
    GriddedCorrectionHeader
_msgSsrGriddedCorrection_header <- forall t. Binary t => Get t
get
    Word16
_msgSsrGriddedCorrection_index <- Get Word16
getWord16le
    TroposphericDelayCorrection
_msgSsrGriddedCorrection_tropo_delay_correction <- forall t. Binary t => Get t
get
    [STECResidual]
_msgSsrGriddedCorrection_stec_residuals <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrGriddedCorrection {[STECResidual]
Word16
GriddedCorrectionHeader
TroposphericDelayCorrection
_msgSsrGriddedCorrection_stec_residuals :: [STECResidual]
_msgSsrGriddedCorrection_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrection_index :: Word16
_msgSsrGriddedCorrection_header :: GriddedCorrectionHeader
_msgSsrGriddedCorrection_stec_residuals :: [STECResidual]
_msgSsrGriddedCorrection_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrection_index :: Word16
_msgSsrGriddedCorrection_header :: GriddedCorrectionHeader
..}

  put :: MsgSsrGriddedCorrection -> Put
put MsgSsrGriddedCorrection {[STECResidual]
Word16
GriddedCorrectionHeader
TroposphericDelayCorrection
_msgSsrGriddedCorrection_stec_residuals :: [STECResidual]
_msgSsrGriddedCorrection_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrection_index :: Word16
_msgSsrGriddedCorrection_header :: GriddedCorrectionHeader
_msgSsrGriddedCorrection_stec_residuals :: MsgSsrGriddedCorrection -> [STECResidual]
_msgSsrGriddedCorrection_tropo_delay_correction :: MsgSsrGriddedCorrection -> TroposphericDelayCorrection
_msgSsrGriddedCorrection_index :: MsgSsrGriddedCorrection -> Word16
_msgSsrGriddedCorrection_header :: MsgSsrGriddedCorrection -> GriddedCorrectionHeader
..} = do
    forall t. Binary t => t -> Put
put GriddedCorrectionHeader
_msgSsrGriddedCorrection_header
    Word16 -> Put
putWord16le Word16
_msgSsrGriddedCorrection_index
    forall t. Binary t => t -> Put
put TroposphericDelayCorrection
_msgSsrGriddedCorrection_tropo_delay_correction
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [STECResidual]
_msgSsrGriddedCorrection_stec_residuals

$(makeSBP 'msgSsrGriddedCorrection ''MsgSsrGriddedCorrection)
$(makeJSON "_msgSsrGriddedCorrection_" ''MsgSsrGriddedCorrection)
$(makeLenses ''MsgSsrGriddedCorrection)

-- | STECSatElementIntegrity.
--
-- STEC polynomial and bounds for the given satellite.
data STECSatElementIntegrity = STECSatElementIntegrity
  { STECSatElementIntegrity -> STECResidual
_sTECSatElementIntegrity_stec_residual    :: !STECResidual
    -- ^ STEC residuals (mean, stddev)
  , STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_bound_mu    :: !Word8
    -- ^ Error Bound Mean. See Note 1.
  , STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_bound_sig   :: !Word8
    -- ^ Error Bound StDev. See Note 1.
  , STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_bound_mu_dot :: !Word8
    -- ^ Error Bound Mean First derivative.
  , STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_bound_sig_dot :: !Word8
    -- ^ Error Bound StDev First derivative.
  } deriving ( Int -> STECSatElementIntegrity -> ShowS
[STECSatElementIntegrity] -> ShowS
STECSatElementIntegrity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [STECSatElementIntegrity] -> ShowS
$cshowList :: [STECSatElementIntegrity] -> ShowS
show :: STECSatElementIntegrity -> String
$cshow :: STECSatElementIntegrity -> String
showsPrec :: Int -> STECSatElementIntegrity -> ShowS
$cshowsPrec :: Int -> STECSatElementIntegrity -> ShowS
Show, ReadPrec [STECSatElementIntegrity]
ReadPrec STECSatElementIntegrity
Int -> ReadS STECSatElementIntegrity
ReadS [STECSatElementIntegrity]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [STECSatElementIntegrity]
$creadListPrec :: ReadPrec [STECSatElementIntegrity]
readPrec :: ReadPrec STECSatElementIntegrity
$creadPrec :: ReadPrec STECSatElementIntegrity
readList :: ReadS [STECSatElementIntegrity]
$creadList :: ReadS [STECSatElementIntegrity]
readsPrec :: Int -> ReadS STECSatElementIntegrity
$creadsPrec :: Int -> ReadS STECSatElementIntegrity
Read, STECSatElementIntegrity -> STECSatElementIntegrity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: STECSatElementIntegrity -> STECSatElementIntegrity -> Bool
$c/= :: STECSatElementIntegrity -> STECSatElementIntegrity -> Bool
== :: STECSatElementIntegrity -> STECSatElementIntegrity -> Bool
$c== :: STECSatElementIntegrity -> STECSatElementIntegrity -> Bool
Eq )

instance Binary STECSatElementIntegrity where
  get :: Get STECSatElementIntegrity
get = do
    STECResidual
_sTECSatElementIntegrity_stec_residual <- forall t. Binary t => Get t
get
    Word8
_sTECSatElementIntegrity_stec_bound_mu <- Get Word8
getWord8
    Word8
_sTECSatElementIntegrity_stec_bound_sig <- Get Word8
getWord8
    Word8
_sTECSatElementIntegrity_stec_bound_mu_dot <- Get Word8
getWord8
    Word8
_sTECSatElementIntegrity_stec_bound_sig_dot <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure STECSatElementIntegrity {Word8
STECResidual
_sTECSatElementIntegrity_stec_bound_sig_dot :: Word8
_sTECSatElementIntegrity_stec_bound_mu_dot :: Word8
_sTECSatElementIntegrity_stec_bound_sig :: Word8
_sTECSatElementIntegrity_stec_bound_mu :: Word8
_sTECSatElementIntegrity_stec_residual :: STECResidual
_sTECSatElementIntegrity_stec_bound_sig_dot :: Word8
_sTECSatElementIntegrity_stec_bound_mu_dot :: Word8
_sTECSatElementIntegrity_stec_bound_sig :: Word8
_sTECSatElementIntegrity_stec_bound_mu :: Word8
_sTECSatElementIntegrity_stec_residual :: STECResidual
..}

  put :: STECSatElementIntegrity -> Put
put STECSatElementIntegrity {Word8
STECResidual
_sTECSatElementIntegrity_stec_bound_sig_dot :: Word8
_sTECSatElementIntegrity_stec_bound_mu_dot :: Word8
_sTECSatElementIntegrity_stec_bound_sig :: Word8
_sTECSatElementIntegrity_stec_bound_mu :: Word8
_sTECSatElementIntegrity_stec_residual :: STECResidual
_sTECSatElementIntegrity_stec_bound_sig_dot :: STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_bound_mu_dot :: STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_bound_sig :: STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_bound_mu :: STECSatElementIntegrity -> Word8
_sTECSatElementIntegrity_stec_residual :: STECSatElementIntegrity -> STECResidual
..} = do
    forall t. Binary t => t -> Put
put STECResidual
_sTECSatElementIntegrity_stec_residual
    Word8 -> Put
putWord8 Word8
_sTECSatElementIntegrity_stec_bound_mu
    Word8 -> Put
putWord8 Word8
_sTECSatElementIntegrity_stec_bound_sig
    Word8 -> Put
putWord8 Word8
_sTECSatElementIntegrity_stec_bound_mu_dot
    Word8 -> Put
putWord8 Word8
_sTECSatElementIntegrity_stec_bound_sig_dot

$(makeJSON "_sTECSatElementIntegrity_" ''STECSatElementIntegrity)
$(makeLenses ''STECSatElementIntegrity)

msgSsrGriddedCorrectionBounds :: Word16
msgSsrGriddedCorrectionBounds :: Word16
msgSsrGriddedCorrectionBounds = Word16
0x05FE

-- | SBP class for message MSG_SSR_GRIDDED_CORRECTION_BOUNDS (0x05FE).
--
-- Note 1: Range: 0-17.5 m. i<= 200, mean = 0.01i; 200<i<=230,
-- mean=2+0.1(i-200); i>230, mean=5+0.5(i-230).
data MsgSsrGriddedCorrectionBounds = MsgSsrGriddedCorrectionBounds
  { MsgSsrGriddedCorrectionBounds -> BoundsHeader
_msgSsrGriddedCorrectionBounds_header                :: !BoundsHeader
    -- ^ Header of a bounds message.
  , MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_ssr_iod_atmo          :: !Word8
    -- ^ IOD of the correction.
  , MsgSsrGriddedCorrectionBounds -> Word16
_msgSsrGriddedCorrectionBounds_tile_set_id           :: !Word16
    -- ^ Set this tile belongs to.
  , MsgSsrGriddedCorrectionBounds -> Word16
_msgSsrGriddedCorrectionBounds_tile_id               :: !Word16
    -- ^ Unique identifier of this tile in the tile set.
  , MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_qi              :: !Word8
    -- ^ Tropo Quality Indicator. Similar to RTCM DF389.
  , MsgSsrGriddedCorrectionBounds -> Word16
_msgSsrGriddedCorrectionBounds_grid_point_id         :: !Word16
    -- ^ Index of the Grid Point.
  , MsgSsrGriddedCorrectionBounds -> TroposphericDelayCorrection
_msgSsrGriddedCorrectionBounds_tropo_delay_correction :: !TroposphericDelayCorrection
    -- ^ Tropospheric delay at grid point.
  , MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_mu :: !Word8
    -- ^ Vertical Hydrostatic Error Bound Mean.
  , MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_sig :: !Word8
    -- ^ Vertical Hydrostatic Error Bound StDev.
  , MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_mu  :: !Word8
    -- ^ Vertical Wet Error Bound Mean.
  , MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_sig :: !Word8
    -- ^ Vertical Wet Error Bound StDev.
  , MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_n_sats                :: !Word8
    -- ^ Number of satellites.
  , MsgSsrGriddedCorrectionBounds -> [STECSatElementIntegrity]
_msgSsrGriddedCorrectionBounds_stec_sat_list         :: ![STECSatElementIntegrity]
    -- ^ Array of STEC polynomial coefficients and its bounds for each space
    -- vehicle.
  } deriving ( Int -> MsgSsrGriddedCorrectionBounds -> ShowS
[MsgSsrGriddedCorrectionBounds] -> ShowS
MsgSsrGriddedCorrectionBounds -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrGriddedCorrectionBounds] -> ShowS
$cshowList :: [MsgSsrGriddedCorrectionBounds] -> ShowS
show :: MsgSsrGriddedCorrectionBounds -> String
$cshow :: MsgSsrGriddedCorrectionBounds -> String
showsPrec :: Int -> MsgSsrGriddedCorrectionBounds -> ShowS
$cshowsPrec :: Int -> MsgSsrGriddedCorrectionBounds -> ShowS
Show, ReadPrec [MsgSsrGriddedCorrectionBounds]
ReadPrec MsgSsrGriddedCorrectionBounds
Int -> ReadS MsgSsrGriddedCorrectionBounds
ReadS [MsgSsrGriddedCorrectionBounds]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrGriddedCorrectionBounds]
$creadListPrec :: ReadPrec [MsgSsrGriddedCorrectionBounds]
readPrec :: ReadPrec MsgSsrGriddedCorrectionBounds
$creadPrec :: ReadPrec MsgSsrGriddedCorrectionBounds
readList :: ReadS [MsgSsrGriddedCorrectionBounds]
$creadList :: ReadS [MsgSsrGriddedCorrectionBounds]
readsPrec :: Int -> ReadS MsgSsrGriddedCorrectionBounds
$creadsPrec :: Int -> ReadS MsgSsrGriddedCorrectionBounds
Read, MsgSsrGriddedCorrectionBounds
-> MsgSsrGriddedCorrectionBounds -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrGriddedCorrectionBounds
-> MsgSsrGriddedCorrectionBounds -> Bool
$c/= :: MsgSsrGriddedCorrectionBounds
-> MsgSsrGriddedCorrectionBounds -> Bool
== :: MsgSsrGriddedCorrectionBounds
-> MsgSsrGriddedCorrectionBounds -> Bool
$c== :: MsgSsrGriddedCorrectionBounds
-> MsgSsrGriddedCorrectionBounds -> Bool
Eq )

instance Binary MsgSsrGriddedCorrectionBounds where
  get :: Get MsgSsrGriddedCorrectionBounds
get = do
    BoundsHeader
_msgSsrGriddedCorrectionBounds_header <- forall t. Binary t => Get t
get
    Word8
_msgSsrGriddedCorrectionBounds_ssr_iod_atmo <- Get Word8
getWord8
    Word16
_msgSsrGriddedCorrectionBounds_tile_set_id <- Get Word16
getWord16le
    Word16
_msgSsrGriddedCorrectionBounds_tile_id <- Get Word16
getWord16le
    Word8
_msgSsrGriddedCorrectionBounds_tropo_qi <- Get Word8
getWord8
    Word16
_msgSsrGriddedCorrectionBounds_grid_point_id <- Get Word16
getWord16le
    TroposphericDelayCorrection
_msgSsrGriddedCorrectionBounds_tropo_delay_correction <- forall t. Binary t => Get t
get
    Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_mu <- Get Word8
getWord8
    Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_sig <- Get Word8
getWord8
    Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_mu <- Get Word8
getWord8
    Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_sig <- Get Word8
getWord8
    Word8
_msgSsrGriddedCorrectionBounds_n_sats <- Get Word8
getWord8
    [STECSatElementIntegrity]
_msgSsrGriddedCorrectionBounds_stec_sat_list <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrGriddedCorrectionBounds {[STECSatElementIntegrity]
Word8
Word16
TroposphericDelayCorrection
BoundsHeader
_msgSsrGriddedCorrectionBounds_stec_sat_list :: [STECSatElementIntegrity]
_msgSsrGriddedCorrectionBounds_n_sats :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_sig :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_mu :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_sig :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_mu :: Word8
_msgSsrGriddedCorrectionBounds_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrectionBounds_grid_point_id :: Word16
_msgSsrGriddedCorrectionBounds_tropo_qi :: Word8
_msgSsrGriddedCorrectionBounds_tile_id :: Word16
_msgSsrGriddedCorrectionBounds_tile_set_id :: Word16
_msgSsrGriddedCorrectionBounds_ssr_iod_atmo :: Word8
_msgSsrGriddedCorrectionBounds_header :: BoundsHeader
_msgSsrGriddedCorrectionBounds_stec_sat_list :: [STECSatElementIntegrity]
_msgSsrGriddedCorrectionBounds_n_sats :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_sig :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_mu :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_sig :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_mu :: Word8
_msgSsrGriddedCorrectionBounds_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrectionBounds_grid_point_id :: Word16
_msgSsrGriddedCorrectionBounds_tropo_qi :: Word8
_msgSsrGriddedCorrectionBounds_tile_id :: Word16
_msgSsrGriddedCorrectionBounds_tile_set_id :: Word16
_msgSsrGriddedCorrectionBounds_ssr_iod_atmo :: Word8
_msgSsrGriddedCorrectionBounds_header :: BoundsHeader
..}

  put :: MsgSsrGriddedCorrectionBounds -> Put
put MsgSsrGriddedCorrectionBounds {[STECSatElementIntegrity]
Word8
Word16
TroposphericDelayCorrection
BoundsHeader
_msgSsrGriddedCorrectionBounds_stec_sat_list :: [STECSatElementIntegrity]
_msgSsrGriddedCorrectionBounds_n_sats :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_sig :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_mu :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_sig :: Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_mu :: Word8
_msgSsrGriddedCorrectionBounds_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrectionBounds_grid_point_id :: Word16
_msgSsrGriddedCorrectionBounds_tropo_qi :: Word8
_msgSsrGriddedCorrectionBounds_tile_id :: Word16
_msgSsrGriddedCorrectionBounds_tile_set_id :: Word16
_msgSsrGriddedCorrectionBounds_ssr_iod_atmo :: Word8
_msgSsrGriddedCorrectionBounds_header :: BoundsHeader
_msgSsrGriddedCorrectionBounds_stec_sat_list :: MsgSsrGriddedCorrectionBounds -> [STECSatElementIntegrity]
_msgSsrGriddedCorrectionBounds_n_sats :: MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_sig :: MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_mu :: MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_sig :: MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_mu :: MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tropo_delay_correction :: MsgSsrGriddedCorrectionBounds -> TroposphericDelayCorrection
_msgSsrGriddedCorrectionBounds_grid_point_id :: MsgSsrGriddedCorrectionBounds -> Word16
_msgSsrGriddedCorrectionBounds_tropo_qi :: MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_tile_id :: MsgSsrGriddedCorrectionBounds -> Word16
_msgSsrGriddedCorrectionBounds_tile_set_id :: MsgSsrGriddedCorrectionBounds -> Word16
_msgSsrGriddedCorrectionBounds_ssr_iod_atmo :: MsgSsrGriddedCorrectionBounds -> Word8
_msgSsrGriddedCorrectionBounds_header :: MsgSsrGriddedCorrectionBounds -> BoundsHeader
..} = do
    forall t. Binary t => t -> Put
put BoundsHeader
_msgSsrGriddedCorrectionBounds_header
    Word8 -> Put
putWord8 Word8
_msgSsrGriddedCorrectionBounds_ssr_iod_atmo
    Word16 -> Put
putWord16le Word16
_msgSsrGriddedCorrectionBounds_tile_set_id
    Word16 -> Put
putWord16le Word16
_msgSsrGriddedCorrectionBounds_tile_id
    Word8 -> Put
putWord8 Word8
_msgSsrGriddedCorrectionBounds_tropo_qi
    Word16 -> Put
putWord16le Word16
_msgSsrGriddedCorrectionBounds_grid_point_id
    forall t. Binary t => t -> Put
put TroposphericDelayCorrection
_msgSsrGriddedCorrectionBounds_tropo_delay_correction
    Word8 -> Put
putWord8 Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_mu
    Word8 -> Put
putWord8 Word8
_msgSsrGriddedCorrectionBounds_tropo_v_hydro_bound_sig
    Word8 -> Put
putWord8 Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_mu
    Word8 -> Put
putWord8 Word8
_msgSsrGriddedCorrectionBounds_tropo_v_wet_bound_sig
    Word8 -> Put
putWord8 Word8
_msgSsrGriddedCorrectionBounds_n_sats
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [STECSatElementIntegrity]
_msgSsrGriddedCorrectionBounds_stec_sat_list

$(makeSBP 'msgSsrGriddedCorrectionBounds ''MsgSsrGriddedCorrectionBounds)
$(makeJSON "_msgSsrGriddedCorrectionBounds_" ''MsgSsrGriddedCorrectionBounds)
$(makeLenses ''MsgSsrGriddedCorrectionBounds)

msgSsrTileDefinitionDep :: Word16
msgSsrTileDefinitionDep :: Word16
msgSsrTileDefinitionDep = Word16
0x05F6

-- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP (0x05F6).
--
-- Provides the correction point coordinates for the atmospheric correction
-- values in the MSG_SSR_STEC_CORRECTION_DEP and MSG_SSR_GRIDDED_CORRECTION
-- messages.
--
-- Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information
-- element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of
-- correction points, not lists of points.
data MsgSsrTileDefinitionDep = MsgSsrTileDefinitionDep
  { MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_tile_set_id :: !Word16
    -- ^ Unique identifier of the tile set this tile belongs to.
  , MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_tile_id     :: !Word16
    -- ^ Unique identifier of this tile in the tile set.
    -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID.
  , MsgSsrTileDefinitionDep -> Int16
_msgSsrTileDefinitionDep_corner_nw_lat :: !Int16
    -- ^ North-West corner correction point latitude.
    --
    -- The relation between the latitude X in the range [-90, 90] and the
    -- coded number N is:
    --
    -- N = floor((X / 90) * 2^14)
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude.
  , MsgSsrTileDefinitionDep -> Int16
_msgSsrTileDefinitionDep_corner_nw_lon :: !Int16
    -- ^ North-West corner correction point longitude.
    --
    -- The relation between the longitude X in the range [-180, 180] and the
    -- coded number N is:
    --
    -- N = floor((X / 180) * 2^15)
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude.
  , MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_spacing_lat :: !Word16
    -- ^ Spacing of the correction points in the latitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude.
  , MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_spacing_lon :: !Word16
    -- ^ Spacing of the correction points in the longitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude.
  , MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_rows        :: !Word16
    -- ^ Number of steps in the latitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude.
  , MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_cols        :: !Word16
    -- ^ Number of steps in the longitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude.
  , MsgSsrTileDefinitionDep -> Word64
_msgSsrTileDefinitionDep_bitmask     :: !Word64
    -- ^ Specifies the availability of correction data at the correction points
    -- in the array.
    --
    -- If a specific bit is enabled (set to 1), the correction is not
    -- available. Only the first rows * cols bits are used, the remainder are
    -- set to 0. If there are more then 64 correction points the remaining
    -- corrections are always available.
    --
    -- Starting with the northwest corner of the array (top left on a north
    -- oriented map) the correction points are enumerated with row precedence
    -- - first row west to east, second row west to east, until last row west
    -- to east - ending with the southeast corner of the array.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the
    -- definition of the bits is inverted.
  } deriving ( Int -> MsgSsrTileDefinitionDep -> ShowS
[MsgSsrTileDefinitionDep] -> ShowS
MsgSsrTileDefinitionDep -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrTileDefinitionDep] -> ShowS
$cshowList :: [MsgSsrTileDefinitionDep] -> ShowS
show :: MsgSsrTileDefinitionDep -> String
$cshow :: MsgSsrTileDefinitionDep -> String
showsPrec :: Int -> MsgSsrTileDefinitionDep -> ShowS
$cshowsPrec :: Int -> MsgSsrTileDefinitionDep -> ShowS
Show, ReadPrec [MsgSsrTileDefinitionDep]
ReadPrec MsgSsrTileDefinitionDep
Int -> ReadS MsgSsrTileDefinitionDep
ReadS [MsgSsrTileDefinitionDep]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrTileDefinitionDep]
$creadListPrec :: ReadPrec [MsgSsrTileDefinitionDep]
readPrec :: ReadPrec MsgSsrTileDefinitionDep
$creadPrec :: ReadPrec MsgSsrTileDefinitionDep
readList :: ReadS [MsgSsrTileDefinitionDep]
$creadList :: ReadS [MsgSsrTileDefinitionDep]
readsPrec :: Int -> ReadS MsgSsrTileDefinitionDep
$creadsPrec :: Int -> ReadS MsgSsrTileDefinitionDep
Read, MsgSsrTileDefinitionDep -> MsgSsrTileDefinitionDep -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrTileDefinitionDep -> MsgSsrTileDefinitionDep -> Bool
$c/= :: MsgSsrTileDefinitionDep -> MsgSsrTileDefinitionDep -> Bool
== :: MsgSsrTileDefinitionDep -> MsgSsrTileDefinitionDep -> Bool
$c== :: MsgSsrTileDefinitionDep -> MsgSsrTileDefinitionDep -> Bool
Eq )

instance Binary MsgSsrTileDefinitionDep where
  get :: Get MsgSsrTileDefinitionDep
get = do
    Word16
_msgSsrTileDefinitionDep_tile_set_id <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinitionDep_tile_id <- Get Word16
getWord16le
    Int16
_msgSsrTileDefinitionDep_corner_nw_lat <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    Int16
_msgSsrTileDefinitionDep_corner_nw_lon <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    Word16
_msgSsrTileDefinitionDep_spacing_lat <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinitionDep_spacing_lon <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinitionDep_rows <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinitionDep_cols <- Get Word16
getWord16le
    Word64
_msgSsrTileDefinitionDep_bitmask <- Get Word64
getWord64le
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrTileDefinitionDep {Int16
Word16
Word64
_msgSsrTileDefinitionDep_bitmask :: Word64
_msgSsrTileDefinitionDep_cols :: Word16
_msgSsrTileDefinitionDep_rows :: Word16
_msgSsrTileDefinitionDep_spacing_lon :: Word16
_msgSsrTileDefinitionDep_spacing_lat :: Word16
_msgSsrTileDefinitionDep_corner_nw_lon :: Int16
_msgSsrTileDefinitionDep_corner_nw_lat :: Int16
_msgSsrTileDefinitionDep_tile_id :: Word16
_msgSsrTileDefinitionDep_tile_set_id :: Word16
_msgSsrTileDefinitionDep_bitmask :: Word64
_msgSsrTileDefinitionDep_cols :: Word16
_msgSsrTileDefinitionDep_rows :: Word16
_msgSsrTileDefinitionDep_spacing_lon :: Word16
_msgSsrTileDefinitionDep_spacing_lat :: Word16
_msgSsrTileDefinitionDep_corner_nw_lon :: Int16
_msgSsrTileDefinitionDep_corner_nw_lat :: Int16
_msgSsrTileDefinitionDep_tile_id :: Word16
_msgSsrTileDefinitionDep_tile_set_id :: Word16
..}

  put :: MsgSsrTileDefinitionDep -> Put
put MsgSsrTileDefinitionDep {Int16
Word16
Word64
_msgSsrTileDefinitionDep_bitmask :: Word64
_msgSsrTileDefinitionDep_cols :: Word16
_msgSsrTileDefinitionDep_rows :: Word16
_msgSsrTileDefinitionDep_spacing_lon :: Word16
_msgSsrTileDefinitionDep_spacing_lat :: Word16
_msgSsrTileDefinitionDep_corner_nw_lon :: Int16
_msgSsrTileDefinitionDep_corner_nw_lat :: Int16
_msgSsrTileDefinitionDep_tile_id :: Word16
_msgSsrTileDefinitionDep_tile_set_id :: Word16
_msgSsrTileDefinitionDep_bitmask :: MsgSsrTileDefinitionDep -> Word64
_msgSsrTileDefinitionDep_cols :: MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_rows :: MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_spacing_lon :: MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_spacing_lat :: MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_corner_nw_lon :: MsgSsrTileDefinitionDep -> Int16
_msgSsrTileDefinitionDep_corner_nw_lat :: MsgSsrTileDefinitionDep -> Int16
_msgSsrTileDefinitionDep_tile_id :: MsgSsrTileDefinitionDep -> Word16
_msgSsrTileDefinitionDep_tile_set_id :: MsgSsrTileDefinitionDep -> Word16
..} = do
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinitionDep_tile_set_id
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinitionDep_tile_id
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_msgSsrTileDefinitionDep_corner_nw_lat
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_msgSsrTileDefinitionDep_corner_nw_lon
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinitionDep_spacing_lat
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinitionDep_spacing_lon
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinitionDep_rows
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinitionDep_cols
    Word64 -> Put
putWord64le Word64
_msgSsrTileDefinitionDep_bitmask

$(makeSBP 'msgSsrTileDefinitionDep ''MsgSsrTileDefinitionDep)
$(makeJSON "_msgSsrTileDefinitionDep_" ''MsgSsrTileDefinitionDep)
$(makeLenses ''MsgSsrTileDefinitionDep)

msgSsrTileDefinition :: Word16
msgSsrTileDefinition :: Word16
msgSsrTileDefinition = Word16
0x05F7

-- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F7).
--
-- Provides the correction point coordinates for the atmospheric correction
-- values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION
-- messages.
--
-- Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information
-- element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of
-- correction points, not lists of points.
data MsgSsrTileDefinition = MsgSsrTileDefinition
  { MsgSsrTileDefinition -> Word8
_msgSsrTileDefinition_ssr_sol_id  :: !Word8
    -- ^ SSR Solution ID.
  , MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_tile_set_id :: !Word16
    -- ^ Unique identifier of the tile set this tile belongs to.
  , MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_tile_id     :: !Word16
    -- ^ Unique identifier of this tile in the tile set.
    -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID.
  , MsgSsrTileDefinition -> Int16
_msgSsrTileDefinition_corner_nw_lat :: !Int16
    -- ^ North-West corner correction point latitude.
    --
    -- The relation between the latitude X in the range [-90, 90] and the
    -- coded number N is:
    --
    -- N = floor((X / 90) * 2^14)
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude.
  , MsgSsrTileDefinition -> Int16
_msgSsrTileDefinition_corner_nw_lon :: !Int16
    -- ^ North-West corner correction point longitude.
    --
    -- The relation between the longitude X in the range [-180, 180] and the
    -- coded number N is:
    --
    -- N = floor((X / 180) * 2^15)
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude.
  , MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_spacing_lat :: !Word16
    -- ^ Spacing of the correction points in the latitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude.
  , MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_spacing_lon :: !Word16
    -- ^ Spacing of the correction points in the longitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude.
  , MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_rows        :: !Word16
    -- ^ Number of steps in the latitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude.
  , MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_cols        :: !Word16
    -- ^ Number of steps in the longitude direction.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude.
  , MsgSsrTileDefinition -> Word64
_msgSsrTileDefinition_bitmask     :: !Word64
    -- ^ Specifies the availability of correction data at the correction points
    -- in the array.
    --
    -- If a specific bit is enabled (set to 1), the correction is not
    -- available. Only the first rows * cols bits are used, the remainder are
    -- set to 0. If there are more then 64 correction points the remaining
    -- corrections are always available.
    --
    -- Starting with the northwest corner of the array (top left on a north
    -- oriented map) the correction points are enumerated with row precedence
    -- - first row west to east, second row west to east, until last row west
    -- to east - ending with the southeast corner of the array.
    --
    -- See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the
    -- definition of the bits is inverted.
  } deriving ( Int -> MsgSsrTileDefinition -> ShowS
[MsgSsrTileDefinition] -> ShowS
MsgSsrTileDefinition -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrTileDefinition] -> ShowS
$cshowList :: [MsgSsrTileDefinition] -> ShowS
show :: MsgSsrTileDefinition -> String
$cshow :: MsgSsrTileDefinition -> String
showsPrec :: Int -> MsgSsrTileDefinition -> ShowS
$cshowsPrec :: Int -> MsgSsrTileDefinition -> ShowS
Show, ReadPrec [MsgSsrTileDefinition]
ReadPrec MsgSsrTileDefinition
Int -> ReadS MsgSsrTileDefinition
ReadS [MsgSsrTileDefinition]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrTileDefinition]
$creadListPrec :: ReadPrec [MsgSsrTileDefinition]
readPrec :: ReadPrec MsgSsrTileDefinition
$creadPrec :: ReadPrec MsgSsrTileDefinition
readList :: ReadS [MsgSsrTileDefinition]
$creadList :: ReadS [MsgSsrTileDefinition]
readsPrec :: Int -> ReadS MsgSsrTileDefinition
$creadsPrec :: Int -> ReadS MsgSsrTileDefinition
Read, MsgSsrTileDefinition -> MsgSsrTileDefinition -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrTileDefinition -> MsgSsrTileDefinition -> Bool
$c/= :: MsgSsrTileDefinition -> MsgSsrTileDefinition -> Bool
== :: MsgSsrTileDefinition -> MsgSsrTileDefinition -> Bool
$c== :: MsgSsrTileDefinition -> MsgSsrTileDefinition -> Bool
Eq )

instance Binary MsgSsrTileDefinition where
  get :: Get MsgSsrTileDefinition
get = do
    Word8
_msgSsrTileDefinition_ssr_sol_id <- Get Word8
getWord8
    Word16
_msgSsrTileDefinition_tile_set_id <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinition_tile_id <- Get Word16
getWord16le
    Int16
_msgSsrTileDefinition_corner_nw_lat <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    Int16
_msgSsrTileDefinition_corner_nw_lon <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    Word16
_msgSsrTileDefinition_spacing_lat <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinition_spacing_lon <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinition_rows <- Get Word16
getWord16le
    Word16
_msgSsrTileDefinition_cols <- Get Word16
getWord16le
    Word64
_msgSsrTileDefinition_bitmask <- Get Word64
getWord64le
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrTileDefinition {Int16
Word8
Word16
Word64
_msgSsrTileDefinition_bitmask :: Word64
_msgSsrTileDefinition_cols :: Word16
_msgSsrTileDefinition_rows :: Word16
_msgSsrTileDefinition_spacing_lon :: Word16
_msgSsrTileDefinition_spacing_lat :: Word16
_msgSsrTileDefinition_corner_nw_lon :: Int16
_msgSsrTileDefinition_corner_nw_lat :: Int16
_msgSsrTileDefinition_tile_id :: Word16
_msgSsrTileDefinition_tile_set_id :: Word16
_msgSsrTileDefinition_ssr_sol_id :: Word8
_msgSsrTileDefinition_bitmask :: Word64
_msgSsrTileDefinition_cols :: Word16
_msgSsrTileDefinition_rows :: Word16
_msgSsrTileDefinition_spacing_lon :: Word16
_msgSsrTileDefinition_spacing_lat :: Word16
_msgSsrTileDefinition_corner_nw_lon :: Int16
_msgSsrTileDefinition_corner_nw_lat :: Int16
_msgSsrTileDefinition_tile_id :: Word16
_msgSsrTileDefinition_tile_set_id :: Word16
_msgSsrTileDefinition_ssr_sol_id :: Word8
..}

  put :: MsgSsrTileDefinition -> Put
put MsgSsrTileDefinition {Int16
Word8
Word16
Word64
_msgSsrTileDefinition_bitmask :: Word64
_msgSsrTileDefinition_cols :: Word16
_msgSsrTileDefinition_rows :: Word16
_msgSsrTileDefinition_spacing_lon :: Word16
_msgSsrTileDefinition_spacing_lat :: Word16
_msgSsrTileDefinition_corner_nw_lon :: Int16
_msgSsrTileDefinition_corner_nw_lat :: Int16
_msgSsrTileDefinition_tile_id :: Word16
_msgSsrTileDefinition_tile_set_id :: Word16
_msgSsrTileDefinition_ssr_sol_id :: Word8
_msgSsrTileDefinition_bitmask :: MsgSsrTileDefinition -> Word64
_msgSsrTileDefinition_cols :: MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_rows :: MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_spacing_lon :: MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_spacing_lat :: MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_corner_nw_lon :: MsgSsrTileDefinition -> Int16
_msgSsrTileDefinition_corner_nw_lat :: MsgSsrTileDefinition -> Int16
_msgSsrTileDefinition_tile_id :: MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_tile_set_id :: MsgSsrTileDefinition -> Word16
_msgSsrTileDefinition_ssr_sol_id :: MsgSsrTileDefinition -> Word8
..} = do
    Word8 -> Put
putWord8 Word8
_msgSsrTileDefinition_ssr_sol_id
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinition_tile_set_id
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinition_tile_id
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_msgSsrTileDefinition_corner_nw_lat
    (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int16
_msgSsrTileDefinition_corner_nw_lon
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinition_spacing_lat
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinition_spacing_lon
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinition_rows
    Word16 -> Put
putWord16le Word16
_msgSsrTileDefinition_cols
    Word64 -> Put
putWord64le Word64
_msgSsrTileDefinition_bitmask

$(makeSBP 'msgSsrTileDefinition ''MsgSsrTileDefinition)
$(makeJSON "_msgSsrTileDefinition_" ''MsgSsrTileDefinition)
$(makeLenses ''MsgSsrTileDefinition)

-- | SatelliteAPC.
--
-- Contains phase center offset and elevation variation corrections for one
-- signal on a satellite.
data SatelliteAPC = SatelliteAPC
  { SatelliteAPC -> GnssSignal
_satelliteAPC_sid    :: !GnssSignal
    -- ^ GNSS signal identifier (16 bit)
  , SatelliteAPC -> Word8
_satelliteAPC_sat_info :: !Word8
    -- ^ Additional satellite information
  , SatelliteAPC -> Word16
_satelliteAPC_svn    :: !Word16
    -- ^ Satellite Code, as defined by IGS. Typically the space vehicle number.
  , SatelliteAPC -> [Int16]
_satelliteAPC_pco    :: ![Int16]
    -- ^ Mean phase center offset, X Y and Z axes. See IGS ANTEX file format
    -- description for coordinate system definition.
  , SatelliteAPC -> [Int8]
_satelliteAPC_pcv    :: ![Int8]
    -- ^ Elevation dependent phase center variations. First element is 0 degrees
    -- separation from the Z axis, subsequent elements represent elevation
    -- variations in 1 degree increments.
  } deriving ( Int -> SatelliteAPC -> ShowS
[SatelliteAPC] -> ShowS
SatelliteAPC -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SatelliteAPC] -> ShowS
$cshowList :: [SatelliteAPC] -> ShowS
show :: SatelliteAPC -> String
$cshow :: SatelliteAPC -> String
showsPrec :: Int -> SatelliteAPC -> ShowS
$cshowsPrec :: Int -> SatelliteAPC -> ShowS
Show, ReadPrec [SatelliteAPC]
ReadPrec SatelliteAPC
Int -> ReadS SatelliteAPC
ReadS [SatelliteAPC]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SatelliteAPC]
$creadListPrec :: ReadPrec [SatelliteAPC]
readPrec :: ReadPrec SatelliteAPC
$creadPrec :: ReadPrec SatelliteAPC
readList :: ReadS [SatelliteAPC]
$creadList :: ReadS [SatelliteAPC]
readsPrec :: Int -> ReadS SatelliteAPC
$creadsPrec :: Int -> ReadS SatelliteAPC
Read, SatelliteAPC -> SatelliteAPC -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SatelliteAPC -> SatelliteAPC -> Bool
$c/= :: SatelliteAPC -> SatelliteAPC -> Bool
== :: SatelliteAPC -> SatelliteAPC -> Bool
$c== :: SatelliteAPC -> SatelliteAPC -> Bool
Eq )

instance Binary SatelliteAPC where
  get :: Get SatelliteAPC
get = do
    GnssSignal
_satelliteAPC_sid <- forall t. Binary t => Get t
get
    Word8
_satelliteAPC_sat_info <- Get Word8
getWord8
    Word16
_satelliteAPC_svn <- Get Word16
getWord16le
    [Int16]
_satelliteAPC_pco <- forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
3 (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word16
getWord16le)
    [Int8]
_satelliteAPC_pcv <- forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
21 (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word8
getWord8)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure SatelliteAPC {[Int8]
[Int16]
Word8
Word16
GnssSignal
_satelliteAPC_pcv :: [Int8]
_satelliteAPC_pco :: [Int16]
_satelliteAPC_svn :: Word16
_satelliteAPC_sat_info :: Word8
_satelliteAPC_sid :: GnssSignal
_satelliteAPC_pcv :: [Int8]
_satelliteAPC_pco :: [Int16]
_satelliteAPC_svn :: Word16
_satelliteAPC_sat_info :: Word8
_satelliteAPC_sid :: GnssSignal
..}

  put :: SatelliteAPC -> Put
put SatelliteAPC {[Int8]
[Int16]
Word8
Word16
GnssSignal
_satelliteAPC_pcv :: [Int8]
_satelliteAPC_pco :: [Int16]
_satelliteAPC_svn :: Word16
_satelliteAPC_sat_info :: Word8
_satelliteAPC_sid :: GnssSignal
_satelliteAPC_pcv :: SatelliteAPC -> [Int8]
_satelliteAPC_pco :: SatelliteAPC -> [Int16]
_satelliteAPC_svn :: SatelliteAPC -> Word16
_satelliteAPC_sat_info :: SatelliteAPC -> Word8
_satelliteAPC_sid :: SatelliteAPC -> GnssSignal
..} = do
    forall t. Binary t => t -> Put
put GnssSignal
_satelliteAPC_sid
    Word8 -> Put
putWord8 Word8
_satelliteAPC_sat_info
    Word16 -> Put
putWord16le Word16
_satelliteAPC_svn
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Word16 -> Put
putWord16le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Int16]
_satelliteAPC_pco
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Word8 -> Put
putWord8 forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Int8]
_satelliteAPC_pcv

$(makeJSON "_satelliteAPC_" ''SatelliteAPC)
$(makeLenses ''SatelliteAPC)

msgSsrSatelliteApc :: Word16
msgSsrSatelliteApc :: Word16
msgSsrSatelliteApc = Word16
0x0604

data MsgSsrSatelliteApc = MsgSsrSatelliteApc
  { MsgSsrSatelliteApc -> [SatelliteAPC]
_msgSsrSatelliteApc_apc :: ![SatelliteAPC]
    -- ^ Satellite antenna phase center corrections
  } deriving ( Int -> MsgSsrSatelliteApc -> ShowS
[MsgSsrSatelliteApc] -> ShowS
MsgSsrSatelliteApc -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrSatelliteApc] -> ShowS
$cshowList :: [MsgSsrSatelliteApc] -> ShowS
show :: MsgSsrSatelliteApc -> String
$cshow :: MsgSsrSatelliteApc -> String
showsPrec :: Int -> MsgSsrSatelliteApc -> ShowS
$cshowsPrec :: Int -> MsgSsrSatelliteApc -> ShowS
Show, ReadPrec [MsgSsrSatelliteApc]
ReadPrec MsgSsrSatelliteApc
Int -> ReadS MsgSsrSatelliteApc
ReadS [MsgSsrSatelliteApc]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrSatelliteApc]
$creadListPrec :: ReadPrec [MsgSsrSatelliteApc]
readPrec :: ReadPrec MsgSsrSatelliteApc
$creadPrec :: ReadPrec MsgSsrSatelliteApc
readList :: ReadS [MsgSsrSatelliteApc]
$creadList :: ReadS [MsgSsrSatelliteApc]
readsPrec :: Int -> ReadS MsgSsrSatelliteApc
$creadsPrec :: Int -> ReadS MsgSsrSatelliteApc
Read, MsgSsrSatelliteApc -> MsgSsrSatelliteApc -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrSatelliteApc -> MsgSsrSatelliteApc -> Bool
$c/= :: MsgSsrSatelliteApc -> MsgSsrSatelliteApc -> Bool
== :: MsgSsrSatelliteApc -> MsgSsrSatelliteApc -> Bool
$c== :: MsgSsrSatelliteApc -> MsgSsrSatelliteApc -> Bool
Eq )

instance Binary MsgSsrSatelliteApc where
  get :: Get MsgSsrSatelliteApc
get = do
    [SatelliteAPC]
_msgSsrSatelliteApc_apc <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrSatelliteApc {[SatelliteAPC]
_msgSsrSatelliteApc_apc :: [SatelliteAPC]
_msgSsrSatelliteApc_apc :: [SatelliteAPC]
..}

  put :: MsgSsrSatelliteApc -> Put
put MsgSsrSatelliteApc {[SatelliteAPC]
_msgSsrSatelliteApc_apc :: [SatelliteAPC]
_msgSsrSatelliteApc_apc :: MsgSsrSatelliteApc -> [SatelliteAPC]
..} = do
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [SatelliteAPC]
_msgSsrSatelliteApc_apc

$(makeSBP 'msgSsrSatelliteApc ''MsgSsrSatelliteApc)
$(makeJSON "_msgSsrSatelliteApc_" ''MsgSsrSatelliteApc)
$(makeLenses ''MsgSsrSatelliteApc)

msgSsrOrbitClockDepA :: Word16
msgSsrOrbitClockDepA :: Word16
msgSsrOrbitClockDepA = Word16
0x05DC

data MsgSsrOrbitClockDepA = MsgSsrOrbitClockDepA
  { MsgSsrOrbitClockDepA -> GpsTimeSec
_msgSsrOrbitClockDepA_time          :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , MsgSsrOrbitClockDepA -> GnssSignal
_msgSsrOrbitClockDepA_sid           :: !GnssSignal
    -- ^ GNSS signal identifier (16 bit)
  , MsgSsrOrbitClockDepA -> Word8
_msgSsrOrbitClockDepA_update_interval :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , MsgSsrOrbitClockDepA -> Word8
_msgSsrOrbitClockDepA_iod_ssr       :: !Word8
    -- ^ IOD of the SSR correction. A change of Issue Of Data SSR is used to
    -- indicate a change in the SSR generating configuration
  , MsgSsrOrbitClockDepA -> Word8
_msgSsrOrbitClockDepA_iod           :: !Word8
    -- ^ Issue of broadcast ephemeris data
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_radial        :: !Int32
    -- ^ Orbit radial delta correction
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_along         :: !Int32
    -- ^ Orbit along delta correction
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_cross         :: !Int32
    -- ^ Orbit along delta correction
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_dot_radial    :: !Int32
    -- ^ Velocity of orbit radial delta correction
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_dot_along     :: !Int32
    -- ^ Velocity of orbit along delta correction
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_dot_cross     :: !Int32
    -- ^ Velocity of orbit cross delta correction
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_c0            :: !Int32
    -- ^ C0 polynomial coefficient for correction of broadcast satellite clock
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_c1            :: !Int32
    -- ^ C1 polynomial coefficient for correction of broadcast satellite clock
  , MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_c2            :: !Int32
    -- ^ C2 polynomial coefficient for correction of broadcast satellite clock
  } deriving ( Int -> MsgSsrOrbitClockDepA -> ShowS
[MsgSsrOrbitClockDepA] -> ShowS
MsgSsrOrbitClockDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrOrbitClockDepA] -> ShowS
$cshowList :: [MsgSsrOrbitClockDepA] -> ShowS
show :: MsgSsrOrbitClockDepA -> String
$cshow :: MsgSsrOrbitClockDepA -> String
showsPrec :: Int -> MsgSsrOrbitClockDepA -> ShowS
$cshowsPrec :: Int -> MsgSsrOrbitClockDepA -> ShowS
Show, ReadPrec [MsgSsrOrbitClockDepA]
ReadPrec MsgSsrOrbitClockDepA
Int -> ReadS MsgSsrOrbitClockDepA
ReadS [MsgSsrOrbitClockDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrOrbitClockDepA]
$creadListPrec :: ReadPrec [MsgSsrOrbitClockDepA]
readPrec :: ReadPrec MsgSsrOrbitClockDepA
$creadPrec :: ReadPrec MsgSsrOrbitClockDepA
readList :: ReadS [MsgSsrOrbitClockDepA]
$creadList :: ReadS [MsgSsrOrbitClockDepA]
readsPrec :: Int -> ReadS MsgSsrOrbitClockDepA
$creadsPrec :: Int -> ReadS MsgSsrOrbitClockDepA
Read, MsgSsrOrbitClockDepA -> MsgSsrOrbitClockDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrOrbitClockDepA -> MsgSsrOrbitClockDepA -> Bool
$c/= :: MsgSsrOrbitClockDepA -> MsgSsrOrbitClockDepA -> Bool
== :: MsgSsrOrbitClockDepA -> MsgSsrOrbitClockDepA -> Bool
$c== :: MsgSsrOrbitClockDepA -> MsgSsrOrbitClockDepA -> Bool
Eq )

instance Binary MsgSsrOrbitClockDepA where
  get :: Get MsgSsrOrbitClockDepA
get = do
    GpsTimeSec
_msgSsrOrbitClockDepA_time <- forall t. Binary t => Get t
get
    GnssSignal
_msgSsrOrbitClockDepA_sid <- forall t. Binary t => Get t
get
    Word8
_msgSsrOrbitClockDepA_update_interval <- Get Word8
getWord8
    Word8
_msgSsrOrbitClockDepA_iod_ssr <- Get Word8
getWord8
    Word8
_msgSsrOrbitClockDepA_iod <- Get Word8
getWord8
    Int32
_msgSsrOrbitClockDepA_radial <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_along <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_cross <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_dot_radial <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_dot_along <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_dot_cross <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_c0 <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_c1 <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    Int32
_msgSsrOrbitClockDepA_c2 <- (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Word32
getWord32le)
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrOrbitClockDepA {Int32
Word8
GnssSignal
GpsTimeSec
_msgSsrOrbitClockDepA_c2 :: Int32
_msgSsrOrbitClockDepA_c1 :: Int32
_msgSsrOrbitClockDepA_c0 :: Int32
_msgSsrOrbitClockDepA_dot_cross :: Int32
_msgSsrOrbitClockDepA_dot_along :: Int32
_msgSsrOrbitClockDepA_dot_radial :: Int32
_msgSsrOrbitClockDepA_cross :: Int32
_msgSsrOrbitClockDepA_along :: Int32
_msgSsrOrbitClockDepA_radial :: Int32
_msgSsrOrbitClockDepA_iod :: Word8
_msgSsrOrbitClockDepA_iod_ssr :: Word8
_msgSsrOrbitClockDepA_update_interval :: Word8
_msgSsrOrbitClockDepA_sid :: GnssSignal
_msgSsrOrbitClockDepA_time :: GpsTimeSec
_msgSsrOrbitClockDepA_c2 :: Int32
_msgSsrOrbitClockDepA_c1 :: Int32
_msgSsrOrbitClockDepA_c0 :: Int32
_msgSsrOrbitClockDepA_dot_cross :: Int32
_msgSsrOrbitClockDepA_dot_along :: Int32
_msgSsrOrbitClockDepA_dot_radial :: Int32
_msgSsrOrbitClockDepA_cross :: Int32
_msgSsrOrbitClockDepA_along :: Int32
_msgSsrOrbitClockDepA_radial :: Int32
_msgSsrOrbitClockDepA_iod :: Word8
_msgSsrOrbitClockDepA_iod_ssr :: Word8
_msgSsrOrbitClockDepA_update_interval :: Word8
_msgSsrOrbitClockDepA_sid :: GnssSignal
_msgSsrOrbitClockDepA_time :: GpsTimeSec
..}

  put :: MsgSsrOrbitClockDepA -> Put
put MsgSsrOrbitClockDepA {Int32
Word8
GnssSignal
GpsTimeSec
_msgSsrOrbitClockDepA_c2 :: Int32
_msgSsrOrbitClockDepA_c1 :: Int32
_msgSsrOrbitClockDepA_c0 :: Int32
_msgSsrOrbitClockDepA_dot_cross :: Int32
_msgSsrOrbitClockDepA_dot_along :: Int32
_msgSsrOrbitClockDepA_dot_radial :: Int32
_msgSsrOrbitClockDepA_cross :: Int32
_msgSsrOrbitClockDepA_along :: Int32
_msgSsrOrbitClockDepA_radial :: Int32
_msgSsrOrbitClockDepA_iod :: Word8
_msgSsrOrbitClockDepA_iod_ssr :: Word8
_msgSsrOrbitClockDepA_update_interval :: Word8
_msgSsrOrbitClockDepA_sid :: GnssSignal
_msgSsrOrbitClockDepA_time :: GpsTimeSec
_msgSsrOrbitClockDepA_c2 :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_c1 :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_c0 :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_dot_cross :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_dot_along :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_dot_radial :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_cross :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_along :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_radial :: MsgSsrOrbitClockDepA -> Int32
_msgSsrOrbitClockDepA_iod :: MsgSsrOrbitClockDepA -> Word8
_msgSsrOrbitClockDepA_iod_ssr :: MsgSsrOrbitClockDepA -> Word8
_msgSsrOrbitClockDepA_update_interval :: MsgSsrOrbitClockDepA -> Word8
_msgSsrOrbitClockDepA_sid :: MsgSsrOrbitClockDepA -> GnssSignal
_msgSsrOrbitClockDepA_time :: MsgSsrOrbitClockDepA -> GpsTimeSec
..} = do
    forall t. Binary t => t -> Put
put GpsTimeSec
_msgSsrOrbitClockDepA_time
    forall t. Binary t => t -> Put
put GnssSignal
_msgSsrOrbitClockDepA_sid
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockDepA_update_interval
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockDepA_iod_ssr
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockDepA_iod
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_radial
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_along
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_cross
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_dot_radial
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_dot_along
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_dot_cross
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_c0
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_c1
    (Word32 -> Put
putWord32le forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) Int32
_msgSsrOrbitClockDepA_c2

$(makeSBP 'msgSsrOrbitClockDepA ''MsgSsrOrbitClockDepA)
$(makeJSON "_msgSsrOrbitClockDepA_" ''MsgSsrOrbitClockDepA)
$(makeLenses ''MsgSsrOrbitClockDepA)

-- | STECHeaderDepA.
--
-- A full set of STEC information will likely span multiple SBP messages,
-- since SBP message a limited to 255 bytes.  The header is used to tie
-- multiple SBP messages into a sequence.
data STECHeaderDepA = STECHeaderDepA
  { STECHeaderDepA -> GpsTimeSec
_sTECHeaderDepA_time          :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , STECHeaderDepA -> Word8
_sTECHeaderDepA_num_msgs      :: !Word8
    -- ^ Number of messages in the dataset
  , STECHeaderDepA -> Word8
_sTECHeaderDepA_seq_num       :: !Word8
    -- ^ Position of this message in the dataset
  , STECHeaderDepA -> Word8
_sTECHeaderDepA_update_interval :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , STECHeaderDepA -> Word8
_sTECHeaderDepA_iod_atmo      :: !Word8
    -- ^ IOD of the SSR atmospheric correction
  } deriving ( Int -> STECHeaderDepA -> ShowS
[STECHeaderDepA] -> ShowS
STECHeaderDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [STECHeaderDepA] -> ShowS
$cshowList :: [STECHeaderDepA] -> ShowS
show :: STECHeaderDepA -> String
$cshow :: STECHeaderDepA -> String
showsPrec :: Int -> STECHeaderDepA -> ShowS
$cshowsPrec :: Int -> STECHeaderDepA -> ShowS
Show, ReadPrec [STECHeaderDepA]
ReadPrec STECHeaderDepA
Int -> ReadS STECHeaderDepA
ReadS [STECHeaderDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [STECHeaderDepA]
$creadListPrec :: ReadPrec [STECHeaderDepA]
readPrec :: ReadPrec STECHeaderDepA
$creadPrec :: ReadPrec STECHeaderDepA
readList :: ReadS [STECHeaderDepA]
$creadList :: ReadS [STECHeaderDepA]
readsPrec :: Int -> ReadS STECHeaderDepA
$creadsPrec :: Int -> ReadS STECHeaderDepA
Read, STECHeaderDepA -> STECHeaderDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: STECHeaderDepA -> STECHeaderDepA -> Bool
$c/= :: STECHeaderDepA -> STECHeaderDepA -> Bool
== :: STECHeaderDepA -> STECHeaderDepA -> Bool
$c== :: STECHeaderDepA -> STECHeaderDepA -> Bool
Eq )

instance Binary STECHeaderDepA where
  get :: Get STECHeaderDepA
get = do
    GpsTimeSec
_sTECHeaderDepA_time <- forall t. Binary t => Get t
get
    Word8
_sTECHeaderDepA_num_msgs <- Get Word8
getWord8
    Word8
_sTECHeaderDepA_seq_num <- Get Word8
getWord8
    Word8
_sTECHeaderDepA_update_interval <- Get Word8
getWord8
    Word8
_sTECHeaderDepA_iod_atmo <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure STECHeaderDepA {Word8
GpsTimeSec
_sTECHeaderDepA_iod_atmo :: Word8
_sTECHeaderDepA_update_interval :: Word8
_sTECHeaderDepA_seq_num :: Word8
_sTECHeaderDepA_num_msgs :: Word8
_sTECHeaderDepA_time :: GpsTimeSec
_sTECHeaderDepA_iod_atmo :: Word8
_sTECHeaderDepA_update_interval :: Word8
_sTECHeaderDepA_seq_num :: Word8
_sTECHeaderDepA_num_msgs :: Word8
_sTECHeaderDepA_time :: GpsTimeSec
..}

  put :: STECHeaderDepA -> Put
put STECHeaderDepA {Word8
GpsTimeSec
_sTECHeaderDepA_iod_atmo :: Word8
_sTECHeaderDepA_update_interval :: Word8
_sTECHeaderDepA_seq_num :: Word8
_sTECHeaderDepA_num_msgs :: Word8
_sTECHeaderDepA_time :: GpsTimeSec
_sTECHeaderDepA_iod_atmo :: STECHeaderDepA -> Word8
_sTECHeaderDepA_update_interval :: STECHeaderDepA -> Word8
_sTECHeaderDepA_seq_num :: STECHeaderDepA -> Word8
_sTECHeaderDepA_num_msgs :: STECHeaderDepA -> Word8
_sTECHeaderDepA_time :: STECHeaderDepA -> GpsTimeSec
..} = do
    forall t. Binary t => t -> Put
put GpsTimeSec
_sTECHeaderDepA_time
    Word8 -> Put
putWord8 Word8
_sTECHeaderDepA_num_msgs
    Word8 -> Put
putWord8 Word8
_sTECHeaderDepA_seq_num
    Word8 -> Put
putWord8 Word8
_sTECHeaderDepA_update_interval
    Word8 -> Put
putWord8 Word8
_sTECHeaderDepA_iod_atmo

$(makeJSON "_sTECHeaderDepA_" ''STECHeaderDepA)
$(makeLenses ''STECHeaderDepA)

-- | GriddedCorrectionHeaderDepA.
--
-- The 3GPP message contains nested variable length arrays which are not
-- supported in SBP, so each grid point will be identified by the index.
data GriddedCorrectionHeaderDepA = GriddedCorrectionHeaderDepA
  { GriddedCorrectionHeaderDepA -> GpsTimeSec
_griddedCorrectionHeaderDepA_time                  :: !GpsTimeSec
    -- ^ GNSS reference time of the correction
  , GriddedCorrectionHeaderDepA -> Word16
_griddedCorrectionHeaderDepA_num_msgs              :: !Word16
    -- ^ Number of messages in the dataset
  , GriddedCorrectionHeaderDepA -> Word16
_griddedCorrectionHeaderDepA_seq_num               :: !Word16
    -- ^ Position of this message in the dataset
  , GriddedCorrectionHeaderDepA -> Word8
_griddedCorrectionHeaderDepA_update_interval       :: !Word8
    -- ^ Update interval between consecutive corrections. Encoded following RTCM
    -- DF391 specification.
  , GriddedCorrectionHeaderDepA -> Word8
_griddedCorrectionHeaderDepA_iod_atmo              :: !Word8
    -- ^ IOD of the SSR atmospheric correction
  , GriddedCorrectionHeaderDepA -> Word8
_griddedCorrectionHeaderDepA_tropo_quality_indicator :: !Word8
    -- ^ Quality of the troposphere data. Encoded following RTCM DF389
    -- specification in units of m.
  } deriving ( Int -> GriddedCorrectionHeaderDepA -> ShowS
[GriddedCorrectionHeaderDepA] -> ShowS
GriddedCorrectionHeaderDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GriddedCorrectionHeaderDepA] -> ShowS
$cshowList :: [GriddedCorrectionHeaderDepA] -> ShowS
show :: GriddedCorrectionHeaderDepA -> String
$cshow :: GriddedCorrectionHeaderDepA -> String
showsPrec :: Int -> GriddedCorrectionHeaderDepA -> ShowS
$cshowsPrec :: Int -> GriddedCorrectionHeaderDepA -> ShowS
Show, ReadPrec [GriddedCorrectionHeaderDepA]
ReadPrec GriddedCorrectionHeaderDepA
Int -> ReadS GriddedCorrectionHeaderDepA
ReadS [GriddedCorrectionHeaderDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GriddedCorrectionHeaderDepA]
$creadListPrec :: ReadPrec [GriddedCorrectionHeaderDepA]
readPrec :: ReadPrec GriddedCorrectionHeaderDepA
$creadPrec :: ReadPrec GriddedCorrectionHeaderDepA
readList :: ReadS [GriddedCorrectionHeaderDepA]
$creadList :: ReadS [GriddedCorrectionHeaderDepA]
readsPrec :: Int -> ReadS GriddedCorrectionHeaderDepA
$creadsPrec :: Int -> ReadS GriddedCorrectionHeaderDepA
Read, GriddedCorrectionHeaderDepA -> GriddedCorrectionHeaderDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GriddedCorrectionHeaderDepA -> GriddedCorrectionHeaderDepA -> Bool
$c/= :: GriddedCorrectionHeaderDepA -> GriddedCorrectionHeaderDepA -> Bool
== :: GriddedCorrectionHeaderDepA -> GriddedCorrectionHeaderDepA -> Bool
$c== :: GriddedCorrectionHeaderDepA -> GriddedCorrectionHeaderDepA -> Bool
Eq )

instance Binary GriddedCorrectionHeaderDepA where
  get :: Get GriddedCorrectionHeaderDepA
get = do
    GpsTimeSec
_griddedCorrectionHeaderDepA_time <- forall t. Binary t => Get t
get
    Word16
_griddedCorrectionHeaderDepA_num_msgs <- Get Word16
getWord16le
    Word16
_griddedCorrectionHeaderDepA_seq_num <- Get Word16
getWord16le
    Word8
_griddedCorrectionHeaderDepA_update_interval <- Get Word8
getWord8
    Word8
_griddedCorrectionHeaderDepA_iod_atmo <- Get Word8
getWord8
    Word8
_griddedCorrectionHeaderDepA_tropo_quality_indicator <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure GriddedCorrectionHeaderDepA {Word8
Word16
GpsTimeSec
_griddedCorrectionHeaderDepA_tropo_quality_indicator :: Word8
_griddedCorrectionHeaderDepA_iod_atmo :: Word8
_griddedCorrectionHeaderDepA_update_interval :: Word8
_griddedCorrectionHeaderDepA_seq_num :: Word16
_griddedCorrectionHeaderDepA_num_msgs :: Word16
_griddedCorrectionHeaderDepA_time :: GpsTimeSec
_griddedCorrectionHeaderDepA_tropo_quality_indicator :: Word8
_griddedCorrectionHeaderDepA_iod_atmo :: Word8
_griddedCorrectionHeaderDepA_update_interval :: Word8
_griddedCorrectionHeaderDepA_seq_num :: Word16
_griddedCorrectionHeaderDepA_num_msgs :: Word16
_griddedCorrectionHeaderDepA_time :: GpsTimeSec
..}

  put :: GriddedCorrectionHeaderDepA -> Put
put GriddedCorrectionHeaderDepA {Word8
Word16
GpsTimeSec
_griddedCorrectionHeaderDepA_tropo_quality_indicator :: Word8
_griddedCorrectionHeaderDepA_iod_atmo :: Word8
_griddedCorrectionHeaderDepA_update_interval :: Word8
_griddedCorrectionHeaderDepA_seq_num :: Word16
_griddedCorrectionHeaderDepA_num_msgs :: Word16
_griddedCorrectionHeaderDepA_time :: GpsTimeSec
_griddedCorrectionHeaderDepA_tropo_quality_indicator :: GriddedCorrectionHeaderDepA -> Word8
_griddedCorrectionHeaderDepA_iod_atmo :: GriddedCorrectionHeaderDepA -> Word8
_griddedCorrectionHeaderDepA_update_interval :: GriddedCorrectionHeaderDepA -> Word8
_griddedCorrectionHeaderDepA_seq_num :: GriddedCorrectionHeaderDepA -> Word16
_griddedCorrectionHeaderDepA_num_msgs :: GriddedCorrectionHeaderDepA -> Word16
_griddedCorrectionHeaderDepA_time :: GriddedCorrectionHeaderDepA -> GpsTimeSec
..} = do
    forall t. Binary t => t -> Put
put GpsTimeSec
_griddedCorrectionHeaderDepA_time
    Word16 -> Put
putWord16le Word16
_griddedCorrectionHeaderDepA_num_msgs
    Word16 -> Put
putWord16le Word16
_griddedCorrectionHeaderDepA_seq_num
    Word8 -> Put
putWord8 Word8
_griddedCorrectionHeaderDepA_update_interval
    Word8 -> Put
putWord8 Word8
_griddedCorrectionHeaderDepA_iod_atmo
    Word8 -> Put
putWord8 Word8
_griddedCorrectionHeaderDepA_tropo_quality_indicator

$(makeJSON "_griddedCorrectionHeaderDepA_" ''GriddedCorrectionHeaderDepA)
$(makeLenses ''GriddedCorrectionHeaderDepA)

-- | GridDefinitionHeaderDepA.
--
-- Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. Also includes an
-- RLE encoded validity list.
data GridDefinitionHeaderDepA = GridDefinitionHeaderDepA
  { GridDefinitionHeaderDepA -> Word8
_gridDefinitionHeaderDepA_region_size_inverse :: !Word8
    -- ^ region_size (deg) = 10 / region_size_inverse 0 is an invalid value.
  , GridDefinitionHeaderDepA -> Word16
_gridDefinitionHeaderDepA_area_width        :: !Word16
    -- ^ grid height (deg) = grid width (deg) = area_width / region_size 0 is an
    -- invalid value.
  , GridDefinitionHeaderDepA -> Word16
_gridDefinitionHeaderDepA_lat_nw_corner_enc :: !Word16
    -- ^ North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90
  , GridDefinitionHeaderDepA -> Word16
_gridDefinitionHeaderDepA_lon_nw_corner_enc :: !Word16
    -- ^ North-West corner longitude (deg) = region_size * lon_nw_corner_enc -
    -- 180
  , GridDefinitionHeaderDepA -> Word8
_gridDefinitionHeaderDepA_num_msgs          :: !Word8
    -- ^ Number of messages in the dataset
  , GridDefinitionHeaderDepA -> Word8
_gridDefinitionHeaderDepA_seq_num           :: !Word8
    -- ^ Position of this message in the dataset
  } deriving ( Int -> GridDefinitionHeaderDepA -> ShowS
[GridDefinitionHeaderDepA] -> ShowS
GridDefinitionHeaderDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GridDefinitionHeaderDepA] -> ShowS
$cshowList :: [GridDefinitionHeaderDepA] -> ShowS
show :: GridDefinitionHeaderDepA -> String
$cshow :: GridDefinitionHeaderDepA -> String
showsPrec :: Int -> GridDefinitionHeaderDepA -> ShowS
$cshowsPrec :: Int -> GridDefinitionHeaderDepA -> ShowS
Show, ReadPrec [GridDefinitionHeaderDepA]
ReadPrec GridDefinitionHeaderDepA
Int -> ReadS GridDefinitionHeaderDepA
ReadS [GridDefinitionHeaderDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GridDefinitionHeaderDepA]
$creadListPrec :: ReadPrec [GridDefinitionHeaderDepA]
readPrec :: ReadPrec GridDefinitionHeaderDepA
$creadPrec :: ReadPrec GridDefinitionHeaderDepA
readList :: ReadS [GridDefinitionHeaderDepA]
$creadList :: ReadS [GridDefinitionHeaderDepA]
readsPrec :: Int -> ReadS GridDefinitionHeaderDepA
$creadsPrec :: Int -> ReadS GridDefinitionHeaderDepA
Read, GridDefinitionHeaderDepA -> GridDefinitionHeaderDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GridDefinitionHeaderDepA -> GridDefinitionHeaderDepA -> Bool
$c/= :: GridDefinitionHeaderDepA -> GridDefinitionHeaderDepA -> Bool
== :: GridDefinitionHeaderDepA -> GridDefinitionHeaderDepA -> Bool
$c== :: GridDefinitionHeaderDepA -> GridDefinitionHeaderDepA -> Bool
Eq )

instance Binary GridDefinitionHeaderDepA where
  get :: Get GridDefinitionHeaderDepA
get = do
    Word8
_gridDefinitionHeaderDepA_region_size_inverse <- Get Word8
getWord8
    Word16
_gridDefinitionHeaderDepA_area_width <- Get Word16
getWord16le
    Word16
_gridDefinitionHeaderDepA_lat_nw_corner_enc <- Get Word16
getWord16le
    Word16
_gridDefinitionHeaderDepA_lon_nw_corner_enc <- Get Word16
getWord16le
    Word8
_gridDefinitionHeaderDepA_num_msgs <- Get Word8
getWord8
    Word8
_gridDefinitionHeaderDepA_seq_num <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure GridDefinitionHeaderDepA {Word8
Word16
_gridDefinitionHeaderDepA_seq_num :: Word8
_gridDefinitionHeaderDepA_num_msgs :: Word8
_gridDefinitionHeaderDepA_lon_nw_corner_enc :: Word16
_gridDefinitionHeaderDepA_lat_nw_corner_enc :: Word16
_gridDefinitionHeaderDepA_area_width :: Word16
_gridDefinitionHeaderDepA_region_size_inverse :: Word8
_gridDefinitionHeaderDepA_seq_num :: Word8
_gridDefinitionHeaderDepA_num_msgs :: Word8
_gridDefinitionHeaderDepA_lon_nw_corner_enc :: Word16
_gridDefinitionHeaderDepA_lat_nw_corner_enc :: Word16
_gridDefinitionHeaderDepA_area_width :: Word16
_gridDefinitionHeaderDepA_region_size_inverse :: Word8
..}

  put :: GridDefinitionHeaderDepA -> Put
put GridDefinitionHeaderDepA {Word8
Word16
_gridDefinitionHeaderDepA_seq_num :: Word8
_gridDefinitionHeaderDepA_num_msgs :: Word8
_gridDefinitionHeaderDepA_lon_nw_corner_enc :: Word16
_gridDefinitionHeaderDepA_lat_nw_corner_enc :: Word16
_gridDefinitionHeaderDepA_area_width :: Word16
_gridDefinitionHeaderDepA_region_size_inverse :: Word8
_gridDefinitionHeaderDepA_seq_num :: GridDefinitionHeaderDepA -> Word8
_gridDefinitionHeaderDepA_num_msgs :: GridDefinitionHeaderDepA -> Word8
_gridDefinitionHeaderDepA_lon_nw_corner_enc :: GridDefinitionHeaderDepA -> Word16
_gridDefinitionHeaderDepA_lat_nw_corner_enc :: GridDefinitionHeaderDepA -> Word16
_gridDefinitionHeaderDepA_area_width :: GridDefinitionHeaderDepA -> Word16
_gridDefinitionHeaderDepA_region_size_inverse :: GridDefinitionHeaderDepA -> Word8
..} = do
    Word8 -> Put
putWord8 Word8
_gridDefinitionHeaderDepA_region_size_inverse
    Word16 -> Put
putWord16le Word16
_gridDefinitionHeaderDepA_area_width
    Word16 -> Put
putWord16le Word16
_gridDefinitionHeaderDepA_lat_nw_corner_enc
    Word16 -> Put
putWord16le Word16
_gridDefinitionHeaderDepA_lon_nw_corner_enc
    Word8 -> Put
putWord8 Word8
_gridDefinitionHeaderDepA_num_msgs
    Word8 -> Put
putWord8 Word8
_gridDefinitionHeaderDepA_seq_num

$(makeJSON "_gridDefinitionHeaderDepA_" ''GridDefinitionHeaderDepA)
$(makeLenses ''GridDefinitionHeaderDepA)

msgSsrStecCorrectionDepA :: Word16
msgSsrStecCorrectionDepA :: Word16
msgSsrStecCorrectionDepA = Word16
0x05EB

data MsgSsrStecCorrectionDepA = MsgSsrStecCorrectionDepA
  { MsgSsrStecCorrectionDepA -> STECHeaderDepA
_msgSsrStecCorrectionDepA_header      :: !STECHeaderDepA
    -- ^ Header of a STEC message
  , MsgSsrStecCorrectionDepA -> [STECSatElement]
_msgSsrStecCorrectionDepA_stec_sat_list :: ![STECSatElement]
    -- ^ Array of STEC information for each space vehicle
  } deriving ( Int -> MsgSsrStecCorrectionDepA -> ShowS
[MsgSsrStecCorrectionDepA] -> ShowS
MsgSsrStecCorrectionDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrStecCorrectionDepA] -> ShowS
$cshowList :: [MsgSsrStecCorrectionDepA] -> ShowS
show :: MsgSsrStecCorrectionDepA -> String
$cshow :: MsgSsrStecCorrectionDepA -> String
showsPrec :: Int -> MsgSsrStecCorrectionDepA -> ShowS
$cshowsPrec :: Int -> MsgSsrStecCorrectionDepA -> ShowS
Show, ReadPrec [MsgSsrStecCorrectionDepA]
ReadPrec MsgSsrStecCorrectionDepA
Int -> ReadS MsgSsrStecCorrectionDepA
ReadS [MsgSsrStecCorrectionDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrStecCorrectionDepA]
$creadListPrec :: ReadPrec [MsgSsrStecCorrectionDepA]
readPrec :: ReadPrec MsgSsrStecCorrectionDepA
$creadPrec :: ReadPrec MsgSsrStecCorrectionDepA
readList :: ReadS [MsgSsrStecCorrectionDepA]
$creadList :: ReadS [MsgSsrStecCorrectionDepA]
readsPrec :: Int -> ReadS MsgSsrStecCorrectionDepA
$creadsPrec :: Int -> ReadS MsgSsrStecCorrectionDepA
Read, MsgSsrStecCorrectionDepA -> MsgSsrStecCorrectionDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrStecCorrectionDepA -> MsgSsrStecCorrectionDepA -> Bool
$c/= :: MsgSsrStecCorrectionDepA -> MsgSsrStecCorrectionDepA -> Bool
== :: MsgSsrStecCorrectionDepA -> MsgSsrStecCorrectionDepA -> Bool
$c== :: MsgSsrStecCorrectionDepA -> MsgSsrStecCorrectionDepA -> Bool
Eq )

instance Binary MsgSsrStecCorrectionDepA where
  get :: Get MsgSsrStecCorrectionDepA
get = do
    STECHeaderDepA
_msgSsrStecCorrectionDepA_header <- forall t. Binary t => Get t
get
    [STECSatElement]
_msgSsrStecCorrectionDepA_stec_sat_list <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrStecCorrectionDepA {[STECSatElement]
STECHeaderDepA
_msgSsrStecCorrectionDepA_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrectionDepA_header :: STECHeaderDepA
_msgSsrStecCorrectionDepA_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrectionDepA_header :: STECHeaderDepA
..}

  put :: MsgSsrStecCorrectionDepA -> Put
put MsgSsrStecCorrectionDepA {[STECSatElement]
STECHeaderDepA
_msgSsrStecCorrectionDepA_stec_sat_list :: [STECSatElement]
_msgSsrStecCorrectionDepA_header :: STECHeaderDepA
_msgSsrStecCorrectionDepA_stec_sat_list :: MsgSsrStecCorrectionDepA -> [STECSatElement]
_msgSsrStecCorrectionDepA_header :: MsgSsrStecCorrectionDepA -> STECHeaderDepA
..} = do
    forall t. Binary t => t -> Put
put STECHeaderDepA
_msgSsrStecCorrectionDepA_header
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [STECSatElement]
_msgSsrStecCorrectionDepA_stec_sat_list

$(makeSBP 'msgSsrStecCorrectionDepA ''MsgSsrStecCorrectionDepA)
$(makeJSON "_msgSsrStecCorrectionDepA_" ''MsgSsrStecCorrectionDepA)
$(makeLenses ''MsgSsrStecCorrectionDepA)

msgSsrGriddedCorrectionNoStdDepA :: Word16
msgSsrGriddedCorrectionNoStdDepA :: Word16
msgSsrGriddedCorrectionNoStdDepA = Word16
0x05F0

data MsgSsrGriddedCorrectionNoStdDepA = MsgSsrGriddedCorrectionNoStdDepA
  { MsgSsrGriddedCorrectionNoStdDepA -> GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionNoStdDepA_header               :: !GriddedCorrectionHeaderDepA
    -- ^ Header of a Gridded Correction message
  , MsgSsrGriddedCorrectionNoStdDepA -> Word16
_msgSsrGriddedCorrectionNoStdDepA_index                :: !Word16
    -- ^ Index of the grid point
  , MsgSsrGriddedCorrectionNoStdDepA
-> TroposphericDelayCorrectionNoStd
_msgSsrGriddedCorrectionNoStdDepA_tropo_delay_correction :: !TroposphericDelayCorrectionNoStd
    -- ^ Wet and hydrostatic vertical delays
  , MsgSsrGriddedCorrectionNoStdDepA -> [STECResidualNoStd]
_msgSsrGriddedCorrectionNoStdDepA_stec_residuals       :: ![STECResidualNoStd]
    -- ^ STEC residuals for each satellite
  } deriving ( Int -> MsgSsrGriddedCorrectionNoStdDepA -> ShowS
[MsgSsrGriddedCorrectionNoStdDepA] -> ShowS
MsgSsrGriddedCorrectionNoStdDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrGriddedCorrectionNoStdDepA] -> ShowS
$cshowList :: [MsgSsrGriddedCorrectionNoStdDepA] -> ShowS
show :: MsgSsrGriddedCorrectionNoStdDepA -> String
$cshow :: MsgSsrGriddedCorrectionNoStdDepA -> String
showsPrec :: Int -> MsgSsrGriddedCorrectionNoStdDepA -> ShowS
$cshowsPrec :: Int -> MsgSsrGriddedCorrectionNoStdDepA -> ShowS
Show, ReadPrec [MsgSsrGriddedCorrectionNoStdDepA]
ReadPrec MsgSsrGriddedCorrectionNoStdDepA
Int -> ReadS MsgSsrGriddedCorrectionNoStdDepA
ReadS [MsgSsrGriddedCorrectionNoStdDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrGriddedCorrectionNoStdDepA]
$creadListPrec :: ReadPrec [MsgSsrGriddedCorrectionNoStdDepA]
readPrec :: ReadPrec MsgSsrGriddedCorrectionNoStdDepA
$creadPrec :: ReadPrec MsgSsrGriddedCorrectionNoStdDepA
readList :: ReadS [MsgSsrGriddedCorrectionNoStdDepA]
$creadList :: ReadS [MsgSsrGriddedCorrectionNoStdDepA]
readsPrec :: Int -> ReadS MsgSsrGriddedCorrectionNoStdDepA
$creadsPrec :: Int -> ReadS MsgSsrGriddedCorrectionNoStdDepA
Read, MsgSsrGriddedCorrectionNoStdDepA
-> MsgSsrGriddedCorrectionNoStdDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrGriddedCorrectionNoStdDepA
-> MsgSsrGriddedCorrectionNoStdDepA -> Bool
$c/= :: MsgSsrGriddedCorrectionNoStdDepA
-> MsgSsrGriddedCorrectionNoStdDepA -> Bool
== :: MsgSsrGriddedCorrectionNoStdDepA
-> MsgSsrGriddedCorrectionNoStdDepA -> Bool
$c== :: MsgSsrGriddedCorrectionNoStdDepA
-> MsgSsrGriddedCorrectionNoStdDepA -> Bool
Eq )

instance Binary MsgSsrGriddedCorrectionNoStdDepA where
  get :: Get MsgSsrGriddedCorrectionNoStdDepA
get = do
    GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionNoStdDepA_header <- forall t. Binary t => Get t
get
    Word16
_msgSsrGriddedCorrectionNoStdDepA_index <- Get Word16
getWord16le
    TroposphericDelayCorrectionNoStd
_msgSsrGriddedCorrectionNoStdDepA_tropo_delay_correction <- forall t. Binary t => Get t
get
    [STECResidualNoStd]
_msgSsrGriddedCorrectionNoStdDepA_stec_residuals <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrGriddedCorrectionNoStdDepA {[STECResidualNoStd]
Word16
TroposphericDelayCorrectionNoStd
GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionNoStdDepA_stec_residuals :: [STECResidualNoStd]
_msgSsrGriddedCorrectionNoStdDepA_tropo_delay_correction :: TroposphericDelayCorrectionNoStd
_msgSsrGriddedCorrectionNoStdDepA_index :: Word16
_msgSsrGriddedCorrectionNoStdDepA_header :: GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionNoStdDepA_stec_residuals :: [STECResidualNoStd]
_msgSsrGriddedCorrectionNoStdDepA_tropo_delay_correction :: TroposphericDelayCorrectionNoStd
_msgSsrGriddedCorrectionNoStdDepA_index :: Word16
_msgSsrGriddedCorrectionNoStdDepA_header :: GriddedCorrectionHeaderDepA
..}

  put :: MsgSsrGriddedCorrectionNoStdDepA -> Put
put MsgSsrGriddedCorrectionNoStdDepA {[STECResidualNoStd]
Word16
TroposphericDelayCorrectionNoStd
GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionNoStdDepA_stec_residuals :: [STECResidualNoStd]
_msgSsrGriddedCorrectionNoStdDepA_tropo_delay_correction :: TroposphericDelayCorrectionNoStd
_msgSsrGriddedCorrectionNoStdDepA_index :: Word16
_msgSsrGriddedCorrectionNoStdDepA_header :: GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionNoStdDepA_stec_residuals :: MsgSsrGriddedCorrectionNoStdDepA -> [STECResidualNoStd]
_msgSsrGriddedCorrectionNoStdDepA_tropo_delay_correction :: MsgSsrGriddedCorrectionNoStdDepA
-> TroposphericDelayCorrectionNoStd
_msgSsrGriddedCorrectionNoStdDepA_index :: MsgSsrGriddedCorrectionNoStdDepA -> Word16
_msgSsrGriddedCorrectionNoStdDepA_header :: MsgSsrGriddedCorrectionNoStdDepA -> GriddedCorrectionHeaderDepA
..} = do
    forall t. Binary t => t -> Put
put GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionNoStdDepA_header
    Word16 -> Put
putWord16le Word16
_msgSsrGriddedCorrectionNoStdDepA_index
    forall t. Binary t => t -> Put
put TroposphericDelayCorrectionNoStd
_msgSsrGriddedCorrectionNoStdDepA_tropo_delay_correction
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [STECResidualNoStd]
_msgSsrGriddedCorrectionNoStdDepA_stec_residuals

$(makeSBP 'msgSsrGriddedCorrectionNoStdDepA ''MsgSsrGriddedCorrectionNoStdDepA)
$(makeJSON "_msgSsrGriddedCorrectionNoStdDepA_" ''MsgSsrGriddedCorrectionNoStdDepA)
$(makeLenses ''MsgSsrGriddedCorrectionNoStdDepA)

msgSsrGriddedCorrectionDepA :: Word16
msgSsrGriddedCorrectionDepA :: Word16
msgSsrGriddedCorrectionDepA = Word16
0x05FA

data MsgSsrGriddedCorrectionDepA = MsgSsrGriddedCorrectionDepA
  { MsgSsrGriddedCorrectionDepA -> GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionDepA_header               :: !GriddedCorrectionHeaderDepA
    -- ^ Header of a Gridded Correction message
  , MsgSsrGriddedCorrectionDepA -> Word16
_msgSsrGriddedCorrectionDepA_index                :: !Word16
    -- ^ Index of the grid point
  , MsgSsrGriddedCorrectionDepA -> TroposphericDelayCorrection
_msgSsrGriddedCorrectionDepA_tropo_delay_correction :: !TroposphericDelayCorrection
    -- ^ Wet and hydrostatic vertical delays (mean, stddev)
  , MsgSsrGriddedCorrectionDepA -> [STECResidual]
_msgSsrGriddedCorrectionDepA_stec_residuals       :: ![STECResidual]
    -- ^ STEC residuals for each satellite (mean, stddev)
  } deriving ( Int -> MsgSsrGriddedCorrectionDepA -> ShowS
[MsgSsrGriddedCorrectionDepA] -> ShowS
MsgSsrGriddedCorrectionDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrGriddedCorrectionDepA] -> ShowS
$cshowList :: [MsgSsrGriddedCorrectionDepA] -> ShowS
show :: MsgSsrGriddedCorrectionDepA -> String
$cshow :: MsgSsrGriddedCorrectionDepA -> String
showsPrec :: Int -> MsgSsrGriddedCorrectionDepA -> ShowS
$cshowsPrec :: Int -> MsgSsrGriddedCorrectionDepA -> ShowS
Show, ReadPrec [MsgSsrGriddedCorrectionDepA]
ReadPrec MsgSsrGriddedCorrectionDepA
Int -> ReadS MsgSsrGriddedCorrectionDepA
ReadS [MsgSsrGriddedCorrectionDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrGriddedCorrectionDepA]
$creadListPrec :: ReadPrec [MsgSsrGriddedCorrectionDepA]
readPrec :: ReadPrec MsgSsrGriddedCorrectionDepA
$creadPrec :: ReadPrec MsgSsrGriddedCorrectionDepA
readList :: ReadS [MsgSsrGriddedCorrectionDepA]
$creadList :: ReadS [MsgSsrGriddedCorrectionDepA]
readsPrec :: Int -> ReadS MsgSsrGriddedCorrectionDepA
$creadsPrec :: Int -> ReadS MsgSsrGriddedCorrectionDepA
Read, MsgSsrGriddedCorrectionDepA -> MsgSsrGriddedCorrectionDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrGriddedCorrectionDepA -> MsgSsrGriddedCorrectionDepA -> Bool
$c/= :: MsgSsrGriddedCorrectionDepA -> MsgSsrGriddedCorrectionDepA -> Bool
== :: MsgSsrGriddedCorrectionDepA -> MsgSsrGriddedCorrectionDepA -> Bool
$c== :: MsgSsrGriddedCorrectionDepA -> MsgSsrGriddedCorrectionDepA -> Bool
Eq )

instance Binary MsgSsrGriddedCorrectionDepA where
  get :: Get MsgSsrGriddedCorrectionDepA
get = do
    GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionDepA_header <- forall t. Binary t => Get t
get
    Word16
_msgSsrGriddedCorrectionDepA_index <- Get Word16
getWord16le
    TroposphericDelayCorrection
_msgSsrGriddedCorrectionDepA_tropo_delay_correction <- forall t. Binary t => Get t
get
    [STECResidual]
_msgSsrGriddedCorrectionDepA_stec_residuals <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrGriddedCorrectionDepA {[STECResidual]
Word16
TroposphericDelayCorrection
GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionDepA_stec_residuals :: [STECResidual]
_msgSsrGriddedCorrectionDepA_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrectionDepA_index :: Word16
_msgSsrGriddedCorrectionDepA_header :: GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionDepA_stec_residuals :: [STECResidual]
_msgSsrGriddedCorrectionDepA_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrectionDepA_index :: Word16
_msgSsrGriddedCorrectionDepA_header :: GriddedCorrectionHeaderDepA
..}

  put :: MsgSsrGriddedCorrectionDepA -> Put
put MsgSsrGriddedCorrectionDepA {[STECResidual]
Word16
TroposphericDelayCorrection
GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionDepA_stec_residuals :: [STECResidual]
_msgSsrGriddedCorrectionDepA_tropo_delay_correction :: TroposphericDelayCorrection
_msgSsrGriddedCorrectionDepA_index :: Word16
_msgSsrGriddedCorrectionDepA_header :: GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionDepA_stec_residuals :: MsgSsrGriddedCorrectionDepA -> [STECResidual]
_msgSsrGriddedCorrectionDepA_tropo_delay_correction :: MsgSsrGriddedCorrectionDepA -> TroposphericDelayCorrection
_msgSsrGriddedCorrectionDepA_index :: MsgSsrGriddedCorrectionDepA -> Word16
_msgSsrGriddedCorrectionDepA_header :: MsgSsrGriddedCorrectionDepA -> GriddedCorrectionHeaderDepA
..} = do
    forall t. Binary t => t -> Put
put GriddedCorrectionHeaderDepA
_msgSsrGriddedCorrectionDepA_header
    Word16 -> Put
putWord16le Word16
_msgSsrGriddedCorrectionDepA_index
    forall t. Binary t => t -> Put
put TroposphericDelayCorrection
_msgSsrGriddedCorrectionDepA_tropo_delay_correction
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [STECResidual]
_msgSsrGriddedCorrectionDepA_stec_residuals

$(makeSBP 'msgSsrGriddedCorrectionDepA ''MsgSsrGriddedCorrectionDepA)
$(makeJSON "_msgSsrGriddedCorrectionDepA_" ''MsgSsrGriddedCorrectionDepA)
$(makeLenses ''MsgSsrGriddedCorrectionDepA)

msgSsrGridDefinitionDepA :: Word16
msgSsrGridDefinitionDepA :: Word16
msgSsrGridDefinitionDepA = Word16
0x05F5

data MsgSsrGridDefinitionDepA = MsgSsrGridDefinitionDepA
  { MsgSsrGridDefinitionDepA -> GridDefinitionHeaderDepA
_msgSsrGridDefinitionDepA_header :: !GridDefinitionHeaderDepA
    -- ^ Header of a Gridded Correction message
  , MsgSsrGridDefinitionDepA -> [Word8]
_msgSsrGridDefinitionDepA_rle_list :: ![Word8]
    -- ^ Run Length Encode list of quadrants that contain valid data. The spec
    -- describes the encoding scheme in detail, but essentially the index of
    -- the quadrants that contain transitions between valid and invalid (and
    -- vice versa) are encoded as u8 integers.
  } deriving ( Int -> MsgSsrGridDefinitionDepA -> ShowS
[MsgSsrGridDefinitionDepA] -> ShowS
MsgSsrGridDefinitionDepA -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrGridDefinitionDepA] -> ShowS
$cshowList :: [MsgSsrGridDefinitionDepA] -> ShowS
show :: MsgSsrGridDefinitionDepA -> String
$cshow :: MsgSsrGridDefinitionDepA -> String
showsPrec :: Int -> MsgSsrGridDefinitionDepA -> ShowS
$cshowsPrec :: Int -> MsgSsrGridDefinitionDepA -> ShowS
Show, ReadPrec [MsgSsrGridDefinitionDepA]
ReadPrec MsgSsrGridDefinitionDepA
Int -> ReadS MsgSsrGridDefinitionDepA
ReadS [MsgSsrGridDefinitionDepA]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrGridDefinitionDepA]
$creadListPrec :: ReadPrec [MsgSsrGridDefinitionDepA]
readPrec :: ReadPrec MsgSsrGridDefinitionDepA
$creadPrec :: ReadPrec MsgSsrGridDefinitionDepA
readList :: ReadS [MsgSsrGridDefinitionDepA]
$creadList :: ReadS [MsgSsrGridDefinitionDepA]
readsPrec :: Int -> ReadS MsgSsrGridDefinitionDepA
$creadsPrec :: Int -> ReadS MsgSsrGridDefinitionDepA
Read, MsgSsrGridDefinitionDepA -> MsgSsrGridDefinitionDepA -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrGridDefinitionDepA -> MsgSsrGridDefinitionDepA -> Bool
$c/= :: MsgSsrGridDefinitionDepA -> MsgSsrGridDefinitionDepA -> Bool
== :: MsgSsrGridDefinitionDepA -> MsgSsrGridDefinitionDepA -> Bool
$c== :: MsgSsrGridDefinitionDepA -> MsgSsrGridDefinitionDepA -> Bool
Eq )

instance Binary MsgSsrGridDefinitionDepA where
  get :: Get MsgSsrGridDefinitionDepA
get = do
    GridDefinitionHeaderDepA
_msgSsrGridDefinitionDepA_header <- forall t. Binary t => Get t
get
    [Word8]
_msgSsrGridDefinitionDepA_rle_list <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrGridDefinitionDepA {[Word8]
GridDefinitionHeaderDepA
_msgSsrGridDefinitionDepA_rle_list :: [Word8]
_msgSsrGridDefinitionDepA_header :: GridDefinitionHeaderDepA
_msgSsrGridDefinitionDepA_rle_list :: [Word8]
_msgSsrGridDefinitionDepA_header :: GridDefinitionHeaderDepA
..}

  put :: MsgSsrGridDefinitionDepA -> Put
put MsgSsrGridDefinitionDepA {[Word8]
GridDefinitionHeaderDepA
_msgSsrGridDefinitionDepA_rle_list :: [Word8]
_msgSsrGridDefinitionDepA_header :: GridDefinitionHeaderDepA
_msgSsrGridDefinitionDepA_rle_list :: MsgSsrGridDefinitionDepA -> [Word8]
_msgSsrGridDefinitionDepA_header :: MsgSsrGridDefinitionDepA -> GridDefinitionHeaderDepA
..} = do
    forall t. Binary t => t -> Put
put GridDefinitionHeaderDepA
_msgSsrGridDefinitionDepA_header
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Word8 -> Put
putWord8 [Word8]
_msgSsrGridDefinitionDepA_rle_list

$(makeSBP 'msgSsrGridDefinitionDepA ''MsgSsrGridDefinitionDepA)
$(makeJSON "_msgSsrGridDefinitionDepA_" ''MsgSsrGridDefinitionDepA)
$(makeLenses ''MsgSsrGridDefinitionDepA)

-- | OrbitClockBound.
--
-- Orbit and clock bound.
data OrbitClockBound = OrbitClockBound
  { OrbitClockBound -> Word8
_orbitClockBound_sat_id             :: !Word8
    -- ^ Satellite ID. Similar to either RTCM DF068 (GPS), DF252 (Galileo), or
    -- DF488 (BDS) depending on the constellation.
  , OrbitClockBound -> Word8
_orbitClockBound_orb_radial_bound_mu :: !Word8
    -- ^ Mean Radial. See Note 1.
  , OrbitClockBound -> Word8
_orbitClockBound_orb_along_bound_mu :: !Word8
    -- ^ Mean Along-Track. See Note 1.
  , OrbitClockBound -> Word8
_orbitClockBound_orb_cross_bound_mu :: !Word8
    -- ^ Mean Cross-Track. See Note 1.
  , OrbitClockBound -> Word8
_orbitClockBound_orb_radial_bound_sig :: !Word8
    -- ^ Standard Deviation Radial. See Note 2.
  , OrbitClockBound -> Word8
_orbitClockBound_orb_along_bound_sig :: !Word8
    -- ^ Standard Deviation Along-Track. See Note 2.
  , OrbitClockBound -> Word8
_orbitClockBound_orb_cross_bound_sig :: !Word8
    -- ^ Standard Deviation Cross-Track. See Note 2.
  , OrbitClockBound -> Word8
_orbitClockBound_clock_bound_mu     :: !Word8
    -- ^ Clock Bound Mean. See Note 1.
  , OrbitClockBound -> Word8
_orbitClockBound_clock_bound_sig    :: !Word8
    -- ^ Clock Bound Standard Deviation. See Note 2.
  } deriving ( Int -> OrbitClockBound -> ShowS
[OrbitClockBound] -> ShowS
OrbitClockBound -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OrbitClockBound] -> ShowS
$cshowList :: [OrbitClockBound] -> ShowS
show :: OrbitClockBound -> String
$cshow :: OrbitClockBound -> String
showsPrec :: Int -> OrbitClockBound -> ShowS
$cshowsPrec :: Int -> OrbitClockBound -> ShowS
Show, ReadPrec [OrbitClockBound]
ReadPrec OrbitClockBound
Int -> ReadS OrbitClockBound
ReadS [OrbitClockBound]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [OrbitClockBound]
$creadListPrec :: ReadPrec [OrbitClockBound]
readPrec :: ReadPrec OrbitClockBound
$creadPrec :: ReadPrec OrbitClockBound
readList :: ReadS [OrbitClockBound]
$creadList :: ReadS [OrbitClockBound]
readsPrec :: Int -> ReadS OrbitClockBound
$creadsPrec :: Int -> ReadS OrbitClockBound
Read, OrbitClockBound -> OrbitClockBound -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OrbitClockBound -> OrbitClockBound -> Bool
$c/= :: OrbitClockBound -> OrbitClockBound -> Bool
== :: OrbitClockBound -> OrbitClockBound -> Bool
$c== :: OrbitClockBound -> OrbitClockBound -> Bool
Eq )

instance Binary OrbitClockBound where
  get :: Get OrbitClockBound
get = do
    Word8
_orbitClockBound_sat_id <- Get Word8
getWord8
    Word8
_orbitClockBound_orb_radial_bound_mu <- Get Word8
getWord8
    Word8
_orbitClockBound_orb_along_bound_mu <- Get Word8
getWord8
    Word8
_orbitClockBound_orb_cross_bound_mu <- Get Word8
getWord8
    Word8
_orbitClockBound_orb_radial_bound_sig <- Get Word8
getWord8
    Word8
_orbitClockBound_orb_along_bound_sig <- Get Word8
getWord8
    Word8
_orbitClockBound_orb_cross_bound_sig <- Get Word8
getWord8
    Word8
_orbitClockBound_clock_bound_mu <- Get Word8
getWord8
    Word8
_orbitClockBound_clock_bound_sig <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure OrbitClockBound {Word8
_orbitClockBound_clock_bound_sig :: Word8
_orbitClockBound_clock_bound_mu :: Word8
_orbitClockBound_orb_cross_bound_sig :: Word8
_orbitClockBound_orb_along_bound_sig :: Word8
_orbitClockBound_orb_radial_bound_sig :: Word8
_orbitClockBound_orb_cross_bound_mu :: Word8
_orbitClockBound_orb_along_bound_mu :: Word8
_orbitClockBound_orb_radial_bound_mu :: Word8
_orbitClockBound_sat_id :: Word8
_orbitClockBound_clock_bound_sig :: Word8
_orbitClockBound_clock_bound_mu :: Word8
_orbitClockBound_orb_cross_bound_sig :: Word8
_orbitClockBound_orb_along_bound_sig :: Word8
_orbitClockBound_orb_radial_bound_sig :: Word8
_orbitClockBound_orb_cross_bound_mu :: Word8
_orbitClockBound_orb_along_bound_mu :: Word8
_orbitClockBound_orb_radial_bound_mu :: Word8
_orbitClockBound_sat_id :: Word8
..}

  put :: OrbitClockBound -> Put
put OrbitClockBound {Word8
_orbitClockBound_clock_bound_sig :: Word8
_orbitClockBound_clock_bound_mu :: Word8
_orbitClockBound_orb_cross_bound_sig :: Word8
_orbitClockBound_orb_along_bound_sig :: Word8
_orbitClockBound_orb_radial_bound_sig :: Word8
_orbitClockBound_orb_cross_bound_mu :: Word8
_orbitClockBound_orb_along_bound_mu :: Word8
_orbitClockBound_orb_radial_bound_mu :: Word8
_orbitClockBound_sat_id :: Word8
_orbitClockBound_clock_bound_sig :: OrbitClockBound -> Word8
_orbitClockBound_clock_bound_mu :: OrbitClockBound -> Word8
_orbitClockBound_orb_cross_bound_sig :: OrbitClockBound -> Word8
_orbitClockBound_orb_along_bound_sig :: OrbitClockBound -> Word8
_orbitClockBound_orb_radial_bound_sig :: OrbitClockBound -> Word8
_orbitClockBound_orb_cross_bound_mu :: OrbitClockBound -> Word8
_orbitClockBound_orb_along_bound_mu :: OrbitClockBound -> Word8
_orbitClockBound_orb_radial_bound_mu :: OrbitClockBound -> Word8
_orbitClockBound_sat_id :: OrbitClockBound -> Word8
..} = do
    Word8 -> Put
putWord8 Word8
_orbitClockBound_sat_id
    Word8 -> Put
putWord8 Word8
_orbitClockBound_orb_radial_bound_mu
    Word8 -> Put
putWord8 Word8
_orbitClockBound_orb_along_bound_mu
    Word8 -> Put
putWord8 Word8
_orbitClockBound_orb_cross_bound_mu
    Word8 -> Put
putWord8 Word8
_orbitClockBound_orb_radial_bound_sig
    Word8 -> Put
putWord8 Word8
_orbitClockBound_orb_along_bound_sig
    Word8 -> Put
putWord8 Word8
_orbitClockBound_orb_cross_bound_sig
    Word8 -> Put
putWord8 Word8
_orbitClockBound_clock_bound_mu
    Word8 -> Put
putWord8 Word8
_orbitClockBound_clock_bound_sig

$(makeJSON "_orbitClockBound_" ''OrbitClockBound)
$(makeLenses ''OrbitClockBound)

msgSsrOrbitClockBounds :: Word16
msgSsrOrbitClockBounds :: Word16
msgSsrOrbitClockBounds = Word16
0x05DE

-- | SBP class for message MSG_SSR_ORBIT_CLOCK_BOUNDS (0x05DE).
--
-- Note 1: Range: 0-17.5 m. i<=200, mean=0.01i; 200<i<=230, mean=2+0.1(i-200);
-- i>230, mean=5+0.5(i-230).
--
-- Note 2: Range: 0-17.5 m. i<=200, std=0.01i; 200<i<=230, std=2+0.1(i-200)
-- i>230, std=5+0.5(i-230).
data MsgSsrOrbitClockBounds = MsgSsrOrbitClockBounds
  { MsgSsrOrbitClockBounds -> BoundsHeader
_msgSsrOrbitClockBounds_header           :: !BoundsHeader
    -- ^ Header of a bounds message.
  , MsgSsrOrbitClockBounds -> Word8
_msgSsrOrbitClockBounds_ssr_iod          :: !Word8
    -- ^ IOD of the SSR bound.
  , MsgSsrOrbitClockBounds -> Word8
_msgSsrOrbitClockBounds_const_id         :: !Word8
    -- ^ Constellation ID to which the SVs belong.
  , MsgSsrOrbitClockBounds -> Word8
_msgSsrOrbitClockBounds_n_sats           :: !Word8
    -- ^ Number of satellites.
  , MsgSsrOrbitClockBounds -> [OrbitClockBound]
_msgSsrOrbitClockBounds_orbit_clock_bounds :: ![OrbitClockBound]
    -- ^ Orbit and Clock Bounds per Satellite
  } deriving ( Int -> MsgSsrOrbitClockBounds -> ShowS
[MsgSsrOrbitClockBounds] -> ShowS
MsgSsrOrbitClockBounds -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrOrbitClockBounds] -> ShowS
$cshowList :: [MsgSsrOrbitClockBounds] -> ShowS
show :: MsgSsrOrbitClockBounds -> String
$cshow :: MsgSsrOrbitClockBounds -> String
showsPrec :: Int -> MsgSsrOrbitClockBounds -> ShowS
$cshowsPrec :: Int -> MsgSsrOrbitClockBounds -> ShowS
Show, ReadPrec [MsgSsrOrbitClockBounds]
ReadPrec MsgSsrOrbitClockBounds
Int -> ReadS MsgSsrOrbitClockBounds
ReadS [MsgSsrOrbitClockBounds]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrOrbitClockBounds]
$creadListPrec :: ReadPrec [MsgSsrOrbitClockBounds]
readPrec :: ReadPrec MsgSsrOrbitClockBounds
$creadPrec :: ReadPrec MsgSsrOrbitClockBounds
readList :: ReadS [MsgSsrOrbitClockBounds]
$creadList :: ReadS [MsgSsrOrbitClockBounds]
readsPrec :: Int -> ReadS MsgSsrOrbitClockBounds
$creadsPrec :: Int -> ReadS MsgSsrOrbitClockBounds
Read, MsgSsrOrbitClockBounds -> MsgSsrOrbitClockBounds -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrOrbitClockBounds -> MsgSsrOrbitClockBounds -> Bool
$c/= :: MsgSsrOrbitClockBounds -> MsgSsrOrbitClockBounds -> Bool
== :: MsgSsrOrbitClockBounds -> MsgSsrOrbitClockBounds -> Bool
$c== :: MsgSsrOrbitClockBounds -> MsgSsrOrbitClockBounds -> Bool
Eq )

instance Binary MsgSsrOrbitClockBounds where
  get :: Get MsgSsrOrbitClockBounds
get = do
    BoundsHeader
_msgSsrOrbitClockBounds_header <- forall t. Binary t => Get t
get
    Word8
_msgSsrOrbitClockBounds_ssr_iod <- Get Word8
getWord8
    Word8
_msgSsrOrbitClockBounds_const_id <- Get Word8
getWord8
    Word8
_msgSsrOrbitClockBounds_n_sats <- Get Word8
getWord8
    [OrbitClockBound]
_msgSsrOrbitClockBounds_orbit_clock_bounds <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrOrbitClockBounds {[OrbitClockBound]
Word8
BoundsHeader
_msgSsrOrbitClockBounds_orbit_clock_bounds :: [OrbitClockBound]
_msgSsrOrbitClockBounds_n_sats :: Word8
_msgSsrOrbitClockBounds_const_id :: Word8
_msgSsrOrbitClockBounds_ssr_iod :: Word8
_msgSsrOrbitClockBounds_header :: BoundsHeader
_msgSsrOrbitClockBounds_orbit_clock_bounds :: [OrbitClockBound]
_msgSsrOrbitClockBounds_n_sats :: Word8
_msgSsrOrbitClockBounds_const_id :: Word8
_msgSsrOrbitClockBounds_ssr_iod :: Word8
_msgSsrOrbitClockBounds_header :: BoundsHeader
..}

  put :: MsgSsrOrbitClockBounds -> Put
put MsgSsrOrbitClockBounds {[OrbitClockBound]
Word8
BoundsHeader
_msgSsrOrbitClockBounds_orbit_clock_bounds :: [OrbitClockBound]
_msgSsrOrbitClockBounds_n_sats :: Word8
_msgSsrOrbitClockBounds_const_id :: Word8
_msgSsrOrbitClockBounds_ssr_iod :: Word8
_msgSsrOrbitClockBounds_header :: BoundsHeader
_msgSsrOrbitClockBounds_orbit_clock_bounds :: MsgSsrOrbitClockBounds -> [OrbitClockBound]
_msgSsrOrbitClockBounds_n_sats :: MsgSsrOrbitClockBounds -> Word8
_msgSsrOrbitClockBounds_const_id :: MsgSsrOrbitClockBounds -> Word8
_msgSsrOrbitClockBounds_ssr_iod :: MsgSsrOrbitClockBounds -> Word8
_msgSsrOrbitClockBounds_header :: MsgSsrOrbitClockBounds -> BoundsHeader
..} = do
    forall t. Binary t => t -> Put
put BoundsHeader
_msgSsrOrbitClockBounds_header
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockBounds_ssr_iod
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockBounds_const_id
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockBounds_n_sats
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [OrbitClockBound]
_msgSsrOrbitClockBounds_orbit_clock_bounds

$(makeSBP 'msgSsrOrbitClockBounds ''MsgSsrOrbitClockBounds)
$(makeJSON "_msgSsrOrbitClockBounds_" ''MsgSsrOrbitClockBounds)
$(makeLenses ''MsgSsrOrbitClockBounds)

data CodePhaseBiasesSatSig = CodePhaseBiasesSatSig
  { CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_sat_id             :: !Word8
    -- ^ Satellite ID. Similar to either RTCM DF068 (GPS), DF252 (Galileo), or
    -- DF488 (BDS) depending on the constellation.
  , CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_signal_id          :: !Word8
    -- ^ Signal and Tracking Mode Identifier. Similar to either RTCM DF380
    -- (GPS), DF382 (Galileo) or DF467 (BDS) depending on the constellation.
  , CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_code_bias_bound_mu :: !Word8
    -- ^ Code Bias Mean. Range: 0-1.275 m
  , CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_code_bias_bound_sig :: !Word8
    -- ^ Code Bias Standard Deviation.  Range: 0-1.275 m
  , CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_phase_bias_bound_mu :: !Word8
    -- ^ Phase Bias Mean. Range: 0-1.275 m
  , CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_phase_bias_bound_sig :: !Word8
    -- ^ Phase Bias Standard Deviation.  Range: 0-1.275 m
  } deriving ( Int -> CodePhaseBiasesSatSig -> ShowS
[CodePhaseBiasesSatSig] -> ShowS
CodePhaseBiasesSatSig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CodePhaseBiasesSatSig] -> ShowS
$cshowList :: [CodePhaseBiasesSatSig] -> ShowS
show :: CodePhaseBiasesSatSig -> String
$cshow :: CodePhaseBiasesSatSig -> String
showsPrec :: Int -> CodePhaseBiasesSatSig -> ShowS
$cshowsPrec :: Int -> CodePhaseBiasesSatSig -> ShowS
Show, ReadPrec [CodePhaseBiasesSatSig]
ReadPrec CodePhaseBiasesSatSig
Int -> ReadS CodePhaseBiasesSatSig
ReadS [CodePhaseBiasesSatSig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CodePhaseBiasesSatSig]
$creadListPrec :: ReadPrec [CodePhaseBiasesSatSig]
readPrec :: ReadPrec CodePhaseBiasesSatSig
$creadPrec :: ReadPrec CodePhaseBiasesSatSig
readList :: ReadS [CodePhaseBiasesSatSig]
$creadList :: ReadS [CodePhaseBiasesSatSig]
readsPrec :: Int -> ReadS CodePhaseBiasesSatSig
$creadsPrec :: Int -> ReadS CodePhaseBiasesSatSig
Read, CodePhaseBiasesSatSig -> CodePhaseBiasesSatSig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CodePhaseBiasesSatSig -> CodePhaseBiasesSatSig -> Bool
$c/= :: CodePhaseBiasesSatSig -> CodePhaseBiasesSatSig -> Bool
== :: CodePhaseBiasesSatSig -> CodePhaseBiasesSatSig -> Bool
$c== :: CodePhaseBiasesSatSig -> CodePhaseBiasesSatSig -> Bool
Eq )

instance Binary CodePhaseBiasesSatSig where
  get :: Get CodePhaseBiasesSatSig
get = do
    Word8
_codePhaseBiasesSatSig_sat_id <- Get Word8
getWord8
    Word8
_codePhaseBiasesSatSig_signal_id <- Get Word8
getWord8
    Word8
_codePhaseBiasesSatSig_code_bias_bound_mu <- Get Word8
getWord8
    Word8
_codePhaseBiasesSatSig_code_bias_bound_sig <- Get Word8
getWord8
    Word8
_codePhaseBiasesSatSig_phase_bias_bound_mu <- Get Word8
getWord8
    Word8
_codePhaseBiasesSatSig_phase_bias_bound_sig <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure CodePhaseBiasesSatSig {Word8
_codePhaseBiasesSatSig_phase_bias_bound_sig :: Word8
_codePhaseBiasesSatSig_phase_bias_bound_mu :: Word8
_codePhaseBiasesSatSig_code_bias_bound_sig :: Word8
_codePhaseBiasesSatSig_code_bias_bound_mu :: Word8
_codePhaseBiasesSatSig_signal_id :: Word8
_codePhaseBiasesSatSig_sat_id :: Word8
_codePhaseBiasesSatSig_phase_bias_bound_sig :: Word8
_codePhaseBiasesSatSig_phase_bias_bound_mu :: Word8
_codePhaseBiasesSatSig_code_bias_bound_sig :: Word8
_codePhaseBiasesSatSig_code_bias_bound_mu :: Word8
_codePhaseBiasesSatSig_signal_id :: Word8
_codePhaseBiasesSatSig_sat_id :: Word8
..}

  put :: CodePhaseBiasesSatSig -> Put
put CodePhaseBiasesSatSig {Word8
_codePhaseBiasesSatSig_phase_bias_bound_sig :: Word8
_codePhaseBiasesSatSig_phase_bias_bound_mu :: Word8
_codePhaseBiasesSatSig_code_bias_bound_sig :: Word8
_codePhaseBiasesSatSig_code_bias_bound_mu :: Word8
_codePhaseBiasesSatSig_signal_id :: Word8
_codePhaseBiasesSatSig_sat_id :: Word8
_codePhaseBiasesSatSig_phase_bias_bound_sig :: CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_phase_bias_bound_mu :: CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_code_bias_bound_sig :: CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_code_bias_bound_mu :: CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_signal_id :: CodePhaseBiasesSatSig -> Word8
_codePhaseBiasesSatSig_sat_id :: CodePhaseBiasesSatSig -> Word8
..} = do
    Word8 -> Put
putWord8 Word8
_codePhaseBiasesSatSig_sat_id
    Word8 -> Put
putWord8 Word8
_codePhaseBiasesSatSig_signal_id
    Word8 -> Put
putWord8 Word8
_codePhaseBiasesSatSig_code_bias_bound_mu
    Word8 -> Put
putWord8 Word8
_codePhaseBiasesSatSig_code_bias_bound_sig
    Word8 -> Put
putWord8 Word8
_codePhaseBiasesSatSig_phase_bias_bound_mu
    Word8 -> Put
putWord8 Word8
_codePhaseBiasesSatSig_phase_bias_bound_sig

$(makeJSON "_codePhaseBiasesSatSig_" ''CodePhaseBiasesSatSig)
$(makeLenses ''CodePhaseBiasesSatSig)

msgSsrCodePhaseBiasesBounds :: Word16
msgSsrCodePhaseBiasesBounds :: Word16
msgSsrCodePhaseBiasesBounds = Word16
0x05EC

data MsgSsrCodePhaseBiasesBounds = MsgSsrCodePhaseBiasesBounds
  { MsgSsrCodePhaseBiasesBounds -> BoundsHeader
_msgSsrCodePhaseBiasesBounds_header           :: !BoundsHeader
    -- ^ Header of a bounds message.
  , MsgSsrCodePhaseBiasesBounds -> Word8
_msgSsrCodePhaseBiasesBounds_ssr_iod          :: !Word8
    -- ^ IOD of the SSR bound.
  , MsgSsrCodePhaseBiasesBounds -> Word8
_msgSsrCodePhaseBiasesBounds_const_id         :: !Word8
    -- ^ Constellation ID to which the SVs belong.
  , MsgSsrCodePhaseBiasesBounds -> Word8
_msgSsrCodePhaseBiasesBounds_n_sats_signals   :: !Word8
    -- ^ Number of satellite-signal couples.
  , MsgSsrCodePhaseBiasesBounds -> [CodePhaseBiasesSatSig]
_msgSsrCodePhaseBiasesBounds_satellites_signals :: ![CodePhaseBiasesSatSig]
    -- ^ Code and Phase Biases Bounds per Satellite-Signal couple.
  } deriving ( Int -> MsgSsrCodePhaseBiasesBounds -> ShowS
[MsgSsrCodePhaseBiasesBounds] -> ShowS
MsgSsrCodePhaseBiasesBounds -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrCodePhaseBiasesBounds] -> ShowS
$cshowList :: [MsgSsrCodePhaseBiasesBounds] -> ShowS
show :: MsgSsrCodePhaseBiasesBounds -> String
$cshow :: MsgSsrCodePhaseBiasesBounds -> String
showsPrec :: Int -> MsgSsrCodePhaseBiasesBounds -> ShowS
$cshowsPrec :: Int -> MsgSsrCodePhaseBiasesBounds -> ShowS
Show, ReadPrec [MsgSsrCodePhaseBiasesBounds]
ReadPrec MsgSsrCodePhaseBiasesBounds
Int -> ReadS MsgSsrCodePhaseBiasesBounds
ReadS [MsgSsrCodePhaseBiasesBounds]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrCodePhaseBiasesBounds]
$creadListPrec :: ReadPrec [MsgSsrCodePhaseBiasesBounds]
readPrec :: ReadPrec MsgSsrCodePhaseBiasesBounds
$creadPrec :: ReadPrec MsgSsrCodePhaseBiasesBounds
readList :: ReadS [MsgSsrCodePhaseBiasesBounds]
$creadList :: ReadS [MsgSsrCodePhaseBiasesBounds]
readsPrec :: Int -> ReadS MsgSsrCodePhaseBiasesBounds
$creadsPrec :: Int -> ReadS MsgSsrCodePhaseBiasesBounds
Read, MsgSsrCodePhaseBiasesBounds -> MsgSsrCodePhaseBiasesBounds -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrCodePhaseBiasesBounds -> MsgSsrCodePhaseBiasesBounds -> Bool
$c/= :: MsgSsrCodePhaseBiasesBounds -> MsgSsrCodePhaseBiasesBounds -> Bool
== :: MsgSsrCodePhaseBiasesBounds -> MsgSsrCodePhaseBiasesBounds -> Bool
$c== :: MsgSsrCodePhaseBiasesBounds -> MsgSsrCodePhaseBiasesBounds -> Bool
Eq )

instance Binary MsgSsrCodePhaseBiasesBounds where
  get :: Get MsgSsrCodePhaseBiasesBounds
get = do
    BoundsHeader
_msgSsrCodePhaseBiasesBounds_header <- forall t. Binary t => Get t
get
    Word8
_msgSsrCodePhaseBiasesBounds_ssr_iod <- Get Word8
getWord8
    Word8
_msgSsrCodePhaseBiasesBounds_const_id <- Get Word8
getWord8
    Word8
_msgSsrCodePhaseBiasesBounds_n_sats_signals <- Get Word8
getWord8
    [CodePhaseBiasesSatSig]
_msgSsrCodePhaseBiasesBounds_satellites_signals <- forall (m :: * -> *) a. Monad m => m Bool -> m a -> m [a]
whileM (Bool -> Bool
not forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Bool
isEmpty) forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrCodePhaseBiasesBounds {[CodePhaseBiasesSatSig]
Word8
BoundsHeader
_msgSsrCodePhaseBiasesBounds_satellites_signals :: [CodePhaseBiasesSatSig]
_msgSsrCodePhaseBiasesBounds_n_sats_signals :: Word8
_msgSsrCodePhaseBiasesBounds_const_id :: Word8
_msgSsrCodePhaseBiasesBounds_ssr_iod :: Word8
_msgSsrCodePhaseBiasesBounds_header :: BoundsHeader
_msgSsrCodePhaseBiasesBounds_satellites_signals :: [CodePhaseBiasesSatSig]
_msgSsrCodePhaseBiasesBounds_n_sats_signals :: Word8
_msgSsrCodePhaseBiasesBounds_const_id :: Word8
_msgSsrCodePhaseBiasesBounds_ssr_iod :: Word8
_msgSsrCodePhaseBiasesBounds_header :: BoundsHeader
..}

  put :: MsgSsrCodePhaseBiasesBounds -> Put
put MsgSsrCodePhaseBiasesBounds {[CodePhaseBiasesSatSig]
Word8
BoundsHeader
_msgSsrCodePhaseBiasesBounds_satellites_signals :: [CodePhaseBiasesSatSig]
_msgSsrCodePhaseBiasesBounds_n_sats_signals :: Word8
_msgSsrCodePhaseBiasesBounds_const_id :: Word8
_msgSsrCodePhaseBiasesBounds_ssr_iod :: Word8
_msgSsrCodePhaseBiasesBounds_header :: BoundsHeader
_msgSsrCodePhaseBiasesBounds_satellites_signals :: MsgSsrCodePhaseBiasesBounds -> [CodePhaseBiasesSatSig]
_msgSsrCodePhaseBiasesBounds_n_sats_signals :: MsgSsrCodePhaseBiasesBounds -> Word8
_msgSsrCodePhaseBiasesBounds_const_id :: MsgSsrCodePhaseBiasesBounds -> Word8
_msgSsrCodePhaseBiasesBounds_ssr_iod :: MsgSsrCodePhaseBiasesBounds -> Word8
_msgSsrCodePhaseBiasesBounds_header :: MsgSsrCodePhaseBiasesBounds -> BoundsHeader
..} = do
    forall t. Binary t => t -> Put
put BoundsHeader
_msgSsrCodePhaseBiasesBounds_header
    Word8 -> Put
putWord8 Word8
_msgSsrCodePhaseBiasesBounds_ssr_iod
    Word8 -> Put
putWord8 Word8
_msgSsrCodePhaseBiasesBounds_const_id
    Word8 -> Put
putWord8 Word8
_msgSsrCodePhaseBiasesBounds_n_sats_signals
    forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall t. Binary t => t -> Put
put [CodePhaseBiasesSatSig]
_msgSsrCodePhaseBiasesBounds_satellites_signals

$(makeSBP 'msgSsrCodePhaseBiasesBounds ''MsgSsrCodePhaseBiasesBounds)
$(makeJSON "_msgSsrCodePhaseBiasesBounds_" ''MsgSsrCodePhaseBiasesBounds)
$(makeLenses ''MsgSsrCodePhaseBiasesBounds)

-- | OrbitClockBoundDegradation.
--
-- Orbit and clock bound degradation.
data OrbitClockBoundDegradation = OrbitClockBoundDegradation
  { OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_radial_bound_mu_dot :: !Word8
    -- ^ Orbit Bound Mean Radial First derivative. Range: 0-0.255 m/s
  , OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_along_bound_mu_dot :: !Word8
    -- ^ Orbit Bound Mean Along-Track First derivative. Range: 0-0.255 m/s
  , OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_cross_bound_mu_dot :: !Word8
    -- ^ Orbit Bound Mean Cross-Track First derivative. Range: 0-0.255 m/s
  , OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_radial_bound_sig_dot :: !Word8
    -- ^ Orbit Bound Standard Deviation Radial First derivative. Range: 0-0.255
    -- m/s
  , OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_along_bound_sig_dot :: !Word8
    -- ^ Orbit Bound Standard Deviation Along-Track First derivative. Range:
    -- 0-0.255 m/s
  , OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_cross_bound_sig_dot :: !Word8
    -- ^ Orbit Bound Standard Deviation Cross-Track First derivative. Range:
    -- 0-0.255 m/s
  , OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_clock_bound_mu_dot     :: !Word8
    -- ^ Clock Bound Mean First derivative. Range: 0-0.255 m/s
  , OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_clock_bound_sig_dot    :: !Word8
    -- ^ Clock Bound Standard Deviation First derivative. Range: 0-0.255 m/s
  } deriving ( Int -> OrbitClockBoundDegradation -> ShowS
[OrbitClockBoundDegradation] -> ShowS
OrbitClockBoundDegradation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OrbitClockBoundDegradation] -> ShowS
$cshowList :: [OrbitClockBoundDegradation] -> ShowS
show :: OrbitClockBoundDegradation -> String
$cshow :: OrbitClockBoundDegradation -> String
showsPrec :: Int -> OrbitClockBoundDegradation -> ShowS
$cshowsPrec :: Int -> OrbitClockBoundDegradation -> ShowS
Show, ReadPrec [OrbitClockBoundDegradation]
ReadPrec OrbitClockBoundDegradation
Int -> ReadS OrbitClockBoundDegradation
ReadS [OrbitClockBoundDegradation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [OrbitClockBoundDegradation]
$creadListPrec :: ReadPrec [OrbitClockBoundDegradation]
readPrec :: ReadPrec OrbitClockBoundDegradation
$creadPrec :: ReadPrec OrbitClockBoundDegradation
readList :: ReadS [OrbitClockBoundDegradation]
$creadList :: ReadS [OrbitClockBoundDegradation]
readsPrec :: Int -> ReadS OrbitClockBoundDegradation
$creadsPrec :: Int -> ReadS OrbitClockBoundDegradation
Read, OrbitClockBoundDegradation -> OrbitClockBoundDegradation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OrbitClockBoundDegradation -> OrbitClockBoundDegradation -> Bool
$c/= :: OrbitClockBoundDegradation -> OrbitClockBoundDegradation -> Bool
== :: OrbitClockBoundDegradation -> OrbitClockBoundDegradation -> Bool
$c== :: OrbitClockBoundDegradation -> OrbitClockBoundDegradation -> Bool
Eq )

instance Binary OrbitClockBoundDegradation where
  get :: Get OrbitClockBoundDegradation
get = do
    Word8
_orbitClockBoundDegradation_orb_radial_bound_mu_dot <- Get Word8
getWord8
    Word8
_orbitClockBoundDegradation_orb_along_bound_mu_dot <- Get Word8
getWord8
    Word8
_orbitClockBoundDegradation_orb_cross_bound_mu_dot <- Get Word8
getWord8
    Word8
_orbitClockBoundDegradation_orb_radial_bound_sig_dot <- Get Word8
getWord8
    Word8
_orbitClockBoundDegradation_orb_along_bound_sig_dot <- Get Word8
getWord8
    Word8
_orbitClockBoundDegradation_orb_cross_bound_sig_dot <- Get Word8
getWord8
    Word8
_orbitClockBoundDegradation_clock_bound_mu_dot <- Get Word8
getWord8
    Word8
_orbitClockBoundDegradation_clock_bound_sig_dot <- Get Word8
getWord8
    forall (f :: * -> *) a. Applicative f => a -> f a
pure OrbitClockBoundDegradation {Word8
_orbitClockBoundDegradation_clock_bound_sig_dot :: Word8
_orbitClockBoundDegradation_clock_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_cross_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_along_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_radial_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_cross_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_along_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_radial_bound_mu_dot :: Word8
_orbitClockBoundDegradation_clock_bound_sig_dot :: Word8
_orbitClockBoundDegradation_clock_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_cross_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_along_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_radial_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_cross_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_along_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_radial_bound_mu_dot :: Word8
..}

  put :: OrbitClockBoundDegradation -> Put
put OrbitClockBoundDegradation {Word8
_orbitClockBoundDegradation_clock_bound_sig_dot :: Word8
_orbitClockBoundDegradation_clock_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_cross_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_along_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_radial_bound_sig_dot :: Word8
_orbitClockBoundDegradation_orb_cross_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_along_bound_mu_dot :: Word8
_orbitClockBoundDegradation_orb_radial_bound_mu_dot :: Word8
_orbitClockBoundDegradation_clock_bound_sig_dot :: OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_clock_bound_mu_dot :: OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_cross_bound_sig_dot :: OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_along_bound_sig_dot :: OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_radial_bound_sig_dot :: OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_cross_bound_mu_dot :: OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_along_bound_mu_dot :: OrbitClockBoundDegradation -> Word8
_orbitClockBoundDegradation_orb_radial_bound_mu_dot :: OrbitClockBoundDegradation -> Word8
..} = do
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_orb_radial_bound_mu_dot
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_orb_along_bound_mu_dot
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_orb_cross_bound_mu_dot
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_orb_radial_bound_sig_dot
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_orb_along_bound_sig_dot
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_orb_cross_bound_sig_dot
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_clock_bound_mu_dot
    Word8 -> Put
putWord8 Word8
_orbitClockBoundDegradation_clock_bound_sig_dot

$(makeJSON "_orbitClockBoundDegradation_" ''OrbitClockBoundDegradation)
$(makeLenses ''OrbitClockBoundDegradation)

msgSsrOrbitClockBoundsDegradation :: Word16
msgSsrOrbitClockBoundsDegradation :: Word16
msgSsrOrbitClockBoundsDegradation = Word16
0x05DF

data MsgSsrOrbitClockBoundsDegradation = MsgSsrOrbitClockBoundsDegradation
  { MsgSsrOrbitClockBoundsDegradation -> BoundsHeader
_msgSsrOrbitClockBoundsDegradation_header                       :: !BoundsHeader
    -- ^ Header of a bounds message.
  , MsgSsrOrbitClockBoundsDegradation -> Word8
_msgSsrOrbitClockBoundsDegradation_ssr_iod                      :: !Word8
    -- ^ IOD of the SSR bound degradation parameter.
  , MsgSsrOrbitClockBoundsDegradation -> Word8
_msgSsrOrbitClockBoundsDegradation_const_id                     :: !Word8
    -- ^ Constellation ID to which the SVs belong.
  , MsgSsrOrbitClockBoundsDegradation -> Word64
_msgSsrOrbitClockBoundsDegradation_sat_bitmask                  :: !Word64
    -- ^ Satellite Bit Mask. Put 1 for each satellite where the following
    -- degradation parameters are applicable, 0 otherwise. Encoded following
    -- RTCM DF394 specification.
  , MsgSsrOrbitClockBoundsDegradation -> OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_orbit_clock_bounds_degradation :: !OrbitClockBoundDegradation
    -- ^ Orbit and Clock Bounds Degradation Parameters
  } deriving ( Int -> MsgSsrOrbitClockBoundsDegradation -> ShowS
[MsgSsrOrbitClockBoundsDegradation] -> ShowS
MsgSsrOrbitClockBoundsDegradation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MsgSsrOrbitClockBoundsDegradation] -> ShowS
$cshowList :: [MsgSsrOrbitClockBoundsDegradation] -> ShowS
show :: MsgSsrOrbitClockBoundsDegradation -> String
$cshow :: MsgSsrOrbitClockBoundsDegradation -> String
showsPrec :: Int -> MsgSsrOrbitClockBoundsDegradation -> ShowS
$cshowsPrec :: Int -> MsgSsrOrbitClockBoundsDegradation -> ShowS
Show, ReadPrec [MsgSsrOrbitClockBoundsDegradation]
ReadPrec MsgSsrOrbitClockBoundsDegradation
Int -> ReadS MsgSsrOrbitClockBoundsDegradation
ReadS [MsgSsrOrbitClockBoundsDegradation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MsgSsrOrbitClockBoundsDegradation]
$creadListPrec :: ReadPrec [MsgSsrOrbitClockBoundsDegradation]
readPrec :: ReadPrec MsgSsrOrbitClockBoundsDegradation
$creadPrec :: ReadPrec MsgSsrOrbitClockBoundsDegradation
readList :: ReadS [MsgSsrOrbitClockBoundsDegradation]
$creadList :: ReadS [MsgSsrOrbitClockBoundsDegradation]
readsPrec :: Int -> ReadS MsgSsrOrbitClockBoundsDegradation
$creadsPrec :: Int -> ReadS MsgSsrOrbitClockBoundsDegradation
Read, MsgSsrOrbitClockBoundsDegradation
-> MsgSsrOrbitClockBoundsDegradation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MsgSsrOrbitClockBoundsDegradation
-> MsgSsrOrbitClockBoundsDegradation -> Bool
$c/= :: MsgSsrOrbitClockBoundsDegradation
-> MsgSsrOrbitClockBoundsDegradation -> Bool
== :: MsgSsrOrbitClockBoundsDegradation
-> MsgSsrOrbitClockBoundsDegradation -> Bool
$c== :: MsgSsrOrbitClockBoundsDegradation
-> MsgSsrOrbitClockBoundsDegradation -> Bool
Eq )

instance Binary MsgSsrOrbitClockBoundsDegradation where
  get :: Get MsgSsrOrbitClockBoundsDegradation
get = do
    BoundsHeader
_msgSsrOrbitClockBoundsDegradation_header <- forall t. Binary t => Get t
get
    Word8
_msgSsrOrbitClockBoundsDegradation_ssr_iod <- Get Word8
getWord8
    Word8
_msgSsrOrbitClockBoundsDegradation_const_id <- Get Word8
getWord8
    Word64
_msgSsrOrbitClockBoundsDegradation_sat_bitmask <- Get Word64
getWord64le
    OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_orbit_clock_bounds_degradation <- forall t. Binary t => Get t
get
    forall (f :: * -> *) a. Applicative f => a -> f a
pure MsgSsrOrbitClockBoundsDegradation {Word8
Word64
BoundsHeader
OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_orbit_clock_bounds_degradation :: OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_sat_bitmask :: Word64
_msgSsrOrbitClockBoundsDegradation_const_id :: Word8
_msgSsrOrbitClockBoundsDegradation_ssr_iod :: Word8
_msgSsrOrbitClockBoundsDegradation_header :: BoundsHeader
_msgSsrOrbitClockBoundsDegradation_orbit_clock_bounds_degradation :: OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_sat_bitmask :: Word64
_msgSsrOrbitClockBoundsDegradation_const_id :: Word8
_msgSsrOrbitClockBoundsDegradation_ssr_iod :: Word8
_msgSsrOrbitClockBoundsDegradation_header :: BoundsHeader
..}

  put :: MsgSsrOrbitClockBoundsDegradation -> Put
put MsgSsrOrbitClockBoundsDegradation {Word8
Word64
BoundsHeader
OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_orbit_clock_bounds_degradation :: OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_sat_bitmask :: Word64
_msgSsrOrbitClockBoundsDegradation_const_id :: Word8
_msgSsrOrbitClockBoundsDegradation_ssr_iod :: Word8
_msgSsrOrbitClockBoundsDegradation_header :: BoundsHeader
_msgSsrOrbitClockBoundsDegradation_orbit_clock_bounds_degradation :: MsgSsrOrbitClockBoundsDegradation -> OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_sat_bitmask :: MsgSsrOrbitClockBoundsDegradation -> Word64
_msgSsrOrbitClockBoundsDegradation_const_id :: MsgSsrOrbitClockBoundsDegradation -> Word8
_msgSsrOrbitClockBoundsDegradation_ssr_iod :: MsgSsrOrbitClockBoundsDegradation -> Word8
_msgSsrOrbitClockBoundsDegradation_header :: MsgSsrOrbitClockBoundsDegradation -> BoundsHeader
..} = do
    forall t. Binary t => t -> Put
put BoundsHeader
_msgSsrOrbitClockBoundsDegradation_header
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockBoundsDegradation_ssr_iod
    Word8 -> Put
putWord8 Word8
_msgSsrOrbitClockBoundsDegradation_const_id
    Word64 -> Put
putWord64le Word64
_msgSsrOrbitClockBoundsDegradation_sat_bitmask
    forall t. Binary t => t -> Put
put OrbitClockBoundDegradation
_msgSsrOrbitClockBoundsDegradation_orbit_clock_bounds_degradation

$(makeSBP 'msgSsrOrbitClockBoundsDegradation ''MsgSsrOrbitClockBoundsDegradation)
$(makeJSON "_msgSsrOrbitClockBoundsDegradation_" ''MsgSsrOrbitClockBoundsDegradation)
$(makeLenses ''MsgSsrOrbitClockBoundsDegradation)