2016-01-08 5 views
0

Я пишу приложение BLE для чтения/записи по периферийным характеристикам и использую в качестве примера синие инструменты. Одним из требований для этого является обнаружение близлежащих устройств BLE, и было бы предпочтительно, чтобы этот процесс работал на каждом запуске приложения.bluez-tools bt-adapter -d требует перезагрузки usb-ключа перед следующим использованием

Однако после использования BT-адаптер -d впервые, как этого

$ bt-adapter -d 
Searching... 
[69:F6:C6:1E:2F:B2] 
    Name: 69E90E1E 
    Alias: 69E90E1E 
    Address: 69:F6:C6:1E:2F:B2 
    Icon: (null) 
    Class: 0x0 
    LegacyPairing: 0 
    Paired: 0 
    RSSI: -63 

^C 
$ 

затем во второй раз я не получаю никаких результатов.

$ bt-adapter -d 
Searching... 
^C 
$ 

тем временем hcitool lescan находит периферийное устройство успешно.

Если я отключите и снова подключите свой BLE ключ я получаю эту ошибку:

$ bt-adapter -d 
Searching... 
Error: GDBus.Error:org.bluez.Error.NotReady: Resource Not Ready 
$ 

И после того, как я сбросить hci0

$ sudo hciconfig hci0 down 
$ sudo hciconfig hci0 up 

Открытие снова работает.

Как сохранить работу bt-адаптера -d без необходимости сброса ключа через каждый запуск приложения?

Im помощью Parallels 11 на макинтош с Ubuntu 15.10

ответ

0

Теперь, когда я исследовал bluez немного больше, я понимаю, что он хранит ранее обнаруженные устройства в кеше, и из-за этого сигнал InterfacesAdded не вызывается в ObjectManager.

Я последовал за this примером, который использует g_dbus_object_manager_get_objects перед StartDiscovery, чтобы проверить, имеют ли в кэше устройства bluez.

0

К не закрывая его с ctrl + c

Вы форсирования сканирование, чтобы остановить с помощью этого, это оставляет адаптер в плохом состоянии. Вы должны разрешить сканирование останавливаться самостоятельно, время до его остановки, и это то, что определено в параметрах сканирования. Для обнаружения устройств я бы использовал btmgmt и для функциональности, связанной с GATT gatttool или btgatt-client.