【发布时间】: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