通过btmgmt修改蓝牙扫描参数

通过btmgmt修改蓝牙扫描参数

我正在扫描动态修改其有效负载的 ble 信标广告。因此,我希望尽可能少地错过广告。

我目前通过bluetoothctl 和wireshark 监控扫描输出。我的信标每 10 秒广播一次,在 3 个通道中每个通道发送 2 条消息。

目标是在其中一个通道上至少捕获两条消息一次。

目前,我面临长达 20 或 30 秒的间隔,但没有成功接收到任何内容。

我做什么:

bluetoouthctl ,打开“扫描”

wireshark,在蓝牙上监听各自的蓝牙设备

在研究“btmgmt”后我注意到以下行为:

hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
[mgmt]# 

我对扫描间隔或窗口没有进行任何更改。似乎发现是按以下方式打开和关闭的:10 秒打开,5 秒关闭。

这意味着,总有 5 秒的时间范围我基本上是盲目的。

知道如何改变这种行为吗?

最好的,

答案1

Bluez utils 使用 MGMT 内核接口(不是 HCI),该接口很简单,在底层实现了一些逻辑,并且无法提供与 HCI 相同的功能(即:无法运行连续被动扫描)。

使用内核 MGMT 接口启动的扫描(发现)仅持续 10 秒(在蓝牙内核模块中定义)。然后 Bluez 会收到扫描结束的通知,并且 Bluez 会重新启动扫描(如果设置了发现过滤器,则立即重新启动扫描,否则会在 5 秒后重新启动扫描)

解决方案:

  • 使用 HCI 接口(命令hcitool lescan工作正常 - 使用它的源代码作为参考或找到现成的库)
  • 修改蓝牙内核模块,使用 Bluez 设置任何 discoveryFilter(即:RSSI -127)。

相关内容