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 +11/−7
- src/Bindings/Libpafe/Pasori.hsc +13/−0
- tests/test-read.hs +15/−16
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