packages feed

gnss-converters-0.3.40: src/Data/RTCM3/SBP/Logging.hs

{-# LANGUAGE NoImplicitPrelude #-}

-- |
-- Module:      Data.RTCM3.SBP.Logging
-- Copyright:   Copyright (C) 2018 Swift Navigation, Inc.
-- License:     LGPL-3
-- Maintainer:  Swift Navigation <dev@swiftnav.com>
-- Stability:   experimental
-- Portability: portable
--
-- RTCMv3 to SBP Loggings Conversions.

module Data.RTCM3.SBP.Logging
  ( converter
  ) where

import BasicPrelude
import Control.Lens
import Data.Bits
import Data.Conduit
import Data.RTCM3
import Data.Word
import SwiftNav.SBP

{-# ANN module ("HLint: ignore Use head"::String) #-}

-- | Derive sender from station.
--
toSender :: Word16 -> Word16
toSender station = station .|. 61568

-- | Convert an RTCM 1029 text message into an SBP MsgLog message.
--
converter :: Monad m => Msg1029 -> Conduit i m [SBPMsg]
converter m = do
  let message = m ^. msg1029_message
      sender  = toSender $ message ^. textMessage_station
      m'      = MsgLog
        { _msgLog_level = 6
        , _msgLog_text  = message ^. textMessage_text
        }
  yield [SBPMsgLog m' $ toSBP m' sender]