NFC

Last-modified: 2015-11-25 (水) 18:55:40

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シリーズのハードウェアの差異

Android

Android 2.3 以降でNFC対応機種。

ソフトウェア

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 に書き換え


※ ×のケースでは以下のように表示された。

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まで出ている。状況が変わっているかもしれない。


その他のリーダーの対応状況


参考

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
    • ドライバの対応状況不明。
    • シリアル番号取得については、公開されている技術資料を見る限り、実現するコマンドが無さそう。