summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qlowenergycontroller_bluez.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-02-16 21:52:03 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-02-16 21:52:03 +0100
commiteef68dea35960670c1a1a1431d4541e1ed19c781 (patch)
tree097e6575b0cbc43704077d76372c986dcce3c998 /src/bluetooth/qlowenergycontroller_bluez.cpp
parentfa2389dd0a6df58d73d221654db36ff791b96e43 (diff)
parentc87458961f29064ab69a308526b0243debcdf1f7 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: .qmake.conf src/bluetooth/qlowenergycontroller_bluez.cpp Change-Id: I00f45a2a22a045e7836f2caeb76cc5599ced6279
Diffstat (limited to 'src/bluetooth/qlowenergycontroller_bluez.cpp')
-rw-r--r--src/bluetooth/qlowenergycontroller_bluez.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp
index 06586192..729847f9 100644
--- a/src/bluetooth/qlowenergycontroller_bluez.cpp
+++ b/src/bluetooth/qlowenergycontroller_bluez.cpp
@@ -263,7 +263,10 @@ QLowEnergyControllerPrivate::QLowEnergyControllerPrivate()
{
registerQLowEnergyControllerMetaType();
qRegisterMetaType<QList<QLowEnergyHandle> >();
+}
+void QLowEnergyControllerPrivate::init()
+{
hciManager = new HciManager(localAdapter, this);
if (!hciManager->isValid())
return;
@@ -602,7 +605,12 @@ void QLowEnergyControllerPrivate::l2cpReadyRead()
break;
}
- Q_ASSERT(!openRequests.isEmpty());
+ if (openRequests.isEmpty()) {
+ qCWarning(QT_BT_BLUEZ) << "Received unexpected packet from peer, disconnecting.";
+ disconnectFromDevice();
+ return;
+ }
+
const Request request = openRequests.dequeue();
processReply(request, incomingPacket);
@@ -1074,7 +1082,14 @@ void QLowEnergyControllerPrivate::processReply(
Q_ASSERT(!p.isNull());
if (isErrorResponse) {
- readServiceValues(p->uuid, false); //read descriptor values
+ if (keys.count() == 1) {
+ // no more descriptors to discover
+ readServiceValues(p->uuid, false); //read descriptor values
+ } else {
+ // hop to the next descriptor
+ keys.removeFirst();
+ discoverNextDescriptor(p, keys, keys.first());
+ }
break;
}