From 4e1873cea12c747aaa021e529051bcb2d3e85bb8 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Thu, 18 Feb 2016 17:54:21 +0300 Subject: Get serial number of bluetooth USB dongle on Windows Now, the serial ports which are created by the bluetooth connection takes the serial numbers of the own USB bluetooth dongles. We enumerate all parent devices of a driver stack until their end has been reached, or the serial number has been found. Change-Id: I63820f34fd4c47992c3c5ef3c7ce63eca4ea0cf8 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialportinfo_win.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp index 140f191..451efef 100644 --- a/src/serialport/qserialportinfo_win.cpp +++ b/src/serialport/qserialportinfo_win.cpp @@ -264,16 +264,22 @@ static QString parseDeviceSerialNumber(const QString &instanceIdentifier) return instanceIdentifier.mid(firstbound + 1, lastbound - firstbound - 1); } -static QString deviceSerialNumber(const QString &instanceIdentifier, +static QString deviceSerialNumber(QString instanceIdentifier, DEVINST deviceInstanceNumber) { - QString result = parseDeviceSerialNumber(instanceIdentifier); - if (result.isEmpty()) { - const DEVINST parentNumber = parentDeviceInstanceNumber(deviceInstanceNumber); - const QString parentInstanceIdentifier = deviceInstanceIdentifier(parentNumber); - result = parseDeviceSerialNumber(parentInstanceIdentifier); + forever { + const QString result = parseDeviceSerialNumber(instanceIdentifier); + if (!result.isEmpty()) + return result; + deviceInstanceNumber = parentDeviceInstanceNumber(deviceInstanceNumber); + if (deviceInstanceNumber == 0) + break; + instanceIdentifier = deviceInstanceIdentifier(deviceInstanceNumber); + if (instanceIdentifier.isEmpty()) + break; } - return result; + + return QString(); } QList QSerialPortInfo::availablePorts() -- cgit v1.2.1