summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNedim Hadzic <nhadzic@blackberry.com>2014-02-20 16:06:53 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-21 21:49:23 +0100
commite078904563a4deaff3f36c06e4435e6c68bff67e (patch)
treee6c5a13d7da687791a5e4290f702873877600bd1
parent718e66ca7d568111f116101f979f5323e4f4e079 (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.cpp37
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)