packages feed

sbp 2.2.9 → 2.2.10

raw patch · 28 files changed

+314/−428 lines, 28 filesdep +lens-aesondep −conduit-combinators

Dependencies added: lens-aeson

Dependencies removed: conduit-combinators

Files

main/JSON2SBP.hs view
@@ -12,16 +12,15 @@ -- JSON to SBP tool - reads SBP JSON from stdin and sends SBP JSON to -- stdout. -import           BasicPrelude hiding (lines)-import           Control.Monad.Trans.Resource-import           Data.Aeson-import           Data.Conduit-import           Data.Conduit.Binary-import qualified Data.Conduit.List as CL-import           Data.Conduit.Serialization.Binary-import           Debug.Trace-import           SwiftNav.SBP-import           System.IO+import BasicPrelude                      hiding (lines, mapMaybe)+import Control.Monad.Trans.Resource+import Data.Aeson+import Data.Conduit+import Data.Conduit.Binary+import Data.Conduit.List+import Data.Conduit.Serialization.Binary+import SwiftNav.SBP+import System.IO  newtype SBPMsgData = SBPMsgData   { sbpMsgData :: SBPMsg@@ -33,17 +32,13 @@  -- | Decode a SBPMsg from JSON. decodeSBPMsg :: ByteString -> Maybe SBPMsg-decodeSBPMsg v = result-  where parsed = eitherDecodeStrict v <|> sbpMsgData <$> eitherDecodeStrict v-        result = case parsed of-                   Left s -> trace s Nothing-                   Right x -> Just x+decodeSBPMsg v = decodeStrict v <|> sbpMsgData <$> decodeStrict v  main :: IO () main =   runResourceT $-    sourceHandle stdin       =$=-    lines                    =$=-    CL.mapMaybe decodeSBPMsg =$=-    conduitEncode            $$+    sourceHandle stdin    =$=+    lines                 =$=+    mapMaybe decodeSBPMsg =$=+    conduitEncode         $$     sinkHandle stdout
main/SBP2JSON.hs view
@@ -12,25 +12,25 @@ -- SBP to JSON tool - reads SBP binary from stdin and sends SBP JSON -- to stdout. -import           BasicPrelude-import           Control.Monad.Trans.Resource-import           Data.Aeson-import qualified Data.ByteString.Lazy as BL-import           Data.Conduit-import           Data.Conduit.Binary-import qualified Data.Conduit.List as CL-import           Data.Conduit.Serialization.Binary-import           SwiftNav.SBP-import           System.IO+import BasicPrelude                      hiding (map)+import Control.Monad.Trans.Resource+import Data.Aeson+import Data.ByteString.Lazy              hiding (ByteString, map)+import Data.Conduit+import Data.Conduit.Binary+import Data.Conduit.List+import Data.Conduit.Serialization.Binary+import SwiftNav.SBP+import System.IO  -- | Encode a SBPMsg to a line of JSON. encodeLine :: SBPMsg -> ByteString-encodeLine v = BL.toStrict $ encode v <> "\n"+encodeLine v = toStrict $ encode v <> "\n"  main :: IO () main =   runResourceT $     sourceHandle stdin  =$=       conduitDecode     =$=-      CL.map encodeLine $$+      map encodeLine    $$       sinkHandle stdout
main/SBP2YAML.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}  -- | -- Module:      SBP2YAML@@ -12,20 +11,20 @@ -- SBP to YAML tool - reads SBP binary from stdin and sends SBP YAML -- to stdout. -import           BasicPrelude-import           Control.Monad.Trans.Resource-import           Data.Conduit-import           Data.Conduit.Binary-import qualified Data.Conduit.List as CL-import           Data.Conduit.Serialization.Binary-import           Data.Yaml-import           SwiftNav.SBP-import           System.IO+import BasicPrelude                      hiding (map)+import Control.Monad.Trans.Resource+import Data.Conduit+import Data.Conduit.Binary+import Data.Conduit.List+import Data.Conduit.Serialization.Binary+import Data.Yaml+import SwiftNav.SBP+import System.IO  main :: IO () main =   runResourceT $-    sourceHandle stdin                      =$=-    conduitDecode                           =$=-    CL.map (encode :: SBPMsg -> ByteString) $$+    sourceHandle stdin                   =$=+    conduitDecode                        =$=+    map (encode :: SBPMsg -> ByteString) $$     sinkHandle stdout
sbp.cabal view
@@ -1,5 +1,5 @@ name: sbp-version: 2.2.9+version: 2.2.10 cabal-version: >=1.22 build-type: Simple license: LGPL-3@@ -25,7 +25,7 @@  library     exposed-modules:-        SwiftNav.Internal+        SwiftNav.CRC16         SwiftNav.SBP     build-depends:         aeson >=0.11.3.0,@@ -37,6 +37,7 @@         bytestring >=0.10.6.0,         data-binary-ieee754 >=0.4.4,         lens >=4.13,+        lens-aeson >=1.0.0.5,         monad-loops >=0.4.3,         template-haskell >=2.10.0.0,         text >=1.2.2.2,@@ -44,8 +45,6 @@     default-language: Haskell2010     hs-source-dirs: src     other-modules:-        SwiftNav.CRC16-        SwiftNav.Encoding         SwiftNav.SBP.Msg         SwiftNav.SBP.TH         SwiftNav.SBP.Types@@ -76,7 +75,6 @@         binary-conduit >=1.2.4.1,         bytestring >=0.10.6.0,         conduit >=1.2.10,-        conduit-combinators >=1.0.8.3,         conduit-extra >=1.1.16,         resourcet >=1.1.9,         sbp@@ -91,9 +89,7 @@         base >=4.8.2.0,         basic-prelude >=0.5.2,         binary-conduit >=1.2.4.1,-        bytestring >=0.10.6.0,         conduit >=1.2.10,-        conduit-combinators >=1.0.8.3,         conduit-extra >=1.1.16,         resourcet >=1.1.9,         sbp@@ -135,5 +131,4 @@     hs-source-dirs: test     other-modules:         Test.SwiftNav.CRC16-        Test.SwiftNav.Encoding     ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
− src/SwiftNav/Encoding.hs
@@ -1,31 +0,0 @@-{-# OPTIONS -fno-warn-orphans  #-}-{-# LANGUAGE NoImplicitPrelude #-}---- |--- Module:      SwiftNav.Encoding--- Copyright:   Copyright (C) 2015 Swift Navigation, Inc.--- License:     LGPL-3--- Maintainer:  Mark Fine <dev@swiftnav.com>--- Stability:   experimental--- Portability: portable------ Encoding utilities.--module SwiftNav.Encoding where--import BasicPrelude-import Data.Aeson-import Data.ByteString.Base64   as Base64-import Data.Text.Encoding-import Data.Text.Encoding.Error---- ByteString doesn't have Aeson instances defined for it since--- arbitrary ByteString's aren't really valid JSON. This defines--- orphaned instances for ByteStrings that are expected to be valid--- text.--instance ToJSON ByteString where-  toJSON = toJSON . decodeUtf8With ignore . Base64.encode--instance FromJSON ByteString where-  parseJSON = withText "ByteString" (pure . Base64.decodeLenient . encodeUtf8)
− src/SwiftNav/Internal.hs
@@ -1,8 +0,0 @@--- | Internal Module----module SwiftNav.Internal-  ( module Exports-  ) where--import SwiftNav.CRC16    as Exports-import SwiftNav.Encoding as Exports ()
src/SwiftNav/SBP/Acquisition.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types import SwiftNav.SBP.Gnss
src/SwiftNav/SBP/Bootload.hs view
@@ -26,11 +26,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/ExtEvents.hs view
@@ -25,11 +25,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/FileIo.hs view
@@ -29,11 +29,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/Flash.hs view
@@ -27,11 +27,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/Gnss.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/Imu.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/Logging.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/Msg.hs view
@@ -21,6 +21,7 @@ import BasicPrelude import Control.Lens import Data.Aeson               hiding (decode)+import Data.Aeson.Lens import Data.Binary import Data.ByteString.Lazy     hiding (ByteString) import SwiftNav.SBP.Acquisition@@ -173,127 +174,127 @@ instance Binary SBPMsg where   get = do     preamble <- getWord8-    if preamble /= msgSBPPreamble then get else do+    if preamble /= msgSBPPreamble then get else       decoder <$> get where         decoder m@Msg {..}           | checkCrc m /= _msgSBPCrc = SBPMsgBadCrc m-          | _msgSBPType == msgAcqResult = SBPMsgAcqResult (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgAcqResultDepA = SBPMsgAcqResultDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgAcqResultDepB = SBPMsgAcqResultDepB (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgAcqSvProfile = SBPMsgAcqSvProfile (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgAgeCorrections = SBPMsgAgeCorrections (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgAlmanac = SBPMsgAlmanac (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgAlmanacGlo = SBPMsgAlmanacGlo (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgAlmanacGps = SBPMsgAlmanacGps (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBasePosEcef = SBPMsgBasePosEcef (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBasePosLlh = SBPMsgBasePosLlh (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBaselineEcef = SBPMsgBaselineEcef (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBaselineEcefDepA = SBPMsgBaselineEcefDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBaselineHeading = SBPMsgBaselineHeading (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBaselineHeadingDepA = SBPMsgBaselineHeadingDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBaselineNed = SBPMsgBaselineNed (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBaselineNedDepA = SBPMsgBaselineNedDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBootloaderHandshakeDepA = SBPMsgBootloaderHandshakeDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBootloaderHandshakeReq = SBPMsgBootloaderHandshakeReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBootloaderHandshakeResp = SBPMsgBootloaderHandshakeResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgCommandOutput = SBPMsgCommandOutput (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgCommandReq = SBPMsgCommandReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgCommandResp = SBPMsgCommandResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgCwResults = SBPMsgCwResults (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgCwStart = SBPMsgCwStart (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgDeviceMonitor = SBPMsgDeviceMonitor (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgDgnssStatus = SBPMsgDgnssStatus (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgDops = SBPMsgDops (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgDopsDepA = SBPMsgDopsDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisDepA = SBPMsgEphemerisDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisDepB = SBPMsgEphemerisDepB (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisDepC = SBPMsgEphemerisDepC (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisDepD = SBPMsgEphemerisDepD (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisGlo = SBPMsgEphemerisGlo (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisGloDepC = SBPMsgEphemerisGloDepC (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisGps = SBPMsgEphemerisGps (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisGpsDepE = SBPMsgEphemerisGpsDepE (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisSbas = SBPMsgEphemerisSbas (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgEphemerisSbasDepA = SBPMsgEphemerisSbasDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgExtEvent = SBPMsgExtEvent (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFcnsGlo = SBPMsgFcnsGlo (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFileioReadDirReq = SBPMsgFileioReadDirReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFileioReadDirResp = SBPMsgFileioReadDirResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFileioReadReq = SBPMsgFileioReadReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFileioReadResp = SBPMsgFileioReadResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFileioRemove = SBPMsgFileioRemove (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFileioWriteReq = SBPMsgFileioWriteReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFileioWriteResp = SBPMsgFileioWriteResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFlashDone = SBPMsgFlashDone (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFlashErase = SBPMsgFlashErase (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFlashProgram = SBPMsgFlashProgram (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFlashReadReq = SBPMsgFlashReadReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFlashReadResp = SBPMsgFlashReadResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgFwd = SBPMsgFwd (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgGpsTime = SBPMsgGpsTime (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgGpsTimeDepA = SBPMsgGpsTimeDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgGroupDelay = SBPMsgGroupDelay (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgGroupDelayDepA = SBPMsgGroupDelayDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgHeartbeat = SBPMsgHeartbeat (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgIarState = SBPMsgIarState (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgImuAux = SBPMsgImuAux (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgImuRaw = SBPMsgImuRaw (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgInitBase = SBPMsgInitBase (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgIono = SBPMsgIono (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgLog = SBPMsgLog (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgMaskSatellite = SBPMsgMaskSatellite (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgNapDeviceDnaReq = SBPMsgNapDeviceDnaReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgNapDeviceDnaResp = SBPMsgNapDeviceDnaResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgNdbEvent = SBPMsgNdbEvent (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgNetworkStateReq = SBPMsgNetworkStateReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgNetworkStateResp = SBPMsgNetworkStateResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgObs = SBPMsgObs (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgObsDepA = SBPMsgObsDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgObsDepB = SBPMsgObsDepB (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgObsDepC = SBPMsgObsDepC (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgPosEcef = SBPMsgPosEcef (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgPosEcefDepA = SBPMsgPosEcefDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgPosLlh = SBPMsgPosLlh (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgPosLlhDepA = SBPMsgPosLlhDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgPrintDep = SBPMsgPrintDep (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgReset = SBPMsgReset (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgResetDep = SBPMsgResetDep (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgResetFilters = SBPMsgResetFilters (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSetTime = SBPMsgSetTime (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsReadByIndexDone = SBPMsgSettingsReadByIndexDone (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsReadByIndexReq = SBPMsgSettingsReadByIndexReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsReadByIndexResp = SBPMsgSettingsReadByIndexResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsReadReq = SBPMsgSettingsReadReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsReadResp = SBPMsgSettingsReadResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsRegister = SBPMsgSettingsRegister (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsSave = SBPMsgSettingsSave (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSettingsWrite = SBPMsgSettingsWrite (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSpecan = SBPMsgSpecan (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgStmFlashLockSector = SBPMsgStmFlashLockSector (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgStmUniqueIdReq = SBPMsgStmUniqueIdReq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgSvConfigurationGps = SBPMsgSvConfigurationGps (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgThreadState = SBPMsgThreadState (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgTrackingIq = SBPMsgTrackingIq (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgTrackingState = SBPMsgTrackingState (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgTrackingStateDepA = SBPMsgTrackingStateDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgTrackingStateDepB = SBPMsgTrackingStateDepB (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgTrackingStateDetailed = SBPMsgTrackingStateDetailed (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgTweet = SBPMsgTweet (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgUartState = SBPMsgUartState (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgUartStateDepa = SBPMsgUartStateDepa (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgUserData = SBPMsgUserData (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgUtcTime = SBPMsgUtcTime (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgVelEcef = SBPMsgVelEcef (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgVelEcefDepA = SBPMsgVelEcefDepA (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgVelNed = SBPMsgVelNed (decode (fromStrict _msgSBPPayload)) m-          | _msgSBPType == msgVelNedDepA = SBPMsgVelNedDepA (decode (fromStrict _msgSBPPayload)) m+          | _msgSBPType == msgAcqResult = SBPMsgAcqResult (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgAcqResultDepA = SBPMsgAcqResultDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgAcqResultDepB = SBPMsgAcqResultDepB (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgAcqSvProfile = SBPMsgAcqSvProfile (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgAgeCorrections = SBPMsgAgeCorrections (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgAlmanac = SBPMsgAlmanac (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgAlmanacGlo = SBPMsgAlmanacGlo (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgAlmanacGps = SBPMsgAlmanacGps (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBasePosEcef = SBPMsgBasePosEcef (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBasePosLlh = SBPMsgBasePosLlh (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBaselineEcef = SBPMsgBaselineEcef (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBaselineEcefDepA = SBPMsgBaselineEcefDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBaselineHeading = SBPMsgBaselineHeading (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBaselineHeadingDepA = SBPMsgBaselineHeadingDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBaselineNed = SBPMsgBaselineNed (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBaselineNedDepA = SBPMsgBaselineNedDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBootloaderHandshakeDepA = SBPMsgBootloaderHandshakeDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBootloaderHandshakeReq = SBPMsgBootloaderHandshakeReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBootloaderHandshakeResp = SBPMsgBootloaderHandshakeResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgCommandOutput = SBPMsgCommandOutput (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgCommandReq = SBPMsgCommandReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgCommandResp = SBPMsgCommandResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgCwResults = SBPMsgCwResults (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgCwStart = SBPMsgCwStart (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgDeviceMonitor = SBPMsgDeviceMonitor (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgDgnssStatus = SBPMsgDgnssStatus (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgDops = SBPMsgDops (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgDopsDepA = SBPMsgDopsDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisDepA = SBPMsgEphemerisDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisDepB = SBPMsgEphemerisDepB (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisDepC = SBPMsgEphemerisDepC (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisDepD = SBPMsgEphemerisDepD (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisGlo = SBPMsgEphemerisGlo (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisGloDepC = SBPMsgEphemerisGloDepC (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisGps = SBPMsgEphemerisGps (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisGpsDepE = SBPMsgEphemerisGpsDepE (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisSbas = SBPMsgEphemerisSbas (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgEphemerisSbasDepA = SBPMsgEphemerisSbasDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgExtEvent = SBPMsgExtEvent (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFcnsGlo = SBPMsgFcnsGlo (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFileioReadDirReq = SBPMsgFileioReadDirReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFileioReadDirResp = SBPMsgFileioReadDirResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFileioReadReq = SBPMsgFileioReadReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFileioReadResp = SBPMsgFileioReadResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFileioRemove = SBPMsgFileioRemove (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFileioWriteReq = SBPMsgFileioWriteReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFileioWriteResp = SBPMsgFileioWriteResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFlashDone = SBPMsgFlashDone (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFlashErase = SBPMsgFlashErase (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFlashProgram = SBPMsgFlashProgram (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFlashReadReq = SBPMsgFlashReadReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFlashReadResp = SBPMsgFlashReadResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgFwd = SBPMsgFwd (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgGpsTime = SBPMsgGpsTime (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgGpsTimeDepA = SBPMsgGpsTimeDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgGroupDelay = SBPMsgGroupDelay (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgGroupDelayDepA = SBPMsgGroupDelayDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgHeartbeat = SBPMsgHeartbeat (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgIarState = SBPMsgIarState (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgImuAux = SBPMsgImuAux (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgImuRaw = SBPMsgImuRaw (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgInitBase = SBPMsgInitBase (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgIono = SBPMsgIono (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgLog = SBPMsgLog (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgMaskSatellite = SBPMsgMaskSatellite (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgNapDeviceDnaReq = SBPMsgNapDeviceDnaReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgNapDeviceDnaResp = SBPMsgNapDeviceDnaResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgNdbEvent = SBPMsgNdbEvent (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgNetworkStateReq = SBPMsgNetworkStateReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgNetworkStateResp = SBPMsgNetworkStateResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgObs = SBPMsgObs (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgObsDepA = SBPMsgObsDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgObsDepB = SBPMsgObsDepB (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgObsDepC = SBPMsgObsDepC (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgPosEcef = SBPMsgPosEcef (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgPosEcefDepA = SBPMsgPosEcefDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgPosLlh = SBPMsgPosLlh (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgPosLlhDepA = SBPMsgPosLlhDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgPrintDep = SBPMsgPrintDep (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgReset = SBPMsgReset (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgResetDep = SBPMsgResetDep (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgResetFilters = SBPMsgResetFilters (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSetTime = SBPMsgSetTime (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsReadByIndexDone = SBPMsgSettingsReadByIndexDone (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsReadByIndexReq = SBPMsgSettingsReadByIndexReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsReadByIndexResp = SBPMsgSettingsReadByIndexResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsReadReq = SBPMsgSettingsReadReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsReadResp = SBPMsgSettingsReadResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsRegister = SBPMsgSettingsRegister (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsSave = SBPMsgSettingsSave (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSettingsWrite = SBPMsgSettingsWrite (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSpecan = SBPMsgSpecan (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgStmFlashLockSector = SBPMsgStmFlashLockSector (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgStmUniqueIdReq = SBPMsgStmUniqueIdReq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgSvConfigurationGps = SBPMsgSvConfigurationGps (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgThreadState = SBPMsgThreadState (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgTrackingIq = SBPMsgTrackingIq (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgTrackingState = SBPMsgTrackingState (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgTrackingStateDepA = SBPMsgTrackingStateDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgTrackingStateDepB = SBPMsgTrackingStateDepB (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgTrackingStateDetailed = SBPMsgTrackingStateDetailed (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgTweet = SBPMsgTweet (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgUartState = SBPMsgUartState (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgUartStateDepa = SBPMsgUartStateDepa (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgUserData = SBPMsgUserData (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgUtcTime = SBPMsgUtcTime (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgVelEcef = SBPMsgVelEcef (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgVelEcefDepA = SBPMsgVelEcefDepA (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgVelNed = SBPMsgVelNed (decode (fromStrict (unBytes _msgSBPPayload))) m+          | _msgSBPType == msgVelNedDepA = SBPMsgVelNedDepA (decode (fromStrict (unBytes _msgSBPPayload))) m           | otherwise = SBPMsgUnknown m    put sm = do@@ -425,131 +426,131 @@     payload <- o .: "payload"     decoder msgType payload where       decoder msgType payload-        | msgType == msgAcqResult = SBPMsgAcqResult <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgAcqResultDepA = SBPMsgAcqResultDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgAcqResultDepB = SBPMsgAcqResultDepB <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgAcqSvProfile = SBPMsgAcqSvProfile <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgAgeCorrections = SBPMsgAgeCorrections <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgAlmanac = SBPMsgAlmanac <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgAlmanacGlo = SBPMsgAlmanacGlo <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgAlmanacGps = SBPMsgAlmanacGps <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBasePosEcef = SBPMsgBasePosEcef <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBasePosLlh = SBPMsgBasePosLlh <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBaselineEcef = SBPMsgBaselineEcef <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBaselineEcefDepA = SBPMsgBaselineEcefDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBaselineHeading = SBPMsgBaselineHeading <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBaselineHeadingDepA = SBPMsgBaselineHeadingDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBaselineNed = SBPMsgBaselineNed <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBaselineNedDepA = SBPMsgBaselineNedDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBootloaderHandshakeDepA = SBPMsgBootloaderHandshakeDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBootloaderHandshakeReq = SBPMsgBootloaderHandshakeReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBootloaderHandshakeResp = SBPMsgBootloaderHandshakeResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgCommandOutput = SBPMsgCommandOutput <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgCommandReq = SBPMsgCommandReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgCommandResp = SBPMsgCommandResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgCwResults = SBPMsgCwResults <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgCwStart = SBPMsgCwStart <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgDeviceMonitor = SBPMsgDeviceMonitor <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgDgnssStatus = SBPMsgDgnssStatus <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgDops = SBPMsgDops <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgDopsDepA = SBPMsgDopsDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisDepA = SBPMsgEphemerisDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisDepB = SBPMsgEphemerisDepB <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisDepC = SBPMsgEphemerisDepC <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisDepD = SBPMsgEphemerisDepD <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisGlo = SBPMsgEphemerisGlo <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisGloDepC = SBPMsgEphemerisGloDepC <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisGps = SBPMsgEphemerisGps <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisGpsDepE = SBPMsgEphemerisGpsDepE <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisSbas = SBPMsgEphemerisSbas <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgEphemerisSbasDepA = SBPMsgEphemerisSbasDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgExtEvent = SBPMsgExtEvent <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFcnsGlo = SBPMsgFcnsGlo <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFileioReadDirReq = SBPMsgFileioReadDirReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFileioReadDirResp = SBPMsgFileioReadDirResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFileioReadReq = SBPMsgFileioReadReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFileioReadResp = SBPMsgFileioReadResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFileioRemove = SBPMsgFileioRemove <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFileioWriteReq = SBPMsgFileioWriteReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFileioWriteResp = SBPMsgFileioWriteResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFlashDone = SBPMsgFlashDone <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFlashErase = SBPMsgFlashErase <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFlashProgram = SBPMsgFlashProgram <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFlashReadReq = SBPMsgFlashReadReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFlashReadResp = SBPMsgFlashReadResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgFwd = SBPMsgFwd <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgGpsTime = SBPMsgGpsTime <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgGpsTimeDepA = SBPMsgGpsTimeDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgGroupDelay = SBPMsgGroupDelay <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgGroupDelayDepA = SBPMsgGroupDelayDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgHeartbeat = SBPMsgHeartbeat <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgIarState = SBPMsgIarState <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgImuAux = SBPMsgImuAux <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgImuRaw = SBPMsgImuRaw <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgInitBase = SBPMsgInitBase <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgIono = SBPMsgIono <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgLog = SBPMsgLog <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgMaskSatellite = SBPMsgMaskSatellite <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgNapDeviceDnaReq = SBPMsgNapDeviceDnaReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgNapDeviceDnaResp = SBPMsgNapDeviceDnaResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgNdbEvent = SBPMsgNdbEvent <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgNetworkStateReq = SBPMsgNetworkStateReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgNetworkStateResp = SBPMsgNetworkStateResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgObs = SBPMsgObs <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgObsDepA = SBPMsgObsDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgObsDepB = SBPMsgObsDepB <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgObsDepC = SBPMsgObsDepC <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgPosEcef = SBPMsgPosEcef <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgPosEcefDepA = SBPMsgPosEcefDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgPosLlh = SBPMsgPosLlh <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgPosLlhDepA = SBPMsgPosLlhDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgPrintDep = SBPMsgPrintDep <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgReset = SBPMsgReset <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgResetDep = SBPMsgResetDep <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgResetFilters = SBPMsgResetFilters <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSetTime = SBPMsgSetTime <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsReadByIndexDone = SBPMsgSettingsReadByIndexDone <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsReadByIndexReq = SBPMsgSettingsReadByIndexReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsReadByIndexResp = SBPMsgSettingsReadByIndexResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsReadReq = SBPMsgSettingsReadReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsReadResp = SBPMsgSettingsReadResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsRegister = SBPMsgSettingsRegister <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsSave = SBPMsgSettingsSave <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSettingsWrite = SBPMsgSettingsWrite <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSpecan = SBPMsgSpecan <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgStmFlashLockSector = SBPMsgStmFlashLockSector <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgStmUniqueIdReq = SBPMsgStmUniqueIdReq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgSvConfigurationGps = SBPMsgSvConfigurationGps <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgThreadState = SBPMsgThreadState <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgTrackingIq = SBPMsgTrackingIq <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgTrackingState = SBPMsgTrackingState <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgTrackingStateDepA = SBPMsgTrackingStateDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgTrackingStateDepB = SBPMsgTrackingStateDepB <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgTrackingStateDetailed = SBPMsgTrackingStateDetailed <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgTweet = SBPMsgTweet <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgUartState = SBPMsgUartState <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgUartStateDepa = SBPMsgUartStateDepa <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgUserData = SBPMsgUserData <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgUtcTime = SBPMsgUtcTime <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgVelEcef = SBPMsgVelEcef <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgVelEcefDepA = SBPMsgVelEcefDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgVelNed = SBPMsgVelNed <$> pure (decode (fromStrict payload)) <*> parseJSON obj-        | msgType == msgVelNedDepA = SBPMsgVelNedDepA <$> pure (decode (fromStrict payload)) <*> parseJSON obj+        | msgType == msgAcqResult = SBPMsgAcqResult <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgAcqResultDepA = SBPMsgAcqResultDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgAcqResultDepB = SBPMsgAcqResultDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgAcqSvProfile = SBPMsgAcqSvProfile <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgAgeCorrections = SBPMsgAgeCorrections <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgAlmanac = SBPMsgAlmanac <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgAlmanacGlo = SBPMsgAlmanacGlo <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgAlmanacGps = SBPMsgAlmanacGps <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBasePosEcef = SBPMsgBasePosEcef <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBasePosLlh = SBPMsgBasePosLlh <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBaselineEcef = SBPMsgBaselineEcef <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBaselineEcefDepA = SBPMsgBaselineEcefDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBaselineHeading = SBPMsgBaselineHeading <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBaselineHeadingDepA = SBPMsgBaselineHeadingDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBaselineNed = SBPMsgBaselineNed <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBaselineNedDepA = SBPMsgBaselineNedDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBootloaderHandshakeDepA = SBPMsgBootloaderHandshakeDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBootloaderHandshakeReq = SBPMsgBootloaderHandshakeReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBootloaderHandshakeResp = SBPMsgBootloaderHandshakeResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgBootloaderJumpToApp = SBPMsgBootloaderJumpToApp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgCommandOutput = SBPMsgCommandOutput <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgCommandReq = SBPMsgCommandReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgCommandResp = SBPMsgCommandResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgCwResults = SBPMsgCwResults <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgCwStart = SBPMsgCwStart <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgDeviceMonitor = SBPMsgDeviceMonitor <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgDgnssStatus = SBPMsgDgnssStatus <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgDops = SBPMsgDops <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgDopsDepA = SBPMsgDopsDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisDepA = SBPMsgEphemerisDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisDepB = SBPMsgEphemerisDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisDepC = SBPMsgEphemerisDepC <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisDepD = SBPMsgEphemerisDepD <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisGlo = SBPMsgEphemerisGlo <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisGloDepA = SBPMsgEphemerisGloDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisGloDepB = SBPMsgEphemerisGloDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisGloDepC = SBPMsgEphemerisGloDepC <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisGps = SBPMsgEphemerisGps <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisGpsDepE = SBPMsgEphemerisGpsDepE <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisSbas = SBPMsgEphemerisSbas <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgEphemerisSbasDepA = SBPMsgEphemerisSbasDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgExtEvent = SBPMsgExtEvent <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFcnsGlo = SBPMsgFcnsGlo <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFileioReadDirReq = SBPMsgFileioReadDirReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFileioReadDirResp = SBPMsgFileioReadDirResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFileioReadReq = SBPMsgFileioReadReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFileioReadResp = SBPMsgFileioReadResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFileioRemove = SBPMsgFileioRemove <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFileioWriteReq = SBPMsgFileioWriteReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFileioWriteResp = SBPMsgFileioWriteResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFlashDone = SBPMsgFlashDone <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFlashErase = SBPMsgFlashErase <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFlashProgram = SBPMsgFlashProgram <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFlashReadReq = SBPMsgFlashReadReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFlashReadResp = SBPMsgFlashReadResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgFwd = SBPMsgFwd <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgGpsTime = SBPMsgGpsTime <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgGpsTimeDepA = SBPMsgGpsTimeDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgGroupDelay = SBPMsgGroupDelay <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgGroupDelayDepA = SBPMsgGroupDelayDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgHeartbeat = SBPMsgHeartbeat <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgIarState = SBPMsgIarState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgImuAux = SBPMsgImuAux <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgImuRaw = SBPMsgImuRaw <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgInitBase = SBPMsgInitBase <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgIono = SBPMsgIono <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgLog = SBPMsgLog <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgM25FlashWriteStatus = SBPMsgM25FlashWriteStatus <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgMaskSatellite = SBPMsgMaskSatellite <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgNapDeviceDnaReq = SBPMsgNapDeviceDnaReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgNapDeviceDnaResp = SBPMsgNapDeviceDnaResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgNdbEvent = SBPMsgNdbEvent <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgNetworkStateReq = SBPMsgNetworkStateReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgNetworkStateResp = SBPMsgNetworkStateResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgObs = SBPMsgObs <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgObsDepA = SBPMsgObsDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgObsDepB = SBPMsgObsDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgObsDepC = SBPMsgObsDepC <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgPosEcef = SBPMsgPosEcef <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgPosEcefDepA = SBPMsgPosEcefDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgPosLlh = SBPMsgPosLlh <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgPosLlhDepA = SBPMsgPosLlhDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgPrintDep = SBPMsgPrintDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgReset = SBPMsgReset <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgResetDep = SBPMsgResetDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgResetFilters = SBPMsgResetFilters <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSetTime = SBPMsgSetTime <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsReadByIndexDone = SBPMsgSettingsReadByIndexDone <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsReadByIndexReq = SBPMsgSettingsReadByIndexReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsReadByIndexResp = SBPMsgSettingsReadByIndexResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsReadReq = SBPMsgSettingsReadReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsReadResp = SBPMsgSettingsReadResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsRegister = SBPMsgSettingsRegister <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsSave = SBPMsgSettingsSave <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSettingsWrite = SBPMsgSettingsWrite <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSpecan = SBPMsgSpecan <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgStmFlashLockSector = SBPMsgStmFlashLockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgStmUniqueIdReq = SBPMsgStmUniqueIdReq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgStmUniqueIdResp = SBPMsgStmUniqueIdResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgSvConfigurationGps = SBPMsgSvConfigurationGps <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgThreadState = SBPMsgThreadState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgTrackingIq = SBPMsgTrackingIq <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgTrackingState = SBPMsgTrackingState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgTrackingStateDepA = SBPMsgTrackingStateDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgTrackingStateDepB = SBPMsgTrackingStateDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgTrackingStateDetailed = SBPMsgTrackingStateDetailed <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgTweet = SBPMsgTweet <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgUartState = SBPMsgUartState <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgUartStateDepa = SBPMsgUartStateDepa <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgUserData = SBPMsgUserData <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgUtcTime = SBPMsgUtcTime <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgVelEcef = SBPMsgVelEcef <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgVelEcefDepA = SBPMsgVelEcefDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgVelNed = SBPMsgVelNed <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj+        | msgType == msgVelNedDepA = SBPMsgVelNedDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj         | otherwise = SBPMsgUnknown <$> parseJSON obj   parseJSON _ = mzero  (<<>>) :: Value -> Value -> Value-(Object a) <<>> (Object b) = Object (a <> b)-(Object a) <<>> _          = Object a-_          <<>> (Object b) = Object b-_          <<>> v          = v+(<<>>) a b = fromMaybe Null $ do+  a' <- preview _Object a+  b' <- preview _Object b+  return $ review _Object $ a' <> b'  instance ToJSON SBPMsg where   toJSON (SBPMsgAcqResult n m) = toJSON n <<>> toJSON m
src/SwiftNav/SBP/Navigation.hs view
@@ -32,11 +32,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/Ndb.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types import SwiftNav.SBP.Gnss
src/SwiftNav/SBP/Observation.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types import SwiftNav.SBP.Gnss
src/SwiftNav/SBP/Piksi.hs view
@@ -26,11 +26,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types import SwiftNav.SBP.Gnss
src/SwiftNav/SBP/Settings.hs view
@@ -28,11 +28,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/System.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
src/SwiftNav/SBP/TH.hs view
@@ -34,11 +34,11 @@          where            payload = toStrict $ encode m            len     = fromIntegral $ length payload-           encoded = Msg $(varE msgType) senderID len payload 0+           encoded = Msg $(varE msgType) senderID len (Bytes payload) 0     |]  -- | Derive JSON stripping out prefixes of the implemented type. makeJSON :: String -> Name -> Q [Dec] makeJSON prefix = deriveJSON defaultOptions-  { fieldLabelModifier = fromMaybe prefix . stripPrefix prefix+  { fieldLabelModifier = ap fromMaybe $ stripPrefix prefix   }
src/SwiftNav/SBP/Tracking.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types import SwiftNav.SBP.Gnss
src/SwiftNav/SBP/Types.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards   #-} {-# LANGUAGE TemplateHaskell   #-}-{-# LANGUAGE OverloadedStrings #-}  -- | -- Module:      SwiftNav.SBP.Types@@ -19,27 +19,32 @@   ( module SwiftNav.SBP.Types   ) where -import BasicPrelude            hiding (lookup)-import Control.Lens            hiding ((.=))-import Data.Aeson              hiding (decode, decode')+import BasicPrelude+import Control.Lens             hiding ((.=))+import Data.Aeson import Data.Binary import Data.Binary.Get import Data.Binary.Put+import Data.ByteString.Base64   as Base64 import Data.ByteString.Builder+import Data.Text.Encoding+import Data.Text.Encoding.Error import SwiftNav.CRC16-import SwiftNav.Encoding       ()  -- | Denotes the start of frame transmission. For v1.0, always 0x55.--- msgSBPPreamble :: Word8 msgSBPPreamble = 0x55  -- | Default sender ID. Intended for messages sent from the host to -- the device.--- defaultSender :: Word16 defaultSender = 0x42 +-- | Wrapper around ByteString for *JSON and Binary typeclass instances.+newtype Bytes = Bytes+  { unBytes :: ByteString+  } deriving ( Show, Read, Eq )+ -- | Packet structure for Swift Navigation Binary Protocol (SBP). -- -- Definition of the over-the-wire message framing format and packet@@ -48,7 +53,6 @@ -- to transmit solutions, observations, status and debugging -- messages, as well as receive messages from the host operating -- system.--- data Msg = Msg   { _msgSBPType    :: !Word16     -- ^ Uniquely identifies the type of the payload contents@@ -58,7 +62,7 @@     -- number   , _msgSBPLen     :: !Word8     -- ^ Byte-length of the payload field-  , _msgSBPPayload :: !ByteString+  , _msgSBPPayload :: !Bytes     -- ^ Binary data of the message, as identified by Message Type and     -- Length. Usually contains the in-memory binary representation of     -- a C struct (see documentation on individual message types)@@ -75,7 +79,7 @@     _msgSBPType    <- getWord16le     _msgSBPSender  <- getWord16le     _msgSBPLen     <- getWord8-    _msgSBPPayload <- getByteString $ fromIntegral _msgSBPLen+    _msgSBPPayload <- fmap Bytes $ getByteString $ fromIntegral _msgSBPLen     _msgSBPCrc     <- getWord16le     return Msg {..} @@ -83,19 +87,14 @@     putWord16le   _msgSBPType     putWord16le   _msgSBPSender     putWord8      _msgSBPLen-    putByteString _msgSBPPayload+    putByteString (unBytes _msgSBPPayload)     putWord16le   _msgSBPCrc -checkCrc :: Msg -> Word16-checkCrc Msg {..} =-  crc16 $ toLazyByteString $-    word16LE _msgSBPType   <>-    word16LE _msgSBPSender <>-    word8 _msgSBPLen       <>-    byteString _msgSBPPayload+instance FromJSON Bytes where+  parseJSON = withText "ByteString" (pure . Bytes . Base64.decodeLenient . encodeUtf8)  instance FromJSON Msg where-  parseJSON (Object v) = do+  parseJSON (Object v) =     Msg <$> v .: "msg_type"         <*> v .: "sender"         <*> v .: "length"@@ -103,6 +102,9 @@         <*> v .: "crc"   parseJSON _ = mzero +instance ToJSON Bytes where+  toJSON = toJSON . decodeUtf8With ignore . Base64.encode . unBytes+ instance ToJSON Msg where   toJSON Msg {..} = object     [ "preamble" .= msgSBPPreamble@@ -115,8 +117,15 @@  -- | Class of generic representation of specialized SBP messages into -- SBP message frames.--- class Binary a => ToSBP a where     -- | Convert an SBP message record that is serializable and a two-byte     -- senderID to a binary into an SBP message frame.     toSBP :: a -> Word16 -> Msg++checkCrc :: Msg -> Word16+checkCrc Msg {..} =+  crc16 $ toLazyByteString $+    word16LE _msgSBPType   <>+    word16LE _msgSBPSender <>+    word8 _msgSBPLen       <>+    byteString (unBytes _msgSBPPayload)
src/SwiftNav/SBP/User.hs view
@@ -24,11 +24,9 @@ import Data.Binary.Get import Data.Binary.IEEE754 import Data.Binary.Put-import Data.ByteString import Data.ByteString.Lazy    hiding (ByteString) import Data.Int import Data.Word-import SwiftNav.Encoding       () import SwiftNav.SBP.TH import SwiftNav.SBP.Types 
test/Test.hs view
@@ -1,15 +1,13 @@ {-# LANGUAGE NoImplicitPrelude #-}  import           BasicPrelude-import qualified Test.SwiftNav.CRC16    as CRC16-import qualified Test.SwiftNav.Encoding as Encoding+import qualified Test.SwiftNav.CRC16 as CRC16 import           Test.Tasty  tests :: TestTree tests =   testGroup "Tests"     [ CRC16.tests-    , Encoding.tests     ]  main :: IO ()
test/Test/SwiftNav/CRC16.hs view
@@ -6,7 +6,7 @@   ) where  import BasicPrelude-import SwiftNav.Internal+import SwiftNav.CRC16 import Test.Tasty import Test.Tasty.HUnit 
− test/Test/SwiftNav/Encoding.hs
@@ -1,40 +0,0 @@-{-# OPTIONS -fno-warn-orphans  #-}-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}--module Test.SwiftNav.Encoding-  ( tests-  ) where--import           BasicPrelude-import qualified Data.Aeson            as A-import           Data.ByteString       as BS-import           SwiftNav.Internal     ()-import           Test.QuickCheck-import           Test.Tasty-import           Test.Tasty.HUnit-import           Test.Tasty.QuickCheck as QC--instance Arbitrary BS.ByteString where-    arbitrary = BS.pack <$> arbitrary-    shrink xs = BS.pack <$> shrink (BS.unpack xs)--instance CoArbitrary BS.ByteString where-    coarbitrary = coarbitrary . BS.unpack--testParse :: TestTree-testParse =-  testGroup "Empty Test"-    [ testCase "Empty data" $ do-        (A.decode . A.encode $ ("dddd" :: BS.ByteString)) @?= Just ("dddd" :: BS.ByteString)-    ]--testRoundtrip :: TestTree-testRoundtrip = QC.testProperty "Aeson" prop-  where prop ws = (A.decode . A.encode $ (ws :: BS.ByteString)) === Just (ws :: BS.ByteString)--tests :: TestTree-tests = testGroup "Roundtrip JSON serialization"-        [ testRoundtrip-        , testParse-        ]