2011/12/04

[libnfc]TgInitAsTargetはどう動いたらいいものか

llcp-test-serverのログを見ると、TgInitAsTargetを実行後、InitiatorからATR_REQを受け取っているものの、ATR_RESを返していないようだ。
だから、clientはタイムアウトしているのだろう。

私が自分でTgInitAsTargetの動作を実装して、かざしてログインアプリをだましたときには、自前でコマンドに応答するソフトを作っていた。
libnfcではどうやってるのだろう?


では、nfc_target_init()でTgInitAsTargetを実行した後、どうすればいいのかを見ていこう。
libnfcのサンプルであるnfc-emulate-tagを動かして確認しよう。

・・・nfc_target_init()が失敗する。
FeliCaのタグとして動くように変更したのがまずかったか。
見ていったところ、FeliCaの場合にはMifare関連のパラメータを0x00として使っていた。
しかしRC-S956の使用かなんかわからんけど、SENS_RESは0x00 0x04でないと動かん。

適当に書き換えて動くようにし、P906iに入っている「iCタグリーダー」で読んでみる。
・・・対応してないタグということで、アプリがはじいた。
そのせいだと思うが、nfc-emulate-tagには変化なし。
ポーリングの段階ではじいたってことかな。

では、FALPで送りつければ何か送信するだろう。
やってみると、サービスコードの取得を行おうとしているパケットが受信できた。
が、nfc-emulate-tagは「知らんフレームがきた」ということでabort経路になり、終了。
まあ、abort経路がわかればなんとかなるだろう。

 

どうやら、TgInitAsTargetでターゲット状態になったあとは、ポーリングで受信データを確認しにいくようだ。
nfc_target_init()の引数にバッファを与えていて、そこに格納されるみたい。
コールバックじゃないんだ。。。
nfc-emulate-tagでは、target_io()の中で受信データの先頭を見て、何を返すか判断している。
考え方は、同じみたいだ。

0 件のコメント:

コメントを投稿

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