Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   BluetoothLE: Probleme seit dem letzten Windows-Update (https://www.delphipraxis.net/198715-bluetoothle-probleme-seit-dem-letzten-windows-update.html)

philipp.hofmann 25. Nov 2018 19:50


BluetoothLE: Probleme seit dem letzten Windows-Update
 
Hallo allerseits,

Windows speichert bei mir (auf drei Rechnern) seit dem letzten Update die gepairten BluetoothLE-Verbindungen nicht mehr.
Die BluetoothLE-Implementierung von Delphi 10.2.3 und 10.3 kann unter Windows aber nur mit gepairten Verbindungen umgehen.
Dies beißt sich leider und führt dazu, dass ich nach jedem Systemstart umständlich die Devices (Herzfrequenz, Watt-Pedal, RPM-Messung und Smart-Trainer-Rolle) unter Windows (bzw. mit Bluetooth LE Explorer) nochmals pairen muss, bevor mein Programm diese nochmals benutzen kann.

Das Thema liegt auch schon beim Delphi-Support, aber hat hier jemand für das Probleme eine pfiffige Lösung?
Selbst kann man das pairen aus Delphi heraus wahrscheinlich nicht anstoßen, oder?
Ich kann zwar durch eine kleine Anpassung in System.Win.BluetoothWinRT das Device verbinden, dann finden sich aber keine Services (bzw. nur bei einem von vier Devices):

Delphi-Quellcode:
procedure TWinRTBluetoothLEDevice.CheckInitialized;
var
  LBLEDeviceAsyncOp: IAsyncOperation_1__IBluetoothLEDevice;
begin
  if (FBluetoothLEDevice = nil) or FClosed then
  begin
    if FId = 0 then
      //Beginn alter Code
      //  raise EBluetoothDeviceException.Create(SBluetoothLEDeviceNotPaired);
      //Ende alter Code
    //Beginn neuer Code
    begin
      if TAsyncOperation<IAsyncOperation_1__IBluetoothLEDevice>.Wait(
          TBluetoothLEDevice.Statics.FromBluetoothAddressAsync(FAddress), LBLEDeviceAsyncOp) = AsyncStatus.Completed then
      begin
        FBluetoothLEDevice := LBLEDeviceAsyncOp.GetResults;
        FClosed := False;
        if DeviceName = '' then
          FDeviceName := FBluetoothLEDevice.Name.ToString;
        FConnectionStatusChangeDelegate := TConnectionStatusChangeEventHandler.Create(Self);
        FBluetoothLEDevice.add_ConnectionStatusChanged(FConnectionStatusChangeDelegate);
      end;
    end
    //Ende neuer Code
    else if TAsyncOperation<IAsyncOperation_1__IBluetoothLEDevice>.Wait(
          TBluetoothLEDevice.Statics.FromIdAsync(FId), LBLEDeviceAsyncOp) = AsyncStatus.Completed then
Grüße, Philipp

TurboMagic 29. Nov 2018 20:30

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Evtl. kann die kostenpflichtige Drittanbieter Biblothek WCL (Wireless Communication Library) da mehr?

philipp.hofmann 30. Nov 2018 14:14

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Zumindest WCL supported nur Windows (VCL), dann müsste ich jetzt je nach Plattform ein anderes Framework nutzen. Wäre nicht im Sinne des Erfinders.

TurboMagic 1. Dez 2018 08:19

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Ja, das stimmt, aus dem originalen Beitrag ging aber auch nicht daraus hervor, dass Cross-Plattform Fähigkeit ein Thema ist.

philipp.hofmann 21. Dez 2018 14:12

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Ich habe jetzt schon mal die IP*Works-Implementierung (TiplBLEClient) von BLE für Delphi ausprobiert. Diese bedingt kein Pairing, aber gerade bei der parallelen Nutzung von mehreren Devices kommt dort sehr häufig die Fehlermeldung, dass das Device nicht erreichbar ist. Entweder gibt es dafür eine Lösung oder dies ist auch keine Alternative.

TurboMagic 23. Dez 2018 14:36

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Schon mal bei deren Support um Rat gefragt?

Evtl. wissen die etwas oder es ist denen noch unbekannt, dann ist es evtl.
eine Hilfe für die, das zu lerenen, damit es jemand analysieren und evtl.
reparieren kann.

Wenn's dumm läuft, liegt's aber auch am Verhalten der Gegenstellen.

Ansonsten: Frohe Weihnachten

TurboMagic

philipp.hofmann 23. Dez 2018 15:23

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Ja, bin mit dem Support im Kontakt, aber am Ende ist es mehr selbst ausprobieren. Man muss desöfteren den DiscoverService-Befehl zweimal aufrufen, dann geht es meist. Und v.a. muss man DiscoverDevices (heißt bei IP*Works dort Scan) unterbrechen, wenn man ein Device gefunden hat und initialisiert. Erst danach wieder DiscoverDevice anwerfen und das zweite Device finden und initialisieren. Sehr mühsam (und teuer in Bezug auf die Lizenz), die beiden Implementierungen nebeneinander zu halten, wenn man bedenkt, dass es "nur" darum geht, dass bei TBluetoothLE das Pairen für Windows immer noch vorausgesetzt wird, es dieses unter Windows aber eigentlich nicht mehr wirklich gibt.

philipp.hofmann 10. Mär 2020 10:41

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Just for info: In meinen Windows-Versionen wird mittlerweile wieder das Pairing für BluetoothLE-Geräte gespeichert (war wohl nur ein Zwischenversuche von Microsoft für Windows 10 dies nicht mehr zu speichern). Damit kann man auch wieder die TBluetoothLE-Implementierung nutzen. Damit biete ich jetzt beides an, die IP-Works-BLE-Implementierung, die kein Pairing voraussetzt, aber manchmal das Programm crashen lässt und die TBluetoothLE-Implementierung, welche stabiler ist, aber einmaliges Pairing voraussetzt.

Rollo62 10. Mär 2020 10:44

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Ich kenne IPWorks BLE jetzt nicht, aber könnte man die "good parts" von Beiden nicht kombinieren ?

philipp.hofmann 10. Mär 2020 11:10

AW: BluetoothLE: Probleme seit dem letzten Windows-Update
 
Glaube spontant nicht, IPWorks paired nicht die Devices und somit bleibt das Device für TBluetoothLE unnutzbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.
Seite 1 von 2  1 2      

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