Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Bluetooth LE unter Windows 11 funktioniert nicht mehr (https://www.delphipraxis.net/213532-bluetooth-le-unter-windows-11-funktioniert-nicht-mehr.html)

elmar.faber 17. Aug 2023 11:50

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Ich habe nun die komplette Datei ausgetauscht mit der hochgeladenen Version (https://quality.embarcadero.com/browse/RSP-42149)

Diesmal springt er bei der folgenden Funktion in den Elae-Zweig und bleibt da hängen:

Delphi-Quellcode:
function TWinRTBluetoothGattCharacteristic.DoGetDescriptors: TBluetoothGattDescriptorList;
var
  LGattDescriptors: IVectorView_1__GenericAttributeProfile_IGattDescriptor;
  I: Integer;
  characteristic3 : GenericAttributeProfile_IGattCharacteristic3;
  descriptorRes3 : IAsyncOperation_1__GenericAttributeProfile_IGattDescriptorsResult;
  descrRes : GenericAttributeProfile_IGattDescriptorsResult;
begin
  FDescriptors.Clear;

  if Supports(FGattCharacteristic, GenericAttributeProfile_IGattCharacteristic3, characteristic3) then
  begin
       // async
       if TAsyncOperation<IAsyncOperation_1__GenericAttributeProfile_IGattDescriptorsResult>.Wait(
                        characteristic3.GetDescriptorsAsync(BluetoothCacheMode.Uncached), descriptorRes3 ) = AsyncStatus.Completed then
       begin
            descrRes := descriptorRes3.GetResults;
            LGattDescriptors := descrRes.Descriptors;
            if LGattDescriptors.Size > 0 then
            begin
                 for I := 0 to LGattDescriptors.Size - 1 do
                     FDescriptors.Add(TWinRTBluetoothGattDescriptor.Create(Self, LGattDescriptors.GetAt(I)));
            end;
       end;
  end
  else
  begin
    // deprecated use only if not yet supported
    LGattDescriptors := (FGattCharacteristic as GenericAttributeProfile_IGattCharacteristic2).GetAllDescriptors;
    if LGattDescriptors.Size > 0 then
      for I := 0 to LGattDescriptors.Size - 1 do
        FDescriptors.Add(TWinRTBluetoothGattDescriptor.Create(Self, LGattDescriptors.GetAt(I)));                      <----------- bleibt hier hängen
  end;
  Result := FDescriptors;
end;

rabatscher 17. Aug 2023 12:49

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Hi... hast schon mal versucht das ganze neu zu pairen?

rabatscher 17. Aug 2023 13:04

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Nachtrag:
die Methode wo er bei dir hängen bleibt hatte ich noch drinnen gelassen, da das die Standardmethode in älteren Win10 Systemen war, die
noch keine IGattCharacteristic3 Interfaces kannten (ist quasi von der alten Delphi 10.4 Implementierung). Ich denke du kannst diese Zeilen
aber auch getrost weglöschen.

-> Nur zur Info: Ich brauche die Descriptoren Struktur nicht... Du etwa?

lg
Mike

elmar.faber 21. Aug 2023 08:32

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Guten Morgen,

etwas verspätet bin ich wieder da...
Nein ich brauche die Descriptoren Struktur auch nicht ...
Ich habe neu gepaired aber leider bin ich nicht weitergekommen.
Ich schaue jetzt mal, ob ich ein anderes Bluetooth Modul zum laufen bekomme...

Viele Grüße

rabatscher 21. Aug 2023 08:45

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Und den "else" Zweig bei den Descriptoren weglöschen hat keinen Erfolg gebracht?

elmar.faber 22. Aug 2023 06:44

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Nein leider nicht, hättest du mal einen funktionierenden Quellcode Ansatz? Irgendwie scheine ich ja etwas grundlegendes falsch zu machen

rabatscher 13. Okt 2023 21:05

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Einen kleinen Nachtrag habe ich noch... die Methode DiscoverServices wird bei mir in einem Thread ausgeführt - WinRT hat da so seine
Eigenheiten.... eventuell hilft das..

Graw 11. Mär 2024 10:43

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Hallo,

Zitat:

wie komme ich aktuell an die Datei ran?
es sieht so aus als wenn man sich bei https://quality.embarcadero.com/login.jsp nicht mehr anmelden kann?
Oder ist es nur ein aktuelles kurzzeitiges Problem?

Hat sich erledigt, der Download funktioniert.

Allerdings bekomme ich kein Bluetooth LE Projekt ans laufen.

Ist dies auch eine Möglichkeit um das Beispiel "ExploreDevicesLE" lauffähig zu bekommen?
Ich kann nur Geräte suchen. Sobald ich auf "Get services" klicke friert die Software ein.

diakroem 3. Jan 2025 12:52

AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
 
Hallo zusammen,
auch ich habe das Problem, dass ein BLE-Programm unter WIN11 nicht zum laufen zu kriegen ist (war?).
3 Tage sind jetzt mit Analysen ins Land gegangen, quality.emba..com gibt ja auch nichts her, der Kunde steht mir im Nacken, weil er alle Rechner auf Win11 umrüsten musste, die Software nun nicht mehr funktionierte ...

Wie dem auch sei, bei mir hat nun folgendes Workaround, das ich nicht sehr schön finde, funktioniert, auch den BLE-Explorer habe ich so zum laufen bekommen.

Da es nur ein kleiner Eingriff ist, gebe ich es zum Testen weiter, bis die nächste Generation, hoffentlicher fehlerfrei, Syste.Win.BluetoothWinRT.pas daherkommt.

Bei mir kehrte die "TAsyncOperation" in "DoGetCharacteristics" nie zurück,
daher habe ich die Procedure so geändert, dass der service3-Teil auskommentiert ist und nur die alte Version der Ermittlung der Characteristics ausgeführt wird. Hier als die ganze Procedure :
function TWinRTBluetoothGattService.DoGetCharacteristics: TBluetoothGattCharacteristicList;
var
I: Integer;
service3 : GenericAttributeProfile_IGattDeviceService3;
LGattCharacteristics: IVectorView_1__GenericAttributeProfile_IGattCharac teristic;
res3 : IAsyncOperation_1__GenericAttributeProfile_IGattCh aracteristicsResult;
charactersRes : GenericAttributeProfile_IGattCharacteristicsResult ;
characteristic : GenericAttributeProfile_IGattCharacteristic;
begin
CheckNotClosed;
FCharacteristics.Clear;

if Supports(FGattService, GenericAttributeProfile_IGattDeviceService3, service3) then
{* begin
if TAsyncOperation<IAsyncOperation_1__GenericAttribut eProfile_IGattCharacteristicsResult>.Wait(
service3.GetCharacteristicsAsync(BluetoothCacheMod e.Uncached), res3) = AsyncStatus.Completed
then
begin
charactersRes := res3.GetResults;
LGattCharacteristics := charactersRes.Characteristics;
for I := LGattCharacteristics.Size - 1 downto 0 do
begin
characteristic := LGattCharacteristics.GetAt(I);
FCharacteristics.Add(TWinRTBluetoothGattCharacteri stic.Create(Self, characteristic));
end;
end;
end

else *}
begin
LGattCharacteristics := (FGattService as GenericAttributeProfile_IGattDeviceService2).GetAl lCharacteristics;
if LGattCharacteristics.Size > 0 then
for I := 0 to LGattCharacteristics.Size - 1 do
FCharacteristics.Add(TWinRTBluetoothGattCharacteri stic.Create(Self, LGattCharacteristics.GetAt(I)));
end;
Result := FCharacteristics;
end;

Suddenly, meine ganzes Programm läuft wieder.

Bitte gerne teste, ich freue mich auf Rückmeldungen ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.
Seite 2 von 2     12   

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