diff options
author | Alex Blasche <alexander.blasche@digia.com> | 2014-07-17 11:24:29 +0200 |
---|---|---|
committer | Alex Blasche <alexander.blasche@digia.com> | 2014-07-17 11:24:29 +0200 |
commit | 091322bcd89e8a68ac4cd660055ffa5c270df276 (patch) | |
tree | af20f8232f81700f2934eccd2c98d2c78d5f8b33 | |
parent | b5709787c9d68108bb44f6032427db3796bbdbdd (diff) | |
parent | 0d7c0661a538896c94a3493d9c97fca07cc526d7 (diff) |
Merge branch '5.3' into dev
Conflicts:
src/bluetooth/bluez/bluez.pri
src/bluetooth/qbluetoothsocket_bluez.cpp
Change-Id: Ieca8f2a327bf54b42403ddab88f8b9c3ff6b4a95
-rw-r--r-- | src/bluetooth/bluez/bluez.pri | 4 | ||||
-rw-r--r-- | src/bluetooth/bluez/bluez5_helper.cpp | 1 | ||||
-rw-r--r-- | src/bluetooth/bluez/bluez5_helper_p.h | 8 | ||||
-rw-r--r-- | src/bluetooth/bluez/bluez_data_p.h | 87 | ||||
-rw-r--r-- | src/bluetooth/bluez/objectmanager_p.h | 5 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothserver.cpp | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothserver_bluez.cpp | 5 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_android.cpp | 17 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_bluez.cpp | 5 | ||||
-rw-r--r-- | tests/bttestui/btlocaldevice.cpp | 26 | ||||
-rw-r--r-- | tests/bttestui/btlocaldevice.h | 1 | ||||
-rw-r--r-- | tests/bttestui/main.qml | 5 |
12 files changed, 145 insertions, 21 deletions
diff --git a/src/bluetooth/bluez/bluez.pri b/src/bluetooth/bluez/bluez.pri index 851949d2..6079c267 100644 --- a/src/bluetooth/bluez/bluez.pri +++ b/src/bluetooth/bluez/bluez.pri @@ -29,8 +29,8 @@ HEADERS += bluez/manager_p.h \ bluez/profile1_p.h \ bluez/obex_client1_bluez5_p.h \ bluez/obex_objectpush1_bluez5_p.h \ - bluez/obex_transfer1_bluez5_p.h - + bluez/obex_transfer1_bluez5_p.h \ + bluez/bluez_data_p.h SOURCES += bluez/manager.cpp \ bluez/adapter.cpp \ diff --git a/src/bluetooth/bluez/bluez5_helper.cpp b/src/bluetooth/bluez/bluez5_helper.cpp index 18ab22b1..c00ac5aa 100644 --- a/src/bluetooth/bluez/bluez5_helper.cpp +++ b/src/bluetooth/bluez/bluez5_helper.cpp @@ -46,6 +46,7 @@ #include "objectmanager_p.h" #include "properties_p.h" #include "adapter1_bluez5_p.h" +#include <bluetooth/sdp.h> #include <bluetooth/sdp_lib.h> QT_BEGIN_NAMESPACE diff --git a/src/bluetooth/bluez/bluez5_helper_p.h b/src/bluetooth/bluez/bluez5_helper_p.h index 36595f9c..d8d0ef01 100644 --- a/src/bluetooth/bluez/bluez5_helper_p.h +++ b/src/bluetooth/bluez/bluez5_helper_p.h @@ -44,9 +44,12 @@ #include <QtCore/QObject> #include <QtDBus/QtDBus> -#include <bluetooth/sdp.h> #include <QtBluetooth/QBluetoothAddress> +#ifndef NO_BLUEZ_INCLUDES +#include <bluetooth/sdp.h> +#endif + typedef QMap<QString, QVariantMap> InterfaceList; typedef QMap<QDBusObjectPath, InterfaceList> ManagedObjectList; @@ -57,7 +60,10 @@ QT_BEGIN_NAMESPACE bool isBluez5(); +#ifndef NO_BLUEZ_INCLUDES QByteArray parseSdpRecord(sdp_record_t *record); +#endif + QString findAdapterForAddress(const QBluetoothAddress &wantedAddress, bool *ok); class QtBluezDiscoveryManagerPrivate; diff --git a/src/bluetooth/bluez/bluez_data_p.h b/src/bluetooth/bluez/bluez_data_p.h new file mode 100644 index 00000000..822f53b9 --- /dev/null +++ b/src/bluetooth/bluez/bluez_data_p.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtBluetooth module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BLUEZ_DATA_P_H +#define BLUEZ_DATA_P_H + +#include <QtCore/qglobal.h> +#include <sys/socket.h> + +#define BTPROTO_L2CAP 0 +#define BTPROTO_RFCOMM 3 + +#define SOL_L2CAP 6 +#define SOL_RFCOMM 18 + +#define RFCOMM_LM 0x03 + +#define RFCOMM_LM_AUTH 0x0002 +#define RFCOMM_LM_ENCRYPT 0x0004 +#define RFCOMM_LM_TRUSTED 0x0008 +#define RFCOMM_LM_SECURE 0x0020 + +#define L2CAP_LM 0x03 +#define L2CAP_LM_AUTH 0x0002 +#define L2CAP_LM_ENCRYPT 0x0004 +#define L2CAP_LM_TRUSTED 0x0008 +#define L2CAP_LM_SECURE 0x0020 + +// Bluetooth address +typedef struct { + quint8 b[6]; +} __attribute__((packed)) bdaddr_t; + +// L2CP socket +struct sockaddr_l2 { + sa_family_t l2_family; + unsigned short l2_psm; + bdaddr_t l2_bdaddr; + unsigned short l2_cid; +}; + +// RFCOMM socket +struct sockaddr_rc { + sa_family_t rc_family; + bdaddr_t rc_bdaddr; + quint8 rc_channel; +}; + +#endif // BLUEZ_DATA_P_H diff --git a/src/bluetooth/bluez/objectmanager_p.h b/src/bluetooth/bluez/objectmanager_p.h index 6acf3d6d..5ecde487 100644 --- a/src/bluetooth/bluez/objectmanager_p.h +++ b/src/bluetooth/bluez/objectmanager_p.h @@ -19,6 +19,11 @@ #include <QtCore/QStringList> #include <QtCore/QVariant> #include <QtDBus/QtDBus> + +/* Temporary hack to merge branches until Bluez headers are removed + * from bluez5_helpers_p.h. + */ +#define NO_BLUEZ_INCLUDES #include "bluez5_helper_p.h" /* diff --git a/src/bluetooth/qbluetoothserver.cpp b/src/bluetooth/qbluetoothserver.cpp index 8665e33e..3123b032 100644 --- a/src/bluetooth/qbluetoothserver.cpp +++ b/src/bluetooth/qbluetoothserver.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2013 BlackBerry Limited. All rights reserved. ** Contact: http://www.qt-project.org/legal ** diff --git a/src/bluetooth/qbluetoothserver_bluez.cpp b/src/bluetooth/qbluetoothserver_bluez.cpp index e5967f7a..4532e570 100644 --- a/src/bluetooth/qbluetoothserver_bluez.cpp +++ b/src/bluetooth/qbluetoothserver_bluez.cpp @@ -43,14 +43,11 @@ #include "qbluetoothserver_p.h" #include "qbluetoothsocket.h" #include "qbluetoothlocaldevice.h" +#include "bluez/bluez_data_p.h" #include <QtCore/QLoggingCategory> #include <QtCore/QSocketNotifier> -#include <bluetooth/bluetooth.h> -#include <bluetooth/rfcomm.h> -#include <bluetooth/l2cap.h> - #include <errno.h> QT_BEGIN_NAMESPACE diff --git a/src/bluetooth/qbluetoothsocket_android.cpp b/src/bluetooth/qbluetoothsocket_android.cpp index f2969da8..d499b6ad 100644 --- a/src/bluetooth/qbluetoothsocket_android.cpp +++ b/src/bluetooth/qbluetoothsocket_android.cpp @@ -98,6 +98,8 @@ void QBluetoothSocketPrivate::connectToServiceConc(const QBluetoothAddress &addr Q_Q(QBluetoothSocket); Q_UNUSED(openMode); + qCDebug(QT_BT_ANDROID) << "connectToServiceConc()" << address.toString() << uuid.toString(); + if (!adapter.isValid()) { qCWarning(QT_BT_ANDROID) << "Device does not support Bluetooth"; errorString = QBluetoothSocket::tr("Device does not support Bluetooth"); @@ -157,7 +159,7 @@ void QBluetoothSocketPrivate::connectToServiceConc(const QBluetoothAddress &addr } socketObject.callMethod<void>("connect"); - if (env->ExceptionCheck() || socketObject.callMethod<jboolean>("isConnected") == JNI_FALSE) { + if (env->ExceptionCheck()) { if (env->ExceptionCheck()) { env->ExceptionDescribe(); env->ExceptionClear(); @@ -383,14 +385,11 @@ void QBluetoothSocketPrivate::inputThreadError(int errorCode) //cleanup internal objects //if it was call to local close()/abort() the objects are cleaned up already - bool stillConnected = socketObject.callMethod<jboolean>("isConnected"); - if (stillConnected) { - QAndroidJniEnvironment env; - socketObject.callMethod<void>("close"); - if (env->ExceptionCheck()) { - env->ExceptionDescribe(); - env->ExceptionClear(); - } + QAndroidJniEnvironment env; + socketObject.callMethod<void>("close"); + if (env->ExceptionCheck()) { + env->ExceptionDescribe(); + env->ExceptionClear(); } inputStream = outputStream = remoteDevice = socketObject = QAndroidJniObject(); diff --git a/src/bluetooth/qbluetoothsocket_bluez.cpp b/src/bluetooth/qbluetoothsocket_bluez.cpp index cfa6ef65..57071153 100644 --- a/src/bluetooth/qbluetoothsocket_bluez.cpp +++ b/src/bluetooth/qbluetoothsocket_bluez.cpp @@ -45,16 +45,13 @@ #include "bluez/manager_p.h" #include "bluez/adapter_p.h" #include "bluez/device_p.h" -#include "bluez/bluez5_helper_p.h" #include "bluez/objectmanager_p.h" #include <QtBluetooth/QBluetoothLocalDevice> +#include "bluez/bluez_data_p.h" #include <qplatformdefs.h> #include <QtCore/QLoggingCategory> -#include <bluetooth/bluetooth.h> -#include <bluetooth/rfcomm.h> -#include <bluetooth/l2cap.h> #include <errno.h> #include <unistd.h> diff --git a/tests/bttestui/btlocaldevice.cpp b/tests/bttestui/btlocaldevice.cpp index 92446fd0..3447de1a 100644 --- a/tests/bttestui/btlocaldevice.cpp +++ b/tests/bttestui/btlocaldevice.cpp @@ -266,6 +266,8 @@ void BtLocalDevice::stopDiscovery() void BtLocalDevice::startServiceDiscovery(bool isMinimalDiscovery) { if (serviceAgent) { + serviceAgent->setRemoteAddress(QBluetoothAddress()); + qDebug() << "###### Starting service discovery process"; serviceAgent->start(isMinimalDiscovery ? QBluetoothServiceDiscoveryAgent::MinimalDiscovery @@ -273,6 +275,24 @@ void BtLocalDevice::startServiceDiscovery(bool isMinimalDiscovery) } } +void BtLocalDevice::startTargettedServiceDiscovery() +{ + if (serviceAgent) { + const QBluetoothAddress baddr(BTCHAT_DEVICE_ADDR); + qDebug() << "###### Starting service discovery on" + << baddr.toString(); + if (baddr.isNull()) + return; + + if (!serviceAgent->setRemoteAddress(baddr)) { + qWarning() << "###### Cannot set remote address. Aborting"; + return; + } + + serviceAgent->start(); + } +} + void BtLocalDevice::stopServiceDiscovery() { if (serviceAgent) { @@ -401,6 +421,12 @@ void BtLocalDevice::abortSocket() qDebug() << "###### Disconnecting socket"; socket->abort(); } + + if (!serverSockets.isEmpty()) { + qDebug() << "###### Closing server sockets"; + foreach (QBluetoothSocket *s, serverSockets) + s->abort(); + } } void BtLocalDevice::socketConnected() diff --git a/tests/bttestui/btlocaldevice.h b/tests/bttestui/btlocaldevice.h index 759599b7..01d9b0df 100644 --- a/tests/bttestui/btlocaldevice.h +++ b/tests/bttestui/btlocaldevice.h @@ -87,6 +87,7 @@ public slots: //QBluetoothServiceDiscoveryAgent void startServiceDiscovery(bool isMinimalDiscovery); + void startTargettedServiceDiscovery(); void stopServiceDiscovery(); void serviceDiscovered(const QBluetoothServiceInfo &info); void serviceDiscoveryFinished(); diff --git a/tests/bttestui/main.qml b/tests/bttestui/main.qml index d53aa4e1..93d943f2 100644 --- a/tests/bttestui/main.qml +++ b/tests/bttestui/main.qml @@ -168,6 +168,11 @@ Rectangle { onClicked: device.startServiceDiscovery(false) } Button { + id: startRemoteSDiscBtn + buttonText: "StartRemSDisc" + onClicked: device.startTargettedServiceDiscovery() + } + Button { buttonText: "StopSDisc" onClicked: device.stopServiceDiscovery(); } |