summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/qbluetoothlocaldevice_win.cpp
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2014-07-17 19:30:03 +0400
committerDenis Shienkov <denis.shienkov@gmail.com>2014-07-23 12:14:51 +0200
commitc7f99c0200e8ddf68b432735dd690525a1c54b74 (patch)
tree946cc4919bbd5d634a9094803ebc478259c16b72 /src/bluetooth/qbluetoothlocaldevice_win.cpp
parent7f1ed68c12c193561bd016da091d9ffff0b7724b (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.cpp72
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;
}