summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/android
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@theqtcompany.com>2014-11-11 13:27:55 +0100
committerAlex Blasche <alexander.blasche@theqtcompany.com>2014-11-12 15:59:16 +0100
commit2f4269da610083795440545c7f191eea1c9c3c4c (patch)
tree119c6318b7678191af94f8aa1fc72e4572459ebe /src/bluetooth/android
parent51dbe4a457c0bf81b96c898aab5d83b421e7a4f0 (diff)
Support for QLEService::writeCharacteristic() on Android
Currently only the WriteWithResponse mode works and has been tested. Change-Id: I7947b67f737f5878a01704c09d3a9a532a41b820 Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com> Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/bluetooth/android')
-rw-r--r--src/bluetooth/android/jni_android.cpp2
-rw-r--r--src/bluetooth/android/lowenergynotificationhub.cpp25
-rw-r--r--src/bluetooth/android/lowenergynotificationhub_p.h5
3 files changed, 32 insertions, 0 deletions
diff --git a/src/bluetooth/android/jni_android.cpp b/src/bluetooth/android/jni_android.cpp
index 745a0c98..f98762b7 100644
--- a/src/bluetooth/android/jni_android.cpp
+++ b/src/bluetooth/android/jni_android.cpp
@@ -209,6 +209,8 @@ static JNINativeMethod methods_le[] = {
(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},
};
static JNINativeMethod methods_server[] = {
diff --git a/src/bluetooth/android/lowenergynotificationhub.cpp b/src/bluetooth/android/lowenergynotificationhub.cpp
index 30b69edc..4995dc0e 100644
--- a/src/bluetooth/android/lowenergynotificationhub.cpp
+++ b/src/bluetooth/android/lowenergynotificationhub.cpp
@@ -210,4 +210,29 @@ void LowEnergyNotificationHub::lowEnergy_descriptorRead(
Q_ARG(QByteArray, payload));
}
+void LowEnergyNotificationHub::lowEnergy_characteristicWritten(
+ JNIEnv *env, jobject, jlong qtObject, jint charHandle,
+ jbyteArray data, jint errorCode)
+{
+ lock.lockForRead();
+ LowEnergyNotificationHub *hub = hubMap()->value(qtObject);
+ lock.unlock();
+ if (!hub)
+ return;
+
+ QByteArray payload;
+ if (data) { //empty Java byte array is 0x0
+ jsize length = env->GetArrayLength(data);
+ payload.resize(length);
+ env->GetByteArrayRegion(data, 0, length,
+ reinterpret_cast<signed char*>(payload.data()));
+ }
+
+ QMetaObject::invokeMethod(hub, "characteristicWritten", Qt::QueuedConnection,
+ Q_ARG(int, charHandle),
+ Q_ARG(QByteArray, payload),
+ Q_ARG(QLowEnergyService::ServiceError,
+ (QLowEnergyService::ServiceError)errorCode));
+}
+
QT_END_NAMESPACE
diff --git a/src/bluetooth/android/lowenergynotificationhub_p.h b/src/bluetooth/android/lowenergynotificationhub_p.h
index 39008a65..49705799 100644
--- a/src/bluetooth/android/lowenergynotificationhub_p.h
+++ b/src/bluetooth/android/lowenergynotificationhub_p.h
@@ -68,6 +68,9 @@ public:
static void lowEnergy_descriptorRead(JNIEnv *env, jobject, jlong qtObject,
jobject sUuid, jobject cUuid,
jint handle, jobject dUuid, jbyteArray data);
+ static void lowEnergy_characteristicWritten(JNIEnv *, jobject, jlong qtObject,
+ jint charHandle, jbyteArray data,
+ jint errorCode);
QAndroidJniObject javaObject()
{
@@ -85,6 +88,8 @@ signals:
int properties, const QByteArray &data);
void descriptorRead(const QBluetoothUuid &serviceUuid, const QBluetoothUuid &charUuid,
int handle, const QBluetoothUuid &descUuid, const QByteArray &data);
+ void characteristicWritten(int charHandle, const QByteArray &data,
+ QLowEnergyService::ServiceError errorCode);
public slots:
private: