packages feed

gnss-converters 0.3.30 → 0.3.31

raw patch · 6 files changed

+117/−72 lines, 6 files

Files

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