diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-16 21:52:03 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-16 21:52:03 +0100 |
commit | eef68dea35960670c1a1a1431d4541e1ed19c781 (patch) | |
tree | 097e6575b0cbc43704077d76372c986dcce3c998 | |
parent | fa2389dd0a6df58d73d221654db36ff791b96e43 (diff) | |
parent | c87458961f29064ab69a308526b0243debcdf1f7 (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts:
.qmake.conf
src/bluetooth/qlowenergycontroller_bluez.cpp
Change-Id: I00f45a2a22a045e7836f2caeb76cc5599ced6279
-rw-r--r-- | .gitignore | 10 | ||||
-rw-r--r-- | dist/changes-5.6.0 | 89 | ||||
-rw-r--r-- | qtconnectivity.pro | 2 | ||||
-rw-r--r-- | src/bluetooth/android/inputstreamthread.cpp | 2 | ||||
-rw-r--r-- | src/bluetooth/android/inputstreamthread_p.h | 2 | ||||
-rw-r--r-- | src/bluetooth/bluez/hcimanager.cpp | 2 | ||||
-rw-r--r-- | src/bluetooth/doc/src/bluetooth-index.qdoc | 26 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller.cpp | 3 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_android.cpp | 4 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_bluez.cpp | 19 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_p.cpp | 4 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_p.h | 2 | ||||
-rw-r--r-- | src/imports/bluetooth/plugins.qmltypes | 267 | ||||
-rw-r--r-- | src/imports/nfc/plugins.qmltypes | 2 | ||||
-rw-r--r-- | src/nfc/doc/src/nfc-index.qdoc | 14 | ||||
-rw-r--r-- | src/nfc/qqmlndefrecord.cpp | 3 |
16 files changed, 178 insertions, 273 deletions
@@ -20,6 +20,15 @@ qrc_*.cpp *.moc *so-deployment-settings.json .qmake.cache +.pch +QtBluetooth.version* +QtNfc.version* +target_wrapper.sh +uic_wrapper.sh +qdoc_wrapper.sh +qhelpgenerator_wrapper.sh +qmlplugindump_wrapper.sh +qdbusxml2cpp_wrapper.sh config.log tmp imports/* @@ -29,6 +38,7 @@ config.tests/bluez_le/bluez_le examples/bluetooth/btchat/btchat examples/bluetooth/btfiletransfer/btfiletransfer examples/bluetooth/btscanner/btscanner +examples/bluetooth/chat/qml_chat examples/bluetooth/heartlistener/heartlistener examples/bluetooth/lowenergyscanner/lowenergyscanner examples/bluetooth/pingpong/pingpong diff --git a/dist/changes-5.6.0 b/dist/changes-5.6.0 new file mode 100644 index 00000000..3d34719f --- /dev/null +++ b/dist/changes-5.6.0 @@ -0,0 +1,89 @@ +Qt 5.6 introduces new features and improvements as well as bugfixes +over the 5.5.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + + http://doc.qt.io/qt-5/index.html + +The Qt version 5.6 series is binary compatible with the 5.5.x series. +Applications compiled for 5.5 will continue to run with 5.6. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + + https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Library * +**************************************************************************** + +QtBluetooth +----------- + + - [QTBUG-46377] Added QBluetoothSocket::(set)preferredSecurityFlag(). + - Q_DECLARE_METATYPE declarations added for various Q_ENUMS + - Fixed crash in btscanner example + - Added several documentation fixes + - Fixed wrong emission of CharacteristicWriteError where CharacteristicReadError + should have been emitted + - Fixed wrong emission of DescriptorWriteError where DescriptorReadError + should have been emitted + - Fixed wrong endianness handling in heartlistener example + +QtNfc +----- + + - API has been ported to Android + - Significantly improved implementation and documentation of QML NdefFilter + API + - Added general documentation improvements + - Fixed memory leak due to missing QQmlNdefRecord destructor + +**************************************************************************** +* Platform Specific Changes * +**************************************************************************** + +Android +------- + + - Increased robustness of Bluetooth Low Energy Service detail discovery + - [QTBUG-49367] Fixed missing jar file creation due to wrong build dependencies + - [QTBUG-50125] Fixed missing invalidation of QLowEnergyService details on + disconnect from device + - [QTBUG-50345] Fixed QBluetoothSocket::bytesAvailable() + +Linux/Bluez +----------- + + - [MER#1231] Enforce proper checking of error codes during device discovery + when using Bluez 4.x + - [MER#1225] Adjusted QBluetoothSocket::peerName() to comply with Jolla security + restrictions + - [MER1230] Enforced pairing of StartDiscovery() and StopDiscovery() during device + discovery on Bluez 4 + - Fixed memory leak in Bluez 4 code path of QBluetoothServiceDiscoveryAgent + - [QTBUG-48481] Fixed crash during device discovery due to null pointer access on + Bluez 5 + - [QTBUG-49650] Forcing usage of unbuffered L2CAP sockets for GATT protocol + - [QTBUG-49402] Sanitized handling of app names when registering internal agents + The app name is used to name the dbus path and not every permissible app name + character is a permissible dbus path character + - Removed assert in QLowEnergyController which could be caused by malicious device + +QNX/BlackBerry +-------------- + + - Removed support for this platform from QtNfc + - Removed support for this platform from QtBluetooth + +iOS +--- + + - [QTBUG-48518] Fixed compile and crash bugs when using iOS 9.x + - [QTBUG-48713] Enabled support for Bluetooth system alert dialog + - Fixed threading related timer issues + - [QTBUG-49476] Moved Low Energy code base to non-main dispatch queue + - [QTBUG-50125] Fixed missing invalidation of QLowEnergyService details on + disconnect from device diff --git a/qtconnectivity.pro b/qtconnectivity.pro index 4b7b9da9..b74830b8 100644 --- a/qtconnectivity.pro +++ b/qtconnectivity.pro @@ -1,4 +1,4 @@ -require(!android|qtHaveModule(androidextras)) +requires(!android|qtHaveModule(androidextras)) load(configure) qtCompileTest(bluez) diff --git a/src/bluetooth/android/inputstreamthread.cpp b/src/bluetooth/android/inputstreamthread.cpp index eef72230..ecd9218e 100644 --- a/src/bluetooth/android/inputstreamthread.cpp +++ b/src/bluetooth/android/inputstreamthread.cpp @@ -71,7 +71,7 @@ bool InputStreamThread::run() return true; } -bool InputStreamThread::bytesAvailable() const +qint64 InputStreamThread::bytesAvailable() const { QMutexLocker locker(&m_mutex); return m_socket_p->buffer.size(); diff --git a/src/bluetooth/android/inputstreamthread_p.h b/src/bluetooth/android/inputstreamthread_p.h index be8dcbb6..741333ac 100644 --- a/src/bluetooth/android/inputstreamthread_p.h +++ b/src/bluetooth/android/inputstreamthread_p.h @@ -67,7 +67,7 @@ class InputStreamThread : public QObject public: explicit InputStreamThread(QBluetoothSocketPrivate *socket_p); - bool bytesAvailable() const; + qint64 bytesAvailable() const; bool run(); qint64 readData(char *data, qint64 maxSize); diff --git a/src/bluetooth/bluez/hcimanager.cpp b/src/bluetooth/bluez/hcimanager.cpp index 35ce2184..cf2f2a0f 100644 --- a/src/bluetooth/bluez/hcimanager.cpp +++ b/src/bluetooth/bluez/hcimanager.cpp @@ -145,7 +145,7 @@ int HciManager::hciForAddress(const QBluetoothAddress &deviceAdapter) int result = memcmp(&adapter, &devInfo.bdaddr, sizeof(bdaddr_t)); if (result == 0 || deviceAdapter.isNull()) // addresses match - return devRequest->dev_id; + return devInfo.dev_id; } return -1; diff --git a/src/bluetooth/doc/src/bluetooth-index.qdoc b/src/bluetooth/doc/src/bluetooth-index.qdoc index 8e5f1d35..8ea4c7f9 100644 --- a/src/bluetooth/doc/src/bluetooth-index.qdoc +++ b/src/bluetooth/doc/src/bluetooth-index.qdoc @@ -75,6 +75,32 @@ import statement in your \c .qml file: \li \l {Qt Bluetooth C++ Classes}{C++ Classes} \endlist +\section2 Logging Categories + +The \l QtBluetooth module exports the following +\l {Configuring Categories}{logging categories}: + +\table +\header + \li Logging Category + \li Description +\row + \li qt.bluetooth + \li Enables logging of cross platform code path in QtBluetooth +\row + \li qt.bluetooth.android + \li Enables logging of the Android implementation +\row + \li qt.bluetooth.bluez + \li Enables logging of the BLuez/Linux implementation +\row + \li qt.bluetooth.ios + \li Enables logging of the iOS implementation +\row + \li qt.bluetooth.osx + \li Enables logging of the OS X implementation +\endtable + \section2 Examples \list \li QML diff --git a/src/bluetooth/qlowenergycontroller.cpp b/src/bluetooth/qlowenergycontroller.cpp index 838bbd0d..c39a797b 100644 --- a/src/bluetooth/qlowenergycontroller.cpp +++ b/src/bluetooth/qlowenergycontroller.cpp @@ -486,6 +486,7 @@ QLowEnergyController::QLowEnergyController( d->remoteDevice = remoteDevice; d->localAdapter = QBluetoothLocalDevice().address(); d->addressType = QLowEnergyController::PublicAddress; + d->init(); } /*! @@ -513,6 +514,7 @@ QLowEnergyController::QLowEnergyController( d->localAdapter = QBluetoothLocalDevice().address(); d->addressType = QLowEnergyController::PublicAddress; d->remoteName = remoteDeviceInfo.name(); + d->init(); } /*! @@ -541,6 +543,7 @@ QLowEnergyController::QLowEnergyController( d->role = CentralRole; d->remoteDevice = remoteDevice; d->localAdapter = localDevice; + d->init(); } /*! diff --git a/src/bluetooth/qlowenergycontroller_android.cpp b/src/bluetooth/qlowenergycontroller_android.cpp index df3aaa54..f740abc7 100644 --- a/src/bluetooth/qlowenergycontroller_android.cpp +++ b/src/bluetooth/qlowenergycontroller_android.cpp @@ -58,6 +58,10 @@ QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate() { } +void QLowEnergyControllerPrivate::init() +{ +} + void QLowEnergyControllerPrivate::connectToDevice() { // required to pass unit test on default backend diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp index 06586192..729847f9 100644 --- a/src/bluetooth/qlowenergycontroller_bluez.cpp +++ b/src/bluetooth/qlowenergycontroller_bluez.cpp @@ -263,7 +263,10 @@ QLowEnergyControllerPrivate::QLowEnergyControllerPrivate() { registerQLowEnergyControllerMetaType(); qRegisterMetaType<QList<QLowEnergyHandle> >(); +} +void QLowEnergyControllerPrivate::init() +{ hciManager = new HciManager(localAdapter, this); if (!hciManager->isValid()) return; @@ -602,7 +605,12 @@ void QLowEnergyControllerPrivate::l2cpReadyRead() break; } - Q_ASSERT(!openRequests.isEmpty()); + if (openRequests.isEmpty()) { + qCWarning(QT_BT_BLUEZ) << "Received unexpected packet from peer, disconnecting."; + disconnectFromDevice(); + return; + } + const Request request = openRequests.dequeue(); processReply(request, incomingPacket); @@ -1074,7 +1082,14 @@ void QLowEnergyControllerPrivate::processReply( Q_ASSERT(!p.isNull()); if (isErrorResponse) { - readServiceValues(p->uuid, false); //read descriptor values + if (keys.count() == 1) { + // no more descriptors to discover + readServiceValues(p->uuid, false); //read descriptor values + } else { + // hop to the next descriptor + keys.removeFirst(); + discoverNextDescriptor(p, keys, keys.first()); + } break; } diff --git a/src/bluetooth/qlowenergycontroller_p.cpp b/src/bluetooth/qlowenergycontroller_p.cpp index eae0a43c..b4bd9a0f 100644 --- a/src/bluetooth/qlowenergycontroller_p.cpp +++ b/src/bluetooth/qlowenergycontroller_p.cpp @@ -54,6 +54,10 @@ QLowEnergyControllerPrivate::~QLowEnergyControllerPrivate() { } +void QLowEnergyControllerPrivate::init() +{ +} + void QLowEnergyControllerPrivate::connectToDevice() { // required to pass unit test on default backend diff --git a/src/bluetooth/qlowenergycontroller_p.h b/src/bluetooth/qlowenergycontroller_p.h index 51ea5a83..6e231dd1 100644 --- a/src/bluetooth/qlowenergycontroller_p.h +++ b/src/bluetooth/qlowenergycontroller_p.h @@ -111,6 +111,8 @@ public: QLowEnergyControllerPrivate(); ~QLowEnergyControllerPrivate(); + void init(); + void setError(QLowEnergyController::Error newError); bool isValidLocalAdapter(); diff --git a/src/imports/bluetooth/plugins.qmltypes b/src/imports/bluetooth/plugins.qmltypes index e945441a..99ea567f 100644 --- a/src/imports/bluetooth/plugins.qmltypes +++ b/src/imports/bluetooth/plugins.qmltypes @@ -7,272 +7,7 @@ import QtQuick.tooling 1.2 // 'qmlplugindump -nonrelocatable QtBluetooth 5.6' Module { - dependencies: [] - Component { - name: "QAbstractItemModel" - prototype: "QObject" - Enum { - name: "LayoutChangeHint" - values: { - "NoLayoutChangeHint": 0, - "VerticalSortHint": 1, - "HorizontalSortHint": 2 - } - } - Signal { - name: "dataChanged" - Parameter { name: "topLeft"; type: "QModelIndex" } - Parameter { name: "bottomRight"; type: "QModelIndex" } - Parameter { name: "roles"; type: "QVector<int>" } - } - Signal { - name: "dataChanged" - Parameter { name: "topLeft"; type: "QModelIndex" } - Parameter { name: "bottomRight"; type: "QModelIndex" } - } - Signal { - name: "headerDataChanged" - Parameter { name: "orientation"; type: "Qt::Orientation" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "layoutChanged" - Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" } - Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } - } - Signal { - name: "layoutChanged" - Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" } - } - Signal { name: "layoutChanged" } - Signal { - name: "layoutAboutToBeChanged" - Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" } - Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" } - } - Signal { - name: "layoutAboutToBeChanged" - Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" } - } - Signal { name: "layoutAboutToBeChanged" } - Signal { - name: "rowsAboutToBeInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsAboutToBeRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "rowsRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsAboutToBeInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsInserted" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsAboutToBeRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { - name: "columnsRemoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "first"; type: "int" } - Parameter { name: "last"; type: "int" } - } - Signal { name: "modelAboutToBeReset" } - Signal { name: "modelReset" } - Signal { - name: "rowsAboutToBeMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationRow"; type: "int" } - } - Signal { - name: "rowsMoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - Parameter { name: "destination"; type: "QModelIndex" } - Parameter { name: "row"; type: "int" } - } - Signal { - name: "columnsAboutToBeMoved" - Parameter { name: "sourceParent"; type: "QModelIndex" } - Parameter { name: "sourceStart"; type: "int" } - Parameter { name: "sourceEnd"; type: "int" } - Parameter { name: "destinationParent"; type: "QModelIndex" } - Parameter { name: "destinationColumn"; type: "int" } - } - Signal { - name: "columnsMoved" - Parameter { name: "parent"; type: "QModelIndex" } - Parameter { name: "start"; type: "int" } - Parameter { name: "end"; type: "int" } - Parameter { name: "destination"; type: "QModelIndex" } - Parameter { name: "column"; type: "int" } - } - Method { name: "submit"; type: "bool" } - Method { name: "revert" } - Method { - name: "hasIndex" - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "hasIndex" - type: "bool" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - } - Method { - name: "index" - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "index" - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - } - Method { - name: "parent" - type: "QModelIndex" - Parameter { name: "child"; type: "QModelIndex" } - } - Method { - name: "sibling" - type: "QModelIndex" - Parameter { name: "row"; type: "int" } - Parameter { name: "column"; type: "int" } - Parameter { name: "idx"; type: "QModelIndex" } - } - Method { - name: "rowCount" - type: "int" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { name: "rowCount"; type: "int" } - Method { - name: "columnCount" - type: "int" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { name: "columnCount"; type: "int" } - Method { - name: "hasChildren" - type: "bool" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { name: "hasChildren"; type: "bool" } - Method { - name: "data" - type: "QVariant" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - } - Method { - name: "data" - type: "QVariant" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "setData" - type: "bool" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "value"; type: "QVariant" } - Parameter { name: "role"; type: "int" } - } - Method { - name: "setData" - type: "bool" - Parameter { name: "index"; type: "QModelIndex" } - Parameter { name: "value"; type: "QVariant" } - } - Method { - name: "headerData" - type: "QVariant" - Parameter { name: "section"; type: "int" } - Parameter { name: "orientation"; type: "Qt::Orientation" } - Parameter { name: "role"; type: "int" } - } - Method { - name: "headerData" - type: "QVariant" - Parameter { name: "section"; type: "int" } - Parameter { name: "orientation"; type: "Qt::Orientation" } - } - Method { - name: "fetchMore" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "canFetchMore" - type: "bool" - Parameter { name: "parent"; type: "QModelIndex" } - } - Method { - name: "flags" - type: "Qt::ItemFlags" - Parameter { name: "index"; type: "QModelIndex" } - } - Method { - name: "match" - type: "QModelIndexList" - Parameter { name: "start"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - Parameter { name: "value"; type: "QVariant" } - Parameter { name: "hits"; type: "int" } - Parameter { name: "flags"; type: "Qt::MatchFlags" } - } - Method { - name: "match" - type: "QModelIndexList" - Parameter { name: "start"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - Parameter { name: "value"; type: "QVariant" } - Parameter { name: "hits"; type: "int" } - } - Method { - name: "match" - type: "QModelIndexList" - Parameter { name: "start"; type: "QModelIndex" } - Parameter { name: "role"; type: "int" } - Parameter { name: "value"; type: "QVariant" } - } - } - Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" } + dependencies: ["QtQuick 2.0"] Component { name: "QDeclarativeBluetoothDiscoveryModel" prototype: "QAbstractListModel" diff --git a/src/imports/nfc/plugins.qmltypes b/src/imports/nfc/plugins.qmltypes index df1b2a3a..88794b71 100644 --- a/src/imports/nfc/plugins.qmltypes +++ b/src/imports/nfc/plugins.qmltypes @@ -7,7 +7,7 @@ import QtQuick.tooling 1.2 // 'qmlplugindump -nonrelocatable QtNfc 5.6' Module { - dependencies: [] + dependencies: ["QtQuick 2.0"] Component { name: "QDeclarativeNdefFilter" prototype: "QObject" diff --git a/src/nfc/doc/src/nfc-index.qdoc b/src/nfc/doc/src/nfc-index.qdoc index da8833d8..a37ba293 100644 --- a/src/nfc/doc/src/nfc-index.qdoc +++ b/src/nfc/doc/src/nfc-index.qdoc @@ -73,6 +73,20 @@ import statement in your \c .qml file: \li \l {Qt NFC C++ Classes}{C++ Classes} \endlist +\section2 Logging Categories + +The \l QtNfc module exports the following +\l {Configuring Categories}{logging categories}: + +\table +\header + \li Logging Category + \li Description +\row + \li qt.nfc.neard + \li Enables logging of the Neard/Linux implementation +\endtable + \section2 Examples \list \li QML diff --git a/src/nfc/qqmlndefrecord.cpp b/src/nfc/qqmlndefrecord.cpp index 5cd5b4d5..1f855ede 100644 --- a/src/nfc/qqmlndefrecord.cpp +++ b/src/nfc/qqmlndefrecord.cpp @@ -249,6 +249,9 @@ QQmlNdefRecord::QQmlNdefRecord(const QNdefRecord &record, QObject *parent) d_ptr->record = record; } +/*! + Destroys the QQmlNdefRecord instance. +*/ QQmlNdefRecord::~QQmlNdefRecord() { delete d_ptr; |