packages feed

emhell-0.1.1.0: src/EmHell/SVD/Query.hs

module EmHell.SVD.Query
  ( getRegWithAddr
  ) where

import Data.SVD (Device, Register)
import qualified Data.SVD.Util

-- | Get @Register@ and its address
-- based on peripheral name and device
getRegWithAddr
  :: String -- ^ Peripheral name
  -> String -- ^ Register name
  -> Device
  -> Either String (Register, Int)
getRegWithAddr pName rName dev =
  let
    reg =
      Data.SVD.Util.getPeriphReg
        pName
        rName
        dev
    regAddr =
      Data.SVD.Util.getPeriphRegAddr
        pName
        rName
        dev
  in
    case (reg, regAddr) of
      (Right r, Right ra) -> Right (r, ra)
      (_, _) -> Left "Register not found"