packages feed

libpafe 0.1.0.0 → 0.1.1.0

raw patch · 3 files changed

+39/−23 lines, 3 filesdep +transformersdep ~libpafe

Dependencies added: transformers

Dependency ranges changed: libpafe

Files

libpafe.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                libpafe-version:             0.1.0.0+version:             0.1.1.0 synopsis:            Wrapper for libpafe description:         Wrapper for Pasori library libpafe license:             GPL-2@@ -26,25 +26,29 @@   -- other-modules:          -- other-extensions:       build-depends:       base >=4.6 && <4.8+                      ,transformers   extra-libraries:     pafe    hs-source-dirs:      src   default-language:    Haskell2010  Test-Suite test-read-    type:              exitcode-stdio-1.0-    main-is:           tests/test-read.hs+  type:              exitcode-stdio-1.0+  main-is:           tests/test-read.hs   build-depends:       base >=4.6 && <4.8-                      ,libpafe+                      ,libpafe >= 0.1.1.0                       ,bytestring                       ,iconv+                      ,transformers >= 0.4.3.0+  default-language:    Haskell2010  Test-Suite test-read-fcf-    type:              exitcode-stdio-1.0-    main-is:           tests/test-read-fcf.hs+  type:              exitcode-stdio-1.0+  main-is:           tests/test-read-fcf.hs   build-depends:       base >=4.6 && <4.8-                      ,libpafe+                      ,libpafe >= 0.1.1.0                       ,bytestring                       ,iconv+  default-language:    Haskell2010  
src/Bindings/Libpafe/Pasori.hsc view
@@ -2,6 +2,7 @@ module Bindings.Libpafe.Pasori (   pasoriPrepare  ,pasoriClose+ ,withPasori ) where  #include <libpafe/libpafe.h>@@ -10,6 +11,9 @@ import Foreign.Ptr import Foreign.C.Types import Bindings.Libpafe.Types+import Control.Monad.Trans.Maybe+import Control.Monad.IO.Class (liftIO)+import Control.Exception.Base (mask_)  pasoriPrepare :: IO (Maybe (Ptr Pasori)) pasoriPrepare = do@@ -19,6 +23,15 @@     0 -> return $ Just pasori     otherwise -> pasoriClose pasori >> return Nothing +withPasori :: (Ptr Pasori -> IO a) -- ^ IO action that uses pointer to pasori+              -> IO (Maybe a) -- ^ The result+withPasori act = mask_ $ runMaybeT $ do+  pasori <- MaybeT pasoriPrepare+  result <- liftIO $ act pasori+  liftIO $ pasoriClose pasori+  return result++pasoriClose :: Ptr Pasori -> IO()  pasoriClose = pasori_close  foreign import ccall pasori_open :: IO (Ptr Pasori)
tests/test-read.hs view
@@ -11,24 +11,23 @@ import qualified Data.ByteString.Lazy.Char8 as C import Data.Maybe import Codec.Text.IConv+import Control.Monad.Trans.Maybe+import Control.Monad.IO.Class+import Control.Monad  import System.Exit (exitFailure) -main = readPasori >>= print+main :: IO()+main = do+  felicaStr <- withPasori $ runMaybeT . readFelica+  print felicaStr+  print $ fromJust $ join felicaStr -readPasori :: IO String-readPasori = do-  maybePasori <- pasoriPrepare-  case maybePasori of-    Just pasori -> do-      maybeFelicaPtr <- felicaPolling 0xfe00 0 0 pasori -      let felicaPtr = fromJust maybeFelicaPtr-      felica <- withForeignPtr felicaPtr peek -      print "IDm is:"-      print felica-      print "PMm is:"-      print $ pmm felica-      pasoriClose pasori-      return $ show felica-    Nothing -> error "Pasori is not connected"+readFelica :: Ptr Pasori -> MaybeT IO String+readFelica pasori = do+  liftIO $ print pasori+  felicaPtr <- MaybeT $ felicaPolling 0xffff 0 0 pasori +  liftIO $ print felicaPtr+  felica <- liftIO $ withForeignPtr felicaPtr peek +  return $ show felica