AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung
Thema durchsuchen
Ansicht
Themen-Optionen

FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

Ein Thema von Rapunzel · begonnen am 28. Jan 2022 · letzter Beitrag vom 5. Feb 2022
Antwort Antwort
Rapunzel

Registriert seit: 1. Mär 2019
48 Beiträge
 
Delphi 11 Alexandria
 
#1

FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 28. Jan 2022, 11:33
Hallo,

mir ist beim Debuggen meiner µC Firmware ein Problem mit meiner FMX BLE App aufgefallen, dem ich auf den Grund gegangen bin, aber für das ich keine Lösung finde. Delphi11 und Windows 10.

Löse ich einen Reset des µC aus, wird auch ein Reset des ESP32 ausgelöst. Die BLE Verbindung geht dabei verloren. Auf Seiten meiner FMX App wird das Disconnect Ereignis der Bluetooth LE Komponente ausgelöst. Bis dahin alles OK. Nun ist es ist aber so, dass es teilweise zu einem automatischen Reconnect kommt, das ich niemals angestoßen habe. Das Connect Ereignis der Bluetooth LE Komponente wird ausgelöst. Jetzt hänge ich in einem halbgaren Zustand.

Wie komme ich in diesem Fall an das verbundene TBluetoothLEDevice Objekt? Die Liste der DiscoveredDevices ist ungültig.

Oder wie kann ich diese Verbindung wieder "hart" abbauen, um wieder in einen definierten Ausgangszustand zu kommen?

Gruß + Danke
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.067 Beiträge
 
Delphi 12 Athens
 
#2

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 28. Jan 2022, 12:27
Ja solche "Hänger" kenne ich zur Genüge, auch dass bei Disconnect mal Exceptions geworfen werden können,
vermutlich weil bei Disconnect nicht immer alle Characteristics sauber unsubscribed werden können.

Dass sich BLE automatische wiederverbindet ist teilweise wohl in den Phones implementiert, und ist eigentlich ein Feature, wenn man die Verbindung nicht explizit beendest bleibt sie wohl bestehen.

Um die "Hänger" abzufangen habe ich die relevanten TBluetoothLE Komponenten hart mit .Free entsorgt, und neu created.
Das funktioniert aber auch nicht immer so sauber.
Ich mache aber immer noch Grundsatz-Versuche wie man das sicherer hinbekommen kann, so dass es einfach läuft wie erwartet.
  Mit Zitat antworten Zitat
Rapunzel

Registriert seit: 1. Mär 2019
48 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 28. Jan 2022, 14:48
Danke für Dein Feedback.

Ich bin an sich sehr zufrieden mit der BLE Implementierung sowohl unter Windows als auch Android. Mein automatischer Verbindungsaufbau läuft reibenungslos über eine State machine von Scan bis zu Austausch mehrere grundlegender Commands vollautomatisch und fehlerfrei. Laufe ich in einem Timeout, was extremst selten vorkommt, wird die state machine zurückgesetzt und bleibt niemals hängen. Nur diese kurzzeitigen Unterbrechungen will ich noch in den Griff bekommen.

Funktionieren Free und Create denn ohne Exception im WinRT Unterbau, wenn diese halbgare Verbindung besteht? Kann ich das direkt hintereinander aufrufen oder sollte ich besser ein Delay einhalten?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.067 Beiträge
 
Delphi 12 Athens
 
#4

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 28. Jan 2022, 15:51
Ich beschäftige mich mehr mit Android/iOS, aber wenn da was hakt kann ich "Resetten" mit etwas Delay.
Das hatte bis jetzt keinen negativen Einfluss auf das System.
Ich mache das generell so das ich DiscoverDevices starte, mit z.B. 3500ms Timeout, und lasse parallel einen
TimeoutTimer mitlaufen, der dann z.B. um 5000ms checked ob OnEndDiscoverDevices aufgerufen wurde.
Falls nicht, ist irgendwas falsch, und ich mache einen Reset.
  Mit Zitat antworten Zitat
Rapunzel

Registriert seit: 1. Mär 2019
48 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 28. Jan 2022, 16:08
Ich danke Dir vielmals!

