AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung BluetoothLE Verhalten bei Wiederverbinden
Thema durchsuchen
Ansicht
Themen-Optionen

BluetoothLE Verhalten bei Wiederverbinden

Ein Thema von Rollo62 · begonnen am 17. Jun 2015 · letzter Beitrag vom 25. Jun 2015
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#1

AW: BluetoothLE Verhalten bei Wiederverbinden

  Alt 24. Jun 2015, 19:46
Hallo Mensch72,

du hast ja Recht:

Im Moment iOS 8.1 bis 8.3,
RadStudio XE8 Pro (mit und ohne Upd1)
Getestet auf iPhone 4, 5S, 6.

Unter Android bisher nur unter Sansung Galaxy 5, mit akt. Version, aber da läuft es auch.
Scheint ein Problem unter iOS zu haben.

Ich habe als Basis das Emba HeartRateMonitor Beispiel benutzt, welches auch erstmal gut lief.
Aber ich hatte nur unter Android und auf dem MacBook getestet.

Ich bin gerade dabei die RadXE8 Subscription zu besorgen, in der Hoffnung das ein grosses Upd1
auch hier Verbesserungen bringt.
Ich hatte nur die Recharge-Version, bin aber davon ausgegangen das es 1:1 das Gleiche ist.

Wen ich damit nicht weiter komme werde ich nochmal ein abgespecktes Demo machen:
- aber ich benutze die OnEndDiscoveryDevices, OnEnd--Services, etc.
- die einzelnen States habe ich entweder durch Tastendruck, oder durch Timer getrennt, mit mind. 0.5 Sec. dely
- mehrere CancelServices hatte ich noch nicht probiert, ist eine gute Idee, werde ich aber mal machen.

Hast du einen Event falls sich das BT-Gerät abschaltet (AutoShutOff) ?
Das passiert namlich, und ich bekomme das so nicht mit.
Ich habe versucht über regelmäßige ReadRSSI herauszufinden wann das Gerät weg ist, aber das ist auch
nur suboptimal.

Am Besten wäre es ein OnConnectionLost Event, den es aber leider nicht gibt.


Rollo




Rollo
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: BluetoothLE Verhalten bei Wiederverbinden

  Alt 24. Jun 2015, 22:41
"Am Besten wäre es ein OnConnectionLost Event"...

Viele Charakteristics können ja abonniert werden... also einfach nach DiscoverServices ein EnableNotifycation aufrufen.
- da kommt dann sofort per Event der aktuelle Wert, und dann zyklisch eine Aktualisierung
- also einfach die Empfangszeit merken und beim nächsten Event die Zeitdifferenz mal "2,2" als TimeOut nehmen und bei jedem Empfang so weiterführen
- so kann einmal eine Aktualisierung verloren gehen ohne das ein gleich der TimeOut kommt
- wenn TimeOut erreicht, hast du dein "OnConnectionLost Event", weil sich das BLE Device dann 2x nicht regelmäßig gemeldet hat
- RSSI Polling ist aus meiner Sicht ungünstig, weil dies je nach BLE Gerät sogar ein Connect/Reconnect auslöst, ohne das alle Delphilisten dann intern aktuell sind
- PushNotify Events mit bekannter Wiederholrate und TimeOut-Faktor 1,1(kein Ausfall erlaubt) oder 2,2(ein Ausfall erlaubt) sind die eleganteste und BLE seitig stromsparendste Lösung
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#3

AW: BluetoothLE Verhalten bei Wiederverbinden

  Alt 25. Jun 2015, 06:38
Hallo mensch72,

danke für die Hinweise.

Events für EnableNotification würde ich gerne setzten, finde aber keine.

Nur zur Klarstellung:
Ich lese Rssi nicht vom IOS-Device, sonder vom lokalen Host-Stack.
Das sollte eigentlich eine Variable sein die sofort, ohne Transfter over-the-air, auslesbar sein sollte
weil das nur vom eingebauten BT-Chip kommt.

Deshalb havbe ich Polling für Rssi eingebaut über 3sec. Timer:
Code:
if not DeviceCurrent.ReadRemoteRSSI then // Obtain RSSI
begin ...

procedure TS4BleConnectDm.BluetoothLE1ReadRSSI(const Sender: TObject; ARssiValue: Integer; AGattStatus: TBluetoothGattStatus);
begin ...
Es hat für mich auch noch einen anderen Grund:
- Ich habe eine Service Notification beim Gerät registriert, und dieses sendet nur ab und zu wenn der Nutzer eine
Taste drückt, durch das Polling glaube ich das Timing besser Steuerun zu können.
D.h. wenn User eine datenpaket sendet spar ich mir einen Rssi Zyklus (denn beides ist mein KeepAlive Signal).


Wenn du weisst wie man den Rssi-Wert als Event oder Notification ausliest dann hilf mir bitte auf die Sprünge.

Ich habe schon einiges durchgesehen, finde aber nichts.
Jetzt will ich nochmal schauen wie die Beacons das machen, denn das ist ja eigentlich das Gleiche Problem.
Es gibt die neue RssiToDistance Funktion bei den Beacons, aber wie die an den RssiWert kommen muss ich noch checken.

Ich habe hier etwas von David I gefunden, siehe Bild im Anhanghttp://de.slideshare.net/embarcadero...llsprintdavidi

Heisst das das mit LastDiscoveredDevice geprüft werden kann ob ein Gerät noch am Leben ist ?



Rollo
Angehängte Grafiken
Dateityp: jpg Clipboard02.jpg (41,0 KB, 23x aufgerufen)

Geändert von Rollo62 (25. Jun 2015 um 06:46 Uhr)
  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 03:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz