diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-04-06 03:03:41 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-04-06 03:03:41 +0200 |
commit | d1d8feec751abdf872c4f13e0253202f87c19d1a (patch) | |
tree | 6c451156c3023c10e84af8c22d3b1085b57cdbb7 | |
parent | 845e185b2881210b8f3a0dc25926c3d74b0008bf (diff) | |
parent | a54b8af5c73284119686b762cf4bbbaa2e0dd1cf (diff) |
Merge remote-tracking branch 'origin/5.12' into 5.13v5.13.0-beta2
Change-Id: Ieeeab88ca3afd1fb42aafb9e05bf426caec065ef
-rw-r--r-- | src/bluetooth/android/servicediscoverybroadcastreceiver.cpp | 3 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_android.cpp | 15 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothservicediscoveryagent_android.cpp | 6 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_android.cpp | 50 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_android_p.h | 2 | ||||
-rw-r--r-- | tests/bttestui/btlocaldevice.cpp | 6 |
6 files changed, 44 insertions, 38 deletions
diff --git a/src/bluetooth/android/servicediscoverybroadcastreceiver.cpp b/src/bluetooth/android/servicediscoverybroadcastreceiver.cpp index be1953d5..283db623 100644 --- a/src/bluetooth/android/servicediscoverybroadcastreceiver.cpp +++ b/src/bluetooth/android/servicediscoverybroadcastreceiver.cpp @@ -99,7 +99,6 @@ QList<QBluetoothUuid> ServiceDiscoveryBroadcastReceiver::convertParcelableArray( { QList<QBluetoothUuid> result; QAndroidJniEnvironment env; - QAndroidJniObject p; jobjectArray parcels = parcelUuidArray.object<jobjectArray>(); if (!parcels) @@ -107,7 +106,7 @@ QList<QBluetoothUuid> ServiceDiscoveryBroadcastReceiver::convertParcelableArray( jint size = env->GetArrayLength(parcels); for (int i = 0; i < size; i++) { - p = env->GetObjectArrayElement(parcels, i); + auto p = QAndroidJniObject::fromLocalRef(env->GetObjectArrayElement(parcels, i)); QBluetoothUuid uuid(p.callObjectMethod<jstring>("toString").toString()); //qCDebug(QT_BT_ANDROID) << uuid.toString(); diff --git a/src/bluetooth/qbluetoothlocaldevice_android.cpp b/src/bluetooth/qbluetoothlocaldevice_android.cpp index b46923eb..40e4c2d4 100644 --- a/src/bluetooth/qbluetoothlocaldevice_android.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_android.cpp @@ -90,23 +90,16 @@ static QAndroidJniObject getDefaultAdapter() QAndroidJniObject adapter = QAndroidJniObject::callStaticObjectMethod( "android/bluetooth/BluetoothAdapter", "getDefaultAdapter", "()Landroid/bluetooth/BluetoothAdapter;"); + QAndroidJniExceptionCleaner exCleaner{QAndroidJniExceptionCleaner::OutputMode::Verbose}; if (!adapter.isValid()) { - QAndroidJniEnvironment env; - if (env->ExceptionCheck()) { - env->ExceptionDescribe(); - env->ExceptionClear(); - } + exCleaner.clean(); // workaround stupid bt implementations where first call of BluetoothAdapter.getDefaultAdapter() always fails adapter = QAndroidJniObject::callStaticObjectMethod( "android/bluetooth/BluetoothAdapter", "getDefaultAdapter", "()Landroid/bluetooth/BluetoothAdapter;"); - if (!adapter.isValid()) { - if (env->ExceptionCheck()) { - env->ExceptionDescribe(); - env->ExceptionClear(); - } - } + if (!adapter.isValid()) + exCleaner.clean(); } return adapter; } diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp index ddc53421..e607a27e 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp +++ b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp @@ -47,6 +47,7 @@ #include <QtBluetooth/QBluetoothServiceDiscoveryAgent> #include "qbluetoothservicediscoveryagent_p.h" +#include "qbluetoothsocket_android_p.h" #include "android/servicediscoverybroadcastreceiver_p.h" #include "android/localdevicebroadcastreceiver_p.h" @@ -449,8 +450,11 @@ void QBluetoothServiceDiscoveryAgentPrivate::populateDiscoveredServices(const QB //Check if the service is in the uuidFilter if (!uuidFilter.isEmpty()) { bool match = uuidFilter.contains(serviceInfo.serviceUuid()); - for (const auto &uuid : qAsConst(uuidFilter)) + match |= uuidFilter.contains(QBluetoothSocketPrivateAndroid::reverseUuid(serviceInfo.serviceUuid())); + for (const auto &uuid : qAsConst(uuidFilter)) { match |= serviceInfo.serviceClassUuids().contains(uuid); + match |= serviceInfo.serviceClassUuids().contains(QBluetoothSocketPrivateAndroid::reverseUuid(uuid)); + } if (!match) continue; diff --git a/src/bluetooth/qbluetoothsocket_android.cpp b/src/bluetooth/qbluetoothsocket_android.cpp index d7f17d17..46bd4a23 100644 --- a/src/bluetooth/qbluetoothsocket_android.cpp +++ b/src/bluetooth/qbluetoothsocket_android.cpp @@ -182,30 +182,6 @@ private: QPointer<SocketConnectWorker> workerPointer; }; -/* - * This function is part of a workaround for QTBUG-61392 - * - * Returns null uuid if the given \a serviceUuid is not a uuid - * derived from the Bluetooth base uuid. - */ -static QBluetoothUuid reverseUuid(const QBluetoothUuid &serviceUuid) -{ - if (serviceUuid.isNull()) - return QBluetoothUuid(); - - bool isBaseUuid = false; - serviceUuid.toUInt32(&isBaseUuid); - if (isBaseUuid) - return serviceUuid; - - const quint128 original = serviceUuid.toUInt128(); - quint128 reversed; - for (int i = 0; i < 16; i++) - reversed.data[15-i] = original.data[i]; - - return QBluetoothUuid(reversed); -} - QBluetoothSocketPrivateAndroid::QBluetoothSocketPrivateAndroid() : inputThread(0) @@ -942,6 +918,32 @@ qint64 QBluetoothSocketPrivateAndroid::bytesToWrite() const return 0; // nothing because always unbuffered } +/* + * This function is part of a workaround for QTBUG-61392 + * + * Returns null uuid if the given \a serviceUuid is not a uuid + * derived from the Bluetooth base uuid. + */ +QBluetoothUuid QBluetoothSocketPrivateAndroid::reverseUuid(const QBluetoothUuid &serviceUuid) +{ + if (QtAndroid::androidSdkVersion() < 23) + return serviceUuid; + + if (serviceUuid.isNull()) + return QBluetoothUuid(); + + bool isBaseUuid = false; + serviceUuid.toUInt32(&isBaseUuid); + if (isBaseUuid) + return serviceUuid; + + const quint128 original = serviceUuid.toUInt128(); + quint128 reversed; + for (int i = 0; i < 16; i++) + reversed.data[15-i] = original.data[i]; + return QBluetoothUuid{reversed}; +} + bool QBluetoothSocketPrivateAndroid::canReadLine() const { // We cannot access buffer directly as it is part of different thread diff --git a/src/bluetooth/qbluetoothsocket_android_p.h b/src/bluetooth/qbluetoothsocket_android_p.h index 7bf42e32..042e1bcd 100644 --- a/src/bluetooth/qbluetoothsocket_android_p.h +++ b/src/bluetooth/qbluetoothsocket_android_p.h @@ -112,6 +112,8 @@ public: bool canReadLine() const override; qint64 bytesToWrite() const override; + static QBluetoothUuid reverseUuid(const QBluetoothUuid &serviceUuid); + QAndroidJniObject adapter; QAndroidJniObject socketObject; QAndroidJniObject remoteDevice; diff --git a/tests/bttestui/btlocaldevice.cpp b/tests/bttestui/btlocaldevice.cpp index fb3a0270..55b99fc3 100644 --- a/tests/bttestui/btlocaldevice.cpp +++ b/tests/bttestui/btlocaldevice.cpp @@ -93,6 +93,9 @@ BtLocalDevice::BtLocalDevice(QObject *parent) : connect(socket, &QBluetoothSocket::connected, this, &BtLocalDevice::socketConnected); connect(socket, &QBluetoothSocket::disconnected, this, &BtLocalDevice::socketDisconnected); connect(socket, &QIODevice::readyRead, this, &BtLocalDevice::readData); + connect(socket, &QBluetoothSocket::bytesWritten, this, [](qint64 bytesWritten){ + qDebug() << "Bytes Written to Client socket:" << bytesWritten; + }); setSecFlags(static_cast<int>(socket->preferredSecurityFlags())); server = new QBluetoothServer(SOCKET_PROTOCOL, this); @@ -682,6 +685,9 @@ void BtLocalDevice::serverNewConnection() connect(client, QOverload<QBluetoothSocket::SocketError>::of(&QBluetoothSocket::error), this, &BtLocalDevice::socketError); connect(client, &QBluetoothSocket::connected, this, &BtLocalDevice::socketConnected); + connect(client, &QBluetoothSocket::bytesWritten, this, [](qint64 bytesWritten){ + qDebug() << "Bytes Written to Server socket:" << bytesWritten; + }); serverSockets.append(client); } |