2014/10/23

[nrf51]BLE_ADVDATA_FULL_NAMEとはなんぞや

nRF51822サンプルを読み進めているが、ようやくBLEにたどり着いた。
まずは、Advertisingだ。


ble_advdata_set()を使って初期化するのだが、何をやってるのかよくわからない。
nRF51 SDKのHTMLドキュメントでは、右上の検索ボックスでもひっかからない。doxygenコメントは付いているのに・・・。

第1引数も第2引数もble_advdata_tのポインタを渡す。
最初がadvertisingのデータ、次がscan responseのデータ。
やってることは、第1引数がNULLでなければ、チェックしてエンコード。第2引数がNULLでなければ、チェックしてエンコード。エンコードした結果を使ってsd_ble_gap_adv_data_set()を呼び出す。

つまり、sd_ble_gap_adv_data_set()が本当にやりたい内容なんだけど、使うのが面倒だろうからということでラッパというか便利関数が用意されているというところだろう。


便利関数は良いとして、どういう値を入れるとどうなるのかは把握しておきたい。

いきなりつまずいたのが、これ。

advdata.name_type = BLE_ADVDATA_FULL_NAME;

なにがフルネームなんだろう?
enumで、他にNO_NAMEとSHORT_NAMEがあった。

調べたところ、AD Typeの、0x08 : <<Shortened Local Name>>か、0x09 : <<Complete Local Name>>に変換されるようだ。
ルールはいくつかあるのだが、基本的にはSHORT_NAMEならShortened Local Nameに、FULL_NAMEならComplete Local Nameに変換される。
むかし、PaSoRiが出すAdvertisingデータを眺めたことがあった
BLE機器を探すときに出てくる名前が、この名前になるということのようだ。

 

「ルールはいくつかある」と書いたが、これは名前をエンコードするときに、FULL_NAME指定しているけどAdvertisingパケットに載らないサイズになったら、勝手に切り詰めて短くしますよ、という作りになっているからだ。
詳細は、ble_advdata.hのble_advdata_set()コメントを読むが良かろう。

0 件のコメント:

コメントを投稿

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