diff options
author | Nedim Hadzic <nhadzic@blackberry.com> | 2014-02-20 16:06:53 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-21 21:49:23 +0100 |
commit | e078904563a4deaff3f36c06e4435e6c68bff67e (patch) | |
tree | e6c5a13d7da687791a5e4290f702873877600bd1 | |
parent | 718e66ca7d568111f116101f979f5323e4f4e079 (diff) |
QNX pairing status fix implemented
Pairing status was returning Unpaired status even if device was paired.
Change-Id: Ib529cc4868f8043f5d83076f96ac9d71acc7c96f
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
-rw-r--r-- | src/bluetooth/qbluetoothlocaldevice_qnx.cpp | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/bluetooth/qbluetoothlocaldevice_qnx.cpp b/src/bluetooth/qbluetoothlocaldevice_qnx.cpp index d0236b6a..8ed29437 100644 --- a/src/bluetooth/qbluetoothlocaldevice_qnx.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_qnx.cpp @@ -168,11 +168,42 @@ QBluetoothLocalDevice::Pairing QBluetoothLocalDevice::pairingStatus(const QBluet { if (!isValid()) return Unpaired; + bool paired = false; + bool btle = false; // Bluetooth Low Energy devices + QByteArray qnxPath("/pps/services/bluetooth/remote_devices/"); + qnxPath.append(address.toString().toUtf8()); + int m_rdfd; + if ((m_rdfd = qt_safe_open(qnxPath.constData(), O_RDONLY)) == -1){ + btle = true; + qnxPath.append("-00"); + if ((m_rdfd = qt_safe_open(qnxPath.constData(), O_RDONLY)) == -1) { + qnxPath.replace((qnxPath.length()-3), 3, "-01"); + if ((m_rdfd = qt_safe_open(qnxPath.constData(), O_RDONLY)) == -1) + return Unpaired; + } + } + + pps_decoder_t ppsDecoder; + pps_decoder_initialize(&ppsDecoder, NULL); + + QBluetoothAddress deviceAddr; + QString deviceName; - QVariant status = ppsRemoteDeviceStatus(address.toString().toLocal8Bit(), "paired"); - if (status.toBool()) + if (!ppsReadRemoteDevice(m_rdfd, &ppsDecoder, &deviceAddr, &deviceName)) + return Unpaired; + bool known = false; + // Paired BTLE devices have only known field set to true. + if (btle) + pps_decoder_get_bool(&ppsDecoder, "known", &known); + pps_decoder_get_bool(&ppsDecoder, "paired", &paired); + pps_decoder_cleanup(&ppsDecoder); + + if (paired) + return Paired; + else if (btle && known) return Paired; - return Unpaired; + else + return Unpaired; } void QBluetoothLocalDevice::pairingConfirmation(bool confirmation) |