2012/06/30

[llcp]nfcpy v.s. 自作LLCP (1)

くくく、ついにこのときが来たか。
自作の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 件のコメント:

コメントを投稿

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

注: コメントを投稿できるのは、このブログのメンバーだけです。