packages feed

gnss-converters 0.3.20 → 0.3.21

raw patch · 7 files changed

+57/−57 lines, 7 filesdep ~sbpPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: sbp

API changes (from Hackage documentation)

- Data.RTCM3.SBP.Types: instance GHC.Classes.Ord SwiftNav.SBP.Gnss.GpsTimeNano
- Data.RTCM3.SBP.Types: type GpsTimeNanoMap = HashMap Word16 GpsTimeNano
+ Data.RTCM3.SBP.Types: instance GHC.Classes.Ord SwiftNav.SBP.Gnss.GpsTime
+ Data.RTCM3.SBP.Types: type GpsTimeMap = HashMap Word16 GpsTime
- Data.RTCM3.SBP.Time: currentGpsTime :: MonadIO m => m GpsTimeNano
+ Data.RTCM3.SBP.Time: currentGpsTime :: MonadIO m => m GpsTime
- Data.RTCM3.SBP.Time: rolloverEpochGpsTime :: Word32 -> GpsTimeNano -> GpsTimeNano
+ Data.RTCM3.SBP.Time: rolloverEpochGpsTime :: Word32 -> GpsTime -> GpsTime
- Data.RTCM3.SBP.Time: rolloverTowGpsTime :: Word32 -> GpsTimeNano -> GpsTimeNano
+ Data.RTCM3.SBP.Time: rolloverTowGpsTime :: Word32 -> GpsTime -> GpsTime
- Data.RTCM3.SBP.Types: Store :: IO GpsTimeNano -> IORef GpsTimeNanoMap -> IORef (Vector PackedObsContent) -> Store
+ Data.RTCM3.SBP.Types: Store :: IO GpsTime -> IORef GpsTimeMap -> IORef (Vector PackedObsContent) -> Store
- Data.RTCM3.SBP.Types: [_storeCurrentGpsTime] :: Store -> IO GpsTimeNano
+ Data.RTCM3.SBP.Types: [_storeCurrentGpsTime] :: Store -> IO GpsTime
- Data.RTCM3.SBP.Types: [_storeGpsTimeMap] :: Store -> IORef GpsTimeNanoMap
+ Data.RTCM3.SBP.Types: [_storeGpsTimeMap] :: Store -> IORef GpsTimeMap
- Data.RTCM3.SBP.Types: class HasStore c_ap7X where storeCurrentGpsTime = (.) store storeCurrentGpsTime storeGpsTimeMap = (.) store storeGpsTimeMap storeObservations = (.) store storeObservations
+ Data.RTCM3.SBP.Types: class HasStore c_apfQ where storeCurrentGpsTime = (.) store storeCurrentGpsTime storeGpsTimeMap = (.) store storeGpsTimeMap storeObservations = (.) store storeObservations
- Data.RTCM3.SBP.Types: store :: HasStore c_ap7X => Lens' c_ap7X Store
+ Data.RTCM3.SBP.Types: store :: HasStore c_apfQ => Lens' c_apfQ Store
- Data.RTCM3.SBP.Types: storeCurrentGpsTime :: HasStore c_ap7X => Lens' c_ap7X (IO GpsTimeNano)
+ Data.RTCM3.SBP.Types: storeCurrentGpsTime :: HasStore c_apfQ => Lens' c_apfQ (IO GpsTime)
- Data.RTCM3.SBP.Types: storeGpsTimeMap :: HasStore c_ap7X => Lens' c_ap7X (IORef GpsTimeNanoMap)
+ Data.RTCM3.SBP.Types: storeGpsTimeMap :: HasStore c_apfQ => Lens' c_apfQ (IORef GpsTimeMap)
- Data.RTCM3.SBP.Types: storeObservations :: HasStore c_ap7X => Lens' c_ap7X (IORef (Vector PackedObsContent))
+ Data.RTCM3.SBP.Types: storeObservations :: HasStore c_apfQ => Lens' c_apfQ (IORef (Vector PackedObsContent))

Files

