diff options
-rw-r--r-- | dist/changes-5.4.0 | 99 | ||||
-rw-r--r-- | examples/bluetooth/lowenergyscanner/assets/Characteristics.qml | 3 | ||||
-rw-r--r-- | examples/bluetooth/lowenergyscanner/assets/Services.qml | 8 | ||||
-rw-r--r-- | examples/bluetooth/lowenergyscanner/device.cpp | 7 | ||||
-rw-r--r-- | examples/bluetooth/lowenergyscanner/device.h | 2 | ||||
-rw-r--r-- | src/bluetooth/bluez/hcimanager.cpp | 1 | ||||
-rw-r--r-- | src/bluetooth/qbluetooth.cpp | 1 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothtransferreply.cpp | 3 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothuuid.cpp | 7 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_bluez.cpp | 11 | ||||
-rw-r--r-- | src/bluetooth/qlowenergycontroller_p.h | 2 |
11 files changed, 132 insertions, 12 deletions
diff --git a/dist/changes-5.4.0 b/dist/changes-5.4.0 new file mode 100644 index 00000000..78809827 --- /dev/null +++ b/dist/changes-5.4.0 @@ -0,0 +1,99 @@ +Qt 5.4 introduces many new features and improvements as well as bugfixes +over the 5.3.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + + http://qt-project.org/doc/qt-5.4 + +The Qt version 5.4 series is binary compatible with the 5.3.x series. +Applications compiled for 5.3 will continue to run with 5.4. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + + http://bugreports.qt-project.org/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Library * +**************************************************************************** + +QtBluetooth +----------- + + - Bluetooth Low Energy Support added: + * Connect/disconnect to peripherals supported. + * Services on Peripheral can be discovered and interacted with. + * BlueZ on Linux is the only currently supported platform. + Minimal requirement are a Linux kernel v 3.5+ and BlueZ version 4.101+. + More platforms will be added by future Qt releases. + * The feature/API remains in Tech Preview stage throughout the Qt 5.4 + release. Some API elements may still change in future releases. + + - Fixed documentation throughout all classes. + + - General: + * Bluetooth Low Energy scanner example has been added. + * Heart Listener Bluetooth Low Energy Heart Belt example has been added. + + - QBluetoothAddress: + * QDebug streaming operator added. + + - QBluetoothDeviceInfo: + * QBluetooth::CoreConfiguration enum added. + * CoreConfiguration attribute added. + + - QBluetoothServiceDiscoveryAgent: + * Fixed cases where Bluez doesn't provide service names for given + Bluetooth service class uuid. + + - QBLuetoothSocket: + * [QTBUG-32704] Fixed behavior of isReadable()/isOpen()/isWritable(). + So far, these functions returned wrong values. + + - QBluetoothTransferReply: + * QBluetoothTransferReply::error() signal added. + * QBluetoothTransferReply::SessionError value added to TransferError enum. + * QBluetoothTransferReply::TransferError enum declared as as meta type. + * Fixed a memory leak on Bluez and QNX. + * Fixed segmentation fault if passed QIODevice was 0. + + - QBluetoothUuid: + * Added QBluetoothUuid::protocolToString(QBluetoothUuid::ProtocolUuid) + which returns a human-readable string for the given protocol uuid. + * Various Bluetooth Low Energy related API elements added. This includes + two new constructors, the DescriptorType and CharacteristicType enum, + various values for ServiceClassUuid enum and helper functions to + handle the extended range of new enums. + +QtNfc +----- + + - General: + * Fixed reference error bug in NFC poster example + + +**************************************************************************** +* Platform Specific Changes * +**************************************************************************** + +Android +------- + + - Fixed broken QBluetoothServer::isListening(). It returned false right + after a successful call to listen(). + +Bluez/Linux +----------- + + - API ported to Bluez 5.x. + + - Fixed license issue. + + - QBluetoothDeviceDiscoveryAgent: + * Add support to enable detection of Bluetooth Low Energy devices. + + - QBluetoothSocket: + * Fixed case where port L2CP port number was not converted to little-endian. + This bug affected big-endian platforms. diff --git a/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml b/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml index ac3b7151..8e6e2868 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml @@ -141,10 +141,11 @@ Rectangle { id: menu anchors.bottom: parent.bottom menuWidth: parent.width - menuText: "Scanning" + menuText: device.update menuHeight: (parent.height/6) onButtonClick: { pageLoader.source = "Services.qml" + device.update = "Back" } } } diff --git a/examples/bluetooth/lowenergyscanner/assets/Services.qml b/examples/bluetooth/lowenergyscanner/assets/Services.qml index a433d445..e3e05cac 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Services.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Services.qml @@ -76,10 +76,6 @@ Rectangle { else info.visible = false; } - - onDisconnected: { - pageLoader.source = "main.qml" - } } ListView { @@ -137,10 +133,12 @@ Rectangle { id: menu anchors.bottom: parent.bottom menuWidth: parent.width - menuText: "Back" + menuText: device.update menuHeight: (parent.height/6) onButtonClick: { device.disconnectFromDevice() + pageLoader.source = "main.qml" + device.update = "Search" } } } diff --git a/examples/bluetooth/lowenergyscanner/device.cpp b/examples/bluetooth/lowenergyscanner/device.cpp index c8cd17bd..0891f040 100644 --- a/examples/bluetooth/lowenergyscanner/device.cpp +++ b/examples/bluetooth/lowenergyscanner/device.cpp @@ -155,7 +155,7 @@ void Device::scanServices(const QString &address) m_services.clear(); emit servicesUpdated(); - setUpdate("Connecting to device..."); + setUpdate("Back\n(Connecting to device...)"); if (controller && controller->remoteAddress() != currentDevice.getDevice().address()) { controller->disconnectFromDevice(); @@ -209,7 +209,7 @@ void Device::addLowEnergyService(const QBluetoothUuid &serviceUuid) void Device::serviceScanDone() { - setUpdate("Service scan done!"); + setUpdate("Back\n(Service scan done!)"); // force UI in case we didn't find anything if (m_services.isEmpty()) emit servicesUpdated(); @@ -238,6 +238,7 @@ void Device::connectToService(const QString &uuid) connect(service, SIGNAL(stateChanged(QLowEnergyService::ServiceState)), this, SLOT(serviceDetailsDiscovered(QLowEnergyService::ServiceState))); service->discoverDetails(); + setUpdate("Back\n(Discovering details...)"); //! [les-service-3] return; } @@ -254,7 +255,7 @@ void Device::connectToService(const QString &uuid) void Device::deviceConnected() { - setUpdate("Discovering services!"); + setUpdate("Back\n(Discovering services...)"); connected = true; //! [les-service-2] controller->discoverServices(); diff --git a/examples/bluetooth/lowenergyscanner/device.h b/examples/bluetooth/lowenergyscanner/device.h index 049d1c61..a12f9e0e 100644 --- a/examples/bluetooth/lowenergyscanner/device.h +++ b/examples/bluetooth/lowenergyscanner/device.h @@ -63,7 +63,7 @@ class Device: public QObject Q_PROPERTY(QVariant devicesList READ getDevices NOTIFY devicesUpdated) Q_PROPERTY(QVariant servicesList READ getServices NOTIFY servicesUpdated) Q_PROPERTY(QVariant characteristicList READ getCharacteristics NOTIFY characteristicsUpdated) - Q_PROPERTY(QString update READ getUpdate NOTIFY updateChanged) + Q_PROPERTY(QString update READ getUpdate WRITE setUpdate NOTIFY updateChanged) Q_PROPERTY(bool useRandomAddress READ isRandomAddress WRITE setRandomAddress NOTIFY randomAddressChanged) Q_PROPERTY(bool state READ state NOTIFY stateChanged) Q_PROPERTY(bool controllerError READ hasControllerError) diff --git a/src/bluetooth/bluez/hcimanager.cpp b/src/bluetooth/bluez/hcimanager.cpp index 449f0825..17d54a4b 100644 --- a/src/bluetooth/bluez/hcimanager.cpp +++ b/src/bluetooth/bluez/hcimanager.cpp @@ -150,6 +150,7 @@ bool HciManager::monitorEvent(HciManager::HciEvent event) return false; // this event is already enabled + // TODO runningEvents does not seem to be used if (runningEvents.contains(event)) return true; diff --git a/src/bluetooth/qbluetooth.cpp b/src/bluetooth/qbluetooth.cpp index d418adc1..ea3900e1 100644 --- a/src/bluetooth/qbluetooth.cpp +++ b/src/bluetooth/qbluetooth.cpp @@ -72,6 +72,7 @@ namespace QBluetooth { /*! \typedef QLowEnergyHandle \relates QBluetooth + \since 5.4 Typedef for Bluetooth Low Energy ATT attribute handles. */ diff --git a/src/bluetooth/qbluetoothtransferreply.cpp b/src/bluetooth/qbluetoothtransferreply.cpp index 6c5c83a2..af1bf828 100644 --- a/src/bluetooth/qbluetoothtransferreply.cpp +++ b/src/bluetooth/qbluetoothtransferreply.cpp @@ -64,7 +64,8 @@ QT_BEGIN_NAMESPACE \value UserCanceledTransferError User terminated the transfer. \value IODeviceNotReadableError File was not open before initiating the sending command. \value ResourceBusyError Unable to access the resource.. - \value SessionError An error occurred during the handling of the session. + \value SessionError An error occurred during the handling of the session. This enum was + introduced by Qt 5.4. */ diff --git a/src/bluetooth/qbluetoothuuid.cpp b/src/bluetooth/qbluetoothuuid.cpp index 3883b47b..f4840428 100644 --- a/src/bluetooth/qbluetoothuuid.cpp +++ b/src/bluetooth/qbluetoothuuid.cpp @@ -99,7 +99,8 @@ Q_GLOBAL_STATIC_WITH_ARGS(QUuid, baseUuid, ("{00000000-0000-1000-8000-00805F9B34 it can be used as a value for either of the above service attributes. Such a dual use has historical reasons but is no longer permissible for newer UUIDs. - The list below explicitly states as what type each UUID shall be used. + The list below explicitly states as what type each UUID shall be used. Bluetooth Low Energy related values + starting with 0x18 were introduced by Qt 5.4 \value ServiceDiscoveryServer Service discovery server UUID (service) \value BrowseGroupDescriptor Browser group descriptor (service) @@ -214,6 +215,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QUuid, baseUuid, ("{00000000-0000-1000-8000-00805F9B34 /*! \enum QBluetoothUuid::CharacteristicType + \since 5.4 This enum is a convienience type for Bluetooth low energy service characteristics class UUIDs. Values of this type will be implicitly converted into a QBluetoothUuid when necessary. @@ -369,6 +371,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QUuid, baseUuid, ("{00000000-0000-1000-8000-00805F9B34 /*! \enum QBluetoothUuid::DescriptorType + \since 5.4 Descriptors are attributes that describe Bluetooth Low Energy characteristic values. @@ -437,6 +440,7 @@ QBluetoothUuid::QBluetoothUuid(ServiceClassUuid uuid) /*! Constructs a new Bluetooth UUID from the characteristic type \a uuid. + \since 5.4 */ QBluetoothUuid::QBluetoothUuid(CharacteristicType uuid) : QUuid(uuid, baseUuid()->data2, baseUuid()->data3, baseUuid()->data4[0], baseUuid()->data4[1], @@ -447,6 +451,7 @@ QBluetoothUuid::QBluetoothUuid(CharacteristicType uuid) /*! Constructs a new Bluetooth UUID from the descriptor type \a uuid. + \since 5.4 */ QBluetoothUuid::QBluetoothUuid(DescriptorType uuid) : QUuid(uuid, baseUuid()->data2, baseUuid()->data3, baseUuid()->data4[0], baseUuid()->data4[1], diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp index 51855889..55acfc36 100644 --- a/src/bluetooth/qlowenergycontroller_bluez.cpp +++ b/src/bluetooth/qlowenergycontroller_bluez.cpp @@ -277,6 +277,7 @@ void QLowEnergyControllerPrivate::disconnectFromDevice() { setState(QLowEnergyController::ClosingState); l2cpSocket->close(); + resetController(); } void QLowEnergyControllerPrivate::l2cpDisconnected() @@ -312,9 +313,19 @@ void QLowEnergyControllerPrivate::l2cpErrorChanged(QBluetoothSocket::SocketError } invalidateServices(); + resetController(); setState(QLowEnergyController::UnconnectedState); } + +void QLowEnergyControllerPrivate::resetController() +{ + openRequests.clear(); + requestPending = false; + encryptionChangePending = false; + securityLevelValue = -1; +} + void QLowEnergyControllerPrivate::l2cpReadyRead() { const QByteArray reply = l2cpSocket->readAll(); diff --git a/src/bluetooth/qlowenergycontroller_p.h b/src/bluetooth/qlowenergycontroller_p.h index add92b43..6234b57f 100644 --- a/src/bluetooth/qlowenergycontroller_p.h +++ b/src/bluetooth/qlowenergycontroller_p.h @@ -183,6 +183,8 @@ private: const QByteArray &newValue, quint16 offset); bool increaseEncryptLevelfRequired(quint8 errorCode); + void resetController(); + private slots: void l2cpConnected(); void l2cpDisconnected(); |