packages feed

libpafe-0.1.0.0: tests/test-read-fcf.hs

module Main where

import Bindings.Libpafe.Pasori
import Bindings.Libpafe.Types
import Bindings.Libpafe.Felica
import Prelude hiding (splitAt)
import Foreign.Ptr
import Foreign.Storable
import Foreign.ForeignPtr
import Data.ByteString.Lazy
import qualified Data.ByteString.Lazy.Char8 as C
import Data.Maybe
import Codec.Text.IConv

import System.Exit (exitFailure)

main = readPasori >>= print

readPasori :: IO ByteString
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
      maybeBlockWord <- withForeignPtr felicaPtr $ felicaReadSingle 0 0x1A8B 1
      maybeBlockWord2 <- withForeignPtr felicaPtr $ felicaReadSingle 0 0x1A8B 0
      let cardId = fcfId $ convert "EUCJP" "UTF8" $ pack $ fromJust maybeBlockWord2
      pasoriClose pasori
      return cardId
    Nothing -> error "Pasori is not connected"

fcfId = snd . splitAt 2 . fst . splitAt 9