Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi BluetoothLE - onMtuChanged Event (https://www.delphipraxis.net/209113-bluetoothle-onmtuchanged-event.html)

Prime5 28. Okt 2021 11:53

BluetoothLE - onMtuChanged Event
 
Hallo Zusammen,

für ein Bluetooth-Projekt in dem unter Androuid die MTU angepasst werden soll ist es für mich notwendig zu erfahren,
auf welchen MTU-Wert sich die verwendeten Geräte nach einem Aufruf der "requestMtu"-Funktion geeinigt haben.

Die "TBluetoothLEDevice.RequestMtu"-Funktion löst dabei im "Android Device Monitor" die folgenden Events aus:

BluetoothGatt: configureMTU() - device: XX:XX:XX:XX:XX:XX mtu: 512
BluetoothGatt: onConnectionUpdated() - Device=XX:XX:XX:XX:XX:XX interval=6 latency=0 timeout=500 status=0
BluetoothGatt: onConfigureMTU() - Device=XX:XX:XX:XX:XX:XX mtu=23 status=0
Nun habe ich gesehen, dass es in der Datei "Androidapi.JNI.Bluetooth.pas" die folgende Deklaration gibt:
Code:
[JavaSignature('android/bluetooth/BluetoothGattCallback')]
  JBluetoothGattCallback = interface(JObject)
    ['{E07848AC-B968-4C94-9F67-4DC5E62CB8D3}']
 ...
    procedure onMtuChanged(gatt: JBluetoothGatt; mtu: Integer; status: Integer); cdecl;
 ...
  end;
Allerdings gibt es hierzu keine weitere Implementierung.

Meine Idee wäre nun gewesen, in der Klasse "TAndroidBluetoothGattListener" aus "System.Android.Bluetooth" die folgende Prozedur anzulegen:
Code:
procedure TAndroidBluetoothGattListener.onMtuChanged(gatt: JBluetoothGatt; mtu, status: Integer);
und hier dann den Wert über weitere Funktionen am Vorbild der anderen Funktionsimplementationen nach oben hin durchzuschleifen:
Code:
  FGatt.DoOnMTUChanged(FGatt, mtu, TBluetoothGattStatus(status))
Zum aktuellen Stand sieht es für mich aber so aus, als wenn die "TAndroidBluetoothGattListener.onMtuChanged"-Funktion gar nicht erst aufgerufen werden würde.
Kann mir jemand von euch einen Tipp geben, wie oder wo ich dieses Event Implementieren kann, sodass ich es durch die verschiedenen Bluetooth-Klassen in meine Logik durchschleifen kann?

Rollo62 29. Okt 2021 06:46

AW: BluetoothLE - onMtuChanged Event
 
Vieleicht hängt es auch einfach von der Implementierung des IoT-Gerätes ab.
https://punchthrough.com/android-ble-guide/

Zitat:

Unfortunately, we’ve also seen the onMtuChanged() callback not getting delivered sometimes when working with closed source firmware, which can put a damper on things if the app is relying on the callback being delivered before proceeding with something. Our advice is to always assume the worst case — that the ATT MTU is at its minimum value of 23 — and to plan around that when working with closed source firmware, with any successful onMtuChanged() calls being considered as added bonuses.
Ich bin nicht sicher ob der Event automatisch bei Verbindung gesendet wird, oder erst auf Anfrage nach requestMTU.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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