LLCPのシーケンスがわからんごとなってきたが、なぜここまでシーケンスの資料がないのだろうか?
思い当たったのは、LLC副層だ。
LLCPで検索していると、IEEE 802.2という規格が引っかかっていた。
あまり気にしていなかったのだが、「基礎から学ぶWindowsネットワーク LLCプロトコル」を見ると、LLCPでよく使われる「SAP」とか「N(S)」なんかが出てきている。
うーん、説明が少ないのは、既存のIEEE 802.2と一緒だから省略したということだろうか。
LLCについては、以下のページが詳しくわかりやすかった。
Network Analysis
http://www.cam.hi-ho.ne.jp/puffin/compendium/J_L1-LLC.html
ConnectionlessとかConnection-orientedなんかも同じだ。
Type IとかType IIとかは、Link Service ClassesのClass 1, Class 2と対応しそう。
NRMやABMなんて用語も説明があんまりなかったのだが、LLCから来ているのだろう。
読んだが・・・LLCPのConnection-orientedとの関連づけができんかった。
802.2には、LLCPの「CONNECT」に相当するものがよくわからない。
Normal Operation開始時には「5.8 Symmetry Procedure」の初期化をするようになっているが、これがABMになるという意味で、802.2の「SABME」になるのだろうか。
うーーん・・・
そういえば、NPPも同じような実装になっていたなあ、と検索してみると興味深い話があった。
https://launchpad.net/nfcpy/+announcement/8271
nfcpyだ。
読んだ感じからすると、nfcpyがサーバ動作をしているとき、symmetry packetを交換しないとうまくいかなかった、ということのようだ。
symmetry packetは、SYMM PDUのことだろうか。
http://www.libnfc.org/community/topic/401/p2p-communication-between-android-phone-and-nfc-reader/
こっちは、libnfcのフォーラム。
ターゲットになってNexus Sと通信しているログが出ている。
GeneralBytesを送信後、TgGetDataするとCONNECT PDUを受け取っているようだ。
この話は、コメントをいただいた件と一致している。
送信するNDEFメッセージがないときはSYMM PDUを送る、という文のあとで、送信するNDEFメッセージができるとCONNECT PDUを送る、とある。
そうか、そういうことなのか!
私はてっきり、CONNECTしたあとでSYMMを交換し合うフェーズになると思っていたのだが、Android端末を向かい合わせた時点で送るものがあろうとなかろうと「5.6.3 Connection Establishment」の手前まで実行し、送るものが出てくるまではSYMMをやりとりして待つ、ということなのだ。
送信するデータができれば自分からCONNECT PDUを投げるし、先に相手からCONNECTが来たらデータ受信側になる、と。
nstは送りたいNDEFメッセージを最初から持っているので、相手からCONNECTが来ると「私は送るものがあるんだから拒否」ということでDMを投げるのだろう。
つまり、開始まではこういうシーケンスになるということだと思う。
まだ間違ってるところはあるかもしれんが、この数日悩んでいたことに理屈が付いて、すっきりだ。
多分それ正解です…きっと。
返信削除やることない時で、タイムアウトするわけではないならシムで繋いどけ、とどっかで見たような。
Androidビームの動作は、重ね合わせた時点でDEPまでつないでシムを延々と出し合い、送りて側のユーザが画面タップした時点でコネクト動作を開始するはず。
おお、そうですか。
返信削除情報もらってたので、ようやくたどりつけたようです。
ありがとうございます。
願わくは、同じ問題で悩む人が出ませんように。。。