hiro99ma blog

Something technical

ble: gattlib (4)

2025/04/06

はじめに

前回の続きで gattlib で BLE の central 操作するのを検討している。

BLEのスキャンはできているが、接続がときどき失敗する。
前回、リトライすることで対処したのだが、それはそれとして理由を調べよう。

ble_scan の概略

ble_task() で mutex している範囲は gattlib_adapter_scan_enable() が終わるまで(※1-a ~ ※1-b。以下 ※1)だ。
もう1つの接続要求は gattlib_connect() の始めから終わりまで(※2-a ~ ※2-b。以下 ※2)。
なので、※1 のスキャンが終わるまでは ※2 の接続要求がブロックされるはずだ。
そして ※2 はスレッドなので複数の BLE機器 の分が立ち上がっているかもしれないが、それぞれの ※2 がブロックし合うのでこれも衝突しないはずだ。
コードから見える部分に関しては問題ないようだ。

それでも HCI レベルでは処理が混ざっているということは、 gattlib 以下でブロックし切れていないところがあるのだろう。 ブロックし切れていないというより、処理が終わるはずのところが下側でちょっとだけ続いていたとかだろうか。

なんとなくだけど、ble_scan や gattlib、Bluez ではなくデバイスドライバとかそういうところに原因があるんじゃないかなあ、という気がしている。 単に、他でも発生するなら v0.7.2 になるまで修正されないとは思えない、というだけの理由だ。


 < Top page


コメント(Google Formへ飛びます)

GitHub

X/Twitter

Homepage