gnss-converters 0.3.30 → 0.3.31
raw patch · 6 files changed
+117/−72 lines, 6 files
Files
- gnss-converters.cabal +2/−1
- src/Data/RTCM3/Replay.hs +2/−2
- src/Data/RTCM3/SBP.hs +2/−0
- src/Data/RTCM3/SBP/Ephemerides.hs +47/−47
- src/Data/RTCM3/SBP/Logging.hs +42/−0
- src/Data/RTCM3/SBP/SSR.hs +22/−22
gnss-converters.cabal view
@@ -1,5 +1,5 @@ name: gnss-converters-version: 0.3.30+version: 0.3.31 synopsis: GNSS Converters. description: Haskell bindings for GNSS converters. homepage: http://github.com/swift-nav/gnss-converters@@ -21,6 +21,7 @@ , Data.RTCM3.SBP , Data.RTCM3.SBP.Biases , Data.RTCM3.SBP.Ephemerides+ , Data.RTCM3.SBP.Logging , Data.RTCM3.SBP.Observations , Data.RTCM3.SBP.Positions , Data.RTCM3.SBP.SSR
src/Data/RTCM3/Replay.hs view
@@ -46,14 +46,14 @@ replay :: MonadIO m => Word32 -> RTCM3Msg -> ConduitM i RTCM3Msg m Word32 replay tow = \case (RTCM3Msg1002 m _rtcm3) -> do- let tow' = m ^. msg1002_header ^. gpsObservationHeader_tow+ let tow' = m ^. msg1002_header . gpsObservationHeader_tow delayTow tow tow' tow'' <- currentTow let n = set (msg1002_header . gpsObservationHeader_tow) tow'' m yield (RTCM3Msg1002 n (toRTCM3 n)) pure tow' (RTCM3Msg1004 m _rtcm3) -> do- let tow' = m ^. msg1004_header ^. gpsObservationHeader_tow+ let tow' = m ^. msg1004_header . gpsObservationHeader_tow delayTow tow tow' tow'' <- currentTow let n = set (msg1004_header . gpsObservationHeader_tow) tow'' m
src/Data/RTCM3/SBP.hs view
@@ -25,6 +25,7 @@ import Data.RTCM3 import qualified Data.RTCM3.SBP.Biases as Biases import qualified Data.RTCM3.SBP.Ephemerides as Ephemerides+import qualified Data.RTCM3.SBP.Logging as Logging import qualified Data.RTCM3.SBP.Observations as Observations import qualified Data.RTCM3.SBP.Positions as Positions import qualified Data.RTCM3.SBP.SSR as SSR@@ -44,6 +45,7 @@ (RTCM3Msg1006 m _rtcm3) -> Positions.converter m (RTCM3Msg1019 m _rtcm3) -> Ephemerides.gpsConverter m (RTCM3Msg1020 m _rtcm3) -> Ephemerides.glonassConverter m+ (RTCM3Msg1029 m _rtcm3) -> Logging.converter m (RTCM3Msg1230 m _rtcm3) -> Biases.converter m (RTCM3Msg1060 m _rtcm3) -> SSR.gpsOrbitClockConverter m (RTCM3Msg1066 m _rtcm3) -> SSR.glonassOrbitClockConverter m
src/Data/RTCM3/SBP/Ephemerides.hs view
@@ -127,34 +127,34 @@ -- toGpsEphemerisCommonContent :: MonadStore e m => Msg1019 -> m EphemerisCommonContent toGpsEphemerisCommonContent m = do- toe <- toGpsTimeSec (m ^. msg1019_ephemeris ^. gpsEphemeris_wn) (m ^. msg1019_ephemeris ^. gpsEphemeris_toe)+ toe <- toGpsTimeSec (m ^. msg1019_ephemeris . gpsEphemeris_wn) (m ^. msg1019_ephemeris . gpsEphemeris_toe) pure EphemerisCommonContent { _ephemerisCommonContent_sid = GnssSignal- { _gnssSignal_sat = m ^. msg1019_header ^. gpsEphemerisHeader_sat+ { _gnssSignal_sat = m ^. msg1019_header . gpsEphemerisHeader_sat , _gnssSignal_code = 0 -- there is an L2P status flag in msg 1019, but I don't think that applies } , _ephemerisCommonContent_toe = toe- , _ephemerisCommonContent_ura = uriToUra (m ^. msg1019_ephemeris ^. gpsEphemeris_svHealth)- , _ephemerisCommonContent_fit_interval = gpsFitInterval (m ^. msg1019_ephemeris ^. gpsEphemeris_fitInterval) (m ^. msg1019_ephemeris ^. gpsEphemeris_iodc)- , _ephemerisCommonContent_valid = validateIodcIode (m ^. msg1019_ephemeris ^. gpsEphemeris_iodc) (m ^. msg1019_ephemeris ^. gpsEphemeris_iode)- , _ephemerisCommonContent_health_bits = m ^. msg1019_ephemeris ^. gpsEphemeris_svHealth+ , _ephemerisCommonContent_ura = uriToUra (m ^. msg1019_ephemeris . gpsEphemeris_svHealth)+ , _ephemerisCommonContent_fit_interval = gpsFitInterval (m ^. msg1019_ephemeris . gpsEphemeris_fitInterval) (m ^. msg1019_ephemeris . gpsEphemeris_iodc)+ , _ephemerisCommonContent_valid = validateIodcIode (m ^. msg1019_ephemeris . gpsEphemeris_iodc) (m ^. msg1019_ephemeris . gpsEphemeris_iode)+ , _ephemerisCommonContent_health_bits = m ^. msg1019_ephemeris . gpsEphemeris_svHealth } -- | Construct an EphemerisCommonContent from an RTCM 1020 message. -- toGlonassEphemerisCommonContent :: MonadStore e m => Msg1020 -> m EphemerisCommonContent toGlonassEphemerisCommonContent m = do- toe <- toGlonassTimeSec (m ^. msg1020_ephemeris ^. glonassEphemeris_tb)+ toe <- toGlonassTimeSec (m ^. msg1020_ephemeris . glonassEphemeris_tb) pure EphemerisCommonContent { _ephemerisCommonContent_sid = GnssSignal- { _gnssSignal_sat = m ^. msg1020_header ^. glonassEphemerisHeader_sat+ { _gnssSignal_sat = m ^. msg1020_header . glonassEphemerisHeader_sat , _gnssSignal_code = 3 } , _ephemerisCommonContent_toe = toe- , _ephemerisCommonContent_ura = ftToUra (m ^. msg1020_ephemeris ^. glonassEphemeris_mft)- , _ephemerisCommonContent_fit_interval = glonassFitInterval (m ^. msg1020_ephemeris ^. glonassEphemeris_p1)+ , _ephemerisCommonContent_ura = ftToUra (m ^. msg1020_ephemeris . glonassEphemeris_mft)+ , _ephemerisCommonContent_fit_interval = glonassFitInterval (m ^. msg1020_ephemeris . glonassEphemeris_p1) , _ephemerisCommonContent_valid = 1- , _ephemerisCommonContent_health_bits = bool 0 1 $ (m ^. msg1020_ephemeris ^. glonassEphemeris_mln5) || (m ^. msg1020_ephemeris ^. glonassEphemeris_mi3)+ , _ephemerisCommonContent_health_bits = bool 0 1 $ (m ^. msg1020_ephemeris . glonassEphemeris_mln5) || (m ^. msg1020_ephemeris . glonassEphemeris_mi3) } (##) :: (Floating a1, Integral a2) => a1 -> a2 -> a1@@ -169,31 +169,31 @@ gpsConverter :: MonadStore e m => Msg1019 -> Conduit i m [SBPMsg] gpsConverter m = do common <- toGpsEphemerisCommonContent m- toc <- toGpsTimeSec (m ^. msg1019_ephemeris ^. gpsEphemeris_wn) (m ^. msg1019_ephemeris ^. gpsEphemeris_toc)+ toc <- toGpsTimeSec (m ^. msg1019_ephemeris . gpsEphemeris_wn) (m ^. msg1019_ephemeris . gpsEphemeris_toc) let pi' = 3.1415926535898 m' = MsgEphemerisGps { _msgEphemerisGps_common = common- , _msgEphemerisGps_tgd = (-31) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_tgd)- , _msgEphemerisGps_c_rs = (-5) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_c_rs)- , _msgEphemerisGps_c_rc = (-5) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_c_rc)- , _msgEphemerisGps_c_uc = (-29) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_c_uc)- , _msgEphemerisGps_c_us = (-29) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_c_us)- , _msgEphemerisGps_c_ic = (-29) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_c_ic)- , _msgEphemerisGps_c_is = (-29) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_c_is)- , _msgEphemerisGps_dn = pi' * (-43) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_dn)- , _msgEphemerisGps_m0 = pi' * (-31) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_m0)- , _msgEphemerisGps_ecc = (-33) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_ecc)- , _msgEphemerisGps_sqrta = (-19) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_sqrta)- , _msgEphemerisGps_omega0 = pi' * (-31) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_omega0)- , _msgEphemerisGps_omegadot = pi' * (-43) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_omegadot)- , _msgEphemerisGps_w = pi' * (-31) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_w)- , _msgEphemerisGps_inc = pi' * (-31) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_i0)- , _msgEphemerisGps_inc_dot = pi' * (-43) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_idot)- , _msgEphemerisGps_af0 = (-31) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_af0)- , _msgEphemerisGps_af1 = (-43) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_af1)- , _msgEphemerisGps_af2 = (-55) ## (m ^. msg1019_ephemeris ^. gpsEphemeris_af2)- , _msgEphemerisGps_iodc = m ^. msg1019_ephemeris ^. gpsEphemeris_iodc- , _msgEphemerisGps_iode = m ^. msg1019_ephemeris ^. gpsEphemeris_iode+ , _msgEphemerisGps_tgd = (-31) ## (m ^. msg1019_ephemeris . gpsEphemeris_tgd)+ , _msgEphemerisGps_c_rs = (-5) ## (m ^. msg1019_ephemeris . gpsEphemeris_c_rs)+ , _msgEphemerisGps_c_rc = (-5) ## (m ^. msg1019_ephemeris . gpsEphemeris_c_rc)+ , _msgEphemerisGps_c_uc = (-29) ## (m ^. msg1019_ephemeris . gpsEphemeris_c_uc)+ , _msgEphemerisGps_c_us = (-29) ## (m ^. msg1019_ephemeris . gpsEphemeris_c_us)+ , _msgEphemerisGps_c_ic = (-29) ## (m ^. msg1019_ephemeris . gpsEphemeris_c_ic)+ , _msgEphemerisGps_c_is = (-29) ## (m ^. msg1019_ephemeris . gpsEphemeris_c_is)+ , _msgEphemerisGps_dn = pi' * (-43) ## (m ^. msg1019_ephemeris . gpsEphemeris_dn)+ , _msgEphemerisGps_m0 = pi' * (-31) ## (m ^. msg1019_ephemeris . gpsEphemeris_m0)+ , _msgEphemerisGps_ecc = (-33) ## (m ^. msg1019_ephemeris . gpsEphemeris_ecc)+ , _msgEphemerisGps_sqrta = (-19) ## (m ^. msg1019_ephemeris . gpsEphemeris_sqrta)+ , _msgEphemerisGps_omega0 = pi' * (-31) ## (m ^. msg1019_ephemeris . gpsEphemeris_omega0)+ , _msgEphemerisGps_omegadot = pi' * (-43) ## (m ^. msg1019_ephemeris . gpsEphemeris_omegadot)+ , _msgEphemerisGps_w = pi' * (-31) ## (m ^. msg1019_ephemeris . gpsEphemeris_w)+ , _msgEphemerisGps_inc = pi' * (-31) ## (m ^. msg1019_ephemeris . gpsEphemeris_i0)+ , _msgEphemerisGps_inc_dot = pi' * (-43) ## (m ^. msg1019_ephemeris . gpsEphemeris_idot)+ , _msgEphemerisGps_af0 = (-31) ## (m ^. msg1019_ephemeris . gpsEphemeris_af0)+ , _msgEphemerisGps_af1 = (-43) ## (m ^. msg1019_ephemeris . gpsEphemeris_af1)+ , _msgEphemerisGps_af2 = (-55) ## (m ^. msg1019_ephemeris . gpsEphemeris_af2)+ , _msgEphemerisGps_iodc = m ^. msg1019_ephemeris . gpsEphemeris_iodc+ , _msgEphemerisGps_iode = m ^. msg1019_ephemeris . gpsEphemeris_iode , _msgEphemerisGps_toc = toc } yield [SBPMsgEphemerisGps m' $ toSBP m' 61440]@@ -205,25 +205,25 @@ common <- toGlonassEphemerisCommonContent m let m' = MsgEphemerisGlo { _msgEphemerisGlo_common = common- , _msgEphemerisGlo_gamma = (-40) ## (m ^. msg1020_ephemeris ^. glonassEphemeris_gammaN)- , _msgEphemerisGlo_tau = (-30) ## (m ^. msg1020_ephemeris ^. glonassEphemeris_tauN)- , _msgEphemerisGlo_d_tau = (-30) ## (m ^. msg1020_ephemeris ^. glonassEphemeris_mdeltatau)+ , _msgEphemerisGlo_gamma = (-40) ## (m ^. msg1020_ephemeris . glonassEphemeris_gammaN)+ , _msgEphemerisGlo_tau = (-30) ## (m ^. msg1020_ephemeris . glonassEphemeris_tauN)+ , _msgEphemerisGlo_d_tau = (-30) ## (m ^. msg1020_ephemeris . glonassEphemeris_mdeltatau) , _msgEphemerisGlo_pos = (* 1000) . ((-11) ##) <$>- [ m ^. msg1020_ephemeris ^. glonassEphemeris_xn- , m ^. msg1020_ephemeris ^. glonassEphemeris_yn- , m ^. msg1020_ephemeris ^. glonassEphemeris_zn+ [ m ^. msg1020_ephemeris . glonassEphemeris_xn+ , m ^. msg1020_ephemeris . glonassEphemeris_yn+ , m ^. msg1020_ephemeris . glonassEphemeris_zn ] , _msgEphemerisGlo_vel = (* 1000) . ((-20) ##) <$>- [ m ^. msg1020_ephemeris ^. glonassEphemeris_xndot- , m ^. msg1020_ephemeris ^. glonassEphemeris_yndot- , m ^. msg1020_ephemeris ^. glonassEphemeris_zndot+ [ m ^. msg1020_ephemeris . glonassEphemeris_xndot+ , m ^. msg1020_ephemeris . glonassEphemeris_yndot+ , m ^. msg1020_ephemeris . glonassEphemeris_zndot ] , _msgEphemerisGlo_acc = (* 1000) . ((-30) ##) <$>- [ m ^. msg1020_ephemeris ^. glonassEphemeris_xndotdot- , m ^. msg1020_ephemeris ^. glonassEphemeris_yndotdot- , m ^. msg1020_ephemeris ^. glonassEphemeris_zndotdot+ [ m ^. msg1020_ephemeris . glonassEphemeris_xndotdot+ , m ^. msg1020_ephemeris . glonassEphemeris_yndotdot+ , m ^. msg1020_ephemeris . glonassEphemeris_zndotdot ]- , _msgEphemerisGlo_fcn = (m ^. msg1020_header ^. glonassEphemerisHeader_channel) + 1- , _msgEphemerisGlo_iod = ((m ^. msg1020_ephemeris ^. glonassEphemeris_tb) * 15 * 60) .&. 127+ , _msgEphemerisGlo_fcn = (m ^. msg1020_header . glonassEphemerisHeader_channel) + 1+ , _msgEphemerisGlo_iod = ((m ^. msg1020_ephemeris . glonassEphemeris_tb) * 15 * 60) .&. 127 } yield [SBPMsgEphemerisGlo m' $ toSBP m' 61440]
+ src/Data/RTCM3/SBP/Logging.hs view
@@ -0,0 +1,42 @@+{-# LANGUAGE NoImplicitPrelude #-}++-- |+-- Module: Data.RTCM3.SBP.Logging+-- Copyright: Copyright (C) 2018 Swift Navigation, Inc.+-- License: LGPL-3+-- Maintainer: Swift Navigation <dev@swiftnav.com>+-- Stability: experimental+-- Portability: portable+--+-- RTCMv3 to SBP Loggings Conversions.++module Data.RTCM3.SBP.Logging+ ( converter+ ) where++import BasicPrelude+import Control.Lens+import Data.Bits+import Data.Conduit+import Data.RTCM3+import Data.Word+import SwiftNav.SBP++{-# ANN module ("HLint: ignore Use head"::String) #-}++-- | Derive sender from station.+--+toSender :: Word16 -> Word16+toSender station = station .|. 61440++-- | Convert an RTCM 1029 text message into an SBP MsgLog message.+--+converter :: Monad m => Msg1029 -> Conduit i m [SBPMsg]+converter m = do+ let message = m ^. msg1029_message+ sender = toSender $ message ^. textMessage_station+ m' = MsgLog+ { _msgLog_level = 6+ , _msgLog_text = message ^. textMessage_text+ }+ yield [SBPMsgLog m' $ toSBP m' sender]
src/Data/RTCM3/SBP/SSR.hs view
@@ -52,7 +52,7 @@ gpsOrbitClockConverter :: MonadStore e m => Msg1060 -> Conduit i m [SBPMsg] gpsOrbitClockConverter m = do- time <- toGpsTimeSec $ m ^. msg1060_header ^. gpsOrbitClockCorrectionHeader_epochs+ time <- toGpsTimeSec $ m ^. msg1060_header . gpsOrbitClockCorrectionHeader_epochs yield $ flip map (m ^. msg1060_corrections) $ \c -> do let m' = MsgSsrOrbitClock { _msgSsrOrbitClock_time = time@@ -60,8 +60,8 @@ { _gnssSignal_sat = c ^. gpsOrbitClockCorrection_sat , _gnssSignal_code = 0 }- , _msgSsrOrbitClock_update_interval = m ^. msg1060_header ^. gpsOrbitClockCorrectionHeader_updateInterval- , _msgSsrOrbitClock_iod_ssr = m ^. msg1060_header ^. gpsOrbitClockCorrectionHeader_iod+ , _msgSsrOrbitClock_update_interval = m ^. msg1060_header . gpsOrbitClockCorrectionHeader_updateInterval+ , _msgSsrOrbitClock_iod_ssr = m ^. msg1060_header . gpsOrbitClockCorrectionHeader_iod , _msgSsrOrbitClock_iod = c ^. gpsOrbitClockCorrection_iode , _msgSsrOrbitClock_radial = c ^. gpsOrbitClockCorrection_deltaRadial , _msgSsrOrbitClock_along = c ^. gpsOrbitClockCorrection_deltaAlongTrack@@ -77,7 +77,7 @@ glonassOrbitClockConverter :: MonadStore e m => Msg1066 -> Conduit i m [SBPMsg] glonassOrbitClockConverter m = do- time <- toGlonassTimeSec $ m ^. msg1066_header ^. glonassOrbitClockCorrectionHeader_epochs+ time <- toGlonassTimeSec $ m ^. msg1066_header . glonassOrbitClockCorrectionHeader_epochs yield $ flip map (m ^. msg1066_corrections) $ \c -> do let m' = MsgSsrOrbitClock { _msgSsrOrbitClock_time = time@@ -85,8 +85,8 @@ { _gnssSignal_sat = c ^. glonassOrbitClockCorrection_sat , _gnssSignal_code = 3 }- , _msgSsrOrbitClock_update_interval = m ^. msg1066_header ^. glonassOrbitClockCorrectionHeader_updateInterval- , _msgSsrOrbitClock_iod_ssr = m ^. msg1066_header ^. glonassOrbitClockCorrectionHeader_iod+ , _msgSsrOrbitClock_update_interval = m ^. msg1066_header . glonassOrbitClockCorrectionHeader_updateInterval+ , _msgSsrOrbitClock_iod_ssr = m ^. msg1066_header . glonassOrbitClockCorrectionHeader_iod , _msgSsrOrbitClock_iod = c ^. glonassOrbitClockCorrection_iode , _msgSsrOrbitClock_radial = c ^. glonassOrbitClockCorrection_deltaRadial , _msgSsrOrbitClock_along = c ^. glonassOrbitClockCorrection_deltaAlongTrack@@ -102,7 +102,7 @@ gpsCodeBiasConverter :: MonadStore e m => Msg1059 -> Conduit i m [SBPMsg] gpsCodeBiasConverter m = do- time <- toGpsTimeSec $ m ^. msg1059_header ^. gpsCodeBiasCorrectionHeader_epochs+ time <- toGpsTimeSec $ m ^. msg1059_header . gpsCodeBiasCorrectionHeader_epochs yield $ flip map (m ^. msg1059_corrections) $ \c -> do let m' = MsgSsrCodeBiases { _msgSsrCodeBiases_time = time@@ -110,8 +110,8 @@ { _gnssSignal_sat = c ^. gpsCodeBiasCorrection_sat , _gnssSignal_code = 0 }- , _msgSsrCodeBiases_update_interval = m ^. msg1059_header ^. gpsCodeBiasCorrectionHeader_updateInterval- , _msgSsrCodeBiases_iod_ssr = m ^. msg1059_header ^. gpsCodeBiasCorrectionHeader_iod+ , _msgSsrCodeBiases_update_interval = m ^. msg1059_header . gpsCodeBiasCorrectionHeader_updateInterval+ , _msgSsrCodeBiases_iod_ssr = m ^. msg1059_header . gpsCodeBiasCorrectionHeader_iod , _msgSsrCodeBiases_biases = flip map (c ^. gpsCodeBiasCorrection_codeBiases) $ \b -> CodeBiasesContent { _codeBiasesContent_code = b ^. gpsCodeBias_signal , _codeBiasesContent_value = b ^. gpsCodeBias_codeBias@@ -121,7 +121,7 @@ glonassCodeBiasConverter :: MonadStore e m => Msg1065 -> Conduit i m [SBPMsg] glonassCodeBiasConverter m = do- time <- toGlonassTimeSec $ m ^. msg1065_header ^. glonassCodeBiasCorrectionHeader_epochs+ time <- toGlonassTimeSec $ m ^. msg1065_header . glonassCodeBiasCorrectionHeader_epochs yield $ flip map (m ^. msg1065_corrections) $ \c -> do let m' = MsgSsrCodeBiases { _msgSsrCodeBiases_time = time@@ -129,8 +129,8 @@ { _gnssSignal_sat = c ^. glonassCodeBiasCorrection_sat , _gnssSignal_code = 3 }- , _msgSsrCodeBiases_update_interval = m ^. msg1065_header ^. glonassCodeBiasCorrectionHeader_updateInterval- , _msgSsrCodeBiases_iod_ssr = m ^. msg1065_header ^. glonassCodeBiasCorrectionHeader_iod+ , _msgSsrCodeBiases_update_interval = m ^. msg1065_header . glonassCodeBiasCorrectionHeader_updateInterval+ , _msgSsrCodeBiases_iod_ssr = m ^. msg1065_header . glonassCodeBiasCorrectionHeader_iod , _msgSsrCodeBiases_biases = flip map (c ^. glonassCodeBiasCorrection_codeBiases) $ \b -> CodeBiasesContent { _codeBiasesContent_code = b ^. glonassCodeBias_signal , _codeBiasesContent_value = b ^. glonassCodeBias_codeBias@@ -140,7 +140,7 @@ gpsPhaseBiasConverter :: MonadStore e m => Msg1265 -> Conduit i m [SBPMsg] gpsPhaseBiasConverter m = do- time <- toGpsTimeSec $ m ^. msg1265_header ^. gpsPhaseBiasCorrectionHeader_epochs+ time <- toGpsTimeSec $ m ^. msg1265_header . gpsPhaseBiasCorrectionHeader_epochs yield $ flip map (m ^. msg1265_corrections) $ \c -> do let m' = MsgSsrPhaseBiases { _msgSsrPhaseBiases_time = time@@ -148,10 +148,10 @@ { _gnssSignal_sat = c ^. gpsPhaseBiasCorrection_sat , _gnssSignal_code = 0 }- , _msgSsrPhaseBiases_update_interval = m ^. msg1265_header ^. gpsPhaseBiasCorrectionHeader_updateInterval- , _msgSsrPhaseBiases_iod_ssr = m ^. msg1265_header ^. gpsPhaseBiasCorrectionHeader_iod- , _msgSsrPhaseBiases_dispersive_bias = bool 0 1 $ m ^. msg1265_header ^. gpsPhaseBiasCorrectionHeader_dispersive- , _msgSsrPhaseBiases_mw_consistency = bool 0 1 $ m ^. msg1265_header ^. gpsPhaseBiasCorrectionHeader_mw+ , _msgSsrPhaseBiases_update_interval = m ^. msg1265_header . gpsPhaseBiasCorrectionHeader_updateInterval+ , _msgSsrPhaseBiases_iod_ssr = m ^. msg1265_header . gpsPhaseBiasCorrectionHeader_iod+ , _msgSsrPhaseBiases_dispersive_bias = bool 0 1 $ m ^. msg1265_header . gpsPhaseBiasCorrectionHeader_dispersive+ , _msgSsrPhaseBiases_mw_consistency = bool 0 1 $ m ^. msg1265_header . gpsPhaseBiasCorrectionHeader_mw , _msgSsrPhaseBiases_yaw = c ^. gpsPhaseBiasCorrection_yawAngle , _msgSsrPhaseBiases_yaw_rate = c ^. gpsPhaseBiasCorrection_yawRate , _msgSsrPhaseBiases_biases = flip map (c ^. gpsPhaseBiasCorrection_phaseBiases) $ \b -> PhaseBiasesContent@@ -166,7 +166,7 @@ glonassPhaseBiasConverter :: MonadStore e m => Msg1266 -> Conduit i m [SBPMsg] glonassPhaseBiasConverter m = do- time <- toGlonassTimeSec $ m ^. msg1266_header ^. glonassPhaseBiasCorrectionHeader_epochs+ time <- toGlonassTimeSec $ m ^. msg1266_header . glonassPhaseBiasCorrectionHeader_epochs yield $ flip map (m ^. msg1266_corrections) $ \c -> do let m' = MsgSsrPhaseBiases { _msgSsrPhaseBiases_time = time@@ -174,10 +174,10 @@ { _gnssSignal_sat = c ^. glonassPhaseBiasCorrection_sat , _gnssSignal_code = 3 }- , _msgSsrPhaseBiases_update_interval = m ^. msg1266_header ^. glonassPhaseBiasCorrectionHeader_updateInterval- , _msgSsrPhaseBiases_iod_ssr = m ^. msg1266_header ^. glonassPhaseBiasCorrectionHeader_iod- , _msgSsrPhaseBiases_dispersive_bias = bool 0 1 $ m ^. msg1266_header ^. glonassPhaseBiasCorrectionHeader_dispersive- , _msgSsrPhaseBiases_mw_consistency = bool 0 1 $ m ^. msg1266_header ^. glonassPhaseBiasCorrectionHeader_mw+ , _msgSsrPhaseBiases_update_interval = m ^. msg1266_header . glonassPhaseBiasCorrectionHeader_updateInterval+ , _msgSsrPhaseBiases_iod_ssr = m ^. msg1266_header . glonassPhaseBiasCorrectionHeader_iod+ , _msgSsrPhaseBiases_dispersive_bias = bool 0 1 $ m ^. msg1266_header . glonassPhaseBiasCorrectionHeader_dispersive+ , _msgSsrPhaseBiases_mw_consistency = bool 0 1 $ m ^. msg1266_header . glonassPhaseBiasCorrectionHeader_mw , _msgSsrPhaseBiases_yaw = c ^. glonassPhaseBiasCorrection_yawAngle , _msgSsrPhaseBiases_yaw_rate = c ^. glonassPhaseBiasCorrection_yawRate , _msgSsrPhaseBiases_biases = flip map (c ^. glonassPhaseBiasCorrection_phaseBiases) $ \b -> PhaseBiasesContent