module Android.Log
( AndroidLogPriority(..)
, androidLogPrint
, android_log_print
)
where
import Control.Applicative ((<$>))
import Foreign.C.Types (CInt(..))
import Foreign.C.String
import Foreign.Marshal.Alloc
foreign import ccall "__android_log_print" android_log_print :: CInt -> CString -> CString -> IO CInt
androidLogPrint :: AndroidLogPriority -> String -> String -> IO Int
androidLogPrint prio tag msg = do
let v = prioToCInt prio
tagStr <- newCString tag
msgStr <- newCString msg
res <- fromIntegral <$> android_log_print v tagStr msgStr
res `seq` return ()
free tagStr
free msgStr
return res
data AndroidLogPriority =
AndroidLogPrioAssert
| AndroidLogPrioError
| AndroidLogPrioWarn
| AndroidLogPrioInfo
| AndroidLogPrioDebug
| AndroidLogPrioVerbose
prioToCInt :: AndroidLogPriority -> CInt
prioToCInt AndroidLogPrioAssert = 7
prioToCInt AndroidLogPrioError = 6
prioToCInt AndroidLogPrioWarn = 5
prioToCInt AndroidLogPrioInfo = 4
prioToCInt AndroidLogPrioDebug = 3
prioToCInt AndroidLogPrioVerbose = 2