Bluetooth BlueZ远程设备存在

Bluetooth BlueZ远程设备存在,bluetooth,bluez,Bluetooth,Bluez,使用,哪个 是正式的Linux蓝牙协议栈 我想知道以下两种方法中哪一种更适合检测附近设备的存在。 更确切地说,我想定期扫描蓝牙设备(不是BLE=>不发送广告包) 我发现了两种检测方法: 1.)使用l2ping # l2ping BTMAC 2.)使用hcitool # hcitool name BTMAC 这两种方法都有效 我想知道,哪种方法会消耗扫描设备的更多电池 查看解决方案#1(): 它使用标准套接字connect调用连接到远程设备,然后使用send命令向其发送数据: send(sk,

使用,哪个

是正式的Linux蓝牙协议栈

我想知道以下两种方法中哪一种更适合检测附近设备的存在。 更确切地说,我想定期扫描蓝牙设备(不是BLE=>不发送广告包)

我发现了两种检测方法:

1.)使用l2ping

# l2ping BTMAC
2.)使用hcitool

# hcitool name BTMAC
这两种方法都有效

我想知道,哪种方法会消耗扫描设备的更多电池

查看解决方案#1():

它使用标准套接字
connect
调用连接到远程设备,然后使用
send
命令向其发送数据:

send(sk, send_buf, L2CAP_CMD_HDR_SIZE + size, 0)
现在,
L2CAP\u CMD\u HDR\u SIZE
为4,默认值
SIZE
为44,因此总共发送48个字节,并通过
L2CAP\u ECHO\u REQ
接收回来

对于hcitool,我刚刚找到了入口点:

int hci_read_remote_name(int dd, const bdaddr_t *bdaddr, int len, char *name, int to);
我的问题是:

  • 以下哪种方法对远程设备更好(功耗更低)?如果有什么区别的话
  • 我要缩小L2平的尺寸吗?最低限度是多少
  • 我的假设正确吗?
    hci\u read\u remote\u name
    也连接到远程设备并向其发送某种请求以获取其名称

回答您的问题:-

以下哪种方法对远程设备更好(功耗更低)?如果有任何区别。

l2ping BTMAC是更合适的命令,因为这就是它的目的。“hcitool name BTMAC”用于获取远程设备的名称,“l2ping”用于检测其存在,这正是您想要实现的。功耗上的差异实际上是最小的,但是如果有,l2ping应该消耗更少的功耗

我要缩小L2平的尺寸吗?最低要求是多少?

如果更改l2ping大小需要修改源代码,那么我建议保持原样。让它保持不变,就是使用了无数次使用过的同一个命令和用于限定BlueZ堆栈的同一个命令。这样就减少了出错的机会,并且任何更改都不会导致显著的性能或电源改进

我的假设是否正确,hci\u read\u remote\u name也连接到远程设备,并向其发送某种请求以获取其名称?

是的,你的假设是正确的。根据蓝牙规范v5.2第4卷E部分第7.1.19节远程名称请求命令:

如果本地设备和设备之间不存在连接 与BD_ADDR相对应,将创建一个临时链路层连接 建立以获取LMP功能和远程设备的名称 装置


我希望这有帮助。

总结得很好,谢谢。减小l2ping的大小不需要重新编译,它有一个命令行选项:
-s
,但默认为44。