【问题标题】:Bluetooth LE: scanning with whitelist?蓝牙 LE:使用白名单扫描?
【发布时间】:2021-12-15 17:14:06
【问题描述】:

我正在检查此来源以使用 BlueZ 扫描 BT LE 广告消息:

https://github.com/edrosten/libblepp/blob/master/src/lescan.cc

主要是这样做的(伪):

hci_fd=hci_open_dev(dev)
hci_le_set_scan_parameters(hci_fd, static_cast<int>(scan_type), interval, window,
                            own_type, filter_policy, 10000);

struct hci_filter nf;
hci_filter_clear(&nf);
hci_filter_set_ptype(HCI_EVENT_PKT, &nf);
hci_filter_set_event(EVT_LE_META_EVENT, &nf);
setsockopt(hci_fd, SOL_HCI, HCI_FILTER, &nf, sizeof(nf)
hci_le_set_scan_enable(hci_fd, 0x01, filter_dup, 10000);

如果我设置了硬件过滤器(通过将 filter_dup 设置为 1,我不会立即收到我想要的消息。它们仅以低频(1/分钟)出现。那是很好,因为硬件过滤会禁用重复项,我猜有一个超时,然后让它们再次进入。(在我的情况下,这似乎正好是 1 分钟)。

关闭过滤会导致大量流量进入,我只需要来自特定 mac 寻址设备所有消息。我可以以某种方式将白名单添加到扫描命令中吗?

然后它可以给我来自我想要的设备的所有数据包,而忽略其余所有数据包。

如何通过 HCI 使用 BlueZ?

【问题讨论】:

    标签: bluetooth bluetooth-lowenergy bluez hci


    【解决方案1】:

    我认为您最好的选择是过滤代码中的消息。我不知道 API 中有什么可以让它像你描述的那样在硬件级别过滤消息。

    BLE 中有一个“白名单”功能,但这与指定要连接的地址列表有关,然后让硬件自动连接到这些地址。 (听起来你实际上只想要广告包而不实际连接)

    编辑: 我想我错了……看看filter_policyhci_le_set_scan_parameters。如果是0x1,那么我认为它会根据白名单进行过滤。不过我不知道如何设置白名单。

    在尝试理解 bluez 库 C 调用时,我发现查看 hcitool 和 gatttool 的源代码非常有用。 https://github.com/bluez/bluez/blob/master/tools/hcitool.c 引用了一个“接受列表”,这似乎是您想要的。

    【讨论】:

    • 扫描时也可以使用BLE规范中的白名单。所以是的,它绝对可以在 HCI 级别上完成。我不知道 bluez 是否支持这个。
    • 不幸的是,SW 级别对我的系统的压力太大了。我需要找到将这种压力卸载(移动)到 BT HW 的方法。如果 BlueZ 不支持它(我会感到惊讶),我会修补它。谢谢你们!
    • 更新了我的答案...@Emil 是对的,我的记忆有问题。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2016-05-01
    相关资源
    最近更新 更多