libnfcでpollingができたのでlibnfc-llcpでLLCPしようとしていたのだが、それは早まりすぎだ。
まずはlibnfcでDEPだけがちゃんとできることを確認せねば。
[ターゲット側]
$ nfc-dep-target
Connected to NFC device: PN532 (/dev/ttyUSB0) - PN533 v1.48 (0x07)
NFC device will now act as: D.E.P. (undefined baud rate) target:
NFCID3: 12 34 56 78 9a bc de ff 00 00
BS: 00
BR: 00
TO: 00
PP: 01
General Bytes: 12 34 56 78
Waiting for initiator request...
[イニシエータ側]
$ nfc-dep-initiator
Connected to NFC device: Sony / RC-S370/P - PN533 v1.48 (0x07)
D.E.P. (212 kbps) target:
NFCID3: 12 34 56 78 9a bc de ff 00 00
BS: 00
BR: 00
TO: 0e
PP: 32
General Bytes: 12 34 56 78
Sending: Hello World!
・・・反応なし。
P906iを近づけるとLEDが光るので、搬送波はちゃんと出ているようだ。
どのレベルでかはわからないが、DEPできていないようだ。
ログをとりながら調べていこうとしたのだが、PCDの自動検索が邪魔をして、2台接続での確認が難しい。
まずは指定したデバイスを使用するようなlibnfcに仕立てる方が先だ。
nfc_connect()の引数がNULLだと検索し、そうでない場合は引数のデータを使って接続するようだ。
引数の型はnfc_device_desc_t。
めんどくさいので、自動検索した結果を利用することにしよう。
acDevice : PN532 (/dev/ttyUSB0)
pcDriver : PN532_UART
acPort : /dev/ttyUSB0
uiSpeed : 115200
uiBusIndex : 32767
acDevice : Sony / RC-S370/P
pcDriver : PN53x USB
acPort :
uiSpeed : 0
uiBusIndex : 3
UARTの方はいいのだが、USBはuiBusIndexが挿すところによって変わってくるな・・・。
USBだけは探すようにした方がよさそうだ。
ログを見ていくと、targetはTgInitAsTargetを、initiatorはInJumpForDEPをしている。
initiatorはtargetを212KbpsのDEPだ、と認識しているようだ。これは意図通り。
targetはinitiatorを212KbpsのFeliCaだ、と認識しているようだ。これは意図通りではない。
TgInitAsTargetのModeが、どのデータを参照しているのかがわかっていない。
212Kbps、というのは実際に無線通信した結果なのだろう。
では、DEPビットとかFeliCa/MIFAREビットはどうやってみているのか。
FeliCa/MIFAREは、SYNCコードなんかでわかりそうだ。
しかし、NFC-DEPはNFC-AかNFC-Fのフレームとしてやってくる。
だから無線だけではDEPかどうかわからんと思うのだ。
プロトコル解析が必要になってくると思う。
ATR_REQをパラメータとして受け取っているのだが、それだけではだめということか。
InJumpForDEPがどうやってDEPかどうか見分けているかというと・・・戻り値が来たかどうか。
DEPのためのコマンドだから、それがエラーにならず応答したらDEPだ、という考え方のようだ。
どうしてもちらつくのが「RC-S956ではパラメータのフォーマットが違うのでは」という思いだ。
試しに、TgInitAsTargetの戻りがATR_REQだった場合は、無理矢理DEPとみなすようにした。
そしたら、一応終了した。そらそうだな。
うーん、これからどう進めたものか・・・。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。