module Bindings.K8055.AnalogIn ( AnalogInput(..), readAnalogChannel, readAllAnalog ) where import Foreign.C import Foreign.Ptr import Foreign.Marshal import Foreign.Storable import Data.Word data AnalogInput = AnalogIn1 | AnalogIn2 analogInputId :: Num a => AnalogInput -> a analogInputId input = case input of AnalogIn1 -> 1 AnalogIn2 -> 2 foreign import stdcall unsafe "ReadAnalogChannel" c_ReadAnalogChannel :: CInt -> IO CInt -- | Reads the status of one analogue input-channel readAnalogChannel :: AnalogInput -> IO Word8 readAnalogChannel channel = do res <- c_ReadAnalogChannel (analogInputId channel) return $ fromIntegral res foreign import stdcall unsafe "ReadAllAnalog" c_ReadAllAnalog :: Ptr CInt -> Ptr CInt -> IO () -- | Reads the status of both analogue input-channels readAllAnalog :: IO (Word8, Word8) readAllAnalog = do alloca $ \ a1 -> alloca $ \ a2 -> do c_ReadAllAnalog a1 a2 a1' <- peek a1 a2' <- peek a2 return (fromIntegral a1', fromIntegral a2')