【发布时间】:2020-05-04 17:20:22
【问题描述】:
使用BlueZ,其中
是官方的 Linux 蓝牙协议栈
我想知道以下两种方法中哪一种更适合检测附近是否存在设备。 更准确地说,我想定期扫描蓝牙设备(不是 BLE => 不发送广告包)。
我找到了两种检测方法:
1.) 使用 l2ping
# l2ping BTMAC
2.) 使用 hcitool
# hcitool name BTMAC
两种方法都有效。
我想知道,哪种方法会消耗更多被扫描设备的电池?
查看解决方案 #1 (l2ping's source):
它使用标准套接字connect 调用连接到远程设备,然后使用send 命令向它发送数据:
send(sk, send_buf, L2CAP_CMD_HDR_SIZE + size, 0)
现在,L2CAP_CMD_HDR_SIZE 是 4,默认 size 是 44,所以一共发送了 48 个字节,然后用 L2CAP_ECHO_REQ 接收回来。
对于 hcitool,我刚刚找到了入口点:
int hci_read_remote_name(int dd, const bdaddr_t *bdaddr, int len, char *name, int to);
我的问题:
- 对于远程设备,这些方法中哪一种更好(功耗更低)?如果有什么不同的话。
- 我应该减小 l2ping 的大小吗?最低限度是多少?
- 我的假设是否正确,即
hci_read_remote_name也连接到远程设备并向其发送某种请求以取回其名称?
【问题讨论】: