summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@qt.io>2018-08-21 11:11:56 +0200
committerAlex Blasche <alexander.blasche@qt.io>2018-08-23 07:44:35 +0000
commit4a20dda27259fad1468370860162b8f22ca53072 (patch)
treebaec5a21ea788b55a97ee1128f674f660df3531a /src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
parentb9e3ca7c32da3fdc4bfb6e4c7c540e66229f86ce (diff)
Add QBluetoothDeviceDiscoveryAgent::deviceUpdated signal
For iBeacons and such, it's normal to keep discovering indefinitely, while the advertisement can sometimes carry changing payload data. This signal helps keep the UI up-to-date. Changed setManufacturerData to return a bool indicating whether the data was really modified or not, to avoid sending deviceUpdated in case it was not changed. For convenience QBluetoothDeviceInfo::manufacturerData() was added. WinRT and Apple platforms do not emit the new signal yet and relevant TODO items were added. Done-with: Shawn Rutledge <shawn.rutledge@qt.io> Task-number: QTBUG-46008 Task-number: QTBUG-69747 Change-Id: I6d6b373f6cc5ee3dd6af2ad05d8640dbd25c5d6a Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp')
-rw-r--r--src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
index c7afd578..50f3aef9 100644
--- a/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
+++ b/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
@@ -317,12 +317,29 @@ void QBluetoothDeviceDiscoveryAgentPrivate::processDiscoveredDevices(
for (int i = 0; i < discoveredDevices.size(); i++) {
if (discoveredDevices[i].address() == info.address()) {
- if (discoveredDevices[i] == info && lowEnergySearchTimeout > 0) {
- qCDebug(QT_BT_ANDROID) << "Duplicate: " << info.address()
- << "isLeScanResult:" << isLeResult;
+ QBluetoothDeviceInfo::Fields updatedFields = QBluetoothDeviceInfo::Field::None;
+ if (discoveredDevices[i].rssi() != info.rssi()) {
+ qCDebug(QT_BT_ANDROID) << "Updating RSSI for" << info.address()
+ << info.rssi();
+ discoveredDevices[i].setRssi(info.rssi());
+ updatedFields.setFlag(QBluetoothDeviceInfo::Field::RSSI);
+ }
+ if (discoveredDevices[i].manufacturerData() != info.manufacturerData()) {
+ qCDebug(QT_BT_ANDROID) << "Updating manufacturer data for" << info.address();
+ const QVector<quint16> keys = info.manufacturerIds();
+ for (auto key: keys)
+ discoveredDevices[i].setManufacturerData(key, info.manufacturerData(key));
+ updatedFields.setFlag(QBluetoothDeviceInfo::Field::ManufacturerData);
+ }
+
+ if (!updatedFields.testFlag(QBluetoothDeviceInfo::Field::None)) {
+ emit q->deviceUpdated(discoveredDevices[i], updatedFields);
return;
}
+ if (discoveredDevices[i] == info)
+ return;
+
if (discoveredDevices.at(i).name() == info.name()) {
qCDebug(QT_BT_ANDROID) << "Almost Duplicate "<< info.address()
<< info.name() << "- replacing in place";