summaryrefslogtreecommitdiffstats
path: root/examples/bluetooth/lowenergyscanner/device.cpp
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/device.cpp
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/device.cpp')
-rw-r--r--examples/bluetooth/lowenergyscanner/device.cpp82
1 files changed, 50 insertions, 32 deletions
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.");
}