{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NoImplicitPrelude #-} -- | -- Module: Data.RTCM3.SBP -- Copyright: Copyright (C) 2016 Swift Navigation, Inc. -- License: LGPL-3 -- Maintainer: Swift Navigation -- Stability: experimental -- Portability: portable -- -- RTCMv3 to SBP Conversions. module Data.RTCM3.SBP ( converter , newStore ) where import BasicPrelude import Data.Conduit import Data.IORef import Data.RTCM3 import qualified Data.RTCM3.SBP.Ephemerides as Ephemerides import qualified Data.RTCM3.SBP.Observations as Observations import qualified Data.RTCM3.SBP.Positions as Positions import Data.RTCM3.SBP.Types import SwiftNav.SBP -- | Convert an RTCM message into possibly multiple SBP messages. -- converter :: MonadStore e m => RTCM3Msg -> Conduit i m [SBPMsg] converter = \case (RTCM3Msg1002 m _rtcm3) -> Observations.converter m (RTCM3Msg1004 m _rtcm3) -> Observations.converter m (RTCM3Msg1010 m _rtcm3) -> Observations.converter m (RTCM3Msg1012 m _rtcm3) -> Observations.converter m (RTCM3Msg1005 m _rtcm3) -> Positions.converter m (RTCM3Msg1006 m _rtcm3) -> Positions.converter m (RTCM3Msg1019 m _rtcm3) -> Ephemerides.converter m _rtcm3Msg -> mempty -- | Setup new storage for converter. -- newStore :: MonadIO m => m Store newStore = liftIO $ Store <$> newIORef mempty <*> newIORef mempty