[Interest] Qt Bluetooth in Linux non-functional?

Blasche Alexander Alexander.Blasche at digia.com
Mon Apr 28 12:13:34 CEST 2014


OK, time to move this to Jira. Alex, could you please add yourself to the watcher list of:

https://bugreports.qt-project.org/browse/QTBUG-38624

I have added a few more comments and questions.
--
Alex

________________________________________
From: interest-bounces+alexander.blasche=digia.com at qt-project.org [interest-bounces+alexander.blasche=digia.com at qt-project.org] on behalf of Alexander Zakharov [alexander.v.zakharov at gmail.com]
Sent: Monday, April 28, 2014 08:29
To: interest at qt-project.org
Subject: Re: [Interest] Qt Bluetooth in Linux non-functional?

I have installed Qt 5.3 beta and tried to run my tests as well as
Bluetooth Scanner example provided in Qt. It made no difference with Qt
5.2.1, but it seems I have found a clue.

I have noticed that when my program is running (it is a simple console
application requiring manual termination), service discovery by
bluez-test-device command also does not work, producing an empty output.
My program worked in the following way:

- run device discovery using QBluetoothDeviceDiscoveryAgent;
- run service discovery using QBluetoothServiceDiscoveryAgent
   from a slot connected to QBluetoothDeviceDiscoveryAgent::finished()
   signal;
- try to create RFCOMM socket using QBluetoothSocket from a slot
   connected to QBluetoothServiceDiscoveryAgent::finished() signal.

Since I know the address of my device, I have tried to work with it
directly (by creating QBluetoothAddress), eliminating the first step
(device discovery). Suddenly, everything started to function properly:
service discovery produced a list of all services and RFCOMM connection
was established. I have also found that running device discovery and
then starting service discovery early (for example, from a slot
connected to QBluetoothDeviceDiscoveryAgent::deviceDiscovered, when
first device is found), also works.

So, after my experiments I have an impression that service discovery
fails only if it is started after a complete device discovery, as if the
device discovery procedure somehow blocks further access to the device,
and not only in my own program, but in the whole system (service
discovery by bluez-test-device also stops to work). Manually deleting
QBluetoothDeviceDiscoveryAgent object before starting service discovery
does not help. Moreover, this problem does not arise for all devices. I
have tried to run service discovery for my Android phone, and it seems
to work even after complete device discovery procedure.

The trace output of failing service discovery is the following:

qt.bluetooth.bluez: Full discovery on:  "00:07:80:5C:24:B9"
qt.bluetooth.bluez: void
QBluetoothServiceDiscoveryAgentPrivate::_q_createdDevice(QDBusPendingCallWatcher*)
created "00:07:80:5C:24:B9"
qt.bluetooth.bluez: void
QBluetoothServiceDiscoveryAgentPrivate::_q_createdDevice(QDBusPendingCallWatcher*)
Discover restrictions: ""
qt.bluetooth.bluez: void
QBluetoothServiceDiscoveryAgentPrivate::_q_discoveredServices(QDBusPendingCallWatcher*)
qt.bluetooth.bluez: Parsing xml "00:07:80:5C:24:B9" 1 0
_______________________________________________
Interest mailing list
Interest at qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest



More information about the Interest mailing list