2013/12/15

[nfc]HCEの動作確認をしたい (1)

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)はかざしたタグの特徴。
昔整理した表だと、こうなっていた。

image

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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。