packages feed

fuyu-gpio-0.0.9.0: src/Fuyu/GPIO/RequestConfig.hs

-- |
-- Module      : Fuyu.GPIO.RequestConfig
-- Description : Managed resource operations for line request configurations.
-- Maintainer  : BassGT
-- Stability   : experimental
-- Portability : POSIX (Linux gpiod v2)
--
-- Managed configuration options (consumer name, kernel event buffer size) for line requests.
module Fuyu.GPIO.RequestConfig
  ( RequestConfig
  , KernelBufferSize
  , withRequestConfig
  , setConsumer
  , consumer
  , setBufferSize
  , bufferSize
  ) where

import Control.Exception (bracket)
import Data.ByteString (ByteString)
import qualified Fuyu.GPIO.Direct as D
import Fuyu.GPIO.RequestConfig.Unsafe (newRequestConfig, freeRequestConfig)
import Fuyu.GPIO.Types

-- | Allocate a new request configuration object and free it automatically afterwards.
withRequestConfig :: (RequestConfig -> IO a) -> IO a
withRequestConfig = bracket newRequestConfig freeRequestConfig

-- | Set consumer name for request config.
setConsumer :: RequestConfig -> ByteString -> IO ()
setConsumer = D.requestConfigSetConsumer

-- | Get consumer name from request config.
consumer :: RequestConfig -> IO ByteString
consumer = D.requestConfigConsumer

-- | Set kernel event buffer size for request config. Pass 0 to use kernel default (64).
setBufferSize :: RequestConfig -> KernelBufferSize -> IO ()
setBufferSize = D.requestConfigSetEventBufferSize

-- | Get kernel event buffer size from request config.
bufferSize :: RequestConfig -> IO KernelBufferSize
bufferSize = D.requestConfigEventBufferSize