gnss-converters 0.3.28 → 0.3.30
raw patch · 3 files changed
+201/−2 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Data.RTCM3.SBP.SSR: glonassCodeBiasConverter :: MonadStore e m => Msg1065 -> Conduit i m [SBPMsg]
+ Data.RTCM3.SBP.SSR: glonassOrbitClockConverter :: MonadStore e m => Msg1066 -> Conduit i m [SBPMsg]
+ Data.RTCM3.SBP.SSR: glonassPhaseBiasConverter :: MonadStore e m => Msg1266 -> Conduit i m [SBPMsg]
+ Data.RTCM3.SBP.SSR: gpsCodeBiasConverter :: MonadStore e m => Msg1059 -> Conduit i m [SBPMsg]
+ Data.RTCM3.SBP.SSR: gpsOrbitClockConverter :: MonadStore e m => Msg1060 -> Conduit i m [SBPMsg]
+ Data.RTCM3.SBP.SSR: gpsPhaseBiasConverter :: MonadStore e m => Msg1265 -> Conduit i m [SBPMsg]
- Data.RTCM3.SBP.Types: class HasStore c_auhn
+ Data.RTCM3.SBP.Types: class HasStore c_auT9
- Data.RTCM3.SBP.Types: store :: HasStore c_auhn => Lens' c_auhn Store
+ Data.RTCM3.SBP.Types: store :: HasStore c_auT9 => Lens' c_auT9 Store
- Data.RTCM3.SBP.Types: storeCurrentGpsTime :: HasStore c_auhn => Lens' c_auhn (IO GpsTime)
+ Data.RTCM3.SBP.Types: storeCurrentGpsTime :: HasStore c_auT9 => Lens' c_auT9 (IO GpsTime)
- Data.RTCM3.SBP.Types: storeGpsTimeMap :: HasStore c_auhn => Lens' c_auhn (IORef GpsTimeMap)
+ Data.RTCM3.SBP.Types: storeGpsTimeMap :: HasStore c_auT9 => Lens' c_auT9 (IORef GpsTimeMap)
- Data.RTCM3.SBP.Types: storeObservations :: HasStore c_auhn => Lens' c_auhn (IORef (Vector PackedObsContent))
+ Data.RTCM3.SBP.Types: storeObservations :: HasStore c_auT9 => Lens' c_auT9 (IORef (Vector PackedObsContent))
Files
- gnss-converters.cabal +3/−2
- src/Data/RTCM3/SBP.hs +7/−0
- src/Data/RTCM3/SBP/SSR.hs +191/−0
gnss-converters.cabal view
@@ -1,10 +1,10 @@ name: gnss-converters-version: 0.3.28+version: 0.3.30 synopsis: GNSS Converters. description: Haskell bindings for GNSS converters. homepage: http://github.com/swift-nav/gnss-converters license: BSD3-author: Mark Fine <mark@swiftnav.com>, Joshua Gross <josh@swiftnav.com>+author: Mark Fine <mark@swiftnav.com> maintainer: Swift Navigation <dev@swiftnav.com> copyright: Copyright (C) 2016, 2017 Swift Navigation, Inc. category: Network@@ -23,6 +23,7 @@ , Data.RTCM3.SBP.Ephemerides , Data.RTCM3.SBP.Observations , Data.RTCM3.SBP.Positions+ , Data.RTCM3.SBP.SSR , Data.RTCM3.SBP.Time , Data.RTCM3.SBP.Types , SwiftNav.SBP.RTCM3
src/Data/RTCM3/SBP.hs view
@@ -27,6 +27,7 @@ import qualified Data.RTCM3.SBP.Ephemerides as Ephemerides import qualified Data.RTCM3.SBP.Observations as Observations import qualified Data.RTCM3.SBP.Positions as Positions+import qualified Data.RTCM3.SBP.SSR as SSR import Data.RTCM3.SBP.Time import Data.RTCM3.SBP.Types import SwiftNav.SBP@@ -44,6 +45,12 @@ (RTCM3Msg1019 m _rtcm3) -> Ephemerides.gpsConverter m (RTCM3Msg1020 m _rtcm3) -> Ephemerides.glonassConverter m (RTCM3Msg1230 m _rtcm3) -> Biases.converter m+ (RTCM3Msg1060 m _rtcm3) -> SSR.gpsOrbitClockConverter m+ (RTCM3Msg1066 m _rtcm3) -> SSR.glonassOrbitClockConverter m+ (RTCM3Msg1059 m _rtcm3) -> SSR.gpsCodeBiasConverter m+ (RTCM3Msg1065 m _rtcm3) -> SSR.glonassCodeBiasConverter m+ (RTCM3Msg1265 m _rtcm3) -> SSR.gpsPhaseBiasConverter m+ (RTCM3Msg1266 m _rtcm3) -> SSR.glonassPhaseBiasConverter m _rtcm3Msg -> mempty -- | Setup new storage for converter.
+ src/Data/RTCM3/SBP/SSR.hs view
@@ -0,0 +1,191 @@+{-# LANGUAGE NoImplicitPrelude #-}++-- |+-- Module: Data.RTCM3.SBP.SSR+-- Copyright: Copyright (C) 2017 Swift Navigation, Inc.+-- License: LGPL-3+-- Maintainer: Swift Navigation <dev@swiftnav.com>+-- Stability: experimental+-- Portability: portable+--+-- RTCMv3 to SBP Biases Conversions.++module Data.RTCM3.SBP.SSR+ ( gpsOrbitClockConverter+ , glonassOrbitClockConverter+ , gpsCodeBiasConverter+ , glonassCodeBiasConverter+ , gpsPhaseBiasConverter+ , glonassPhaseBiasConverter+ ) where++import BasicPrelude+import Control.Lens+import Data.Conduit+import Data.RTCM3+import Data.RTCM3.SBP.Time+import Data.RTCM3.SBP.Types+import SwiftNav.SBP++toGpsTimeSec :: MonadStore e m => Word32 -> m GpsTimeSec+toGpsTimeSec epochs = do+ time <- view storeCurrentGpsTime+ wn <- view gpsTime_wn <$> liftIO time+ pure GpsTimeSec+ { _gpsTimeSec_tow = epochs+ , _gpsTimeSec_wn = wn+ }++toGlonassTimeSec :: MonadStore e m => Word32 -> m GpsTimeSec+toGlonassTimeSec epochs = do+ time <- view storeCurrentGpsTime+ t <- liftIO time+ let epochs' = fromIntegral epochs * 1000 - 3 * hourMillis + gpsLeapMillis+ epochs''+ | epochs' < 0 = epochs' + dayMillis+ | otherwise = epochs'+ dow = fromIntegral (t ^. gpsTime_tow) `div` dayMillis+ pure GpsTimeSec+ { _gpsTimeSec_tow = fromIntegral $ (dow * dayMillis + epochs'') `div` 1000+ , _gpsTimeSec_wn = t ^. gpsTime_wn+ }++gpsOrbitClockConverter :: MonadStore e m => Msg1060 -> Conduit i m [SBPMsg]+gpsOrbitClockConverter m = do+ time <- toGpsTimeSec $ m ^. msg1060_header ^. gpsOrbitClockCorrectionHeader_epochs+ yield $ flip map (m ^. msg1060_corrections) $ \c -> do+ let m' = MsgSsrOrbitClock+ { _msgSsrOrbitClock_time = time+ , _msgSsrOrbitClock_sid = GnssSignal+ { _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_iod = c ^. gpsOrbitClockCorrection_iode+ , _msgSsrOrbitClock_radial = c ^. gpsOrbitClockCorrection_deltaRadial+ , _msgSsrOrbitClock_along = c ^. gpsOrbitClockCorrection_deltaAlongTrack+ , _msgSsrOrbitClock_cross = c ^. gpsOrbitClockCorrection_deltaCrossTrack+ , _msgSsrOrbitClock_dot_radial = c ^. gpsOrbitClockCorrection_dotDeltaRadial+ , _msgSsrOrbitClock_dot_along = c ^. gpsOrbitClockCorrection_dotDeltaAlongTrack+ , _msgSsrOrbitClock_dot_cross = c ^. gpsOrbitClockCorrection_dotDeltaCrossTrack+ , _msgSsrOrbitClock_c0 = c ^. gpsOrbitClockCorrection_deltaClockC0+ , _msgSsrOrbitClock_c1 = c ^. gpsOrbitClockCorrection_deltaClockC1+ , _msgSsrOrbitClock_c2 = c ^. gpsOrbitClockCorrection_deltaClockC2+ }+ SBPMsgSsrOrbitClock m' $ toSBP m' 61440++glonassOrbitClockConverter :: MonadStore e m => Msg1066 -> Conduit i m [SBPMsg]+glonassOrbitClockConverter m = do+ time <- toGlonassTimeSec $ m ^. msg1066_header ^. glonassOrbitClockCorrectionHeader_epochs+ yield $ flip map (m ^. msg1066_corrections) $ \c -> do+ let m' = MsgSsrOrbitClock+ { _msgSsrOrbitClock_time = time+ , _msgSsrOrbitClock_sid = GnssSignal+ { _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_iod = c ^. glonassOrbitClockCorrection_iode+ , _msgSsrOrbitClock_radial = c ^. glonassOrbitClockCorrection_deltaRadial+ , _msgSsrOrbitClock_along = c ^. glonassOrbitClockCorrection_deltaAlongTrack+ , _msgSsrOrbitClock_cross = c ^. glonassOrbitClockCorrection_deltaCrossTrack+ , _msgSsrOrbitClock_dot_radial = c ^. glonassOrbitClockCorrection_dotDeltaRadial+ , _msgSsrOrbitClock_dot_along = c ^. glonassOrbitClockCorrection_dotDeltaAlongTrack+ , _msgSsrOrbitClock_dot_cross = c ^. glonassOrbitClockCorrection_dotDeltaCrossTrack+ , _msgSsrOrbitClock_c0 = c ^. glonassOrbitClockCorrection_deltaClockC0+ , _msgSsrOrbitClock_c1 = c ^. glonassOrbitClockCorrection_deltaClockC1+ , _msgSsrOrbitClock_c2 = c ^. glonassOrbitClockCorrection_deltaClockC2+ }+ SBPMsgSsrOrbitClock m' $ toSBP m' 61440++gpsCodeBiasConverter :: MonadStore e m => Msg1059 -> Conduit i m [SBPMsg]+gpsCodeBiasConverter m = do+ time <- toGpsTimeSec $ m ^. msg1059_header ^. gpsCodeBiasCorrectionHeader_epochs+ yield $ flip map (m ^. msg1059_corrections) $ \c -> do+ let m' = MsgSsrCodeBiases+ { _msgSsrCodeBiases_time = time+ , _msgSsrCodeBiases_sid = GnssSignal+ { _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_biases = flip map (c ^. gpsCodeBiasCorrection_codeBiases) $ \b -> CodeBiasesContent+ { _codeBiasesContent_code = b ^. gpsCodeBias_signal+ , _codeBiasesContent_value = b ^. gpsCodeBias_codeBias+ }+ }+ SBPMsgSsrCodeBiases m' $ toSBP m' 61440++glonassCodeBiasConverter :: MonadStore e m => Msg1065 -> Conduit i m [SBPMsg]+glonassCodeBiasConverter m = do+ time <- toGlonassTimeSec $ m ^. msg1065_header ^. glonassCodeBiasCorrectionHeader_epochs+ yield $ flip map (m ^. msg1065_corrections) $ \c -> do+ let m' = MsgSsrCodeBiases+ { _msgSsrCodeBiases_time = time+ , _msgSsrCodeBiases_sid = GnssSignal+ { _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_biases = flip map (c ^. glonassCodeBiasCorrection_codeBiases) $ \b -> CodeBiasesContent+ { _codeBiasesContent_code = b ^. glonassCodeBias_signal+ , _codeBiasesContent_value = b ^. glonassCodeBias_codeBias+ }+ }+ SBPMsgSsrCodeBiases m' $ toSBP m' 61440++gpsPhaseBiasConverter :: MonadStore e m => Msg1265 -> Conduit i m [SBPMsg]+gpsPhaseBiasConverter m = do+ time <- toGpsTimeSec $ m ^. msg1265_header ^. gpsPhaseBiasCorrectionHeader_epochs+ yield $ flip map (m ^. msg1265_corrections) $ \c -> do+ let m' = MsgSsrPhaseBiases+ { _msgSsrPhaseBiases_time = time+ , _msgSsrPhaseBiases_sid = GnssSignal+ { _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_yaw = c ^. gpsPhaseBiasCorrection_yawAngle+ , _msgSsrPhaseBiases_yaw_rate = c ^. gpsPhaseBiasCorrection_yawRate+ , _msgSsrPhaseBiases_biases = flip map (c ^. gpsPhaseBiasCorrection_phaseBiases) $ \b -> PhaseBiasesContent+ { _phaseBiasesContent_code = b ^. gpsPhaseBias_signal+ , _phaseBiasesContent_integer_indicator = bool 0 1 $ b ^. gpsPhaseBias_integer+ , _phaseBiasesContent_widelane_integer_indicator = b ^. gpsPhaseBias_wideLaneInteger+ , _phaseBiasesContent_discontinuity_counter = b ^. gpsPhaseBias_discontinuityCounter+ , _phaseBiasesContent_bias = b ^. gpsPhaseBias_phaseBias+ }+ }+ SBPMsgSsrPhaseBiases m' $ toSBP m' 61440++glonassPhaseBiasConverter :: MonadStore e m => Msg1266 -> Conduit i m [SBPMsg]+glonassPhaseBiasConverter m = do+ time <- toGlonassTimeSec $ m ^. msg1266_header ^. glonassPhaseBiasCorrectionHeader_epochs+ yield $ flip map (m ^. msg1266_corrections) $ \c -> do+ let m' = MsgSsrPhaseBiases+ { _msgSsrPhaseBiases_time = time+ , _msgSsrPhaseBiases_sid = GnssSignal+ { _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_yaw = c ^. glonassPhaseBiasCorrection_yawAngle+ , _msgSsrPhaseBiases_yaw_rate = c ^. glonassPhaseBiasCorrection_yawRate+ , _msgSsrPhaseBiases_biases = flip map (c ^. glonassPhaseBiasCorrection_phaseBiases) $ \b -> PhaseBiasesContent+ { _phaseBiasesContent_code = b ^. glonassPhaseBias_signal+ , _phaseBiasesContent_integer_indicator = bool 0 1 $ b ^. glonassPhaseBias_integer+ , _phaseBiasesContent_widelane_integer_indicator = b ^. glonassPhaseBias_wideLaneInteger+ , _phaseBiasesContent_discontinuity_counter = b ^. glonassPhaseBias_discontinuityCounter+ , _phaseBiasesContent_bias = b ^. glonassPhaseBias_phaseBias+ }+ }+ SBPMsgSsrPhaseBiases m' $ toSBP m' 61440