summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qbluetoothdeviceinfo.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/qbluetoothdeviceinfo.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/qbluetoothdeviceinfo.cpp')
-rw-r--r--src/bluetooth/qbluetoothdeviceinfo.cpp34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/bluetooth/qbluetoothdeviceinfo.cpp b/src/bluetooth/qbluetoothdeviceinfo.cpp
index 11a60565..bd3b9c00 100644
--- a/src/bluetooth/qbluetoothdeviceinfo.cpp
+++ b/src/bluetooth/qbluetoothdeviceinfo.cpp
@@ -72,6 +72,20 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \enum QBluetoothDeviceInfo::Field
+
+ This enum is used in conjuntion with the \l deviceUpdated() signal and indicates the field
+ that changed.
+
+ \value None None of the values changed.
+ \value RSSI The \l rssi() value of the device changed.
+ \value ManufacturerData The \l manufacturerData() field changed
+ \value All Matches every possible field.
+
+ \since 5.12
+*/
+
+/*!
\enum QBluetoothDeviceInfo::MinorMiscellaneousClass
This enum describes the minor device classes for miscellaneous Bluetooth devices.
@@ -598,20 +612,38 @@ QVector<quint16> QBluetoothDeviceInfo::manufacturerIds() const
*/
QByteArray QBluetoothDeviceInfo::manufacturerData(quint16 manufacturerId) const
{
+ // TODO Currently not implemented on WinRT
Q_D(const QBluetoothDeviceInfo);
return d->manufacturerData.value(manufacturerId);
}
/*!
Sets the advertised manufacturer \a data for the given \a manufacturerId.
+ Returns true if it was inserted or changed, false if it was already known.
\sa manufacturerData,
\since 5.12
*/
-void QBluetoothDeviceInfo::setManufacturerData(quint16 manufacturerId, const QByteArray &data)
+bool QBluetoothDeviceInfo::setManufacturerData(quint16 manufacturerId, const QByteArray &data)
{
Q_D(QBluetoothDeviceInfo);
+ const auto it = d->manufacturerData.find(manufacturerId);
+ if (it != d->manufacturerData.end() && *it == data)
+ return false;
d->manufacturerData.insert(manufacturerId, data);
+ return true;
+}
+
+/*!
+ Returns the complete set of all manufacturer data.
+
+ \sa setManufacturerData
+ \since 5.12
+*/
+QHash<quint16, QByteArray> QBluetoothDeviceInfo::manufacturerData() const
+{
+ Q_D(const QBluetoothDeviceInfo);
+ return d->manufacturerData;
}
/*!