2011-02-04 124 views
1

我在快速檢測附近藍牙設備的名稱(人名,而不是BTADDR)時遇到問題 我在這裏發現了一個非常有趣的基於Python的項目[http://code.google.com/p/python-bluetooth-scanner /],但問題基本上是,在尋找BTADDR和RSSI速度很快的情況下,檢測設備的「人類」名稱需要更長的時間(即使它們說它應該在代碼中工作)快速藍牙名稱查詢

我知道我可以查找與名稱:

  1. 簡單的「hcitool掃描」控制檯命令,這是緩慢的
  2. 的bluetooth.lookup_name(地址)模塊PyBlueZ的方法
  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中運行Ubuntu 10.10以及一對BT 2.1加密狗。

除了創建一個「未命名」設備的列表,只要我的加密狗完成了以前的設備。你知道我能做得更快嗎?

+0

您可以讓一個dongle監視新設備,另一個可以查詢它們的名稱(可能每個都在它自己的線程/進程中,所以它們不會彼此阻塞)? – Piskvor 2011-02-04 12:12:52

回答

2

查找遠程設備的友好名稱通常是一個兩步過程。首先,您執行查詢掃描「發現」附近可發現的設備。其次,您需要連接到遠程設備的 並「詢問」它的友好名稱。部分延遲來自事實:這兩個步驟通常不是以交錯的方式執行的(即,發現設備並且然後查詢名稱)。通常情況下,您會進行查詢掃描,直到完成(需要一段時間),然後您向具體設備詢問其友好名稱。 (要交叉發現和名稱查找,您將開始發現,等到您「發現」一個新設備,取消發現,查詢名稱,然後重新開始發現,重複直到找不到新設備。如果兩個設備都支持擴展查詢響應(在藍牙2.1規範中添加),則友好名稱將作爲發現過程的一部分返回。這大大加快了速度,但需要進一步支持。