module Bindings.K8055.DigitalIn (  
  DigitalInput(..),
  readDigitalChannel,
  readAllDigital
  ) where

import Data.Word
import Foreign.C

data DigitalInput
  = DigitalIn1
  | DigitalIn2
  | DigitalIn3
  | DigitalIn4
  | DigitalIn5
  | DigitalIn6
  | DigitalIn7
  | DigitalIn8
    
digitalInputId :: Num a => DigitalInput -> a
digitalInputId input =
  case input of
    DigitalIn1 -> 1
    DigitalIn2 -> 2
    DigitalIn3 -> 3
    DigitalIn4 -> 4
    DigitalIn5 -> 5
    DigitalIn6 -> 6
    DigitalIn7 -> 7
    DigitalIn8 -> 8


foreign import stdcall unsafe "ReadDigitalChannel"
  c_ReadDigitalChannel :: CInt -> IO CInt

-- | Reads the status of the input channel
readDigitalChannel :: DigitalInput -> IO Word8
readDigitalChannel input = do
  res <- c_ReadDigitalChannel (digitalInputId input)
  return $ fromIntegral res


foreign import stdcall unsafe "ReadAllDigital"
  c_ReadAllDigital :: IO CInt

-- | Reads the status of all the input channels
readAllDigital :: IO Word8
readAllDigital = do
  res <- c_ReadAllDigital
  return $ fromIntegral res