Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
3.932 Beiträge
 
Delphi 12 Athens
 
#4

AW: BluetoothLE Verhalten bei Wiederverbinden

  Alt 23. Jun 2015, 13:17
Ich abe anscheinend immer noch Probleme mit BLE.
Nachdem ein Device gefunden wird MUSS ich durch alle Services und Characteristics durch, ansonsten
scheint die Methode direkt auf Characteristics zuzugreifen nicht zu funktionieren.

Hier muss nichts gemacht werden, andscheinen sucht fmx nur intern die Daten ab und generiert interne
Listen daraus.
Ich vermute das hier ein Bug beim Zugriff auf solche Listen ist, denn es funktioniert meistens, aber
ich bekommen auch regelmässig (nur beim Wiederverbinden), einen Zugriffsfehler den ich nicht näher lokalisieren kann.

Hat jemand ähnliche Probleme mit BT ?

Ach ja, unten in den Loops kann ich so auch die Daten ausgeben lassen (jetzt auskommentiert), aber wenn ich die
Kommentare wegnehme kracht es auch hier schon.
So als ob der Zugriff auf die internen Listen im TBluetoothLE ein Problem hätten.

Wie gesagt, nach Neustart ist alles super, nur wenn Device abgeschaltet und neu Verbunden wird scheint sich im
TBlueToothLE noch etwas zu befinden was nicht ganz korrekt ist.

Ich werde demnächst versuchen TBLuetothLE nicht als Komponente, sondern als Runtime Feld anzulegen, damit ich
das komplett entfernen kann, aber dazu muss ich einiges umbauen.

Rollo


Code:
//  // Loop through all SERVICES
  for I := 0 to FDeviceCurrent.Services.Count - 1 do
  begin
//    svc := FDeviceCurrent.Services[I];

//    Add(  'Service', svc.UUIDName);
//    Add(  '      ', svc.UUID.ToString);
//    if svc.ServiceType = TBluetoothServiceType.Primary then
//      Add('SvcType', 'Primary')
//    else
//      Add('SvcType', 'Secondary');

    // MUST LOOP through all, so that the desired information is gathered
    // otherwise the characteristics cannot be set reliably
    //
    //  // Loop through all CHARACTERISTICS
    for J := 0 to FDeviceCurrent.Services[I].Characteristics.Count - 1 do
    begin
//      svcC := FDeviceCurrent.Services[I].Characteristics[J];
//      Add(  '-Charact', svcC.UUIDName);
  //    Add(  '       ', svcC.UUID.ToString);

      FTimerTimeout := 0;

      //  // Loop through all CHARACTERISTICS DESCRIPTORS
      for K := 0 to FDeviceCurrent.Services[I].Characteristics[J].Descriptors.Count - 1 do
      begin
//        svcD := svcC.Descriptors[K];
//        Add('--Descr ', svcD.UUIDName);
//        Add('       ', svcD.UUID.ToString);

        FTimerTimeout := 0;
      end;
    end;

  end;

Geändert von Rollo62 (23. Jun 2015 um 13:24 Uhr)
  Mit Zitat antworten Zitat