diff options
author | Fabian Bumberger <fbumberger@rim.com> | 2013-07-29 15:23:49 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-30 13:32:04 +0200 |
commit | 6911677d3d19bde1976a3e276049e876e81e7545 (patch) | |
tree | 5d3e0c1aabfb617243116bb93cf39040dd1aa8b7 /src/bluetooth/qbluetoothlocaldevice_bluez.cpp | |
parent | 1a55e6b9ac378f42c73a15c834c0ca1345abffdd (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.cpp | 40 |
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) |