diff options
author | Juha Vuolle <juha.vuolle@insta.fi> | 2021-10-06 11:51:48 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-10-20 12:12:47 +0000 |
commit | 63b4669bcfc4bb4d2c8aabaaec1c25762f7c6e0d (patch) | |
tree | 98e60fc403740ca3faa83b85a0120d2d7ee2f31b /src | |
parent | d17c75e38baa9b39d190f891ed3ee60c95960d9a (diff) |
Add QLowEnergyController::mtu() support on BT LE server side on Android
The mtu() function was available on the control side, this commit
adds this also on the server (peripheral) side.
Task-number: QTBUG-96995
Change-Id: I2f13d2ba8a6d1f228f9da87d4d99b2a45fe5479d
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
(cherry picked from commit c0dd49d88dc2fe89c080d2baa0da1efde559893f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java | 21 | ||||
-rw-r--r-- | src/bluetooth/android/jni_android.cpp | 2 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java b/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java index 4c307df3..0093a681 100644 --- a/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java +++ b/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java @@ -89,6 +89,10 @@ public class QtBluetoothLEServer { private String mRemoteAddress = ""; public String remoteAddress() { return mRemoteAddress; } + // BT Core v5.3, 5.2.1, Vol 3, Part G + private static final int DEFAULT_LE_ATT_MTU = 23; + // Holds the currently supported/used MTU + private int mSupportedMtu = DEFAULT_LE_ATT_MTU; // Implementation defined limit private static final int MAX_PENDING_WRITE_COUNT = 1024; // BT Core v5.3, 3.4.6.1, Vol 3, Part F @@ -482,13 +486,19 @@ public class QtBluetoothLEServer { Log.w(TAG, "onNotificationSent" + device + " " + status); } - // MTU change disabled since it requires API level 22. Right now we only enforce lvl 21 -// @Override -// public void onMtuChanged(BluetoothDevice device, int mtu) { -// super.onMtuChanged(device, mtu); -// } + @Override + public void onMtuChanged(BluetoothDevice device, int mtu) { + if (mSupportedMtu == mtu) + return; + mSupportedMtu = mtu; + leMtuChanged(qtObject, mSupportedMtu); + } }; + public int mtu() { + return mSupportedMtu; + } + public boolean connectServer() { if (mGattServer != null) @@ -693,6 +703,7 @@ public class QtBluetoothLEServer { }; public native void leServerConnectionStateChange(long qtObject, int errorCode, int newState); + public native void leMtuChanged(long qtObject, int mtu); public native void leServerAdvertisementError(long qtObject, int status); public native void leServerCharacteristicChanged(long qtObject, BluetoothGattCharacteristic characteristic, diff --git a/src/bluetooth/android/jni_android.cpp b/src/bluetooth/android/jni_android.cpp index 4aa2be36..6bbc3bb0 100644 --- a/src/bluetooth/android/jni_android.cpp +++ b/src/bluetooth/android/jni_android.cpp @@ -230,6 +230,8 @@ static JNINativeMethod methods_le[] = { static JNINativeMethod methods_leServer[] = { {"leServerConnectionStateChange", "(JII)V", (void *) LowEnergyNotificationHub::lowEnergy_connectionChange}, + {"leMtuChanged", "(JI)V", + (void *) LowEnergyNotificationHub::lowEnergy_mtuChanged}, {"leServerAdvertisementError", "(JI)V", (void *) LowEnergyNotificationHub::lowEnergy_advertisementError}, {"leServerCharacteristicChanged", "(JLandroid/bluetooth/BluetoothGattCharacteristic;[B)V", |