Qt 6.4 introduces new error code for permission errors (QTBUG-102373).
This commit makes use of the new error code. This consists of two
parts:
1) If the bluetooth permission key is missing from the application's
Info.plist and we know it's needed => permission error. This is
limited to Low Energy because classic bluetooth does not need it
on macOS, and iOS does not support classic bluetooth.
If the key is missing, it is an application development/deployment
error and we should not make too many of these checks - few places
is enough.
2) At runtime the platform prompts for bluetooth permission and the user
may disallow it => permission error.
Amends: d58d134d25
Fixes: QTBUG-103388
Change-Id: I96de202e9ac8c33e51bc126389f62091d03eab70
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
If there is no adapter available, the bluetoothtestdevice manual
test application crashes as it accesses empty adapter list.
Pick-to: 6.2 6.3
Change-Id: I2126cad73713976e453775b573518c041d369b52
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
... and port (already or soon-expected-to-be) count() to size().
These changes are considered trivial, in that nothing but the loop
variable needs adjustment.
The alternative, a port to ranged for-loops, I dismissed for these
loops, either because the loop index was used for something else
(first/last check, zip iteration) or I was just too lazy to prove that
the container under iteration isn't changed.
In some cases, I may have forgotten to port to ranged loops, even
though it would be trivially safe. This was already much more complex
than anticipated :)
Also fix post-increment to pre-increment. It doesn't matter for
integral types, but developers that regularly read and write
post-increment for integral types will likely fail to switch to
pre-increment for iterators types, where the difference does matter,
so increase the exposure of code readers to the idiomatic form.
Pick-to: 6.3
Task-number: QTBUG-102463
Change-Id: Ia6f2960dc52d46ffbd48f12446e9b0f7c70df162
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
The BT LE support differs slightly on different platforms on the server
side. This commit adds the means to adjust the BT LE client-side
expectations depending on which platform the counterpart server is
running on.
Task-number: QTBUG-98781
Pick-to: 6.2
Change-Id: Ia30afb2ba2256595cd5556bb417f9542ecb0b06c
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
If services were added in a tight loop sometimes the services are
created wrong. In practice this results in a situation where a client
reads a characteristic value from "Service A", but gets the value from
"Service B" - even if the client had no knowledge of "Service B".
The problem is that according to Android documentation, the
BluetoothGattServer::addService() must not be called before the prior
added service has received a
BluetoothGattServerCallback::onServiceAdded() -callback.
This commit serializes/queues the service additions.
Fixes: QTBUG-96742
Pick-to: 6.2 5.15
Change-Id: I42c980600419787d4490d1a1059e3893597cb7cf
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This patch adds a tool "bluetoothtestdevice" which
acts as a partner device in QtBluetooth unit tests.
Pick-to: 6.2
Change-Id: I5be89cf555a94a209de093d328fb29f91c2fea9a
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>