module Bindings.K8055 (
getVersion,
CardAddress(..),
withDevice,
module Bindings.K8055.AnalogIn,
module Bindings.K8055.AnalogOut,
module Bindings.K8055.DigitalOut,
module Bindings.K8055.DigitalIn,
module Bindings.K8055.Counters
) where
import Foreign.C
import Control.Monad
import Bindings.K8055.AnalogIn
import Bindings.K8055.AnalogOut
import Bindings.K8055.DigitalOut
import Bindings.K8055.DigitalIn
import Bindings.K8055.Counters
data CardAddress
= Card1
| Card2
| Card3
| Card4
addressId :: Num a => CardAddress -> a
addressId address =
case address of
Card1 -> 0
Card2 -> 1
Card3 -> 2
Card4 -> 3
foreign import stdcall unsafe "Version"
c_Version :: IO CInt
getVersion :: IO Int
getVersion = do
vers <- c_Version
return $ fromIntegral vers
foreign import stdcall unsafe "OpenDevice"
c_OpenDevice :: CInt -> IO CInt
foreign import stdcall unsafe "CloseDevice"
c_CloseDevice :: IO ()
withDevice :: CardAddress -> IO a -> IO a
withDevice address action = do
ret <- c_OpenDevice (addressId address)
when (ret /= 0) (error "open device failed")
result <- action
c_CloseDevice
return result