packages feed

udev-0.1.1.0: examples/hidraw.hs

{-# LANGUAGE OverloadedStrings #-}
module Main (main) where

import Data.ByteString as BS
import Data.ByteString.Char8 as BC

import System.UDev.Context
import System.UDev.Device
import System.UDev.Enumerate
import System.UDev.List


main :: IO ()
main = do
  withUDev $ \ udev -> do
    e <- newEnumerate udev
    addMatchSubsystem e "hidraw"
    scanDevices e
    Just ls <- getListEntry e
    path  <- getName ls
    print path
    dev <- newFromSysPath udev path
    print $ getDevnode dev
    mdev <- getParentWithSubsystemDevtype dev "usb" "usb_device"
    case mdev of
      Nothing   -> BC.putStrLn "unable to find parent usb device"
      Just pdev -> do
        vid <- getSysattrValue pdev "idVendor"
        pid <- getSysattrValue pdev "idProduct"
        manifacturer <- getSysattrValue pdev "manufacturer"
        productName  <- getSysattrValue pdev "product"

        BC.putStrLn $ BS.concat
          [ "VID/PID: ", vid, " "
                       , pid, "\n"
          , manifacturer, "\n"
          , productName , "\n"
--          , "serial: ",  getSysattrValue pdev "serial"
          ]
    return ()