Details
-
Task
-
Resolution: Unresolved
-
P4: Low
-
None
-
6.5
-
None
-
-
21
-
Foundation PM Staging
Description
QtBluetooth uses BlueZ DBus interfaces on Linux.
One of the interfaces is BlueZ ProfileManager which is used to register a Bluetooth profile, which among other things defines which service-UUID the profile (and consequently the application) implements.
BlueZ will only allow one profile to be registered for one service-UUID. Others will get a "UUID already registered" error. I think this is understandable; otherwise BlueZ would not know whom to provide with the new connections. Further I think BlueZ doesn't really distinguish between profiles registered to same or different applications.
In current Qt codebase the profile manager instances are specific to QBluetoothSocket (client) and QBluetoothServiceInfo (server) instances.
This becomes a problem if we want to connect multiple QBluetoothSockets to same service UUIDs on different devices. The QTBUG-82413 implements a workaround for the problem. But ideally a single Qt application would have a single shared ProfileManager dealing with these profile registrations. Understandably the shared-manager would only help within a single application (one application using multiple sockets to same service-UUID on different devices), but not if several different applications attempt to use same UUID.
In addition it should be investigated that could this also provide a solution on how to handle concurrently registered client (QBluetoothSocket) and server (QBluetoothServiceInfo) profiles for a single service-UUID. This relates to the use case of 'btchat' application, where the application both listens to incoming connections, and is able to connect to other devices.
It should be noted that testing this kind of feature is time consuming.