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;