summaryrefslogtreecommitdiffstats
path: root/examples/bluetooth/lowenergyscanner
diff options
context:
space:
mode:
authorNedim Hadzic <nhadzic@blackberry.com>2014-02-26 12:09:23 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-27 14:56:08 +0100
commiteb632012c2cf13922b08f4e2606d1452da9aaacb (patch)
tree78433495f7811e6f89054afe38b125a4e96c671b /examples/bluetooth/lowenergyscanner
parent6de4ff7b44d32d2f0fea277d856ce4d3fe321c7e (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/bluetooth/lowenergyscanner')
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Dialog.qml5
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Header.qml6
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Label.qml1
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/Menu.qml6
-rw-r--r--examples/bluetooth/lowenergyscanner/assets/main.qml5
-rw-r--r--examples/bluetooth/lowenergyscanner/device.cpp82
-rw-r--r--examples/bluetooth/lowenergyscanner/device.h8
-rw-r--r--examples/bluetooth/lowenergyscanner/deviceinfo.cpp4
-rw-r--r--examples/bluetooth/lowenergyscanner/deviceinfo.h4
-rw-r--r--examples/bluetooth/lowenergyscanner/lowenergyscanner.pro10
-rw-r--r--examples/bluetooth/lowenergyscanner/serviceinfo.cpp4
-rw-r--r--examples/bluetooth/lowenergyscanner/serviceinfo.h4
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();