Java で Felica いじり
あけましておめでとうございます + ひさびさの更新。
今年の目標は「健康第一、すべて自己責任」。うちらの仕事はカラダが資本。普段の生活も大事にしつつ、がんばろうと思ってる次第です。今後とも4649お願いいたします。
という年始エントリ。完全に出遅れた。
さいきん自分のまわりでハードとの連携してるのをよく見る。
以前からfelica連携でなんかやろうと思ってたので pasori 買ってきてさっそく実験。
まず pasori とは。
「FeliCaポート/パソリ」はFeliCaを利用した非接触ICカードを読み書きできるUSB対応リーダー/ライターです。
と 公式ページ に書いてありますね。
見た目こんなかんじのやつです。
pasori ⇔ java は、JNA + felicalib.dll を使用させていただいて制御。
ソースはいろんなところに転がってるのとだいたい同じ感じ。
目新しいことは何もしてなかったりします(汗)
まずはdllの読込。
public interface FelicaLib extends Library { // felicalib.dll FelicaLib INSTANCE = (FelicaLib) Native.loadLibrary("felicalib", FelicaLib.class); Pointer pasori_open(String dummy); void pasori_close(Pointer pasoriHandle); int pasori_init(Pointer pasoriHandle); Pointer felica_polling(Pointer pasoriHandle, short systemCode, byte rfu, byte timeSlot); void felica_free(Pointer felicaHandle); void felica_getidm(Pointer felicaHandle, byte[] buf); }
pasoriの上のedyの入ったカードを置いて以下を実行。
Idmをこんなかんじで適当に取得してみる。
/** ワイルドカード */ public static short SYSTEM_CODE_ANY = (short)0xffff; /** edy */ public static short SYSTEM_CODE_EDY = (short)0xfe00; public static void main(String[] args) { Pointer pasoriHandle = null; Pointer felicaHandle = null; try { // pasoriHandle取得(接続) pasoriHandle = FelicaLib.INSTANCE.pasori_open(null); // pasori初期化 FelicaLib.INSTANCE.pasori_init(pasoriHandle); // felicaHandle取得 felicaHandle = FelicaLib.INSTANCE.felica_polling( pasoriHandle, SYSTEM_CODE_ANY, (byte) 0, (byte) 0); // Idm取得 byte[] buf = new byte[8]; FelicaLib.INSTANCE.felica_getidm(felicaHandle, buf); } catch (Exception e) { e.printStackTrace(); } finally { if(felicaHandle != null) { FelicaLib.INSTANCE.felica_free(felicaHandle); } if(pasoriHandle != null) { FelicaLib.INSTANCE.pasori_close(pasoriHandle); } } }
clubDAMのカード(edy付)のIDmがさくっととれた。あと、おサイフケータイ(au iida G9)も成功。
次はCで制御してみる。C書くのひさしぶり。