2015-08-29 3 views
5

Я пишу библиотеку на C/C++ для устройства с низким энергопотреблением Bluetooth. До сих пор я использовал интерфейс D-Bus, выставленный Bluez, и смог обнаружить, подключиться и связаться с устройством.Blue повторно подключить устройства

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

Таким образом, решение будет состоять в том, чтобы прослушивать рекламные пакеты и подключаться, когда обнаружено известное устройство. Хорошие люди на #bluez сказали мне, что это уже реализовано, и способ сделать это - зарегистрировать объект, который реализует GattProfile1 с помощью метода GattManager1 RegisterProfile. Попытка этого не дала результата, устройство остается отключенным после сбоя связи. Он также очень плохо документирован, поэтому есть хороший шанс, что я что-то пропустил.

Мои вопросы: Правильное ли решение? Будет ли он обеспечивать бесперебойную и быструю переподключение? Если это так, что может быть неправильным?

ответ

2

Если вы хотите подключиться к одному Bluetooth-устройству, вы можете контролировать состояние соединения, получив org.freedesktop.DBus.Properties.PropertiesChanged и позвонив по телефону org.bluez.Device1.Connect для повторного подключения при необходимости. Так как это будет тайм-аут, вы можете положить Connect() внутри цикла, который вы выйдете, только если свойство org.bluez.Device1.Connected истинно.

Имеет ли первоначальный автор это еще для нескольких устройств, реализуя GattProfile1?

Смежные вопросы