From 6837d143b456eb1f253b68704a5ff1b48bef4de4 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Mon, 1 Sep 2014 13:46:59 +0200 Subject: Add support for random vs public address selection to lowenergyscanner Change-Id: I963f47f0089d072249b73bdfb0c715d43186b08d Reviewed-by: Lars Knoll --- .../lowenergyscanner/assets/Characteristics.qml | 9 ++++++--- .../bluetooth/lowenergyscanner/assets/Dialog.qml | 22 +++++++++++++++++++-- .../lowenergyscanner/assets/busy_dark.png | Bin 0 -> 1130 bytes .../bluetooth/lowenergyscanner/assets/main.qml | 20 ++++++++++++++++++- examples/bluetooth/lowenergyscanner/device.cpp | 22 +++++++++++++++++---- examples/bluetooth/lowenergyscanner/device.h | 6 ++++++ examples/bluetooth/lowenergyscanner/resources.qrc | 1 + 7 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 examples/bluetooth/lowenergyscanner/assets/busy_dark.png (limited to 'examples/bluetooth/lowenergyscanner') diff --git a/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml b/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml index 4a7db471..ac3b7151 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Characteristics.qml @@ -62,10 +62,13 @@ Rectangle { target: device onCharacteristicsUpdated: { menu.menuText = "Back" - if (characteristicview.count === 0) + if (characteristicview.count === 0) { info.dialogText = "No characteristic found" - else - info.visible = false; + info.busyImage = false + } else { + info.visible = false + info.busyImage = true + } } onDisconnected: { diff --git a/examples/bluetooth/lowenergyscanner/assets/Dialog.qml b/examples/bluetooth/lowenergyscanner/assets/Dialog.qml index be5388b5..2b8580f3 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Dialog.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Dialog.qml @@ -41,21 +41,39 @@ import QtQuick 2.0 Rectangle { - width: parent.width/2 + width: parent.width/3*2 height: 62 z: 50 property string dialogText: "" + property bool busyImage: true border.width: 1 border.color: "#363636" radius: 10 Text { + id: dialogTextId horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter - anchors.fill: parent + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top; + anchors.topMargin: 10 + elide: Text.ElideMiddle text: dialogText color: "#363636" wrapMode: Text.Wrap } + + Image { + id: background + + width:20 + height:20 + anchors.top: dialogTextId.bottom + anchors.horizontalCenter: dialogTextId.horizontalCenter + visible: parent.busyImage + source: "busy_dark.png" + fillMode: Image.PreserveAspectFit + NumberAnimation on rotation { duration: 3000; from:0; to: 360; loops: Animation.Infinite} + } } diff --git a/examples/bluetooth/lowenergyscanner/assets/busy_dark.png b/examples/bluetooth/lowenergyscanner/assets/busy_dark.png new file mode 100644 index 00000000..3a105953 Binary files /dev/null and b/examples/bluetooth/lowenergyscanner/assets/busy_dark.png differ diff --git a/examples/bluetooth/lowenergyscanner/assets/main.qml b/examples/bluetooth/lowenergyscanner/assets/main.qml index 9f0395d5..e135d699 100644 --- a/examples/bluetooth/lowenergyscanner/assets/main.qml +++ b/examples/bluetooth/lowenergyscanner/assets/main.qml @@ -69,7 +69,7 @@ Rectangle { clip: true anchors.top: header.bottom - anchors.bottom: menu.top + anchors.bottom: connectToggle.top model: device.devicesList delegate: Rectangle { @@ -111,6 +111,24 @@ Rectangle { } } + Menu { + id: connectToggle + + menuWidth: parent.width + anchors.bottom: menu.top + menuText: { if (device.devicesList.length) + visible = true + else + visible = false + if (device.useRandomAddress) + "Address type: Random" + else + "Address type: Public" + } + + onButtonClick: device.useRandomAddress = !device.useRandomAddress; + } + Menu { id: menu anchors.bottom: parent.bottom diff --git a/examples/bluetooth/lowenergyscanner/device.cpp b/examples/bluetooth/lowenergyscanner/device.cpp index 9ffb4d56..215a7588 100644 --- a/examples/bluetooth/lowenergyscanner/device.cpp +++ b/examples/bluetooth/lowenergyscanner/device.cpp @@ -50,7 +50,7 @@ #include Device::Device(): - connected(false), controller(0), m_deviceScanState(false) + connected(false), controller(0), m_deviceScanState(false), randomAddress(false) { //! [les-devicediscovery-1] discoveryAgent = new QBluetoothDeviceDiscoveryAgent(); @@ -176,6 +176,10 @@ void Device::scanServices(const QString &address) this, SLOT(serviceScanDone())); } + if (isRandomAddress()) + controller->setRemoteAddressType(QLowEnergyController::RandomAddress); + else + controller->setRemoteAddressType(QLowEnergyController::PublicAddress); controller->connectToDevice(); //! [les-controller-1] } @@ -250,7 +254,7 @@ void Device::deviceConnected() void Device::errorReceived(QLowEnergyController::Error /*error*/) { qWarning() << "Error: " << controller->errorString(); - setUpdate(controller->errorString()); + setUpdate(QString("Back\n(%1)").arg(controller->errorString())); } void Device::setUpdate(QString message) @@ -261,8 +265,7 @@ void Device::setUpdate(QString message) void Device::disconnectFromDevice() { - if (connected) - controller->disconnectFromDevice(); + controller->disconnectFromDevice(); } void Device::deviceDisconnected() @@ -305,3 +308,14 @@ bool Device::state() { return m_deviceScanState; } + +bool Device::isRandomAddress() const +{ + return randomAddress; +} + +void Device::setRandomAddress(bool newValue) +{ + randomAddress = newValue; + emit randomAddressChanged(); +} diff --git a/examples/bluetooth/lowenergyscanner/device.h b/examples/bluetooth/lowenergyscanner/device.h index f15c4c95..97a52b26 100644 --- a/examples/bluetooth/lowenergyscanner/device.h +++ b/examples/bluetooth/lowenergyscanner/device.h @@ -65,6 +65,7 @@ class Device: public QObject 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(bool useRandomAddress READ isRandomAddress WRITE setRandomAddress NOTIFY randomAddressChanged) Q_PROPERTY(bool state READ state NOTIFY stateChanged) public: Device(); @@ -75,6 +76,9 @@ public: QString getUpdate(); bool state(); + bool isRandomAddress() const; + void setRandomAddress(bool newValue); + public slots: void startDeviceDiscovery(); void scanServices(const QString &address); @@ -105,6 +109,7 @@ Q_SIGNALS: void updateChanged(); void stateChanged(); void disconnected(); + void randomAddressChanged(); private: void setUpdate(QString message); @@ -117,6 +122,7 @@ private: bool connected; QLowEnergyController *controller; bool m_deviceScanState; + bool randomAddress; }; #endif // DEVICE_H diff --git a/examples/bluetooth/lowenergyscanner/resources.qrc b/examples/bluetooth/lowenergyscanner/resources.qrc index 49a518e8..4634cf6b 100644 --- a/examples/bluetooth/lowenergyscanner/resources.qrc +++ b/examples/bluetooth/lowenergyscanner/resources.qrc @@ -7,5 +7,6 @@ assets/Header.qml assets/Dialog.qml assets/Label.qml + assets/busy_dark.png -- cgit v1.2.3