2015/12/10

[ble]Advertisingの間隔

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 件のコメント:

コメントを投稿

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

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