summaryrefslogtreecommitdiffstats
path: root/examples/bluetooth/lowenergyscanner/device.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/bluetooth/lowenergyscanner/device.cpp')
-rw-r--r--examples/bluetooth/lowenergyscanner/device.cpp39
1 files changed, 35 insertions, 4 deletions
diff --git a/examples/bluetooth/lowenergyscanner/device.cpp b/examples/bluetooth/lowenergyscanner/device.cpp
index 3d82800f..215a7588 100644
--- a/examples/bluetooth/lowenergyscanner/device.cpp
+++ b/examples/bluetooth/lowenergyscanner/device.cpp
@@ -50,14 +50,16 @@
#include <QTimer>
Device::Device():
- connected(false), controller(0), m_deviceScanState(false)
+ connected(false), controller(0), m_deviceScanState(false), randomAddress(false)
{
+ //! [les-devicediscovery-1]
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(deviceScanFinished()));
+ //! [les-devicediscovery-1]
setUpdate("Search");
}
@@ -81,11 +83,14 @@ void Device::startDeviceDiscovery()
emit devicesUpdated();
setUpdate("Scanning for devices ...");
+ //! [les-devicediscovery-2]
discoveryAgent->start();
+ //! [les-devicediscovery-2]
m_deviceScanState = true;
Q_EMIT stateChanged();
}
+//! [les-devicediscovery-3]
void Device::addDevice(const QBluetoothDeviceInfo &info)
{
if (info.coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration) {
@@ -94,6 +99,7 @@ void Device::addDevice(const QBluetoothDeviceInfo &info)
setUpdate("Last device added: " + d->getName());
}
}
+//! [les-devicediscovery-3]
void Device::deviceScanFinished()
{
@@ -154,6 +160,7 @@ void Device::scanServices(const QString &address)
controller = 0;
}
+ //! [les-controller-1]
if (!controller) {
// Connecting signals and slots for connecting to LE services.
controller = new QLowEnergyController(currentDevice.getDevice().address());
@@ -169,21 +176,29 @@ 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]
}
void Device::addLowEnergyService(const QBluetoothUuid &serviceUuid)
{
+ //! [les-service-1]
QLowEnergyService *service = controller->createServiceObject(serviceUuid);
if (!service) {
qWarning() << "Cannot create service for uuid";
return;
}
+ //! [les-service-1]
ServiceInfo *serv = new ServiceInfo(service);
m_services.append(serv);
emit servicesUpdated();
}
+//! [les-service-1]
void Device::serviceScanDone()
{
@@ -209,9 +224,11 @@ void Device::connectToService(const QString &uuid)
emit characteristicsUpdated();
if (service->state() == QLowEnergyService::DiscoveryRequired) {
+ //! [les-service-3]
connect(service, SIGNAL(stateChanged(QLowEnergyService::ServiceState)),
this, SLOT(serviceDetailsDiscovered(QLowEnergyService::ServiceState)));
service->discoverDetails();
+ //! [les-service-3]
return;
}
@@ -229,13 +246,15 @@ void Device::deviceConnected()
{
setUpdate("Discovering services!");
connected = true;
+ //! [les-service-2]
controller->discoverServices();
+ //! [les-service-2]
}
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)
@@ -246,8 +265,7 @@ void Device::setUpdate(QString message)
void Device::disconnectFromDevice()
{
- if (connected)
- controller->disconnectFromDevice();
+ controller->disconnectFromDevice();
}
void Device::deviceDisconnected()
@@ -265,11 +283,13 @@ void Device::serviceDetailsDiscovered(QLowEnergyService::ServiceState newState)
if (!service)
return;
+ //! [les-chars]
const QList<QLowEnergyCharacteristic> chars = service->characteristics();
foreach (const QLowEnergyCharacteristic &ch, chars) {
CharacteristicInfo *cInfo = new CharacteristicInfo(ch);
m_characteristics.append(cInfo);
}
+ //! [les-chars]
emit characteristicsUpdated();
}
@@ -288,3 +308,14 @@ bool Device::state()
{
return m_deviceScanState;
}
+
+bool Device::isRandomAddress() const
+{
+ return randomAddress;
+}
+
+void Device::setRandomAddress(bool newValue)
+{
+ randomAddress = newValue;
+ emit randomAddressChanged();
+}