rtcm 0.2.14 → 0.2.15
raw patch · 4 files changed
+96/−5 lines, 4 files
Files
- rtcm.cabal +4/−4
- src/Data/RTCM3.hs +6/−0
- src/Data/RTCM3/System.hs +69/−1
- test/Test/Data/RTCM3/System.hs +17/−0
rtcm.cabal view
@@ -1,10 +1,9 @@ name: rtcm-version: 0.2.14-synopsis: RTCM Library.-description: Haskell bindings for RTCM.+version: 0.2.15+synopsis: Haskell bindings for RTCM. homepage: http://github.com/swift-nav/librtcm license: BSD3-author: Mark Fine <mark@swift-nav.com>, Joshua Gross <josh@swift-nav.com>+author: Mark Fine <mark@swift-nav.com> maintainer: Swift Navigation <dev@swift-nav.com> copyright: Copyright (C) 2015-2017 Swift Navigation, Inc. category: Network@@ -99,6 +98,7 @@ , tasty , tasty-hunit , tasty-quickcheck+ , text , word24 ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall default-language: Haskell2010
src/Data/RTCM3.hs view
@@ -51,6 +51,7 @@ | RTCM3Msg1013 Msg1013 Msg | RTCM3Msg1019 Msg1019 Msg | RTCM3Msg1020 Msg1020 Msg+ | RTCM3Msg1029 Msg1029 Msg | RTCM3Msg1033 Msg1033 Msg | RTCM3Msg1057 Msg1057 Msg | RTCM3Msg1058 Msg1058 Msg@@ -93,6 +94,7 @@ | num == msg1013 = RTCM3Msg1013 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1019 = RTCM3Msg1019 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1020 = RTCM3Msg1020 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m+ | num == msg1029 = RTCM3Msg1029 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1033 = RTCM3Msg1033 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1057 = RTCM3Msg1057 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m | num == msg1058 = RTCM3Msg1058 (decode $ fromStrict $ unBytes _msgRTCM3Payload) m@@ -127,6 +129,7 @@ encoder (RTCM3Msg1013 _n m) = put m encoder (RTCM3Msg1019 _n m) = put m encoder (RTCM3Msg1020 _n m) = put m+ encoder (RTCM3Msg1029 _n m) = put m encoder (RTCM3Msg1033 _n m) = put m encoder (RTCM3Msg1057 _n m) = put m encoder (RTCM3Msg1058 _n m) = put m@@ -159,6 +162,7 @@ msg f (RTCM3Msg1013 n m) = RTCM3Msg1013 n <$> f m msg f (RTCM3Msg1019 n m) = RTCM3Msg1019 n <$> f m msg f (RTCM3Msg1020 n m) = RTCM3Msg1020 n <$> f m+ msg f (RTCM3Msg1029 n m) = RTCM3Msg1029 n <$> f m msg f (RTCM3Msg1033 n m) = RTCM3Msg1033 n <$> f m msg f (RTCM3Msg1057 n m) = RTCM3Msg1057 n <$> f m msg f (RTCM3Msg1058 n m) = RTCM3Msg1058 n <$> f m@@ -197,6 +201,7 @@ toJSON (RTCM3Msg1013 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1019 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1020 n m) = toJSON n <<>> toJSON m+ toJSON (RTCM3Msg1029 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1033 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1057 n m) = toJSON n <<>> toJSON m toJSON (RTCM3Msg1058 n m) = toJSON n <<>> toJSON m@@ -233,6 +238,7 @@ | num == msg1013 = RTCM3Msg1013 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1019 = RTCM3Msg1019 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1020 = RTCM3Msg1020 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj+ | num == msg1029 = RTCM3Msg1029 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1033 = RTCM3Msg1033 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1057 = RTCM3Msg1057 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj | num == msg1058 = RTCM3Msg1058 <$> pure (decode $ fromStrict $ unBytes payload) <*> parseJSON obj
src/Data/RTCM3/System.hs view
@@ -93,6 +93,49 @@ B.putBool _message_synchronous B.putWord16be 16 _message_interval +-- | TextMessage+--+-- Informational text message.+data TextMessage = TextMessage+ { _textMessage_num :: Word16+ -- ^ Message number.+ , _textMessage_station :: Word16+ -- ^ Reference station id.+ , _textMessage_mjd :: Word16+ -- ^ Modified Julian Day Number.+ , _textMessage_seconds :: Word32+ -- ^ Seconds of Day.+ , _textMessage_characters :: Word8+ -- ^ Number of characters.+ , _textMessage_n :: Word8+ -- ^ Number of UTF-8 code units.+ , _textMessage_text :: Text+ -- ^ UTF-8 code units.+ } deriving ( Show, Read, Eq )++$(makeLenses ''TextMessage)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_textMessage_" . stripPrefix "_textMessage_"} ''TextMessage)++instance BinaryBit TextMessage where+ getBits _n = do+ _textMessage_num <- B.getWord16be 12+ _textMessage_station <- B.getWord16be 12+ _textMessage_mjd <- B.getWord16be 16+ _textMessage_seconds <- B.getWord32be 17+ _textMessage_characters <- B.getWord8 7+ _textMessage_n <- B.getWord8 8+ _textMessage_text <- decodeUtf8 <$> B.getByteString (fromIntegral _textMessage_n)+ pure TextMessage {..}++ putBits _n TextMessage {..} = do+ B.putWord16be 12 _textMessage_num+ B.putWord16be 12 _textMessage_station+ B.putWord16be 16 _textMessage_mjd+ B.putWord32be 17 _textMessage_seconds+ B.putWord8 7 _textMessage_characters+ B.putWord8 8 _textMessage_n+ B.putByteString $ encodeUtf8 _textMessage_text+ msg1013 :: Word16 msg1013 = 1013 @@ -111,7 +154,7 @@ instance Binary Msg1013 where get = B.runBitGet $ do- _msg1013_header <- getBits 0+ _msg1013_header <- getBits 0 _msg1013_messages <- replicateM (fromIntegral $ _msg1013_header ^. messageHeader_n) $ getBits 0 pure Msg1013 {..} @@ -120,3 +163,28 @@ forM_ _msg1013_messages $ putBits 0 $(deriveRTCM3 ''Msg1013)++msg1029 :: Word16+msg1029 = 1029++-- | Msg1029.+--+-- RTCMv3 message 1029.+newtype Msg1029 = Msg1029+ { _msg1029_message :: TextMessage+ -- ^ Text Messages.+ } deriving ( Show, Read, Eq )++$(makeLenses ''Msg1029)+$(deriveJSON defaultOptions {fieldLabelModifier = fromMaybe "_msg1029_" . stripPrefix "_msg1029_"} ''Msg1029)++instance Binary Msg1029 where+ get = B.runBitGet $ do+ _msg1029_message <- getBits 0+ pure Msg1029 {..}++ put Msg1029 {..} = B.runBitPut $+ putBits 0 _msg1029_message++$(deriveRTCM3 ''Msg1029)+
test/Test/Data/RTCM3/System.hs view
@@ -18,6 +18,7 @@ import Control.Lens import Data.Binary import Data.RTCM3+import Data.Text import Test.Data.RTCM3.Test import Test.Tasty import Test.Tasty.QuickCheck@@ -39,11 +40,27 @@ _message_interval <- arbitraryWord 16 pure Message {..} +instance Arbitrary TextMessage where+ arbitrary = do+ _textMessage_num <- arbitraryWord 12+ _textMessage_station <- arbitraryWord 12+ _textMessage_mjd <- arbitraryWord 16+ _textMessage_seconds <- arbitraryWord 17+ _textMessage_characters <- arbitraryWord 7+ _textMessage_n <- arbitraryWord 8+ _textMessage_text <- pack <$> replicateM (fromIntegral _textMessage_n) arbitrary+ pure TextMessage {..}+ instance Arbitrary Msg1013 where arbitrary = do header <- arbitrary messages <- replicateM (fromIntegral $ header ^. messageHeader_n) arbitrary pure $ Msg1013 header messages++instance Arbitrary Msg1029 where+ arbitrary = do+ message <- arbitrary+ pure $ Msg1029 message testMsg1013 :: TestTree testMsg1013 =