diff options
author | Juha Vuolle <juha.vuolle@insta.fi> | 2022-06-30 15:26:41 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-08-04 08:48:11 +0000 |
commit | fb9104d5fa7eecb86d28104a1700b45069c18689 (patch) | |
tree | e5420111de8b8d1aac4c10b14e75afb3e084abfd | |
parent | 74c51f743120d25a22d81927802dff3df79f1555 (diff) |
Unstringify Android QtBluetooth: native JNI callbacks
This commit removes the plain class/type strings from the JNI
callback method registration.
Fixes: QTBUG-104183
Change-Id: I5599eb18af2f5934961a66fdcee7b0cba8045269
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
(cherry picked from commit 373378e74512de7b566725d4f81a28c1cef8280f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
6 files changed, 151 insertions, 114 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 4735ba1f..e8b4bd1f 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 @@ -342,7 +342,7 @@ public class QtBluetoothLEServer { break; } - leServerConnectionStateChange(qtObject, qtErrorCode, qtControllerState); + leConnectionStateChange(qtObject, qtErrorCode, qtControllerState); } public synchronized void handleOnServiceAdded(int status, BluetoothGattService service) @@ -730,7 +730,8 @@ public class QtBluetoothLEServer { mGattServer = null; mRemoteName = mRemoteAddress = ""; - leServerConnectionStateChange(qtObject, 0 /*NoError*/, 0 /*QLowEnergyController::UnconnectedState*/); + leConnectionStateChange(qtObject, 0 /*NoError*/, + 0 /*QLowEnergyController::UnconnectedState*/); } // This function is called from Qt thread @@ -954,7 +955,7 @@ public class QtBluetoothLEServer { } }; - public native void leServerConnectionStateChange(long qtObject, int errorCode, int newState); + public native void leConnectionStateChange(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, diff --git a/src/bluetooth/android/androidbroadcastreceiver_p.h b/src/bluetooth/android/androidbroadcastreceiver_p.h index e13edac6..08ecd5fc 100644 --- a/src/bluetooth/android/androidbroadcastreceiver_p.h +++ b/src/bluetooth/android/androidbroadcastreceiver_p.h @@ -20,11 +20,13 @@ #include <QtCore/QObject> #include <QtCore/private/qglobal_p.h> #include <android/log.h> +#include <android/jni_android_p.h> #include <QtCore/QJniObject> QT_BEGIN_NAMESPACE -void QtBroadcastReceiver_jniOnReceive(JNIEnv *, jobject, jlong, jobject, jobject); +void QtBroadcastReceiver_jniOnReceive(JNIEnv *, jobject, jlong, + QtJniTypes::Context, QtJniTypes::Intent); class AndroidBroadcastReceiver: public QObject { @@ -38,9 +40,11 @@ public: void unregisterReceiver(); protected: - friend void QtBroadcastReceiver_jniOnReceive(JNIEnv *, jobject, jlong, jobject, jobject); + friend void QtBroadcastReceiver_jniOnReceive(JNIEnv *, jobject, jlong, QtJniTypes::Context, + QtJniTypes::Intent); virtual void onReceive(JNIEnv *env, jobject context, jobject intent) = 0; - friend void QtBluetoothLE_leScanResult(JNIEnv *, jobject, jlong, jobject, jint, jbyteArray); + friend void QtBluetoothLE_leScanResult(JNIEnv *, jobject, jlong, QtJniTypes::BluetoothDevice, + jint, jbyteArray); virtual void onReceiveLeScan(JNIEnv *env, jobject jBluetoothDevice, jint rssi, jbyteArray scanRecord) = 0; diff --git a/src/bluetooth/android/jni_android.cpp b/src/bluetooth/android/jni_android.cpp index 5af1fea9..6392c07e 100644 --- a/src/bluetooth/android/jni_android.cpp +++ b/src/bluetooth/android/jni_android.cpp @@ -118,37 +118,44 @@ QJniObject valueForStaticField(JavaNames javaName, JavaNames javaFieldName) } void QtBroadcastReceiver_jniOnReceive(JNIEnv *env, jobject /*javaObject*/, - jlong qtObject, jobject context, jobject intent) + jlong qtObject, QtJniTypes::Context context, + QtJniTypes::Intent intent) { reinterpret_cast<AndroidBroadcastReceiver*>(qtObject)->onReceive(env, context, intent); } +Q_DECLARE_JNI_NATIVE_METHOD(QtBroadcastReceiver_jniOnReceive, jniOnReceive) static void QtBluetoothSocketServer_errorOccurred(JNIEnv */*env*/, jobject /*javaObject*/, jlong qtObject, jint errorCode) { reinterpret_cast<ServerAcceptanceThread*>(qtObject)->javaThreadErrorOccurred(errorCode); } +Q_DECLARE_JNI_NATIVE_METHOD(QtBluetoothSocketServer_errorOccurred, errorOccurred) static void QtBluetoothSocketServer_newSocket(JNIEnv */*env*/, jobject /*javaObject*/, - jlong qtObject, jobject socket) + jlong qtObject, QtJniTypes::BluetoothSocket socket) { reinterpret_cast<ServerAcceptanceThread*>(qtObject)->javaNewSocket(socket); } +Q_DECLARE_JNI_NATIVE_METHOD(QtBluetoothSocketServer_newSocket, newSocket) static void QtBluetoothInputStreamThread_errorOccurred(JNIEnv */*env*/, jobject /*javaObject*/, jlong qtObject, jint errorCode) { reinterpret_cast<InputStreamThread*>(qtObject)->javaThreadErrorOccurred(errorCode); } +Q_DECLARE_JNI_NATIVE_METHOD(QtBluetoothInputStreamThread_errorOccurred, errorOccurred) static void QtBluetoothInputStreamThread_readyData(JNIEnv */*env*/, jobject /*javaObject*/, jlong qtObject, jbyteArray buffer, jint bufferLength) { reinterpret_cast<InputStreamThread*>(qtObject)->javaReadyRead(buffer, bufferLength); } +Q_DECLARE_JNI_NATIVE_METHOD(QtBluetoothInputStreamThread_readyData, readyData) -void QtBluetoothLE_leScanResult(JNIEnv *env, jobject, jlong qtObject, jobject bluetoothDevice, - jint rssi, jbyteArray scanRecord) +void QtBluetoothLE_leScanResult(JNIEnv *env, jobject, jlong qtObject, + QtJniTypes::BluetoothDevice bluetoothDevice, jint rssi, + jbyteArray scanRecord) { if (Q_UNLIKELY(qtObject == 0)) return; @@ -157,107 +164,94 @@ void QtBluetoothLE_leScanResult(JNIEnv *env, jobject, jlong qtObject, jobject bl env, bluetoothDevice, rssi, scanRecord); } - - -static JNINativeMethod methods[] = { - {"jniOnReceive", "(JLandroid/content/Context;Landroid/content/Intent;)V", - (void *) QtBroadcastReceiver_jniOnReceive}, -}; - -static JNINativeMethod methods_le[] = { - {"leScanResult", "(JLandroid/bluetooth/BluetoothDevice;I[B)V", - (void *) QtBluetoothLE_leScanResult}, - {"leConnectionStateChange", "(JII)V", - (void *) LowEnergyNotificationHub::lowEnergy_connectionChange}, - {"leMtuChanged", "(JI)V", - (void *) LowEnergyNotificationHub::lowEnergy_mtuChanged}, - {"leServicesDiscovered", "(JILjava/lang/String;)V", - (void *) LowEnergyNotificationHub::lowEnergy_servicesDiscovered}, - {"leServiceDetailDiscoveryFinished", "(JLjava/lang/String;II)V", - (void *) LowEnergyNotificationHub::lowEnergy_serviceDetailsDiscovered}, - {"leCharacteristicRead", "(JLjava/lang/String;ILjava/lang/String;I[B)V", - (void *) LowEnergyNotificationHub::lowEnergy_characteristicRead}, - {"leDescriptorRead", "(JLjava/lang/String;Ljava/lang/String;ILjava/lang/String;[B)V", - (void *) LowEnergyNotificationHub::lowEnergy_descriptorRead}, - {"leCharacteristicWritten", "(JI[BI)V", - (void *) LowEnergyNotificationHub::lowEnergy_characteristicWritten}, - {"leDescriptorWritten", "(JI[BI)V", - (void *) LowEnergyNotificationHub::lowEnergy_descriptorWritten}, - {"leCharacteristicChanged", "(JI[B)V", - (void *) LowEnergyNotificationHub::lowEnergy_characteristicChanged}, - {"leServiceError", "(JII)V", - (void *) LowEnergyNotificationHub::lowEnergy_serviceError}, -}; - -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", - (void *) LowEnergyNotificationHub::lowEnergy_serverCharacteristicChanged}, - {"leServerDescriptorWritten", "(JLandroid/bluetooth/BluetoothGattDescriptor;[B)V", - (void *) LowEnergyNotificationHub::lowEnergy_serverDescriptorWritten}, -}; - -static JNINativeMethod methods_server[] = { - {"errorOccurred", "(JI)V", - (void *) QtBluetoothSocketServer_errorOccurred}, - {"newSocket", "(JLandroid/bluetooth/BluetoothSocket;)V", - (void *) QtBluetoothSocketServer_newSocket}, -}; - -static JNINativeMethod methods_inputStream[] = { - {"errorOccurred", "(JI)V", - (void *) QtBluetoothInputStreamThread_errorOccurred}, - {"readyData", "(J[BI)V", - (void *) QtBluetoothInputStreamThread_readyData}, -}; +Q_DECLARE_JNI_NATIVE_METHOD(QtBluetoothLE_leScanResult, leScanResult) static const char logTag[] = "QtBluetooth"; static const char classErrorMsg[] = "Can't find class \"%s\""; -#define FIND_AND_CHECK_CLASS(CLASS_NAME) \ -clazz = env->FindClass(CLASS_NAME); \ -if (!clazz) { \ - __android_log_print(ANDROID_LOG_FATAL, logTag, classErrorMsg, CLASS_NAME); \ - return JNI_FALSE; \ -} +#define FIND_AND_CHECK_CLASS(CLASS_NAME) \ +clazz = env.findClass<CLASS_NAME>(); \ +if (!clazz) { \ + __android_log_print(ANDROID_LOG_FATAL, logTag, classErrorMsg, \ + QtJniTypes::className<CLASS_NAME>().data()); \ + return JNI_FALSE; \ +} \ -static bool registerNatives(JNIEnv *env) +#define LEHUB_SCOPED_METHOD(Method) Q_JNI_NATIVE_SCOPED_METHOD(Method, LowEnergyNotificationHub) + +static bool registerNatives() { jclass clazz; - FIND_AND_CHECK_CLASS("org/qtproject/qt/android/bluetooth/QtBluetoothBroadcastReceiver"); - - if (env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])) < 0) { - __android_log_print(ANDROID_LOG_FATAL, logTag, "RegisterNatives for BroadcastReceiver failed"); + QJniEnvironment env; + + FIND_AND_CHECK_CLASS(QtJniTypes::QtBtBroadcastReceiver); + if (!env.registerNativeMethods(clazz, + { + Q_JNI_NATIVE_METHOD(QtBroadcastReceiver_jniOnReceive) + })) + { + __android_log_print(ANDROID_LOG_FATAL, logTag, + "registerNativeMethods for BroadcastReceiver failed"); return false; } - FIND_AND_CHECK_CLASS("org/qtproject/qt/android/bluetooth/QtBluetoothLE"); - if (env->RegisterNatives(clazz, methods_le, sizeof(methods_le) / sizeof(methods_le[0])) < 0) { - __android_log_print(ANDROID_LOG_FATAL, logTag, "RegisterNatives for QBLuetoothLE failed"); + FIND_AND_CHECK_CLASS(QtJniTypes::QtBtLECentral); + if (!env.registerNativeMethods(clazz, + { + Q_JNI_NATIVE_METHOD(QtBluetoothLE_leScanResult), + LEHUB_SCOPED_METHOD(lowEnergy_connectionChange), + LEHUB_SCOPED_METHOD(lowEnergy_mtuChanged), + LEHUB_SCOPED_METHOD(lowEnergy_servicesDiscovered), + LEHUB_SCOPED_METHOD(lowEnergy_serviceDetailsDiscovered), + LEHUB_SCOPED_METHOD(lowEnergy_characteristicRead), + LEHUB_SCOPED_METHOD(lowEnergy_descriptorRead), + LEHUB_SCOPED_METHOD(lowEnergy_characteristicWritten), + LEHUB_SCOPED_METHOD(lowEnergy_descriptorWritten), + LEHUB_SCOPED_METHOD(lowEnergy_characteristicChanged), + LEHUB_SCOPED_METHOD(lowEnergy_serviceError) + })) + { + __android_log_print(ANDROID_LOG_FATAL, logTag, + "registerNativeMethods for QBLuetoothLE failed"); return false; } - FIND_AND_CHECK_CLASS("org/qtproject/qt/android/bluetooth/QtBluetoothLEServer"); - if (env->RegisterNatives(clazz, methods_leServer, sizeof(methods_leServer) / sizeof(methods_leServer[0])) < 0) { - __android_log_print(ANDROID_LOG_FATAL, logTag, "RegisterNatives for QBLuetoothLEServer failed"); + FIND_AND_CHECK_CLASS(QtJniTypes::QtBtLEServer); + if (!env.registerNativeMethods(clazz, + { + LEHUB_SCOPED_METHOD(lowEnergy_connectionChange), + LEHUB_SCOPED_METHOD(lowEnergy_mtuChanged), + LEHUB_SCOPED_METHOD(lowEnergy_advertisementError), + LEHUB_SCOPED_METHOD(lowEnergy_serverCharacteristicChanged), + LEHUB_SCOPED_METHOD(lowEnergy_serverDescriptorWritten) + })) + { + __android_log_print(ANDROID_LOG_FATAL, logTag, + "registerNativeMethods for QBLuetoothLEServer failed"); return false; } - FIND_AND_CHECK_CLASS("org/qtproject/qt/android/bluetooth/QtBluetoothSocketServer"); - if (env->RegisterNatives(clazz, methods_server, sizeof(methods_server) / sizeof(methods_server[0])) < 0) { - __android_log_print(ANDROID_LOG_FATAL, logTag, "RegisterNatives for SocketServer failed"); + FIND_AND_CHECK_CLASS(QtJniTypes::QtBtSocketServer); + if (!env.registerNativeMethods(clazz, + { + Q_JNI_NATIVE_METHOD(QtBluetoothSocketServer_errorOccurred), + Q_JNI_NATIVE_METHOD(QtBluetoothSocketServer_newSocket) + })) + { + __android_log_print(ANDROID_LOG_FATAL, logTag, + "registerNativeMethods for SocketServer failed"); return false; } - FIND_AND_CHECK_CLASS("org/qtproject/qt/android/bluetooth/QtBluetoothInputStreamThread"); - if (env->RegisterNatives(clazz, methods_inputStream, - sizeof(methods_inputStream) / sizeof(methods_inputStream[0])) < 0) { - __android_log_print(ANDROID_LOG_FATAL, logTag, "RegisterNatives for InputStreamThread failed"); + FIND_AND_CHECK_CLASS(QtJniTypes::QtBtInputStreamThread); + if (!env.registerNativeMethods(clazz, + { + Q_JNI_NATIVE_METHOD(QtBluetoothInputStreamThread_errorOccurred), + Q_JNI_NATIVE_METHOD(QtBluetoothInputStreamThread_readyData) + })) + { + __android_log_print(ANDROID_LOG_FATAL, logTag, + "registerNativeMethods for InputStreamThread failed"); return false; } @@ -284,8 +278,7 @@ Q_BLUETOOTH_EXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* /*reserved*/) return -1; } - JNIEnv *env = uenv.nativeEnvironment; - if (!registerNatives(env)) { + if (!registerNatives()) { __android_log_print(ANDROID_LOG_FATAL, logTag, "registerNatives failed"); return -1; } diff --git a/src/bluetooth/android/jni_android_p.h b/src/bluetooth/android/jni_android_p.h index d5b2e1e0..d4da9075 100644 --- a/src/bluetooth/android/jni_android_p.h +++ b/src/bluetooth/android/jni_android_p.h @@ -18,6 +18,7 @@ #include "qbluetooth.h" #include <QtCore/QJniObject> #include <QtCore/private/qglobal_p.h> +#include <QtCore/qcoreapplication_platform.h> QT_BEGIN_NAMESPACE diff --git a/src/bluetooth/android/lowenergynotificationhub.cpp b/src/bluetooth/android/lowenergynotificationhub.cpp index b1040d5c..0e5945a3 100644 --- a/src/bluetooth/android/lowenergynotificationhub.cpp +++ b/src/bluetooth/android/lowenergynotificationhub.cpp @@ -90,7 +90,7 @@ void LowEnergyNotificationHub::lowEnergy_mtuChanged( } void LowEnergyNotificationHub::lowEnergy_servicesDiscovered( - JNIEnv *, jobject, jlong qtObject, jint errorCode, jobject uuidList) + JNIEnv *, jobject, jlong qtObject, jint errorCode, jstring uuidList) { lock.lockForRead(); LowEnergyNotificationHub *hub = hubMap()->value(qtObject); @@ -106,7 +106,7 @@ void LowEnergyNotificationHub::lowEnergy_servicesDiscovered( } void LowEnergyNotificationHub::lowEnergy_serviceDetailsDiscovered( - JNIEnv *, jobject, jlong qtObject, jobject uuid, jint startHandle, + JNIEnv *, jobject, jlong qtObject, jstring uuid, jint startHandle, jint endHandle) { lock.lockForRead(); @@ -124,8 +124,8 @@ void LowEnergyNotificationHub::lowEnergy_serviceDetailsDiscovered( } void LowEnergyNotificationHub::lowEnergy_characteristicRead( - JNIEnv *env, jobject, jlong qtObject, jobject sUuid, jint handle, - jobject cUuid, jint properties, jbyteArray data) + JNIEnv *env, jobject, jlong qtObject, jstring sUuid, jint handle, + jstring cUuid, jint properties, jbyteArray data) { lock.lockForRead(); LowEnergyNotificationHub *hub = hubMap()->value(qtObject); @@ -159,8 +159,8 @@ void LowEnergyNotificationHub::lowEnergy_characteristicRead( } void LowEnergyNotificationHub::lowEnergy_descriptorRead( - JNIEnv *env, jobject, jlong qtObject, jobject sUuid, jobject cUuid, - jint handle, jobject dUuid, jbyteArray data) + JNIEnv *env, jobject, jlong qtObject, jstring sUuid, jstring cUuid, + jint handle, jstring dUuid, jbyteArray data) { lock.lockForRead(); LowEnergyNotificationHub *hub = hubMap()->value(qtObject); @@ -244,7 +244,8 @@ void LowEnergyNotificationHub::lowEnergy_descriptorWritten( } void LowEnergyNotificationHub::lowEnergy_serverDescriptorWritten( - JNIEnv *env, jobject, jlong qtObject, jobject descriptor, jbyteArray newValue) + JNIEnv *env, jobject, jlong qtObject, QtJniTypes::BluetoothGattDescriptor descriptor, + jbyteArray newValue) { lock.lockForRead(); LowEnergyNotificationHub *hub = hubMap()->value(qtObject); @@ -287,7 +288,8 @@ void LowEnergyNotificationHub::lowEnergy_characteristicChanged( } void LowEnergyNotificationHub::lowEnergy_serverCharacteristicChanged( - JNIEnv *env, jobject, jlong qtObject, jobject characteristic, jbyteArray newValue) + JNIEnv *env, jobject, jlong qtObject, + QtJniTypes::BluetoothGattCharacteristic characteristic, jbyteArray newValue) { lock.lockForRead(); LowEnergyNotificationHub *hub = hubMap()->value(qtObject); diff --git a/src/bluetooth/android/lowenergynotificationhub_p.h b/src/bluetooth/android/lowenergynotificationhub_p.h index 222dbbed..ac407057 100644 --- a/src/bluetooth/android/lowenergynotificationhub_p.h +++ b/src/bluetooth/android/lowenergynotificationhub_p.h @@ -22,6 +22,7 @@ #include <QtBluetooth/QLowEnergyController> #include <QtBluetooth/QLowEnergyService> #include <QtCore/private/qglobal_p.h> +#include "android/jni_android_p.h" #include <jni.h> #include <QtBluetooth/QLowEnergyCharacteristic> @@ -38,36 +39,71 @@ public: static void lowEnergy_connectionChange(JNIEnv*, jobject, jlong qtObject, jint errorCode, jint newState); - static void lowEnergy_mtuChanged(JNIEnv*, jobject, jlong qtObject, - jint mtu); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_connectionChange, + leConnectionStateChange) + + static void lowEnergy_mtuChanged(JNIEnv*, jobject, jlong qtObject, jint mtu); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_mtuChanged, leMtuChanged) + static void lowEnergy_servicesDiscovered(JNIEnv*, jobject, jlong qtObject, - jint errorCode, jobject uuidList); + jint errorCode, jstring uuidList); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_servicesDiscovered, + leServicesDiscovered) + static void lowEnergy_serviceDetailsDiscovered(JNIEnv *, jobject, - jlong qtObject, jobject uuid, + jlong qtObject, jstring uuid, jint startHandle, jint endHandle); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_serviceDetailsDiscovered, + leServiceDetailDiscoveryFinished) + static void lowEnergy_characteristicRead(JNIEnv*env, jobject, jlong qtObject, - jobject serviceUuid, - jint handle, jobject charUuid, + jstring serviceUuid, + jint handle, jstring charUuid, jint properties, jbyteArray data); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_characteristicRead, + leCharacteristicRead) + static void lowEnergy_descriptorRead(JNIEnv *env, jobject, jlong qtObject, - jobject sUuid, jobject cUuid, - jint handle, jobject dUuid, jbyteArray data); + jstring sUuid, jstring cUuid, + jint handle, jstring dUuid, jbyteArray data); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_descriptorRead, leDescriptorRead) + static void lowEnergy_characteristicWritten(JNIEnv *, jobject, jlong qtObject, jint charHandle, jbyteArray data, jint errorCode); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_characteristicWritten, + leCharacteristicWritten) + static void lowEnergy_descriptorWritten(JNIEnv *, jobject, jlong qtObject, jint descHandle, jbyteArray data, jint errorCode); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_descriptorWritten, + leDescriptorWritten) + static void lowEnergy_serverDescriptorWritten(JNIEnv *, jobject, jlong qtObject, - jobject descriptor, jbyteArray newValue); + QtJniTypes::BluetoothGattDescriptor descriptor, + jbyteArray newValue); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_serverDescriptorWritten, + leServerDescriptorWritten) + static void lowEnergy_characteristicChanged(JNIEnv *, jobject, jlong qtObject, jint charHandle, jbyteArray data); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_characteristicChanged, + leCharacteristicChanged) + static void lowEnergy_serverCharacteristicChanged(JNIEnv *, jobject, jlong qtObject, - jobject characteristic, jbyteArray newValue); + QtJniTypes::BluetoothGattCharacteristic characteristic, + jbyteArray newValue); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_serverCharacteristicChanged, + leServerCharacteristicChanged) + static void lowEnergy_serviceError(JNIEnv *, jobject, jlong qtObject, jint attributeHandle, int errorCode); - static void lowEnergy_advertisementError(JNIEnv *, jobject, jlong qtObject, - jint status); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_serviceError, leServiceError) + + static void lowEnergy_advertisementError(JNIEnv *, jobject, jlong qtObject, jint status); + Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(lowEnergy_advertisementError, + leServerAdvertisementError) QJniObject javaObject() { |