packages feed

udev-0.0.0.0: examples/monitor.hs

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

import Control.Monad
import Data.ByteString.Char8 as BC

import System.UDev.Context
import System.UDev.Device
import System.UDev.Monitor
import System.Posix.IO.Select
import System.Posix.IO.Select.Types


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

main :: IO ()
main = do
  withUDev $ \ udev -> do
    setLogPriority udev LogDebug
    setLogger udev defaultLogger
    monitor <- newFromNetlink udev udevId
    enableReceiving monitor
    fd <- getFd monitor
    forever $ do
      res <- select' [fd] [] [] Never
      case res of
        Just ([_], [], []) -> do
          dev <- receiveDevice monitor
          dumpDeviceInfo dev
        Nothing -> return ()
    return ()