summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJuha Vuolle <juha.vuolle@insta.fi>2021-10-06 11:51:48 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-10-20 12:12:47 +0000
commit63b4669bcfc4bb4d2c8aabaaec1c25762f7c6e0d (patch)
tree98e60fc403740ca3faa83b85a0120d2d7ee2f31b /src
parentd17c75e38baa9b39d190f891ed3ee60c95960d9a (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.java21
-rw-r--r--src/bluetooth/android/jni_android.cpp2
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",