最近仕事で C# を使うことが多くなりまして。
NFC というか FeliCa の情報取りたいなーと使い方を調べていると、大体 FeliCa の SDK 使うことを基本に書かれている内容ばかりなのと、ID 読むだけならゴロゴロ情報はあるのですがそれ以外があまり無くて少し困ったのでメモを。
別にオープンな領域に書かれているモノを呼ぶのに SDK 使わなくたってできるでしょ?カード側からそれを受け取るコマンド送れば終わりでしょ?4時間もあれば終わるでしょ。
なんて迂闊なことを行ってしまって見事にハマってしまいました。
今回のメモは FeliCa の非暗号化部分を読み込むところがメインです。
書かれているパラメータの意味は PC/SC や FeliCa の仕様書を読んでみてください。
FeliCaのオープンな部分を読むだけとはいえ、なんかあれこれ煩いことになるのも面倒なのでソースまでは公開してません。
PC/SC をお話するのは PC/SC-Sharp を使っています。
Async な Task を組んだり、Monitor の実装があったり、P/Invoke 周りやデータの変換諸々が非常に楽になります。
PCSC-Sharp
FeliCaの仕様
PC/SCの仕様
SmartCardの作法
方法
2種類のAPDUをTransmitする。
1種類目
CLA = 0xFF
Ins = 0xA4
P1 = 0x00
P2 = 0x01
Data = 0x090F
2種類目
CLA = 0xFF
Ins = 0xB0
P1 = 0x00
P2 = Index
Le = 0
これで最大で20レコード分が取れます。
データ領域は Cyclic で、どこが先頭なのかは中の Sequence を見るなりして適当に Sort が必要です。
教訓
Transmit が Error じゃなくても、Status Word が 0x9000 になるまで安心しない。
Transmit は Command さえ送信出来ればエラーは帰ってこない。
送れてるけど Response がないとかの場合は Status Word のコードとにらめっこが必要。
コメント
コメントを投稿