packages feed

udev-0.1.1.0: examples/monitor.hs

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

import Control.Monad (forever)
import Control.Concurrent (threadWaitRead)

import System.UDev.Context
import System.UDev.Device
import System.UDev.Monitor

dumpDeviceInfo :: Device -> IO ()
dumpDeviceInfo dev = do
  print $ getSubsystem dev
  print $ getDevtype   dev
  print $ getSyspath   dev
  print $ getSysname   dev
  print $ getSysnum    dev
  print $ getDevnode    dev
  print $ getAction    dev
  putStrLn $ "device number: " ++ show (getDevnum dev)

main :: IO ()
main = withUDev $ \ udev -> do
  setLogPriority udev LogDebug
  setLogger udev defaultLogger
  monitor <- newFromNetlink udev UDevId
  enableReceiving monitor
  fd <- getFd monitor
  forever $ do
    threadWaitRead fd
    dev <- receiveDevice monitor
    dumpDeviceInfo dev