1

我在快速检测附近蓝牙设备的名称(人名,而不是 BTADDR)时遇到问题我在这里找到了一个非常有趣的基于 Python 的项目 [http://code.google.com/p/python-bluetooth-scanner/]但问题基本上是,虽然寻找 BTADDR 和 RSSI 很快,但检测设备的“人”名需要更长的时间(即使他们说它应该在代码中工作)

我知道我可以通过以下方式查找名称:

  1. 简单的“hcitool scan”控制台命令,速度很慢
  2. 模块 PyBlueZ 的 bluetooth.lookup_name(address) 方法
  3. 如项目中所写,报告如下

-

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。

除了创建一个“未命名”设备列表之外,一旦我的加密狗完成了以前的加密狗,就可以查找这些设备。你知道我有什么方法可以更快地做到这一点吗?

4

1 回答 1

2

查找远程设备的友好名称通常需要两个步骤。首先,您执行查询扫描“发现”可发现的附近设备。其次,您需要连接到远程设备并“询问”它的友好名称。延迟的部分原因是这两个步骤通常不是以交错的方式执行的(即,发现一个设备,然后查询名称)。通常,您会运行查询扫描直到完成(这需要一段时间),然后您会询问特定设备的友好名称。(要交错发现和名称查找,您将开始发现,等到您“发现”一个新设备,取消发现,查询名称,然后重新开始发现。重复直到找不到新设备。有些堆栈会这样做这会自动为您服务。

如果两个设备都支持扩展查询响应(在蓝牙 2.1 规范中添加),则友好名称将作为发现过程的一部分返回。这大大加快了速度,但需要在堆栈中进一步支持它。

于 2011-02-07T06:16:34.727 回答