Free und Create funktionieren aktuell ohne Exception. Auf diese Idee wäre ich wohl nicht gekommen. CancelDiscovery habe ich vor dem Free noch aufrufen, wenn ich schon wieder einen Scan gestartet hatte. Nur DiscoverDevices möchte noch nicht automatisch wieder starten. Das werde ich noch Deinem Tipp folgend in meinen Timeout Timer auslagern. Das ist jetzt Fleißarbeit.
  Mit Zitat antworten Zitat
Rapunzel

Registriert seit: 1. Mär 2019
48 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 3. Feb 2022, 14:25
Ich hätte nicht schreiben sollen, dass soweit alles reibungslos funktioniert. Inzwischen konnte ich eigene Phänomene bei der BLE Kommunikation identifizierten, deren Ursache ich nicht kenne und auch keine Lösung weiß.

Unter WIN64 ist die Kommunikation signifikant langsamer als wenn ich die App als WIN32 laufen lasse. Der Unterschied ist zuhause auf meinem Windows 10 Home besonders ausgeprägt. Ein Command, dessen Laufzeit normalerweise ca. 100ms beträgt, braucht unter WIN64 im Schnitt 300ms. Doch damit nicht genug friert die App beim Senden der Nachricht für mehrere 100ms komplett ein. Animationen werden nicht mehr gezeichnet, Labels nicht aktualisiert. Nachrichten, die auf einer Read Characteristik reinkommen, währenddessen nicht verarbeitet. Unter WIN32 läuft dagegen alles glatt. Unter Android ist die Kommunikation noch etwas schneller als bei WIN32. Ich vermute ein Problem auf Treiberebene.

Unter Android 64 werden manchmal Datenpakete meiner Firmware nicht zugestellt. Das ist mir beim Firmware Update mit über 1000 Datensätzen aufgefallen. Teilweise beobachtete ich 20 verlorene Pakete pro Update. Dann wiederum läuft das Update komplett fehlerfrei durch. Unter Android 32 funktioniert es viel viel besser. Zum Glück konnte ich den Fehler mit einem Timer und ReSend leicht in den Griff bekommen. ​Unter Windows gibt es dagegen kein Problem mit verloren Datenpaketen.

Firmware und Hardware waren bei meinen Tests immer gleich.

Schon komisch, habt hier ähnliche Erfahrungen bei BLE gesammelt?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.067 Beiträge
 
Delphi 12 Athens
 
#7

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 4. Feb 2022, 19:02
Kann es sein dass Du die Daten im OnReadCharacteristics direkt verarbeitest ?
Diese kommen womöglich aus ständig wechselnden Kontexten und Threads, und müssen mit Vorsicht behandelt werden.
Ich lade die im OnReadCharacteristics nur in einen thread-sicheren RingBuffer, möglichst ohne viel Overhead,
und lese diesen dann regelmäßig in einem kontrolliertem Thread zur Verarbeitung der Daten wieder aus.
  Mit Zitat antworten Zitat
Rapunzel

Registriert seit: 1. Mär 2019
48 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 5. Feb 2022, 14:10
Vielen Danke für Deinen Denkanstoß.

Ich betrachte in CharacteristicRead nur den Pakettyp und prüfe die Checksumme. Dann werden die Pakete je nach Typ in zwei verschiedene Bffer kopiert. Zum Benachrichtigen der App nutze ich den MessageManager. Bisher habe ich dazu z.B. folgenden Code verwendet:

Delphi-Quellcode:
    TThread.Queue(nil,procedure
        begin
          FMsgManager.SendMessage(Self,TBLEConnectionStatus.Create);
        end);
Das hatte beim Firmware Update zur Folge, wenn CharacteristicRead im Kontext des MainThread aufgerufen wurde und es richtig verstanden habe, dass das nächste Datenpaket direkt ohne Umweg aus CharacteristicRead gesendet wurde.

Das habe ich jetzt entkoppelt:
Delphi-Quellcode:
    TThread.ForceQueue(nil,procedure
        begin
          FMsgManager.SendMessage(Self,TBLEConnectionStatus.Create);
        end);
Und siehe da, es sind jetzt schon viele 1000 Datenpakete durch die Luft geflogen und ohne Fehler beantwortet worden.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.067 Beiträge
 
Delphi 12 Athens
 
#9

AW: FMX BLE Problem mit automatischem Reconnect nach Verbindungsunterbrechung

  Alt 5. Feb 2022, 14:55
Ja ForceQueue verleiht Flüüüügel (nicht immer, aber immer öfter)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz