AndroidのHCEだが、サンプル通りに作ったり、ネットで見た通りに作ったりしているが、とにかく動作確認ができない。
ブライテクノBlogさんの記事を見ると、もう1台Android4.4の端末を用意して、Android Beamを無効にするAPIがあるので、それを使ってR/Wにすればよいよ、とある。
hiero_adgjmptwさんのスライドもあり、これを見ればAndroid側は間違えずに済むだろう。
ではやってみよう、と思ったのだが、今月は私の手元にNexus7(2013)が1台だけしかないことを忘れていた・・・。
あきらめるのもなんだし、そもそもうちにはPaSoRiという立派なR/Wがあるのだ。
これを使わない手はなかろう。
PaSoRiを使うので、Windows + SDK for NFC Starter Kitでやることにした。
Type4Aがどんなのかわからないにしても、ライブラリがうまいことやってくれるだろう。
ベースは、以前作ったライブラリで良いだろう。
https://github.com/hirokuma/NfcStarterKitWrap
いくらType4Aといえども、元はNFC-Aだ。
ポーリング動作については変わらないはず。
C#で新規プロジェクトを作り、追加で既存のプロジェクトを選び、NfcStarterKitWrapを選択。
そして、参照させよう。
フォームにボタンを1つつけ、イベントハンドラを用意する。
namespace Type4Rw
{public partial class Type4Rw : Form{private NfcStarterKitWrap.nfc mFNS = new NfcStarterKitWrap.nfc();public Type4Rw()
{if (!mFNS.init(this)){MessageBox.Show("SDK for NFC Starter Kit fail");
Environment.Exit(0);return;
}InitializeComponent();}private void buttonPolling_Click(object sender, EventArgs e){bool b = mFNS.pollingA();
if (b)
{MessageBox.Show("OK!");
}}}}
そして、NfcStarterKitWrap.csのdetectNfcA()という関数があるので、ブレークポイントを張る。
最初にエラーチェックがあるので、そのあとがよいだろう。
止めようとしているのは、NFC-Aを検知したときのコールバック関数。
さて、Nexus7をかざすと止まるだろうか?・・・・止まった。
NFCID1は4byte。値はランダムっぽい。
ATSサイズは5バイトらしいのだけど、ATSって配列は1byte分しかない。値は0x05。
SEL_RESは0x60、SENS_RESは0x0400。
SENS_RESは、NFCID1のサイズなんかを表している。
SEL_RES(SAK)はかざしたタグの特徴。
昔整理した表だと、こうなっていた。
b5=1で、他が0なので、ISO 14443-4(RATS+PSS)、のようだ。
RATSは、Request Answer To Select Request、のことらしい。
PPSは、Protocol and Parameter Selection、のことらしい。
おっ、いったか?
いや、念のために、HCEサービスを止めて試しておかねば。
さて、かざしてみると・・・止まった(;_;)。
Android Beamを止めたとしても、LLCPとかは動いてるんだろう。
Nexus7(2012)だとNFC-FでしかLLCPなどをしていないように思っていたのだが、手元にないので自信がなくなってきた。
ともかく、R/W側ももうちょっとちゃんとType4Aとしてのシーケンスを流してやらないと、HCEが動いているかどうかの確認はできなさそうだ。
先は長いなぁ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。