くくく、ついにこのときが来たか。
自作のLLCPライブラリとnfcpyが闘うときがきた・・・。
ではなく、動作確認させていただくというところだ。
お手柔らかに。
先手、nfcpy
$ python llcp-test-server.py
searching for a usable reader
searching for a usb bus reader
chipset is a PN533 version 1.48
using Sony RC-S370/P at usb:bus-0:\\.\libusb0-0001--0x054c-0x02e1
libusb0-dll:err [_usb_reap_async] timeout error
libusb0-dll:err [_usb_reap_async] timeout error
クライアント待ちってところかな。
ってことは、こっちから送信だから、Initiatorとして動かすことになるのかな。
後手、自作LLCP。
$ ./tst
・・・InJumpForDEPでエラーになる。
携帯電話をかざすと、搬送波を出してるようだ。
うーん、Serverがポーリングしてクライアントを探すということかな。
改めて、Targetとして動かすと、ATR_REQを受け取り、GeneralBytesにLLCPのパラメータリストが載ってきているようだ。
424kbps
Active
Parameter List
VERSION : 11
agree : remote>local ==> local
Parameter List
MIUX
Parameter List
WKS : have SNEP
Parameter List
LTO : 500
Parameter List
OPT(LSC) : Class 1
自作のライブラリは、LLCP ver.1.0が使えればいいやってところ。
nfcpyはver1.1だが、これはOK。
MIUXは無視。
WKSにはSNEPが載っていたので、OK。
LTOも取得。
OPT・・・ここだ。
OPTは、オプション的なもので、v1.0ではLink Service Classesを渡せるようになっている。
この値は、こういう意味になっている。
- Class 1 : Connectionless link service only
- Class 2 : Connection-oriented link service only
- Class 3 : 両方
- unknown : まだ決めてない
私はSNEPしたいので、Connection-orientedが使えるClass 2 か Class 3だけを許容するようにしている。
しかし、nfcpyのllcp-test-serverはConnectionlessのみになっている。
だから、自作LLCPサーバは拒否して終了している。
うん、実装としては正しいんだけど、これでは動作確認できないじゃないか・・・。
じゃあ、仕方がないのでSNEPのサンプルを動かそう。
$ python snep-test-server.py
searching for a usable reader
searching for a usb bus reader
chipset is a PN533 version 1.48
using Sony RC-S370/P at usb:bus-0:\\.\libusb0-0001--0x054c-0x02e1
libusb0-dll:err [_usb_reap_async] timeout error
libusb0-dll:err [_usb_reap_async] timeout error
自作LLCPをTargetで動かして・・・。
424kbps
Active
Parameter List
VERSION : 11
agree : remote>local ==> local
Parameter List
MIUX
Parameter List
WKS : have SNEP
Parameter List
LTO : 1000
Parameter List
OPT(LSC) : Class 1
えー、これもClass 1なの??
解析の仕方間違えてるのかも。
GeneralBytesの生データを見てみよう。
[R]46
[R]66
[R]6d
これは、LLCPのMagic Number。
[R]01 VERSION
[R]01 LEN=1
[R]11 MAJOR=1 / MINOR=1
これは、VERSION。
v1.1。
[R]02 MIUX
[R]02 LEN=2
[R]03
[R]80
これはMIUX。
0x380。デフォルトの128byteとあわせて1KBよいですよ、と。
[R]03 WKS
[R]02 LEN=2
[R]00
[R]13
これはWKS。
SNEPとSDP。
[R]04 LTO
[R]01 LEN=1
[R]64
これはLTO。
1000ms。
[R]07 OPT
[R]01 LEN=1
[R]03 Class 3
そしてOPT。
・・・やっぱり解析実装ミスか(;_;)
恥ずかしいのだが、どうミスったか書いておこう。
誤:(*pBuf + xxx) & 0x03
正:*(pBuf + xxx) & 0x03
きー!
直すとちゃんと解析してくれた。やれやれ。
424kbps
Active
Parameter List
VERSION : 11
agree : remote>local ==> local
Parameter List
MIUX
Parameter List
WKS : have SNEP
Parameter List
LTO : 500
Parameter List
OPT(LSC) : Class 3
そして、nfcpyが反応した。
activated a p2p target in 424 kbps active mode
LLCP Link established, I'm the DEP Initiator
Local LLCP Settings
LLCP Version: 1.1
Link Timeout: 1000 ms
Max Inf Unit: 1024 octet
Service List: 0000000000010011
Remote LLCP Settings
LLCP Version: 1.0
Link Timeout: 2000 ms
Max Inf Unit: 128 octet
Service List: 0000000000010001
snep server bound to port 4
snep server bound to port 16
うん、渡しているパラメータも正しそうだ。
このあと、SYMMをやりとりするだけになった。
第1回目は、まあ成功したと言ってよかろう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。