summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qbluetoothlocaldevice_bluez.cpp
diff options
context:
space:
mode:
authorFabian Bumberger <fbumberger@rim.com>2013-07-29 15:23:49 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-07-30 13:32:04 +0200
commit6911677d3d19bde1976a3e276049e876e81e7545 (patch)
tree5d3e0c1aabfb617243116bb93cf39040dd1aa8b7 /src/bluetooth/qbluetoothlocaldevice_bluez.cpp
parent1a55e6b9ac378f42c73a15c834c0ca1345abffdd (diff)
BlueZ: Fix setting host mode
Change-Id: Id36f047acfaabf3fdbb4e6c07e88dac50878a641 Reviewed-by: Alex <alexander.blasche@digia.com>
Diffstat (limited to 'src/bluetooth/qbluetoothlocaldevice_bluez.cpp')
-rw-r--r--src/bluetooth/qbluetoothlocaldevice_bluez.cpp40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp
index f7beb672..786d891b 100644
--- a/src/bluetooth/qbluetoothlocaldevice_bluez.cpp
+++ b/src/bluetooth/qbluetoothlocaldevice_bluez.cpp
@@ -107,16 +107,26 @@ void QBluetoothLocalDevice::setHostMode(QBluetoothLocalDevice::HostMode mode)
switch (mode) {
case HostDiscoverableLimitedInquiry:
case HostDiscoverable:
- if (hostMode() != HostPoweredOff)
- d_ptr->adapter->SetProperty(QLatin1String("Powered"), QDBusVariant(QVariant::fromValue(true)));
- d_ptr->adapter->SetProperty(QLatin1String("Discoverable"),
+ if (hostMode() == HostPoweredOff) {
+ //We first have to wait for BT to be powered on,
+ //then we can set the host mode correctly
+ d_ptr->pendingHostModeChange = (int) HostDiscoverable;
+ d_ptr->adapter->SetProperty(QStringLiteral("Powered"),
+ QDBusVariant(QVariant::fromValue(true)));
+ } else {
+ d_ptr->adapter->SetProperty(QStringLiteral("Discoverable"),
QDBusVariant(QVariant::fromValue(true)));
+ }
break;
case HostConnectable:
- if (hostMode() != HostPoweredOff)
- d_ptr->adapter->SetProperty(QLatin1String("Powered"), QDBusVariant(QVariant::fromValue(true)));
- d_ptr->adapter->SetProperty(QLatin1String("Discoverable"),
+ if (hostMode() == HostPoweredOff) {
+ d_ptr->pendingHostModeChange = (int) HostConnectable;
+ d_ptr->adapter->SetProperty(QStringLiteral("Powered"),
+ QDBusVariant(QVariant::fromValue(true)));
+ } else {
+ d_ptr->adapter->SetProperty(QStringLiteral("Discoverable"),
QDBusVariant(QVariant::fromValue(false)));
+ }
break;
case HostPoweredOff:
d_ptr->adapter->SetProperty(QLatin1String("Powered"),
@@ -325,7 +335,7 @@ QBluetoothLocalDevice::Pairing QBluetoothLocalDevice::pairingStatus(const QBluet
}
QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice *q, QBluetoothAddress address)
- : adapter(0), agent(0), localAddress(address), msgConnection(0), q_ptr(q)
+ : adapter(0), agent(0), localAddress(address), pendingHostModeChange(-1), msgConnection(0), q_ptr(q)
{
initializeAdapter();
}
@@ -533,6 +543,22 @@ void QBluetoothLocalDevicePrivate::PropertyChanged(QString property, QDBusVarian
mode = QBluetoothLocalDevice::HostDiscoverable;
else
mode = QBluetoothLocalDevice::HostConnectable;
+
+ if (pendingHostModeChange != -1) {
+ if ((int)mode != pendingHostModeChange) {
+ if (property == QStringLiteral("Powered"))
+ return;
+ if (pendingHostModeChange == (int)QBluetoothLocalDevice::HostDiscoverable) {
+ adapter->SetProperty(QStringLiteral("Discoverable"),
+ QDBusVariant(QVariant::fromValue(true)));
+ } else {
+ adapter->SetProperty(QStringLiteral("Discoverable"),
+ QDBusVariant(QVariant::fromValue(false)));
+ }
+ pendingHostModeChange = -1;
+ return;
+ }
+ }
}
if(mode != currentMode)