2015-08-29 12 views
5

Ich schreibe eine Bibliothek in C/C++ für ein Bluetooth Low Energy-Gerät. Bisher habe ich die D-Bus-Schnittstelle von Bluez verwendet und war in der Lage zu erkennen, zu verbinden und mit dem Gerät zu kommunizieren.Bluez automatisch wiederverbinden Geräte

Wenn das Gerät jedoch aufgrund eines Verbindungsfehlers getrennt wird oder sich außerhalb des zulässigen Bereichs befindet, ist die erneute Verbindung nicht trivial. Idealerweise möchte ich ausstehende Verbindungen zu allen nicht verbundenen Geräten erstellen können, aber Bluez scheint das nicht zu unterstützen. Es scheint, dass Bluez nur einen simultanen Verbindungsanruf unterstützt, der nach 15-20 Sekunden ausläuft.

Eine Lösung wäre also, auf Werbepakete zu warten und eine Verbindung herzustellen, wenn ein bekanntes Gerät erkannt wird. Die guten Leute von #bluez haben mir gesagt, dass dies bereits implementiert wurde, und die Vorgehensweise besteht darin, ein Objekt zu registrieren, das GattProfile1 mit der RegisterProfile-Methode GattManager1 implementiert. Wenn Sie dies versuchen, ergab das kein Ergebnis, das Gerät bleibt nach einem Verbindungsfehler getrennt. Es ist auch sehr schlecht dokumentiert, also besteht eine gute Chance, dass ich etwas verpasst habe.

Meine Fragen sind: Ist das die richtige Lösung? Wird es eine nahtlose und schnelle Wiederverbindung ermöglichen? Wenn es ist, was kann falsch sein?

Antwort

2

Wenn Sie die Verbindung zu einem einzelnen Bluetooth-Gerät wiederherstellen möchten, können Sie den Verbindungsstatus überwachen, indem Sie org.freedesktop.DBus.Properties.PropertiesChanged empfangen und org.bluez.Device1.Connect anrufen, um bei Bedarf eine Verbindung herzustellen. Da dies eine Zeitüberschreitung verursacht, können Sie Connect() in eine Schleife einfügen, die Sie nur beenden, wenn die org.bluez.Device1.Connected-Eigenschaft wahr ist.

Hat der ursprüngliche Autor dies bereits für mehrere Geräte durch Implementierung von GattProfile1 geschafft?

Verwandte Themen