FeliCa IDm読み取り手段
ハードウェア
USB接続ICカードリーダー
- SONY PaSoRi 約2500円
- SDK 一部無償提供
- 最新機種(RC-S380)はPC/SC対応。(S370はPC/SC対応しているがPC/SCでのFeliCa利用不可。)
- ハードウェアとしては、S380 ≠ (S370≒S330) ≠ S320 らしい。
- NTTコミュニケーションズ SCR331CL-NTTCom 約2500円
- オレンジタグス製品と同一か?
- 「オレンジダグズ社のSDKが利用可能」
- Windows PC/SC 対応
- Mac対応 (APIは何?)
- オレンジタグス SCL010(R1-1T) 約7000円
- LED有り。ソフトウェアから制御可能。
- PC/SC対応
- 技術資料は、NFC開発スタートキットの購入が必要(LED制御など、リーダーの独自機能が利用したい場合。NFC開発スタートキットで提供されるAPIを利用しない場合でも、購入することで技術資料の入手が可能。) http://www.orangetags.co.jp/orange_easy_api.html
- Advanced Card Systems (ACS) ACR122U 約4000円~8000円
- LED有り。ソフトウェアから制御可能。
- オプションでブザーあり。ソフトウェアから制御可能。
- PC/SC対応
- Mac, Linux対応??
- 技術資料、ドライバはダウンロード可。http://www.acs.com.hk/index.php?pid=drivers&id=ACR122U
- メーカーへの問合せは期待できそうにない。(サイトのWebフォームより問合せたが応答なし)
- 実物は、だいぶちゃっちい印象。RFID/NFC Real Touch Shopで展示されていた。
※ PaSoRiシリーズのハードウェアの差異
- S320が独自のコマンドセットなのに対し、S330は他のNFCリーダと同様のセットを用いる。( http://wiki.osdev.info/?FeliCa%2F%B3%AB%C8%AF%B4%C4%B6%AD )
- RC-S380はRC-S370ではない。( http://hiro99ma.blogspot.jp/2012/11/rc-s380rc-s370.html )
- 「何が違うかというと、有線コマンドが異なる。」( http://hiro99ma.blogspot.jp/2012/12/win8rc-s380.html )
Android
Android 2.3 以降でNFC対応機種。
- Nexus 7
- Huwaei Sonic U8650 1万9千~3万円
ソフトウェア
PaSoRi 独自
SONYのSDKで提供される。
- NFC API
RC-S380(最新機種)では利用不可。RC-S370ではFelica、Mifareともに利用可能。
- FALP
PaSoRi同志とか、PaSoRiとおサイフケータイとの間でデータ通信する機能(だと思う)
API仕様書見る限りIDm取得も可能そう。
- FeliCaライブラリ
無償版では利用不可。
- SDK for NFC & Adobe AIR/Adobe Flash
FlashのAction ScriptでPaSoRiにアクセスするAPI。
無償版範囲でIDm読み取りが可能かは要検証。「IDm の取得」がStandard版(有償)のみの機能として挙げられている。しかし、旧版「for FeliCa」時代にIDm読み取りに利用したAPI「FeliCaPollingAndGetCardInformationRequest/
FeliCaPollingAndGetCardInformationResponse」が「for NFC」のBasic版(無償)でも提供されていることから、無償版範囲でIDm取得は可能だと推測。
※ PC/SCはPaSoRi独自ではないので後述
※ Near Field Proximity API → これは何? FALP的なもの?
参考
オープンソース
- libpasori
PaSoRi向け。RC-S320までの対応らしい。
- libpafe
PaSoRi向け。libpasoriベースでRC-S330に追加対応。S380は不明だが、libnfcの状況から判断して望み薄と推測。
- felicalib
PaSoRi向け。Windows用で、内部的にSONYドライバを利用。IDmの読み取りだけが目的なら、SDK for NFCのFALPの利用で代替できるのではないか。
- libnfc
→ 別節で
参考
libnfc
http://nfc-tools.org/index.php?title=Libnfc
GPLで利用可能なNFC用ライブラリ。Linux, Mac OS X, Windowsで動作するとのこと。
Debian上でPaSoRiでの動作を確認してみたところ以下のとおりとなった。
libnfc libnfc 1.6.0 rc1 1.7.0 rc1 RC-S380 × × RC-S370 ○ 未確認 RC-S330 ○ ×
確認方法
- リーダーにカードを乗せ、 nfc-list コマンドでIDm(NFCID2)が表示されるか確認。
- S380では、VIDがS370と異なっており、そもそもlibnfcで認識されないため、以下のとおりソースを書き換え。
- libnfc/drivers/pn53x_usb.c
{ 0x054C, 0x02E1, SONY_RCS360, "Sony / FeliCa S360 [PaSoRi]"} → 0x02E1 を 0x06C3 に書き換え
- libnfc/drivers/pn53x_usb.c
※ ×のケースでは以下のように表示された。
error libnfc.driver.pn53x_usb Unable to write to USB (Connection timed out) error libnfc.driver.pn53x_usb Unable to write to USB (Connection timed out) NFC device: Sony / ? opened error libnfc.driver.pn53x_usb Unable to write to USB (Connection timed out)
※ 1.7.0はrc3まで出ている。状況が変わっているかもしれない。
その他のリーダーの対応状況
- ACR122U
http://nfc-tools.org/index.php?title=ACR122 によれば、利用可能な模様。
ただ、ハードウェア仕様上、堅牢にできないとの議論がある。Why ACR122 devices are not recommended with libnfc ?
参考
- Ubuntu 11.04 で SonyのPaSoRi (RC-S330) を使う
- Windowsでlibnfcを利用 [libnfc]TDM-GCCでビルドするとうまくいった
PC/SC (Personal computer/Smart Card)
Microsoft による Windows向けのAPI。Windows 95の時代から存在するらしい。
ソフトウェアの開発にはVisual StudioのみあればOK(ひょっとするとエディションに依存するか?)。
基本はC,C++での開発となる。C#のAPIは用意されていない模様。
Windows上のサービスがカードを監視し、状態変化があるとアプリケーションに通知される仕組み。
カードが検出されたあとは、カードを「オープン」して、コマンドを送受信する。
コマンドの送受信は、低レベルな仕組みとなっている。仕様で規程されたバイト列を構築し、送受信する。ICカードのハードウェアレベルの仕様がむき出しになっている印象を受ける。
PaSoRiでのPC/SCの利用
- 動作にはSONYのドライバがあればOK。
- RC-S330,S370, S380で利用可能。ただし、S330,S370はType Bのみ可(FeliCa不可)
- PaSoRi独自のコマンドは、SDK for NFCの「ユーザーズマニュアル PC/SC編(Lite)」に記載されている。
IDmの取得には、「3.2.6. 独自定義(拡張)コマンド」の「Get Data」の「カードUIDの取得」(P1=00)を使う。独自定義コマンドとあるが、ACR122のドキュメントでも同じコマンドとなっていることから、ある程度の共通性があるものと思われる。
PC/SCのプログラミングはEternalWindows セキュリティ/スマートカード が詳しい。
PaSoRiでIDmを読み取る例はNFC/PC_SCサンプル参照。
Windows 10 でPC/SC経由でIDm読み取りの実例がうさ☆うさ日記にある。
参照
1台のWindows PCで複数のICカードリーダーを利用する
複数のICカードリーダーを利用する場合、以下の課題がある。
- ドライバーレベルで、複数利用かのうか。
- APIが、複数のリーダーを扱うことが可能か。
- それぞれのリーダーを識別(区別)できるか。
リーダーの識別について
- SONYのSDKの場合はUSB1,USB2,...という名前が、PC/SCの場合は<機種名>0, <機種名>1,...というような名前が付く。この連番の部分と、ICカードリーダー個体との関係がPC再起動時にも維持されるかどうか、というのが問題となる。確認した範囲では、基本的に変化しうるものとして考えたほうがよさそう。USBの仕組み上不可避なのかもしれない。
- もしリーダーのシリアル番号が取得できれば、名前の代替として、リーダーの識別に利用できる。
各リーダーの対応状況
- PaSoRi
- SDK for NFC & Adobe AIR/Adobe Flashでは1台のみ。
- その他のAPIは、6台まで。
- シリアル番号は、S380では取得可能。S370以前は未確認。「SDK for NFC ユーザーズマニュアル PC/SC編(Lite)」の「3.1.1. IOCTL_PCSC_CCID_ESCAPE」「ESC_CMD_GET_INFO」「0x08 Product Serial Number」を使う。リーダー背面に印字されているS/Nが取得できる。→ NFC/PC_SCサンプル参照。
- SCL010
- 2台以上の利用は制約ない模様。
- シリアル番号は取得できる模様。
- ACR122U
- ドライバの対応状況不明。
- シリアル番号取得については、公開されている技術資料を見る限り、実現するコマンドが無さそう。