Быстрый поиск имени Bluetooth - PullRequest
       6

Быстрый поиск имени Bluetooth

1 голос
/ 04 февраля 2011

У меня проблемы с быстрым определением имен устройств, находящихся рядом с Bluetooth (человеческие имена, а не BTADDR) Я нашел здесь очень интересный проект на основе Python [http://code.google.com/p/python-bluetooth-scanner/], но проблема в основном в том, что, хотя поиск BTADDR и RSSI происходит быстро, обнаружение «человеческого» имени устройства занимает больше времени (даже если говорят, что оно должно работать в код)

Я знаю, что могу искать имена с:

  1. простая консольная команда "hcitool scan", которая работает медленно
  2. метод bluetooth.lookup_name (address) модуля 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, если я заставляю их искать имена, они проводят больше времени, поэтому остаются заблокированными, когда обнаруживается новое устройство, устройства по-прежнему заблокированы в поиске предыдущее имя и вся программа зависает. Я использую Ubuntu 10.10 в VirtualBox в среде WindowsXP и пару ключей BT 2.1.

Помимо создания списка «неназванных» устройств, которые нужно искать, как только мои ключи будут закончены с предыдущими. Вы знаете, как я мог бы сделать это быстрее?

1 Ответ

2 голосов
/ 07 февраля 2011

Поиск понятного имени для удаленного устройства обычно представляет собой двухэтапный процесс.Сначала вы выполняете сканирование запросов, «обнаруживая» находящееся поблизости устройство, которое можно обнаружить.Во-вторых, вам нужно подключиться к удаленному устройству и «спросить» его понятное имя.Часть задержки происходит из-за того, что эти два шага часто не выполняются чередующимся образом (т. Е. Устройство обнаруживается, а затем запрашивается имя).Часто вы выполняете сканирование запроса до его завершения (что занимает некоторое время), а затем запрашиваете у определенных устройств их понятные имена.(Чтобы чередовать обнаружение и поиск по имени, вы должны запустить обнаружение, подождать, пока вы не «обнаружите» новое устройство, отменить обнаружение, запросить имя, а затем перезапустить обнаружение. Повторите, пока новые устройства не найдены.это автоматически для вас. Некоторые этого не делают.)

Если оба устройства поддерживают расширенный ответ на запрос (добавлен в спецификации Bluetooth 2.1), понятное имя возвращается как часть процесса обнаружения.Это значительно ускоряет процесс, но его необходимо поддерживать дальше в стеке.

...