diff options
author | Nedim Hadzic <nhadzic@blackberry.com> | 2014-02-26 12:09:23 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-27 14:56:08 +0100 |
commit | eb632012c2cf13922b08f4e2606d1452da9aaacb (patch) | |
tree | 78433495f7811e6f89054afe38b125a4e96c671b /examples | |
parent | 6de4ff7b44d32d2f0fea277d856ce4d3fe321c7e (diff) |
Lowenergyscanner example improved
Error handling improved, code styling improved.
Change-Id: I1f35c6a6ef9641cb445fdbe55e0127b554e50ebc
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'examples')
12 files changed, 82 insertions, 57 deletions
diff --git a/examples/bluetooth/lowenergyscanner/assets/Dialog.qml b/examples/bluetooth/lowenergyscanner/assets/Dialog.qml index 002055f4..f374d762 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Dialog.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Dialog.qml @@ -50,7 +50,10 @@ Rectangle { radius: 10 Text { - anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.fill: parent + elide: Text.ElideMiddle text: dialogText color: "#363636" } diff --git a/examples/bluetooth/lowenergyscanner/assets/Header.qml b/examples/bluetooth/lowenergyscanner/assets/Header.qml index c33a0692..654fda34 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Header.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Header.qml @@ -45,13 +45,17 @@ Rectangle { height: 70 border.width: 1 border.color: "#363636" + radius: 5 property string headerText: "" Text { - anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.fill: parent text: headerText font.bold: true font.pixelSize: 30 + elide: Text.ElideMiddle color: "#363636" } } diff --git a/examples/bluetooth/lowenergyscanner/assets/Label.qml b/examples/bluetooth/lowenergyscanner/assets/Label.qml index e22bca26..7576ffb7 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Label.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Label.qml @@ -45,5 +45,6 @@ Text { font.pixelSize: 30 anchors.horizontalCenter: parent.horizontalCenter color: "#363636" + elide: Text.ElideMiddle text: textContent } diff --git a/examples/bluetooth/lowenergyscanner/assets/Menu.qml b/examples/bluetooth/lowenergyscanner/assets/Menu.qml index ee608664..796c27be 100644 --- a/examples/bluetooth/lowenergyscanner/assets/Menu.qml +++ b/examples/bluetooth/lowenergyscanner/assets/Menu.qml @@ -60,8 +60,11 @@ Rectangle { radius: 10 Text { id: searchText - anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.fill: parent text: menuText + elide: Text.ElideMiddle color: "#E3E3E3" } @@ -78,7 +81,6 @@ Rectangle { } onClicked: { - ColorAnimation: { to: "#4D4C4C"; duration: 200 } buttonClick() } } diff --git a/examples/bluetooth/lowenergyscanner/assets/main.qml b/examples/bluetooth/lowenergyscanner/assets/main.qml index 3c4e27ea..cdef49a5 100644 --- a/examples/bluetooth/lowenergyscanner/assets/main.qml +++ b/examples/bluetooth/lowenergyscanner/assets/main.qml @@ -44,6 +44,11 @@ Rectangle { id: back width: 300 height: 600 + property string message: device.update + onMessageChanged: { + if (device.update != "Scanning for devices..." && device.update != "Search") + info.visible = false; + } Header { id: header diff --git a/examples/bluetooth/lowenergyscanner/device.cpp b/examples/bluetooth/lowenergyscanner/device.cpp index 00a0ae39..df125d60 100644 --- a/examples/bluetooth/lowenergyscanner/device.cpp +++ b/examples/bluetooth/lowenergyscanner/device.cpp @@ -51,20 +51,22 @@ #include <QList> Device::Device(): - localDevice(new QBluetoothLocalDevice()), m_message(QString()), connected(false) + connected(false), info(0) { - if (localDevice->allDevices().size() == 0) { - setUpdate("Bluetooth adapter not discovered"); - m_adapterPresent = false; - } - else - m_adapterPresent = true; - QBluetoothAddress adapterAddress(localDevice->address()); - discoveryAgent = new QBluetoothDeviceDiscoveryAgent(adapterAddress); + discoveryAgent = new QBluetoothDeviceDiscoveryAgent(); connect(discoveryAgent, SIGNAL(deviceDiscovered(const QBluetoothDeviceInfo&)), this, SLOT(addDevice(const QBluetoothDeviceInfo&))); + connect(discoveryAgent, SIGNAL(error(QBluetoothDeviceDiscoveryAgent::Error)), + this, SLOT(deviceScanError(QBluetoothDeviceDiscoveryAgent::Error))); connect(discoveryAgent, SIGNAL(finished()), this, SLOT(scanFinished())); - serviceDiscoveryAgent = new QBluetoothServiceDiscoveryAgent(adapterAddress); + serviceDiscoveryAgent = new QBluetoothServiceDiscoveryAgent(QBluetoothAddress()); + + //Connecting signals and slots for service discovery + connect(serviceDiscoveryAgent, SIGNAL(serviceDiscovered(const QLowEnergyServiceInfo&)), + this, SLOT(addLowEnergyService(const QLowEnergyServiceInfo&))); + connect(serviceDiscoveryAgent, SIGNAL(finished()), this, SLOT(serviceScanDone())); + connect(serviceDiscoveryAgent, SIGNAL(error(QBluetoothServiceDiscoveryAgent::Error)), + this, SLOT(serviceScanError(QBluetoothServiceDiscoveryAgent::Error))); setUpdate("Search"); } @@ -72,8 +74,8 @@ Device::Device(): Device::~Device() { delete discoveryAgent; - delete localDevice; delete serviceDiscoveryAgent; + delete info; qDeleteAll(devices); qDeleteAll(m_services); qDeleteAll(m_characteristics); @@ -84,18 +86,14 @@ Device::~Device() void Device::startDeviceDiscovery() { - if (m_adapterPresent) { - devices.clear(); - setUpdate("Scanning for devices ..."); - discoveryAgent->start(); - } - else - setUpdate("Bluetooth adapter not discovered"); + devices.clear(); + setUpdate("Scanning for devices ..."); + discoveryAgent->start(); } void Device::addDevice(const QBluetoothDeviceInfo &info) { - if (info.coreConfiguration() == QBluetoothDeviceInfo::LowEnergyCoreConfiguration) { + if (info.coreConfiguration() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration) { DeviceInfo *d = new DeviceInfo(info); devices.append(d); setUpdate("Last device added: " + d->getName()); @@ -105,7 +103,10 @@ void Device::addDevice(const QBluetoothDeviceInfo &info) void Device::scanFinished() { Q_EMIT devicesDone(); - setUpdate("Done! Scan Again!"); + if (devices.isEmpty()) + setUpdate("No Low Energy devices found..."); + else + setUpdate("Done! Scan Again!"); } QVariant Device::getDevices() @@ -138,20 +139,18 @@ void Device::scanServices(QString address) } m_services.clear(); - //Connecting signals and slots for service discovery QBluetoothDeviceInfo dev = currentDevice.getDevice(); - connect(serviceDiscoveryAgent, SIGNAL(serviceDiscovered(const QLowEnergyServiceInfo&)), - this, SLOT(addLowEnergyService(const QLowEnergyServiceInfo&))); - connect(serviceDiscoveryAgent, SIGNAL(finished()), this, SLOT(serviceScanDone())); serviceDiscoveryAgent->setRemoteAddress(dev.address()); serviceDiscoveryAgent->start(); setUpdate("Scanning for services..."); - // Connecting signals and slots for connecting to LE services. - info = new QLowEnergyController(); - connect(info, SIGNAL(connected(QLowEnergyServiceInfo)), this, SLOT(serviceConnected(QLowEnergyServiceInfo))); - connect(info, SIGNAL(error(QLowEnergyServiceInfo)), this, SLOT(errorReceived(QLowEnergyServiceInfo))); - connect(info, SIGNAL(disconnected(QLowEnergyServiceInfo)), this, SLOT(serviceDisconnected(QLowEnergyServiceInfo))); + if (!info) { + // Connecting signals and slots for connecting to LE services. + info = new QLowEnergyController(); + connect(info, SIGNAL(connected(QLowEnergyServiceInfo)), this, SLOT(serviceConnected(QLowEnergyServiceInfo))); + connect(info, SIGNAL(error(QLowEnergyServiceInfo)), this, SLOT(errorReceived(QLowEnergyServiceInfo))); + connect(info, SIGNAL(disconnected(QLowEnergyServiceInfo)), this, SLOT(serviceDisconnected(QLowEnergyServiceInfo))); + } } void Device::addLowEnergyService(const QLowEnergyServiceInfo &service) @@ -171,7 +170,6 @@ void Device::connectToService(const QString &uuid) QString serviceUuid = uuid; serviceUuid = serviceUuid.remove(QLatin1Char('{')).remove(QLatin1Char('}')); QBluetoothUuid u(serviceUuid); - qDebug() << u; QLowEnergyServiceInfo a; for (int i = 0; i < m_services.size(); i++) { ServiceInfo *service = (ServiceInfo*)m_services.at(i); @@ -195,7 +193,7 @@ void Device::serviceConnected(const QLowEnergyServiceInfo &service) void Device::errorReceived(const QLowEnergyServiceInfo &service) { - qDebug() << "Error: " << info->errorString() << service.serviceUuid(); + qWarning() << "Error: " << info->errorString() << service.serviceUuid(); setUpdate(info->errorString()); } @@ -213,5 +211,25 @@ void Device::disconnectFromService() void Device::serviceDisconnected(const QLowEnergyServiceInfo &service) { - setUpdate("Service Disconnected"); + setUpdate("Service Disconnected " + service.serviceName()); +} + +void Device::deviceScanError(QBluetoothDeviceDiscoveryAgent::Error error) +{ + if (error == QBluetoothDeviceDiscoveryAgent::PoweredOffError) + setUpdate("The Bluetooth adaptor is powered off, power it on before doing discovery."); + else if (error == QBluetoothDeviceDiscoveryAgent::InputOutputError) + setUpdate("Writing or reading from the device resulted in an error."); + else + setUpdate("An unknown error has occurred."); +} + +void Device::serviceScanError(QBluetoothServiceDiscoveryAgent::Error error) +{ + if (error == QBluetoothServiceDiscoveryAgent::PoweredOffError) + setUpdate("The Bluetooth adaptor is powered off, power it on before doing discovery."); + else if (error == QBluetoothServiceDiscoveryAgent::InputOutputError) + setUpdate("Writing or reading from the device resulted in an error."); + else + setUpdate("An unknown error has occurred."); } diff --git a/examples/bluetooth/lowenergyscanner/device.h b/examples/bluetooth/lowenergyscanner/device.h index 00833eac..2e471f50 100644 --- a/examples/bluetooth/lowenergyscanner/device.h +++ b/examples/bluetooth/lowenergyscanner/device.h @@ -46,14 +46,14 @@ #include <QObject> #include <QVariant> #include <QList> +#include <QBluetoothServiceDiscoveryAgent> +#include <QBluetoothDeviceDiscoveryAgent> #include "deviceinfo.h" #include "qlowenergyserviceinfo.h" #include "serviceinfo.h" #include "characteristicinfo.h" -QT_FORWARD_DECLARE_CLASS (QBluetoothDeviceDiscoveryAgent) QT_FORWARD_DECLARE_CLASS (QBluetoothDeviceInfo) -QT_FORWARD_DECLARE_CLASS (QBluetoothServiceDiscoveryAgent) QT_FORWARD_DECLARE_CLASS (QLowEnergyServiceInfo) QT_FORWARD_DECLARE_CLASS (QLowEnergyCharacteristicInfo) QT_FORWARD_DECLARE_CLASS (QLowEnergyController) @@ -78,6 +78,7 @@ public slots: void addDevice(const QBluetoothDeviceInfo&); void startDeviceDiscovery(); void scanFinished(); + void deviceScanError(QBluetoothDeviceDiscoveryAgent::Error); void scanServices(QString address); void addLowEnergyService(const QLowEnergyServiceInfo&); void serviceScanDone(); @@ -86,6 +87,7 @@ public slots: void errorReceived(const QLowEnergyServiceInfo &service); void disconnectFromService(); void serviceDisconnected(const QLowEnergyServiceInfo &service); + void serviceScanError(QBluetoothServiceDiscoveryAgent::Error); Q_SIGNALS: void devicesDone(); @@ -95,9 +97,7 @@ Q_SIGNALS: private: void setUpdate(QString message); - bool m_adapterPresent; QBluetoothDeviceDiscoveryAgent *discoveryAgent; - QBluetoothLocalDevice *localDevice; QBluetoothServiceDiscoveryAgent *serviceDiscoveryAgent; DeviceInfo currentDevice; QList<QObject*> devices; diff --git a/examples/bluetooth/lowenergyscanner/deviceinfo.cpp b/examples/bluetooth/lowenergyscanner/deviceinfo.cpp index 433caf6c..552f5ec3 100644 --- a/examples/bluetooth/lowenergyscanner/deviceinfo.cpp +++ b/examples/bluetooth/lowenergyscanner/deviceinfo.cpp @@ -51,12 +51,12 @@ DeviceInfo::DeviceInfo(const QBluetoothDeviceInfo &d) Q_EMIT deviceChanged(); } -QString DeviceInfo::getAddress() +QString DeviceInfo::getAddress() const { return device.address().toString(); } -QString DeviceInfo::getName() +QString DeviceInfo::getName() const { return device.name(); } diff --git a/examples/bluetooth/lowenergyscanner/deviceinfo.h b/examples/bluetooth/lowenergyscanner/deviceinfo.h index 9d4116b4..383ecfac 100644 --- a/examples/bluetooth/lowenergyscanner/deviceinfo.h +++ b/examples/bluetooth/lowenergyscanner/deviceinfo.h @@ -55,8 +55,8 @@ class DeviceInfo: public QObject public: DeviceInfo(); DeviceInfo(const QBluetoothDeviceInfo &d); - QString getAddress(); - QString getName(); + QString getAddress() const; + QString getName() const; QBluetoothDeviceInfo getDevice(); void setDevice(const QBluetoothDeviceInfo &dev); diff --git a/examples/bluetooth/lowenergyscanner/lowenergyscanner.pro b/examples/bluetooth/lowenergyscanner/lowenergyscanner.pro index 2a8320c7..f3378b4c 100644 --- a/examples/bluetooth/lowenergyscanner/lowenergyscanner.pro +++ b/examples/bluetooth/lowenergyscanner/lowenergyscanner.pro @@ -10,15 +10,7 @@ SOURCES += main.cpp \ serviceinfo.cpp \ characteristicinfo.cpp -OTHER_FILES += assets/Menu.qml \ - assets/Services.qml \ - bar-descriptor.xml \ - assets/Characteristics.qml \ - assets/Details.qml \ - bar-descriptor.xml \ - assets/Dialog.qml \ - assets/Header.qml \ - assets/Label.qml +OTHER_FILES += assets/*.qml HEADERS += \ device.h \ diff --git a/examples/bluetooth/lowenergyscanner/serviceinfo.cpp b/examples/bluetooth/lowenergyscanner/serviceinfo.cpp index d1223bdc..1028fb40 100644 --- a/examples/bluetooth/lowenergyscanner/serviceinfo.cpp +++ b/examples/bluetooth/lowenergyscanner/serviceinfo.cpp @@ -57,12 +57,12 @@ QLowEnergyServiceInfo ServiceInfo::getLeService() const return m_serviceLe; } -QString ServiceInfo::getName() +QString ServiceInfo::getName() const { return m_serviceLe.serviceName(); } -QString ServiceInfo::getUuid() +QString ServiceInfo::getUuid() const { return m_serviceLe.serviceUuid().toString().remove(QLatin1Char('{')).remove(QLatin1Char('}')); } diff --git a/examples/bluetooth/lowenergyscanner/serviceinfo.h b/examples/bluetooth/lowenergyscanner/serviceinfo.h index 7605119f..56140e4c 100644 --- a/examples/bluetooth/lowenergyscanner/serviceinfo.h +++ b/examples/bluetooth/lowenergyscanner/serviceinfo.h @@ -53,8 +53,8 @@ public: ServiceInfo(); ServiceInfo(const QLowEnergyServiceInfo &service); QLowEnergyServiceInfo getLeService() const; - QString getUuid(); - QString getName(); + QString getUuid() const; + QString getName() const; Q_SIGNALS: void serviceChanged(); |