AW: Bluetooth LE unter Windows 11 funktioniert nicht mehr
3. Jan 2025, 13:52
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 ...
|