Advertisingで設定して良い間隔を調べておこう。
Core_V4.2.pdfの「[Vol 6, Part B] 4.4.2.2 Advertising Interval」だ。
実際に無線として出ていく間隔は、Advertising Intervalに0~10msecのランダムなディレイが加わった時間とのこと。
キャリアセンスせずに送信するのかな? いや、さすがにすると思うが・・・そこら辺はnRF51では制御しなくてよさそうだから忘れよう。
Advertising Intervalは、20msec~10.24secの0.625msec刻み。
だけど、以下の場合には100msec以上にせんといかん(shall)。
- scannable undirected event type
- non-connectable undirected event type
前者は「スキャン可能で、不特定」、後者は「接続不可で不特定」でよいだろう。
Advertisingの仕方は4種類あって、同じ並びに説明がある。
- [4.4.2.3]Connectable Undirected --- ADV_IND
- [4.4.2.4]Connectable Directed --- ADV_DIRECT_IND
- [4.4.2.5]Scannable Undirected --- ADV_SCAN_IND
- [4.4.2.6]Non-connectable Undirected --- ADV_NONCONN_IND
nRF51 SDKで普通にAdvertisingさせると、ADV_INDが出ていく。
ときどき、たぶんスマホからADV_SCAN_REQが来て、それにADV_SCAN_RSPを返すようだ。
でも、"Scannable"とついている訳でもないのに、なぜSCAN_REQするんだろう?
Scannable Undirectedの説明を読むと、"allows a scanner to respond with a scan request(SCAN_REQ)"とあるから、Scannableのときにだけやればいいんじゃないだろうか?
その前に、"Connectable Undirected"の説明も読んでおこう。
・・・こっちも、SCAN_REQしてよさそうだ。
もしかして、ScannableはNon-connectableだけどScannableだよ、ということなのだろうか?
CONNECT_REQのことに言及しているのが上2つだけなので、そういうことなのだろう。
では、分類し直し。
- Centralとの接続可能
- [4.4.2.3]Connectable Undirected --- ADV_IND
- [4.4.2.4]Connectable Directed --- ADV_DIRECT_IND
- Centralとの接続不可
- [4.4.2.5]Scannable Undirected --- ADV_SCAN_IND
- [4.4.2.6]Non-connectable Undirected --- ADV_NONCONN_IND
下2つはBroadcasterで、いわゆるビーコン端末と呼ばれるタイプが使うのだろう。
Advertisingパケットに全部載るなら、Non-connectable Undirected、ちょっとあふれているならScannable Undirected、というところか。
そして今まで出てこなかったConnectable Directedだが、これはたぶんnRF51 SDKが勝手にやる。
Connectionを切断した後、自動的にAdvertisingが始まってしまうのでソースを追っていったのだが、切断のコールバックされる前か後かでBLE_ADV_MODE_DIRECTEDのAdvertisingが開始されていた。
Nordicの質問サイトでも載っていて、回答が「SDKのところをいじればいけるよ」のようなことが書かれていたように記憶している(どうやって見つけたのか忘れてしまった)。
たぶん、一時的に切れたときの復旧用とかなんだろうね。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。