はじめに

ここではJavaでFeliCaのカード情報を読み取ることを行います.

環境

手順

基本的には下記サイトを基本的に沿って行いました.

JavaでRC-S380(PaSoRi)を使ってFelicaを読んでみる

https://qiita.com/sarumonera/items/993b396dd992dc351682

上記の記事により,必要となったライブラリを下に示します.

上記のサイトに加え,下のことを行う必要がありました.

  1. WinUSBドライバの追加
  2. usb4javaのための設定(properties)を追加
  3. プログラムの一部修正

準備

まずはRC-S380をUSBに接続してください.

WinUSBドライバの追加

今回の方法ではusb4javaライブラリを使い,USB接続したRC-S380を制御します.このusb4javaライブラリはlibusbを使っています.このlibusbライブラリを使う上では,RC-S380をWinUSBドライバで動かす必要があるようです.話がややこしくなってきたのですが,要するにWinUSBをインストールしてくださいということです.そのためには下記のZadigというアプリを使うと簡単に行えます.

Zadig

https://zadig.akeo.ie/

Zadigはインストール必要はなく,ダウンロードしたらすぐに使えるタイプのアプリです.さて,まずはZadigを立ち上げ,Optionsメニューの中にあるList All Devicesを選択してください.

01

 

USBにRC-S380が接続されているなら,下の図のように「RC-S380/P」(純正のSONYドライバをインストールした場合には「NFC Port/PaSoRi 100 USB」と表示)があるはずですのでこれを選びます.

02

 

下の図では,もともとはインストールされているドライバであるsonyfcport100c(v1.5.9.1)(①)が入っている様子を表しています.これを置き換える形でWinUSB(②)をインストールします.WinUSBを選択後,Replace Driverというボタン(③)を押してください.

03

 

usb4javaのための設定(properties)を追加

usb4javaライブラリを使うには,次のようなファイルをプロジェクト内に置く必要があります.ファイル名はjavax.usb.propertiesです.

javax.usb.services = org.usb4java.javax.Services

このファイルのプロジェクト内の置き場所は,ソースが置かれているディレクトリのトップです.

04

 

プログラムの一部修正

最初の紹介したサイトにあるプログラムで概ね動くのですが,一部を修正します.その理由は,このサイトにも書かれているように,どうしても動かないところをLow level API(libusb)を使っていますが,うまく修正するとHigh Level API(javax.usb)のみで動作することが分かったからです.具体的には次のように修正します.

//this.iface.claim();
this.iface.claim (new UsbInterfacePolicy(){
    @Override
    public boolean forceClaim(UsbInterface usbInterface){
        return true;
    }
});

 この修正により,Low Level APIを全く使うことなしに動作させることができました.

終わりに

この手の情報はたくさんありそうにもかかわらず,丸2日ほどかかってしまいました.このため,備忘録としてここに書いておきます.