packages feed

gnss-converters 0.1.18 → 0.1.19

raw patch · 3 files changed

+68/−68 lines, 3 files

Files

gnss-converters.cabal view
@@ -1,5 +1,5 @@ name:                  gnss-converters-version:               0.1.18+version:               0.1.19 synopsis:              GNSS Converters. description:           Haskell bindings for GNSS converters. homepage:              http://github.com/swift-nav/gnss-converters
src/Data/RTCM3/SBP.hs view
@@ -327,15 +327,15 @@                          => Word8                -- ^ Total messages                          -> Word8                -- ^ Message in sequence                          -> GpsObservationHeader -- ^ RTCM observation header-                         -> m ObservationHeader+                         -> m ObservationHeaderDep fromGpsObservationHeader totalMsgs n hdr = do   t <- toGpsTime hdr-  return ObservationHeader-    { _observationHeader_t     = t+  return ObservationHeaderDep+    { _observationHeaderDep_t     = t     -- First nibble is the size of the sequence (n), second nibble is the     -- zero-indexed counter (ith packet of n). See observation header packing     -- https://github.com/swift-nav/libsbp/blob/master/spec/yaml/swiftnav/sbp/observation.yaml#L63-    , _observationHeader_n_obs = totalMsgs `shiftL` 4 .|. n+    , _observationHeaderDep_n_obs = totalMsgs `shiftL` 4 .|. n     }  -- | Construct an L1 GnssSignal@@ -355,18 +355,18 @@                            -> Word8               -- ^ Satellite PRN                            -> GpsL1Observation                            -> GpsL1ExtObservation-                           -> m PackedObsContent+                           -> m PackedObsContentDepC fromL1SatelliteObservation station sat l1 l1e = do   -- Checks GPS L1 code indicator for RTCM message 1002.   -- See DF010, pg. 3-17 of the RTCM3 spec.   let sid = toL1GnssSignal sat l1   lock    <- toLock station sid $ l1 ^. gpsL1Observation_lockTime-  return PackedObsContent-    { _packedObsContent_P    = toP_L1 l1 l1e-    , _packedObsContent_L    = toL_L1 l1 l1e-    , _packedObsContent_cn0  = toCn0_L1 l1e-    , _packedObsContent_lock = lock-    , _packedObsContent_sid  = sid+  return PackedObsContentDepC+    { _packedObsContentDepC_P    = toP_L1 l1 l1e+    , _packedObsContentDepC_L    = toL_L1 l1 l1e+    , _packedObsContentDepC_cn0  = toCn0_L1 l1e+    , _packedObsContentDepC_lock = lock+    , _packedObsContentDepC_sid  = sid     }  -- | Construct an L2 GnssSignal@@ -389,18 +389,18 @@                            -> GpsL1ExtObservation                            -> GpsL2Observation                            -> GpsL2ExtObservation-                           -> m (Maybe PackedObsContent)+                           -> m (Maybe PackedObsContentDepC) fromL2SatelliteObservation station sat l1 l1e l2 l2e =   -- Checks GPS L2 code indicator.   -- See DF016, pg. 3-17 of the RTCM3 spec.   maybe' (toL2GnssSignal sat l2) (return Nothing) $ \sid -> do     lock <- toLock station sid $ l2 ^. gpsL2Observation_lockTime-    return $ Just PackedObsContent-      { _packedObsContent_P    = toP_L2 l1 l1e l2-      , _packedObsContent_L    = toL_L2 l1 l1e l2 l2e-      , _packedObsContent_cn0  = toCn0_L2 l2e-      , _packedObsContent_lock = lock-      , _packedObsContent_sid  = sid+    return $ Just PackedObsContentDepC+      { _packedObsContentDepC_P    = toP_L2 l1 l1e l2+      , _packedObsContentDepC_L    = toL_L2 l1 l1e l2 l2e+      , _packedObsContentDepC_cn0  = toCn0_L2 l2e+      , _packedObsContentDepC_lock = lock+      , _packedObsContentDepC_sid  = sid       }  -- | Construct SBP GPS observation message (possibly chunked).@@ -409,13 +409,13 @@               => GpsObservationHeader -- ^ RTCM observation header               -> Word8                -- ^ Total messages               -> Word8                -- ^ Message in sequence-              -> [PackedObsContent]-              -> m MsgObs+              -> [PackedObsContentDepC]+              -> m MsgObsDepC chunkToMsgObs hdr totalMsgs n packed = do   header <- fromGpsObservationHeader totalMsgs n hdr-  return MsgObs-    { _msgObs_header = header-    , _msgObs_obs    = packed+  return MsgObsDepC+    { _msgObsDepC_header = header+    , _msgObsDepC_obs    = packed     }  -- | Sender Id is Station Id with high byte or'd in@@ -431,7 +431,7 @@  -- | Construct an L1 SBP PackedObsContent from an RTCM Msg 1002. ---fromObservation1002 :: MonadStore e m => Word16 -> Observation1002 -> m [PackedObsContent]+fromObservation1002 :: MonadStore e m => Word16 -> Observation1002 -> m [PackedObsContentDepC] fromObservation1002 station obs = do   obs1 <- fromL1SatelliteObservation station sat l1 l1e   return $@@ -449,7 +449,7 @@ -- -- This chunking takes places because the number of observations in a given 1002 -- may very well exceed the maximum SBP supported payload size of 255 bytes.-fromMsg1002 :: MonadStore e m => Msg1002 -> m [MsgObs]+fromMsg1002 :: MonadStore e m => Msg1002 -> m [MsgObsDepC] fromMsg1002 m = do   let hdr     = m ^. msg1002_header       station = hdr ^. gpsObservationHeader_station@@ -460,7 +460,7 @@  -- | Construct an L1/L2 SBP PackedObsContent from an RTCM Msg 1004. ---fromObservation1004 :: MonadStore e m => Word16 -> Observation1004 -> m [PackedObsContent]+fromObservation1004 :: MonadStore e m => Word16 -> Observation1004 -> m [PackedObsContentDepC] fromObservation1004 station obs = do   obs1 <- fromL1SatelliteObservation station sat l1 l1e   obs2 <- fromL2SatelliteObservation station sat l1 l1e l2 l2e@@ -483,7 +483,7 @@ -- -- This chunking takes places because the number of observations in a given 1004 -- may very well exceed the maximum SBP supported payload size of 255 bytes.-fromMsg1004 :: MonadStore e m => Msg1004 -> m [MsgObs]+fromMsg1004 :: MonadStore e m => Msg1004 -> m [MsgObsDepC] fromMsg1004 m = do   let hdr     = m ^. msg1004_header       station = hdr ^. gpsObservationHeader_station@@ -519,11 +519,11 @@   (RTCM3Msg1002 m _rtcm3) -> do     let sender = m ^. msg1002_header ^. gpsObservationHeader_station     m' <- fromMsg1002 m-    return $ flip fmap m' $ \x -> SBPMsgObs x $ toSBP x $ toSender sender+    return $ flip fmap m' $ \x -> SBPMsgObsDepC x $ toSBP x $ toSender sender   (RTCM3Msg1004 m _rtcm3) -> do     let sender = m ^. msg1004_header ^. gpsObservationHeader_station     m' <- fromMsg1004 m-    return $ flip fmap m' $ \x -> SBPMsgObs x $ toSBP x $ toSender sender+    return $ flip fmap m' $ \x -> SBPMsgObsDepC x $ toSBP x $ toSender sender   (RTCM3Msg1005 m _rtcm3) -> do     let sender =  m ^. msg1005_reference ^. antennaReference_station     m' <- fromMsg1005 m
test/Test/Data/RTCM3/SBP.hs view
@@ -44,27 +44,27 @@                     , msg' ^. msgBasePosEcef_z                     ) -isL1 :: PackedObsContent -> Bool-isL1 obs = (obs ^. packedObsContent_sid ^. gnssSignal_code) == l1CSidCode+isL1 :: PackedObsContentDepC -> Bool+isL1 obs = (obs ^. packedObsContentDepC_sid ^. gnssSignal_code) == l1CSidCode -isL2 :: PackedObsContent -> Bool+isL2 :: PackedObsContentDepC -> Bool isL2 obs = code == l2CMSidCode || code == l2PSidCode   where-    code = obs ^. packedObsContent_sid ^. gnssSignal_code+    code = obs ^. packedObsContentDepC_sid ^. gnssSignal_code -sat :: PackedObsContent -> Word16-sat obs = obs ^. packedObsContent_sid ^. gnssSignal_sat+sat :: PackedObsContentDepC -> Word16+sat obs = obs ^. packedObsContentDepC_sid ^. gnssSignal_sat -cn0 :: PackedObsContent -> Double-cn0 obs = 0.25 * fromIntegral (obs ^. packedObsContent_cn0)+cn0 :: PackedObsContentDepC -> Double+cn0 obs = 0.25 * fromIntegral (obs ^. packedObsContentDepC_cn0) -pseudorange :: PackedObsContent -> Double-pseudorange obs = fromIntegral (obs ^. packedObsContent_P) / sbpCMinM+pseudorange :: PackedObsContentDepC -> Double+pseudorange obs = fromIntegral (obs ^. packedObsContentDepC_P) / sbpCMinM -carrierPhase :: PackedObsContent -> Double+carrierPhase :: PackedObsContentDepC -> Double carrierPhase obs = whole + fraction   where-    phase    = obs ^. packedObsContent_L+    phase    = obs ^. packedObsContentDepC_L     whole    = fromIntegral (phase ^. carrierPhase_i)     fraction = fromIntegral (phase ^. carrierPhase_f) / q32Width @@ -73,13 +73,13 @@   assertEqual "Base station position error!" pos $ basePosition posEcef assertExpectedBase _                             _   = assertFailure "Invalid message type!" -assertObsHeader :: SBPMsg -> ObservationHeader -> Assertion-assertObsHeader (SBPMsgObs obs _) header =-  assertEqual "Observation header is not equal" header $ obs ^. msgObs_header+assertObsHeader :: SBPMsg -> ObservationHeaderDep -> Assertion+assertObsHeader (SBPMsgObsDepC obs _) header =+  assertEqual "Observation header is not equal" header $ obs ^. msgObsDepC_header assertObsHeader _                 _      = assertFailure "Invalid message type!"  assertObs :: HashMap Word16 (Double, Double, Double)-          -> PackedObsContent+          -> PackedObsContentDepC           -> Double        -- ^ Pseudorange tolerance (meters)           -> Double        -- ^ Carrier phase tolerance (cycles)           -> Word8         -- ^ Satellite band code@@ -88,7 +88,7 @@   let prn         = 1 + sat obs       def         = (0, 0, 0)       (p, c, snr) = lookupDefault def prn truth-      code        = obs ^. packedObsContent_sid ^. gnssSignal_code+      code        = obs ^. packedObsContentDepC_sid ^. gnssSignal_code       msg'        = textToString $ "PRN=" ++ show prn ++ " CODE=" ++ show code   -- Pseudorange representation error   assertApproxEqual ("Incorrect pseudorange" ++ msg')   ptol p $ pseudorange obs@@ -99,11 +99,11 @@   assertEqual ("Incorrect code" ++ msg') sig   code  assertMsgObs :: SBPMsg -> Assertion-assertMsgObs (SBPMsgObs obs' _) = do+assertMsgObs (SBPMsgObsDepC obs' _) = do   let ptol    = 0.020 -- 2cm representation errorn       ctol_L1 = 0.005 -- carrier phase / L1 wavelength = 0.001m/0.190m cycles       ctol_L2 = 0.004 -- carrier phase / L2 wavelength = 0.001m/0.250m cycles-  forM_ (obs' ^. msgObs_obs) $ \packed ->+  forM_ (obs' ^. msgObsDepC_obs) $ \packed ->     case () of       _ |  isL1 packed -> assertObs testObs_L1 packed ptol ctol_L1 l1CSidCode         |  isL2 packed -> assertObs testObs_L2 packed ptol ctol_L2 l2PSidCode@@ -111,7 +111,7 @@ assertMsgObs _                  =  assertFailure "Invalid message type!"  assertMsgObsLength :: SBPMsg -> Int -> Assertion-assertMsgObsLength (SBPMsgObs obs' _) len = length (obs' ^. msgObs_obs) @?= len+assertMsgObsLength (SBPMsgObsDepC obs' _) len = length (obs' ^. msgObsDepC_obs) @?= len assertMsgObsLength _                  _   = assertFailure "Invalid message type!"  -- | L1 observations: PRN => Pseudorange, Carrier Phase, SNR@@ -155,41 +155,41 @@         assertExpectedBase (msgs !! 0) expectedBasePos         assertExpectedBase (msgs !! 5) expectedBasePos         -- Message 1-        assertObsHeader (msgs !! 1) ObservationHeader {-            _observationHeader_t     = GpsTime 86354000 1906-          , _observationHeader_n_obs = 32+        assertObsHeader (msgs !! 1) ObservationHeaderDep {+            _observationHeaderDep_t     = GpsTime 86354000 1906+          , _observationHeaderDep_n_obs = 32           }         assertMsgObsLength (msgs !! 1) 15         assertMsgObs (msgs !! 1)         -- Message 2-        assertObsHeader (msgs !! 2) ObservationHeader {-            _observationHeader_t     = GpsTime 86354000 1906-          , _observationHeader_n_obs = 33+        assertObsHeader (msgs !! 2) ObservationHeaderDep {+            _observationHeaderDep_t     = GpsTime 86354000 1906+          , _observationHeaderDep_n_obs = 33           }         assertMsgObs (msgs !! 2)         assertMsgObsLength (msgs !! 2) 1         -- Message 3-        assertObsHeader (msgs !! 3) ObservationHeader {-            _observationHeader_t     = GpsTime 86355000 1906-          , _observationHeader_n_obs = 32+        assertObsHeader (msgs !! 3) ObservationHeaderDep {+            _observationHeaderDep_t     = GpsTime 86355000 1906+          , _observationHeaderDep_n_obs = 32           }         assertMsgObsLength (msgs !! 3) 15         -- Message 4-        assertObsHeader (msgs !! 4) ObservationHeader {-            _observationHeader_t     = GpsTime 86355000 1906-          , _observationHeader_n_obs = 33+        assertObsHeader (msgs !! 4) ObservationHeaderDep {+            _observationHeaderDep_t     = GpsTime 86355000 1906+          , _observationHeaderDep_n_obs = 33           }         assertMsgObsLength (msgs !! 4) 1         -- Message 6-        assertObsHeader (msgs !! 6) ObservationHeader {-            _observationHeader_t     = GpsTime 86356000 1906-          , _observationHeader_n_obs = 32+        assertObsHeader (msgs !! 6) ObservationHeaderDep {+            _observationHeaderDep_t     = GpsTime 86356000 1906+          , _observationHeaderDep_n_obs = 32           }         assertMsgObsLength (msgs !! 6) 15         -- Message 7-        assertObsHeader (msgs !! 7) ObservationHeader {-            _observationHeader_t     = GpsTime 86356000 1906-          , _observationHeader_n_obs = 33+        assertObsHeader (msgs !! 7) ObservationHeaderDep {+            _observationHeaderDep_t     = GpsTime 86356000 1906+          , _observationHeaderDep_n_obs = 33           }         assertMsgObsLength (msgs !! 7) 1      ]