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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。