我在快速检测附近的蓝牙设备名称(人名,而不是BTADDR)时遇到问题 我在这里发现了一个非常有趣的基于Python的项目[http://code.google.com/p/python-bluetooth-scanner/],但问题基本上是,虽然寻找BTADDR和RSSI很快,检测到“人类“设备名称需要更长时间(即使他们说它应该在代码中工作)
我知道我可以通过以下方式查找姓名:
-
sock = bluetooth.bluez._gethcisock(device)
timeoutms = int(timeout * 1000)
try:
name = bluetooth._bluetooth.hci_read_remote_name( sock, address, timeoutms )
except bluetooth._bt.error, e:
print e
logger.debug("Lookup Failed")
name = None
sock.close()
return name
一个简短的见解:系统使用2个加密狗来检测附近的BT设备,如果我让他们查找名称,他们花费更多的时间因此保持锁定,当发现新设备时,设备仍然锁定在寻找以前的名字和整个软件挂起。 我在WindowsXP环境中的VirtualBox和一些BT 2.1加密狗中运行Ubuntu 10.10。
除了创建一个“未命名”设备列表,一旦我的加密狗完成以前的设备,我就会查找。你知道我能做得更快吗?
答案 0 :(得分:2)
查找远程设备的友好名称通常需要两个步骤。首先,您执行查询扫描“发现”可发现的附近设备。其次,你需要连接到 远程设备并“询问”它的友好名称。部分延迟来自于这两个步骤通常不以交错方式执行的事实(即,发现设备然后查询名称)。通常,您运行查询扫描直到完成(这需要一段时间),然后您询问特定设备的友好名称。 (要交错发现和名称查找,您将开始发现,等到您“发现”新设备,取消发现,查询名称,然后重新启动发现。重复直到找不到新设备。有些堆栈执行这会自动为你服务。有些人不会。)
如果两个设备都支持扩展查询响应(在蓝牙2.1规范中添加),则友好名称将作为发现过程的一部分返回。这会大大加快速度,但需要在堆栈中进一步支持。