diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2014-07-17 19:30:03 +0400 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2014-07-23 12:14:51 +0200 |
commit | c7f99c0200e8ddf68b432735dd690525a1c54b74 (patch) | |
tree | 946cc4919bbd5d634a9094803ebc478259c16b72 /src/bluetooth/qbluetoothlocaldevice_win.cpp | |
parent | 7f1ed68c12c193561bd016da091d9ffff0b7724b (diff) |
Implement the host modes for QBluetoothLocalDevice
Change-Id: I313c8143dc4b54f5ee4aab8465514aefcbb5f789
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/bluetooth/qbluetoothlocaldevice_win.cpp')
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_win.cpp | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/src/bluetooth/qbluetoothlocaldevice_win.cpp b/src/bluetooth/qbluetoothlocaldevice_win.cpp index 2ce8e0af..0234a95a 100644 --- a/src/bluetooth/qbluetoothlocaldevice_win.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_win.cpp @@ -79,15 +79,83 @@ QBluetoothAddress QBluetoothLocalDevice::address() const void QBluetoothLocalDevice::powerOn() { + if (hostMode() != HostPoweredOff) + return; + + setHostMode(HostConnectable); } -void QBluetoothLocalDevice::setHostMode(QBluetoothLocalDevice::HostMode mode) +void QBluetoothLocalDevice::setHostMode(QBluetoothLocalDevice::HostMode requestedMode) { - Q_UNUSED(mode); + Q_D(QBluetoothLocalDevice); + + if (!isValid()) { + qCWarning(QT_BT_WINDOWS) << "The local device is not initialized correctly"; + return; + } + + if (requestedMode == HostDiscoverableLimitedInquiry) + requestedMode = HostDiscoverable; + + if (requestedMode == hostMode()) + return; + + if (requestedMode == QBluetoothLocalDevice::HostPoweredOff) { + if (::BluetoothIsDiscoverable(d->deviceHandle) + && !::BluetoothEnableDiscovery(d->deviceHandle, FALSE)) { + qCWarning(QT_BT_WINDOWS) << "Unable to disable the discoverable mode"; + emit error(QBluetoothLocalDevice::UnknownError); + return; + } + if (::BluetoothIsConnectable(d->deviceHandle) + && !::BluetoothEnableIncomingConnections(d->deviceHandle, FALSE)) { + qCWarning(QT_BT_WINDOWS) << "Unable to disable the connectable mode"; + emit error(QBluetoothLocalDevice::UnknownError); + return; + } + } else if (requestedMode == QBluetoothLocalDevice::HostConnectable) { + if (::BluetoothIsDiscoverable(d->deviceHandle)) { + if (!::BluetoothEnableDiscovery(d->deviceHandle, FALSE)) { + qCWarning(QT_BT_WINDOWS) << "Unable to disable the discoverable mode"; + emit error(QBluetoothLocalDevice::UnknownError); + return; + } + } else if (!::BluetoothEnableIncomingConnections(d->deviceHandle, TRUE)) { + qCWarning(QT_BT_WINDOWS) << "Unable to enable the connectable mode"; + emit error(QBluetoothLocalDevice::UnknownError); + return; + } + } else if (requestedMode == QBluetoothLocalDevice::HostDiscoverable + || requestedMode == QBluetoothLocalDevice::HostDiscoverableLimitedInquiry) { + if (!::BluetoothIsConnectable(d->deviceHandle) + && !::BluetoothEnableIncomingConnections(d->deviceHandle, TRUE)) { + qCWarning(QT_BT_WINDOWS) << "Unable to enable the connectable mode"; + emit error(QBluetoothLocalDevice::UnknownError); + return; + } + if (!::BluetoothEnableDiscovery(d->deviceHandle, TRUE)) { + qCWarning(QT_BT_WINDOWS) << "Unable to enable the discoverable mode"; + emit error(QBluetoothLocalDevice::UnknownError); + return; + } + } + + emit hostModeStateChanged(requestedMode); } QBluetoothLocalDevice::HostMode QBluetoothLocalDevice::hostMode() const { + Q_D(const QBluetoothLocalDevice); + + if (!isValid()) { + qCWarning(QT_BT_WINDOWS) << "The local device is not initialized correctly"; + return HostPoweredOff; + } + + if (::BluetoothIsDiscoverable(d->deviceHandle)) + return HostDiscoverable; + if (::BluetoothIsConnectable(d->deviceHandle)) + return HostConnectable; return HostPoweredOff; } |