BlueZ 远程设备存在
BlueZ remote device presence
使用BlueZ,其中
is the official Linux Bluetooth stack
我想知道以下两种方法中哪一种更适合检测附近是否存在设备。
更准确地说,我想定期扫描蓝牙设备(不是 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
也连接到远程设备并向它发送某种请求以取回其名称?
回答您的问题:-
对于远程设备,这些方法中哪种更好(耗电更少)?如果有任何区别。
l2ping BTMAC 是更合适的命令,纯粹是因为这是它的目的。 "hcitool name BTMAC" 用于获取远程设备的名称,而 "l2ping" 用于检测它的存在,这正是您想要实现的。功耗差异真的很小,但如果有的话l2ping应该更耗电。
我要减小 l2ping 的大小吗?最小值是多少?
如果更改 l2ping 大小需要修改源代码,那么我建议保持不变。保持不变,您将使用已被无数次使用的相同命令以及用于限定 BlueZ 堆栈的相同命令。这样出错的机会就会减少,并且任何更改都不会导致明显的性能或功率改进。
我的假设是否正确 hci_read_remote_name 也连接到远程设备并向它发送某种请求以取回其名称?
是的,你的假设是正确的。根据蓝牙规范 v5.2,第 4 卷,E 部分,第 7.1.19 节远程名称请求命令:
If no connection exists between the local device and the device
corresponding to the BD_ADDR, a temporary Link Layer connection will
be established to obtain the LMP features and name of the remote
device.
希望对您有所帮助。
使用BlueZ,其中
is the official Linux Bluetooth stack
我想知道以下两种方法中哪一种更适合检测附近是否存在设备。 更准确地说,我想定期扫描蓝牙设备(不是 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
也连接到远程设备并向它发送某种请求以取回其名称?
回答您的问题:-
对于远程设备,这些方法中哪种更好(耗电更少)?如果有任何区别。
l2ping BTMAC 是更合适的命令,纯粹是因为这是它的目的。 "hcitool name BTMAC" 用于获取远程设备的名称,而 "l2ping" 用于检测它的存在,这正是您想要实现的。功耗差异真的很小,但如果有的话l2ping应该更耗电。
我要减小 l2ping 的大小吗?最小值是多少?
如果更改 l2ping 大小需要修改源代码,那么我建议保持不变。保持不变,您将使用已被无数次使用的相同命令以及用于限定 BlueZ 堆栈的相同命令。这样出错的机会就会减少,并且任何更改都不会导致明显的性能或功率改进。
我的假设是否正确 hci_read_remote_name 也连接到远程设备并向它发送某种请求以取回其名称?
是的,你的假设是正确的。根据蓝牙规范 v5.2,第 4 卷,E 部分,第 7.1.19 节远程名称请求命令:
If no connection exists between the local device and the device corresponding to the BD_ADDR, a temporary Link Layer connection will be established to obtain the LMP features and name of the remote device.
希望对您有所帮助。