わからんかったシリーズだ。
ZephyrでBLEの簡単なことはできるようになったのだが、どんな感じで無線が飛んでいるのか見てみたいときもあるだろう。
そういうときはパケットスニファが便利だ。
私はTIのスニファを使っているのだが、接続後の無線を見たい場合は、チャネルを選んでAdvertisingから接続を待ち受けている。
そして、別のチャネルで接続開始された場合は切断して、またやり直す。
と、非常に効率が悪い。
もっといいやり方もあるのかもしれんのだが、使いこなせていない。
それで、私はAdvertisingするチャネルを制限させる、という方法を使っていた。
hiro99ma blog: [nrf51]特定CHへのAdvertisingを止める(デバッグ)
https://hiro99ma.blogspot.com/2015/11/nrf51chadvertising.html
ZephyrとはいえNordicの部分はNordicがサポートしているようなので、同じような手法が使えるんではなかろうか。
上記の記事は、S110 SoftDevice v8.0.0のときだった。
もう4年も前のことで、手元にあったS132(SDK15)を見てみると、ch_37_off、みたいなメンバがいなくなっていた。
今は配列になっているようだ。
typedef uint8_t ble_gap_ch_mask_t[5];
8bit * 5 = 40ということで、1bitが1chを指しているようである。
[0]のbit0がch0と同じなのかな?
zephyrのv2.0.0-rc1をchannel_maskでgrepすると、残念ながらたくさん出てきた。
さらに残念なことに、たぶん全部PPI関係のようだ。
あきらめて「37」で検索すると、これはこれでたくさん出てくる。。。
が、ようやくそれっぽいものを見つけた。
modules/lib/openthread/third_party/NordicSemiconductor/softdevice/s140/headers/ble_gap.h
なんだ、nRF SDKと同じファイル名ではないか。。。
そしてchannel_maskだったので、単にさっき見逃しただけのようである。
しかし・・・もともとnRF SDKでもchannel_maskはユーザアプリから触れる変数ではなかった。
ble_advertising_start()ならアクセスできるので、そこを書き換えていたのだ。
そして、もっと根本的な問題として、このファイルは使われているのだろうか?というものがある。
openthreadとなっているけど、zephyrのGitHubではなく、west updateで取得したものなのだ。
channel_maskを持っているble_gap_adv_params_tでgrepしたが、そのヘッダファイルしか出てこなかった。
残念だ。。。
ならば、advertisingの開始辺りを見てみればよいかと思ったが、よくわからん。
nRF SDKだとGAPだったのだが、subsys/bluetooth/host/hci_core.cあたりにあるようだ。
たぶんset_advertise_enable()だと思っている。あるいは手前のbt_le_adv_start_internal()か。
だが、ソースをぱっと見ても追えそうな気がしなかった。
残念だが、今回はあきらめよう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。