AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 11 und Bluetooth LE

Ein Thema von Graw · begonnen am 12. Mär 2024 · letzter Beitrag vom 22. Mär 2024
Antwort Antwort
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#1

Windows 11 und Bluetooth LE

  Alt 12. Mär 2024, 14:32
Hallo,

ich suche nun schon lange nach einem passendem Beispiel für eine Bluetooth LE Verbindung mit Windows 11.

Ich will die Characteristics abfragen und die dazugehörenden Values.

Kann mir hier jemand weiterhelfen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.199 Beiträge
 
Delphi 12 Athens
 
#2

AW: Windows 11 und Bluetooth LE

  Alt 12. Mär 2024, 15:29
Hast du die Delphi-Demos nicht installiert?
C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\

Ich würde doch mal schauen, ob sich was findet.
Und dann hat Emba auch so einige Videos auf Youtube
und in der Hilfe sind zu einigen Kompnenten auch Demos verlinkt.

z.B.
C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\...



oder Delphi neu installieren

oder Tools -> Platformen verwalten -> Samples anhaken und installieren

oder z.B. https://github.com/Embarcadero/RADStudio12Demos
RADStudio12Demos\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\Beacons\...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Windows 11 und Bluetooth LE

  Alt 13. Mär 2024, 14:27
Hallo himitsu,

mit den Beispielen habe ich schon probiert.
Leider ist kein Beispiel unter Windows funktionstüchtig.

Mein Hauptaugenmerk liegt da auf "ExploreDevicesLE" und "BLEScanner".

Das Suchen der Geräte funktioniert noch.
Aber sobald ich bei ExploreDevicesLE auf Get klicke oder beim BLEScanner ein Device auswähle, frieren beide Anwendungen ein und müssen über den Taskmanager beendet werden.

Die neusten Versionen von github habe ich auch getestet.

Geändert von Graw (13. Mär 2024 um 15:02 Uhr)
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
864 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Windows 11 und Bluetooth LE

  Alt 13. Mär 2024, 21:52
Ich habe ExploreDevicesLE gerade bei mir mal getestet, allerdings Windows 10. Da läuft es problemlos. War die Win32-Debug-Variante. Aber ich weiß, dass bei der Iteration durch Characteristics eines Service wichtig ist, dass dies nicht im Hauptthread passiert. Dies kann zu Hängenbleibern führen. Ich habe jetzt nicht gecheckt, wie das Beispiel es macht.
  Mit Zitat antworten Zitat
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Windows 11 und Bluetooth LE

  Alt 15. Mär 2024, 11:30
Das ist ja interessant.
Wenn auf Get geklickt wird, hängt es sich nicht auf?

Kann es an meiner Hardware liegen?
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
864 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Windows 11 und Bluetooth LE

  Alt 15. Mär 2024, 12:31
Ja, beim Klick auf "Get services" hängt es sich nicht auf. Aber es kann gut sein, dass du einen Thread um die Funktion ServicesDiscovered bauen musst. Dies scheint mir in dem Beispiel falsch zu sein.

Probiere mal diese Anpassung:
Delphi-Quellcode:
procedure TFrDeviceExplorer.ServicesDiscovered(const Sender: TObject; const AServiceList: TBluetoothGattServiceList);
begin
  TThread.CreateAnonymousThread(
  procedure()
  var
  I: Integer;
  CharList: TBluetoothGattCharacteristicList;
  AChar: TBluetoothGattCharacteristic;
  J: Integer;
  CurrentRow: Integer;
  Options: string;
  ServiceItem, Characteristic, CharProps: TTreeViewItem;
  begin
    TvCharacteristics.Clear;
    for I := 0 to AServiceList.Count - 1 do
    begin
      ServiceItem := TTreeViewItem.Create(nil);
      ServiceItem.Parent := TvCharacteristics;
      ServiceItem.Tag := I;
      ServiceItem.IsExpanded := True;
      if AServiceList[I].UUIDName.IsEmpty then
        ServiceItem.Text := 'Unnamed'
      else
        ServiceItem.Text := AServiceList[I].UUIDName;
      CharList := AServiceList[I].Characteristics;
      for J := 0 to CharList.Count - 1 do
      begin
        AChar := CharList[J];
        TThread.Synchronize(nil, procedure begin
          Options := '';
          if TBluetoothProperty.Broadcast in AChar.Properties then Options := Options + 'Broadcast ';
          if TBluetoothProperty.ExtendedProps in AChar.Properties then Options := Options + 'ExtendedProps ';
          if TBluetoothProperty.Notify in AChar.Properties then Options := Options + 'Notify ';
          if TBluetoothProperty.Indicate in AChar.Properties then Options := Options + 'Indicate ';
          if TBluetoothProperty.Read in AChar.Properties then Options := Options + 'Read ';
          if TBluetoothProperty.Write in AChar.Properties then Options := Options + 'Write ';
          if TBluetoothProperty.WriteNoResponse in AChar.Properties then Options := Options + 'WriteNoResponse ';
          if TBluetoothProperty.SignedWrite in AChar.Properties then Options := Options + 'SignedWrite ';
          Characteristic := TTreeViewItem.Create(nil);
          Characteristic.Parent := ServiceItem;
          Characteristic.IsExpanded := False;
          if AChar.UUIDName.IsEmpty then
            Characteristic.Text := 'Unnamed'
          else
            Characteristic.Text := AChar.UUIDName;
          Characteristic.Tag := J;
          CharProps := TTreeViewItem.Create(nil);
          CharProps.Tag := -1;
          CharProps.Parent := Characteristic;
          CharProps.IsExpanded := True;
          CharProps.Text := GUIDToString(AChar.UUID);
          CharProps := TTreeViewItem.Create(nil);
          CharProps.Tag := -1;
          CharProps.Parent := Characteristic;
          CharProps.IsExpanded := True;
          CharProps.Text := Options;
        end);
        Application.ProcessMessages;
      end;
    end;
    tmAnimateFindServices.Enabled := False;
    PbServices.Value := 100;
  end).Start;
end;
D.h. übertragen auf das Beispiel müsste es
  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 21:05 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