gnss-converters.cabal view
@@ -1,5 +1,5 @@ name: gnss-converters-version: 0.3.20+version: 0.3.21 cabal-version: >=1.22 build-type: Simple license: BSD3@@ -37,7 +37,7 @@         mtl >=2.2.1,         resourcet >=1.1.9,         rtcm >=0.2.8,-        sbp >=2.2.16,+        sbp >=2.3.0,         time >=1.5.0.1,         transformers-base >=0.4.4,         vector >=0.11.0.0@@ -100,7 +100,7 @@         gnss-converters,         lens >=4.13,         rtcm >=0.2.8,-        sbp >=2.2.16,+        sbp >=2.3.0,         tasty >=0.11.2.1,         tasty-golden >=2.3.1.1,         tasty-hunit >=0.9.2,
src/Data/RTCM3/SBP/Ephemerides.hs view
@@ -32,7 +32,7 @@ toGpsTimeSec :: MonadStore e m => Word16 -> Word16 -> m GpsTimeSec toGpsTimeSec wn tow = do   time <- view storeCurrentGpsTime-  wn'  <- view gpsTimeNano_wn <$> liftIO time+  wn'  <- view gpsTime_wn <$> liftIO time   pure GpsTimeSec     { _gpsTimeSec_tow = 16 * fromIntegral tow     , _gpsTimeSec_wn  = wn' `shiftR` 10 `shiftL` 10 + wn@@ -80,9 +80,9 @@ toGpsEphemerisCommonContent m = do   toe <- toGpsTimeSec (m ^. msg1019_ephemeris ^. gpsEphemeris_wn) (m ^. msg1019_ephemeris ^. gpsEphemeris_toe)   pure EphemerisCommonContent-    { _ephemerisCommonContent_sid = GnssSignal16-      { _gnssSignal16_sat  = m ^. msg1019_header ^. gpsEphemerisHeader_sat-      , _gnssSignal16_code = 0 -- there is an L2P status flag in msg 1019, but I don't think that applies+    { _ephemerisCommonContent_sid = GnssSignal+      { _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 (fromIntegral $ m ^. msg1019_ephemeris ^. gpsEphemeris_svHealth)
src/Data/RTCM3/SBP/Observations.hs view
@@ -39,8 +39,8 @@  -- | Update and convert stored and incoming GPS times. ---toGpsTimeNano :: MonadStore e m => Word16 -> (GpsTimeNano -> GpsTimeNano) -> m (GpsTimeNano, GpsTimeNano)-toGpsTimeNano station rollover = do+toGpsTime :: MonadStore e m => Word16 -> (GpsTime -> GpsTime) -> m (GpsTime, GpsTime)+toGpsTime station rollover = do   timeMap <- view storeGpsTimeMap   modifyIORefM timeMap $ \timeMap' -> do     time <- view storeCurrentGpsTime@@ -151,31 +151,31 @@  -- | Map GPS L1 signal. ---gpsL1Signal :: Word8 -> Bool -> GnssSignal16+gpsL1Signal :: Word8 -> Bool -> GnssSignal gpsL1Signal sat code-  | code      = GnssSignal16 sat 5-  | otherwise = GnssSignal16 sat 0+  | code      = GnssSignal sat 5+  | otherwise = GnssSignal sat 0  -- | Map GPS L2 signal. ---gpsL2Signal :: Word8 -> Word8 -> GnssSignal16+gpsL2Signal :: Word8 -> Word8 -> GnssSignal gpsL2Signal sat code-  | code == 0 = GnssSignal16 sat 1-  | otherwise = GnssSignal16 sat 6+  | code == 0 = GnssSignal sat 1+  | otherwise = GnssSignal sat 6  -- | Map GLONASS L1 signal. ---glonassL1Signal :: Word8 -> Bool -> Maybe GnssSignal16+glonassL1Signal :: Word8 -> Bool -> Maybe GnssSignal glonassL1Signal sat code-  | code      = Just $ GnssSignal16 sat 3-  | otherwise = Just $ GnssSignal16 sat 3+  | code      = Just $ GnssSignal sat 3+  | otherwise = Just $ GnssSignal sat 3  -- | Map GLONASS L2 signal. ---glonassL2Signal :: Word8 -> Word8 -> Maybe GnssSignal16+glonassL2Signal :: Word8 -> Word8 -> Maybe GnssSignal glonassL2Signal sat code-  | code == 0 = Just $ GnssSignal16 sat 4-  | otherwise = Just $ GnssSignal16 sat 4+  | code == 0 = Just $ GnssSignal sat 4+  | otherwise = Just $ GnssSignal sat 4  -- | Max GPS satellite number. --@@ -304,38 +304,38 @@ -- | FromObservations produces GPS time, SBP packed observations, and sender from RTCMv3 observation messages. -- class FromObservations a where-  gpsTimeNano       :: MonadStore e m => a -> m (GpsTimeNano, GpsTimeNano)+  gpsTime           :: MonadStore e m => a -> m (GpsTime, GpsTime)   packedObsContents :: a -> [PackedObsContent]   sender            :: a -> Word16   synchronous       :: a -> Bool  instance FromObservations Msg1002 where-  gpsTimeNano m     = toGpsTimeNano (m ^. msg1002_header . gpsObservationHeader_station) $ rolloverTowGpsTime (m ^. msg1002_header . gpsObservationHeader_tow)+  gpsTime m         = toGpsTime (m ^. msg1002_header . gpsObservationHeader_station) $ rolloverTowGpsTime (m ^. msg1002_header . gpsObservationHeader_tow)   packedObsContents = toPackedObsContent . view msg1002_observations   sender            = toSender . view (msg1002_header . gpsObservationHeader_station)   synchronous       = view (msg1002_header . gpsObservationHeader_synchronous)  instance FromObservations Msg1004 where-  gpsTimeNano m     = toGpsTimeNano (m ^. msg1004_header . gpsObservationHeader_station) $ rolloverTowGpsTime (m ^. msg1004_header . gpsObservationHeader_tow)+  gpsTime m         = toGpsTime (m ^. msg1004_header . gpsObservationHeader_station) $ rolloverTowGpsTime (m ^. msg1004_header . gpsObservationHeader_tow)   packedObsContents = toPackedObsContent . view msg1004_observations   sender            = toSender . view (msg1004_header . gpsObservationHeader_station)   synchronous       = view (msg1004_header . gpsObservationHeader_synchronous)  instance FromObservations Msg1010 where-  gpsTimeNano m     = toGpsTimeNano (m ^. msg1010_header . glonassObservationHeader_station) $ rolloverEpochGpsTime (m ^. msg1010_header . glonassObservationHeader_epoch)+  gpsTime m         = toGpsTime (m ^. msg1010_header . glonassObservationHeader_station) $ rolloverEpochGpsTime (m ^. msg1010_header . glonassObservationHeader_epoch)   packedObsContents = toPackedObsContent . view msg1010_observations   sender            = toSender . view (msg1010_header . glonassObservationHeader_station)   synchronous       = view (msg1010_header . glonassObservationHeader_synchronous)  instance FromObservations Msg1012 where-  gpsTimeNano m     = toGpsTimeNano (m ^. msg1012_header . glonassObservationHeader_station) $ rolloverEpochGpsTime (m ^. msg1012_header . glonassObservationHeader_epoch)+  gpsTime m         = toGpsTime (m ^. msg1012_header . glonassObservationHeader_station) $ rolloverEpochGpsTime (m ^. msg1012_header . glonassObservationHeader_epoch)   packedObsContents = toPackedObsContent . view msg1012_observations   sender            = toSender . view (msg1012_header . glonassObservationHeader_station)   synchronous       = view (msg1012_header . glonassObservationHeader_synchronous)  -- | Convert RTCMv3 observation(s) to SBP observations in chunks. ---toMsgObs :: Applicative f => GpsTimeNano -> [PackedObsContent] -> Word16 -> f [SBPMsg]+toMsgObs :: Applicative f => GpsTime -> [PackedObsContent] -> Word16 -> f [SBPMsg] toMsgObs t obs s = do   let chunks = chunksOf maxObs obs   ifor chunks $ \i obs' -> do@@ -352,7 +352,7 @@ -- converter :: (MonadStore e m, FromObservations a) => a -> Conduit i m [SBPMsg] converter m = do-  (t, t') <- gpsTimeNano m+  (t, t')      <- gpsTime m   observations <- view storeObservations   obs          <- liftIO $ readIORef observations   when (t' /= t) $
src/Data/RTCM3/SBP/Time.hs view
@@ -106,36 +106,36 @@  -- | Get current GPS time. ---currentGpsTime :: MonadIO m => m GpsTimeNano+currentGpsTime :: MonadIO m => m GpsTime currentGpsTime = do   t <- liftIO $ addUTCTime (fromIntegral gpsLeapSeconds) <$> getCurrentTime-  pure $ GpsTimeNano (toTow t) 0 (toWn t)+  pure $ GpsTime (toTow t) 0 (toWn t)  -- | Update GPS time based on GPS time of week, handling week rollover. ---rolloverTowGpsTime :: Word32 -> GpsTimeNano -> GpsTimeNano-rolloverTowGpsTime tow t = t & gpsTimeNano_tow .~ tow & rollover+rolloverTowGpsTime :: Word32 -> GpsTime -> GpsTime+rolloverTowGpsTime tow t = t & gpsTime_tow .~ tow & rollover   where     rollover-      | increment = gpsTimeNano_wn +~ 1-      | decrement = gpsTimeNano_wn +~ -1-      | otherwise = gpsTimeNano_wn +~ 0+      | increment = gpsTime_wn +~ 1+      | decrement = gpsTime_wn +~ -1+      | otherwise = gpsTime_wn +~ 0     new       = fromIntegral tow-    old       = fromIntegral (t ^. gpsTimeNano_tow)+    old       = fromIntegral (t ^. gpsTime_tow)     increment = old > new && old - new > weekMillis `div` 2     decrement = new > old && new - old > weekMillis `div` 2  -- | Update GPS time based on GLONASS epoch, handling week rollover. ---rolloverEpochGpsTime :: Word32 -> GpsTimeNano -> GpsTimeNano+rolloverEpochGpsTime :: Word32 -> GpsTime -> GpsTime rolloverEpochGpsTime epoch t = rolloverTowGpsTime tow t   where     epoch' = fromIntegral epoch - 3 * hourMillis + gpsLeapMillis     epoch''       | epoch' < 0 = epoch' + dayMillis       | otherwise  = epoch'-    dow = fromIntegral (t ^. gpsTimeNano_tow) `div` dayMillis-    tod = fromIntegral (t ^. gpsTimeNano_tow) - dow * dayMillis+    dow = fromIntegral (t ^. gpsTime_tow) `div` dayMillis+    tod = fromIntegral (t ^. gpsTime_tow) - dow * dayMillis     dow'       | increment = dow + 1 `mod` 7       | decrement = dow - 1 `mod` 7
src/Data/RTCM3/SBP/Types.hs view
@@ -31,10 +31,10 @@ import Data.Word import SwiftNav.SBP -type GpsTimeNanoMap = HashMap Word16 GpsTimeNano+type GpsTimeMap = HashMap Word16 GpsTime -instance Ord GpsTimeNano where-  compare (GpsTimeNano tow _ns wn) (GpsTimeNano tow' _ns' wn')+instance Ord GpsTime where+  compare (GpsTime tow _ns wn) (GpsTime tow' _ns' wn')     | wn > wn'   = GT     | wn < wn'   = LT     | tow > tow' = GT@@ -68,8 +68,8 @@   {-# INLINE liftBase #-}  data Store = Store-  { _storeCurrentGpsTime :: IO GpsTimeNano-  , _storeGpsTimeMap     :: IORef GpsTimeNanoMap+  { _storeCurrentGpsTime :: IO GpsTime+  , _storeGpsTimeMap     :: IORef GpsTimeMap   , _storeObservations   :: IORef (Vector PackedObsContent)   } 
test/Test/Data/RTCM3/SBP.hs view
@@ -21,8 +21,8 @@ import Test.Tasty import Test.Tasty.Golden -testGpsTime :: Applicative f => Word32 -> Word16 -> f GpsTimeNano-testGpsTime tow wn = pure $ GpsTimeNano tow 0 wn+testGpsTime :: Applicative f => Word32 -> Word16 -> f GpsTime+testGpsTime tow wn = pure $ GpsTime tow 0 wn  encodeLine :: ToJSON a => a -> ByteString encodeLine v = toStrict $ encodePretty' defConfig { confCompare = compare } v <> "\n"
test/Test/Data/RTCM3/SBP/Time.hs view
@@ -17,19 +17,19 @@ testRolloverGpsTime =   testGroup "Rollover GPS time tests"     [ testCase "No rollover" $ do-        rolloverTowGpsTime 0 (GpsTimeNano 0 0 1960) @?= GpsTimeNano 0 0 1960-        rolloverTowGpsTime 302400000 (GpsTimeNano 302400000 0 1960) @?= GpsTimeNano 302400000 0 1960-        rolloverTowGpsTime 604800000 (GpsTimeNano 604800000 0 1960) @?= GpsTimeNano 604800000 0 1960-        rolloverTowGpsTime 0 (GpsTimeNano 302400000 0 1960) @?= GpsTimeNano 0 0 1960-        rolloverTowGpsTime 302400000 (GpsTimeNano 604800000 0 1960) @?= GpsTimeNano 302400000 0 1960+        rolloverTowGpsTime 0 (GpsTime 0 0 1960) @?= GpsTime 0 0 1960+        rolloverTowGpsTime 302400000 (GpsTime 302400000 0 1960) @?= GpsTime 302400000 0 1960+        rolloverTowGpsTime 604800000 (GpsTime 604800000 0 1960) @?= GpsTime 604800000 0 1960+        rolloverTowGpsTime 0 (GpsTime 302400000 0 1960) @?= GpsTime 0 0 1960+        rolloverTowGpsTime 302400000 (GpsTime 604800000 0 1960) @?= GpsTime 302400000 0 1960     , testCase "Positive rollover" $ do-        rolloverTowGpsTime 0 (GpsTimeNano 302400001 0 1960) @?= GpsTimeNano 0 0 1961-        rolloverTowGpsTime 0 (GpsTimeNano 604800000 0 1960) @?= GpsTimeNano 0 0 1961-        rolloverTowGpsTime 302399999 (GpsTimeNano 604800000 0 1960) @?= GpsTimeNano 302399999 0 1961+        rolloverTowGpsTime 0 (GpsTime 302400001 0 1960) @?= GpsTime 0 0 1961+        rolloverTowGpsTime 0 (GpsTime 604800000 0 1960) @?= GpsTime 0 0 1961+        rolloverTowGpsTime 302399999 (GpsTime 604800000 0 1960) @?= GpsTime 302399999 0 1961     , testCase "Negative rollover" $ do-        rolloverTowGpsTime 604800000 (GpsTimeNano 0 0 1961) @?= GpsTimeNano 604800000 0 1960-        rolloverTowGpsTime 604800000 (GpsTimeNano 302399999 0 1961) @?= GpsTimeNano 604800000 0 1960-        rolloverTowGpsTime 302400001 (GpsTimeNano 0 0 1961) @?= GpsTimeNano 302400001 0 1960+        rolloverTowGpsTime 604800000 (GpsTime 0 0 1961) @?= GpsTime 604800000 0 1960+        rolloverTowGpsTime 604800000 (GpsTime 302399999 0 1961) @?= GpsTime 604800000 0 1960+        rolloverTowGpsTime 302400001 (GpsTime 0 0 1961) @?= GpsTime 302400001 0 1960     ]  testStartDate :: TestTree