packages feed

fuyu-gpio-0.0.9.0: src/Fuyu/GPIO/Line/Unsafe.hs

-- |
-- Module      : Fuyu.GPIO.Line.Unsafe
-- Description : Unsafe manual resource allocation for line settings, config, and requests.
-- Maintainer  : BassGT
-- Stability   : experimental
-- Portability : POSIX (Linux gpiod v2)
--
-- Manual resource allocation ('newSettings', 'freeSettings', 'newConfig', 'freeConfig',
-- 'requestLines', 'releaseRequest') for line settings, configs, and requests.
module Fuyu.GPIO.Line.Unsafe
  ( -- * Types
    Chip
  , Settings
  , Config
  , Request
  , RequestConfig

    -- * Unsafe Manual Resource Allocation
  , newSettings
  , freeSettings
  , newConfig
  , freeConfig
  , requestLines
  , releaseRequest
  ) where

import qualified Fuyu.GPIO.Direct as D
import Fuyu.GPIO.Exception
import Fuyu.GPIO.Types

-- | Allocate a new line settings object.
-- Must be manually freed with 'freeSettings'.
newSettings :: IO Settings
newSettings = unwrapOrThrow LineSettingsNewFailed D.lineSettingsNew

-- | Free a line settings object.
freeSettings :: Settings -> IO ()
freeSettings = D.lineSettingsFree

-- | Allocate a new line configuration object.
-- Must be manually freed with 'freeConfig'.
newConfig :: IO Config
newConfig = unwrapOrThrow LineConfigNewFailed D.lineConfigNew

-- | Free a line configuration object.
freeConfig :: Config -> IO ()
freeConfig = D.lineConfigFree

-- | Request GPIO lines from a chip.
-- Must be manually released with 'releaseRequest'.
requestLines :: Chip -> Maybe RequestConfig -> Config -> IO Request
requestLines chip maybeReqConf lineConf =
  unwrapOrThrow LineRequestFailed (D.chipRequestLines chip maybeReqConf lineConf)

-- | Release a line request handle.
releaseRequest :: Request -> IO ()
releaseRequest = D.lineRequestRelease