はじめに
ここではJavaでFeliCaのカード情報を読み取ることを行います.
環境
- FeliCa リーダ: Sony社製 RC-S380
- OS: Windows10
- JDK: 1.8.0
- IDE: IntelliJ IDEA
手順
基本的には下記サイトを基本的に沿って行いました.
JavaでRC-S380(PaSoRi)を使ってFelicaを読んでみる
https://qiita.com/sarumonera/items/993b396dd992dc351682
上記の記事により,必要となったライブラリを下に示します.
上記のサイトに加え,下のことを行う必要がありました.
- WinUSBドライバの追加
- usb4javaのための設定(properties)を追加
- プログラムの一部修正
準備
まずはRC-S380をUSBに接続してください.
WinUSBドライバの追加
今回の方法ではusb4javaライブラリを使い,USB接続したRC-S380を制御します.このusb4javaライブラリはlibusbを使っています.このlibusbライブラリを使う上では,RC-S380をWinUSBドライバで動かす必要があるようです.話がややこしくなってきたのですが,要するにWinUSBをインストールしてくださいということです.そのためには下記のZadigというアプリを使うと簡単に行えます.
Zadig
Zadigはインストール必要はなく,ダウンロードしたらすぐに使えるタイプのアプリです.さて,まずはZadigを立ち上げ,Optionsメニューの中にあるList All Devicesを選択してください.
USBにRC-S380が接続されているなら,下の図のように「RC-S380/P」(純正のSONYドライバをインストールした場合には「NFC Port/PaSoRi 100 USB」と表示)があるはずですのでこれを選びます.
下の図では,もともとはインストールされているドライバであるsonyfcport100c(v1.5.9.1)(①)が入っている様子を表しています.これを置き換える形でWinUSB(②)をインストールします.WinUSBを選択後,Replace Driverというボタン(③)を押してください.
usb4javaのための設定(properties)を追加
usb4javaライブラリを使うには,次のようなファイルをプロジェクト内に置く必要があります.ファイル名はjavax.usb.propertiesです.
javax.usb.services = org.usb4java.javax.Services
このファイルのプロジェクト内の置き場所は,ソースが置かれているディレクトリのトップです.
プログラムの一部修正
最初の紹介したサイトにあるプログラムで概ね動くのですが,一部を修正します.その理由は,このサイトにも書かれているように,どうしても動かないところをLow level API(libusb)を使っていますが,うまく修正するとHigh Level API(javax.usb)のみで動作することが分かったからです.具体的には次のように修正します.
- RCS380.javaの34~36行目をコメントアウト
- RCS380.javaの80行目を次のようにする
//this.iface.claim(); this.iface.claim (new UsbInterfacePolicy(){ @Override public boolean forceClaim(UsbInterface usbInterface){ return true; } });
この修正により,Low Level APIを全く使うことなしに動作させることができました.
終わりに
この手の情報はたくさんありそうにもかかわらず,丸2日ほどかかってしまいました.このため,備忘録としてここに書いておきます.