【问题标题】:Fast Bluetooth Name Lookup快速蓝牙名称查找
【发布时间】:2011-02-04 11:56:23
【问题描述】:

我在快速检测附近蓝牙设备的名称(人名,而不是 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。

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

【问题讨论】:

  • 你能不能让一个加密狗监视新设备,另一个查询它们的名称(可能每个都在自己的线程/进程中,所以它们不会互相阻塞)?
  • 是的,但这样我不能真正实时维护我的系统。我正在寻找更多方法来加快查找速度

标签: python bluetooth discovery


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多