module System.Linux.HIDRaw
( DevInfo(..)
, devInfo
, setFeature
, getFeature
) where
import Data.Int (Int16)
import Data.Word (Word8, Word32)
import Foreign.C.Error (errnoToIOError, eOPNOTSUPP)
import Foreign.C.Types (CInt)
import Foreign.Storable
import System.IO.Error (ioError)
import System.Posix.Types (Fd)
import System.Posix.IOCtl
data DevInfo = DevInfo
{ devBustype :: Word32
, devVendor :: Int16
, devProduct :: Int16
}
instance Storable DevInfo where
sizeOf _ = (8)
alignment _ = 4
peek p = do
b <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p
v <- (\hsc_ptr -> peekByteOff hsc_ptr 4) p
i <- (\hsc_ptr -> peekByteOff hsc_ptr 6) p
return $ DevInfo b v i
poke p (DevInfo b v i) = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p b
(\hsc_ptr -> pokeByteOff hsc_ptr 4) p v
(\hsc_ptr -> pokeByteOff hsc_ptr 6) p i
data HIDIOCGRAWINFO = HIDIOCGRAWINFO
instance IOControl HIDIOCGRAWINFO DevInfo where
ioctlReq _ = 2148026371
devInfo :: Fd -> IO DevInfo
devInfo d = ioctl' d HIDIOCGRAWINFO
setFeature :: Fd -> [Word8] -> IO ()
setFeature d _ = ioError $ errnoToIOError "System.Linux.HIDRaw.setFeature" eOPNOTSUPP Nothing Nothing
getFeature :: Fd -> Int -> IO [Word8]
getFeature d _ = ioError $ errnoToIOError "System.Linux.HIDRaw.getFeature" eOPNOTSUPP Nothing Nothing