diff options
| -rw-r--r-- | src/IWlib.hsc | 75 | ||||
| -rw-r--r-- | src/Plugins/Monitors/Wireless.hs | 2 | ||||
| -rw-r--r-- | xmobar.cabal | 3 | 
3 files changed, 3 insertions, 77 deletions
| diff --git a/src/IWlib.hsc b/src/IWlib.hsc deleted file mode 100644 index b244510..0000000 --- a/src/IWlib.hsc +++ /dev/null @@ -1,75 +0,0 @@ ------------------------------------------------------------------------------ --- | --- Module      :  IWlib --- Copyright   :  (c) Jose A Ortega Ruiz --- License     :  BSD-style (see LICENSE) --- --- Maintainer  :  Jose A Ortega Ruiz <jao@gnu.org> --- Stability   :  unstable --- Portability :  unportable --- ---  A partial binding to iwlib --- ------------------------------------------------------------------------------ - -{-# LANGUAGE CPP, ForeignFunctionInterface, EmptyDataDecls #-} - - -module IWlib (WirelessInfo(..), getWirelessInfo) where - -import Foreign -import Foreign.C.Types -import Foreign.C.String - -data WirelessInfo = WirelessInfo { wiEssid :: String,  wiQuality :: Int } -                  deriving Show - -#include <iwlib.h> - -data WCfg -data WStats -data WRange - -foreign import ccall "iwlib.h iw_sockets_open" -  c_iw_open :: IO CInt - -foreign import ccall "unistd.h close" -  c_iw_close :: CInt -> IO () - -foreign import ccall "iwlib.h iw_get_basic_config" -  c_iw_basic_config :: CInt -> CString -> Ptr WCfg -> IO CInt - -foreign import ccall "iwlib.h iw_get_stats" -  c_iw_stats :: CInt -> CString -> Ptr WStats -> Ptr WRange -> CInt -> IO CInt - -foreign import ccall "iwlib.h iw_get_range_info" -  c_iw_range :: CInt -> CString -> Ptr WRange -> IO CInt - -getWirelessInfo :: String -> IO WirelessInfo -getWirelessInfo iface = -  allocaBytes (#size struct wireless_config) $ \wc -> -  allocaBytes (#size struct iw_statistics) $ \stats -> -  allocaBytes (#size struct iw_range) $ \rng -> -  withCString iface $ \istr -> do -    i <- c_iw_open -    bcr <- c_iw_basic_config i istr wc -    str <- c_iw_stats i istr stats rng 1 -    rgr <- c_iw_range i istr rng -    c_iw_close i -    if bcr < 0 then return WirelessInfo { wiEssid = "", wiQuality = 0 } else -      do hase <- (#peek struct wireless_config, has_essid) wc :: IO CInt -         eon <- (#peek struct wireless_config, essid_on) wc :: IO CInt -         essid <- if hase /= 0 && eon /= 0 then -                    do let e = (#ptr struct wireless_config, essid) wc -                       peekCString e -                  else return "" -         q <- if str >= 0 && rgr >=0 then -                do qualv <- xqual $ (#ptr struct iw_statistics, qual) stats -                   mv <- xqual $ (#ptr struct iw_range, max_qual) rng -                   let mxv = if mv /= 0 then fromIntegral mv else 1 -                   return $ fromIntegral qualv / mxv -              else return 0 -         let qv = round (100 * (q :: Double)) -         return WirelessInfo { wiEssid = essid, wiQuality = min 100 qv } -    where xqual p = let qp = (#ptr struct iw_param, value) p in -            (#peek struct iw_quality, qual) qp :: IO CChar diff --git a/src/Plugins/Monitors/Wireless.hs b/src/Plugins/Monitors/Wireless.hs index 26ded2d..eeef9a9 100644 --- a/src/Plugins/Monitors/Wireless.hs +++ b/src/Plugins/Monitors/Wireless.hs @@ -17,7 +17,7 @@ module Plugins.Monitors.Wireless (wirelessConfig, runWireless)  where  import System.Console.GetOpt  import Plugins.Monitors.Common -import IWlib +import Network.IWlib  newtype WirelessOpts = WirelessOpts    { qualityIconPattern :: Maybe IconPattern diff --git a/xmobar.cabal b/xmobar.cabal index 9fa4cf2..854f7e3 100644 --- a/xmobar.cabal +++ b/xmobar.cabal @@ -158,7 +158,8 @@ executable xmobar      if flag(with_iwlib) || flag(all_extensions)         extra-libraries: iw -       other-modules: IWlib, Plugins.Monitors.Wireless +       build-depends: iwlib >= 0.1.0 && < 0.2 +       other-modules: Plugins.Monitors.Wireless         cpp-options: -DIWLIB      if flag(with_mpd) || flag(all_extensions) | 
