diff options
-rw-r--r-- | core/btdiscovery.cpp | 20 | ||||
-rw-r--r-- | core/btdiscovery.h | 4 | ||||
-rw-r--r-- | core/downloadfromdcthread.cpp | 53 | ||||
-rw-r--r-- | core/downloadfromdcthread.h | 8 | ||||
-rw-r--r-- | mobile-widgets/qml/DownloadFromDiveComputer.qml | 11 |
5 files changed, 75 insertions, 21 deletions
diff --git a/core/btdiscovery.cpp b/core/btdiscovery.cpp index cf68bf8eb..2edddb300 100644 --- a/core/btdiscovery.cpp +++ b/core/btdiscovery.cpp @@ -66,6 +66,7 @@ void BTDiscovery::btDeviceDiscovered(const QBluetoothDeviceInfo &device) this_d.address = device.address(); this_d.name = device.name(); btPairedDevices.append(this_d); + struct btVendorProduct btVP; QString newDevice = device.name(); @@ -77,20 +78,27 @@ void BTDiscovery::btDeviceDiscovered(const QBluetoothDeviceInfo &device) addBtUuid(id); qDebug() << id.toByteArray(); } - qDebug() << "Found new device " + newDevice + " (" + device.address().toString() + ")"; - QString vendor, product; + qDebug() << "Found new device:" << newDevice << device.address(); + QString vendor; foreach (vendor, productList.keys()) { if (productList[vendor].contains(newDevice)) { qDebug() << "this could be a " + vendor + " " + (newDevice == "OSTC 3" ? "OSTC family" : newDevice); - struct btVendorProduct btVP; btVP.btdi = device; btVP.vendorIdx = vendorList.indexOf(vendor); btVP.productIdx = productList[vendor].indexOf(newDevice); - qDebug() << "adding new btDCs entry" << newDevice << btVP.vendorIdx << btVP.productIdx; + qDebug() << "adding new btDCs entry (detected DC)" << newDevice << btVP.vendorIdx << btVP.productIdx << btVP.btdi.address();; btDCs << btVP; + break; } } + productList[QObject::tr("Paired Bluetooth Devices")].append(this_d.name); + + btVP.btdi = device; + btVP.vendorIdx = vendorList.indexOf(QObject::tr("Paired Bluetooth Devices")); + btVP.productIdx = productList[QObject::tr("Paired Bluetooth Devices")].indexOf(this_d.name); + qDebug() << "adding new btDCs entry (all paired)" << newDevice << btVP.vendorIdx << btVP.productIdx << btVP.btdi.address(); + btAllDevices << btVP; } QList <struct btVendorProduct> BTDiscovery::getBtDcs() @@ -98,6 +106,10 @@ QList <struct btVendorProduct> BTDiscovery::getBtDcs() return btDCs; } +QList <struct btVendorProduct> BTDiscovery::getBtAllDevices() +{ + return btAllDevices; +} // Android: As Qt is not able to pull the pairing data from a device, i // a lengthy discovery process is needed to see what devices are paired. On diff --git a/core/btdiscovery.h b/core/btdiscovery.h index e4d265616..1951b6672 100644 --- a/core/btdiscovery.h +++ b/core/btdiscovery.h @@ -40,11 +40,13 @@ public: void getBluetoothDevices(); #endif QList<struct btVendorProduct> getBtDcs(); + QList<struct btVendorProduct> getBtAllDevices(); #endif private: static BTDiscovery *m_instance; #if defined(BT_SUPPORT) - QList<struct btVendorProduct> btDCs; + QList<struct btVendorProduct> btDCs; // recognized DCs + QList<struct btVendorProduct> btAllDevices; // all paired BT stuff #endif #if defined(Q_OS_ANDROID) bool checkException(const char* method, const QAndroidJniObject* obj); diff --git a/core/downloadfromdcthread.cpp b/core/downloadfromdcthread.cpp index 43bd1e0b8..64933b5bc 100644 --- a/core/downloadfromdcthread.cpp +++ b/core/downloadfromdcthread.cpp @@ -242,39 +242,76 @@ device_data_t* DCDeviceData::internalData() return &data; } -int DCDeviceData::getDetectedVendorIndex() +int DCDeviceData::getDetectedVendorIndex(const QString ¤tText) { #if defined(BT_SUPPORT) QList<btVendorProduct> btDCs = BTDiscovery::instance()->getBtDcs(); - if (!btDCs.isEmpty()) { - qDebug() << "getDetectedVendorIndex" << btDCs.first().vendorIdx; + QList<btVendorProduct> btAllDevices = BTDiscovery::instance()->getBtAllDevices(); + + // Pick the vendor of the first confirmed find of a DC (if any), but + // only return a true vendow, and not our virtual one + if (!btDCs.isEmpty() && currentText != QObject::tr("Paired Bluetooth Devices")) { + qDebug() << "getDetectedVendorIndex" << currentText << btDCs.first().vendorIdx; return btDCs.first().vendorIdx; } + + // When the above fails, just pick the (one and only) virtual vendor + if (!btAllDevices.isEmpty() && currentText == QObject::tr("Paired Bluetooth Devices")) { + qDebug() << "getDetectedVendorIndex" << currentText << btAllDevices.first().vendorIdx; + return btAllDevices.first().vendorIdx; + } #endif return -1; } -int DCDeviceData::getDetectedProductIndex() +int DCDeviceData::getDetectedProductIndex(const QString ¤tVendorText, + const QString ¤tProductText) { #if defined(BT_SUPPORT) QList<btVendorProduct> btDCs = BTDiscovery::instance()->getBtDcs(); - if (!btDCs.isEmpty()) { + + // Display in the QML UI, the first found dive computer that is been + // detected as a possible real dive computer (and not some other paired + // BT device + if (currentVendorText != QObject::tr("Paired Bluetooth Devices") && !btDCs.isEmpty()) { qDebug() << "getDetectedProductIndex" << btDCs.first().productIdx; return btDCs.first().productIdx; } + + // if the above fails, display the selected paired device + if (currentVendorText == QObject::tr("Paired Bluetooth Devices")) { + qDebug() << "getDetectedProductIndex" << productList[currentVendorText].indexOf(currentProductText); + return productList[currentVendorText].indexOf(currentProductText); + } #endif return -1; } -QString DCDeviceData::getDetectedDeviceAddress() +QString DCDeviceData::getDetectedDeviceAddress(const QString ¤tVendorText, + const QString ¤tProductText) { -#if BT_SUPPORT +#if defined(BT_SUPPORT) QList<btVendorProduct> btDCs = BTDiscovery::instance()->getBtDcs(); - if (!btDCs.isEmpty()) { + QList<btVendorProduct> btAllDevices = BTDiscovery::instance()->getBtAllDevices(); + + // Pull the BT address from the first found dive computer that is been + // detected as a possible real dive computer (and not some other paired + // BT device + if (currentVendorText != QObject::tr("Paired Bluetooth Devices") && !btDCs.isEmpty()) { QString btAddr = btDCs.first().btdi.address().toString(); qDebug() << "getDetectedDeviceAddress" << btAddr; return btAddr; } + + // if the above fails, pull the BT address from the selected paired device + // unsure being a dive computer + if (currentVendorText == QObject::tr("Paired Bluetooth Devices")) { + int i = productList[currentVendorText].indexOf(currentProductText); + QString btAddr = btAllDevices[i].btdi.address().toString(); + qDebug() << "getDetectedDeviceAddress" << btAddr; + return btAddr; + } + return QString(); #endif } diff --git a/core/downloadfromdcthread.h b/core/downloadfromdcthread.h index 13cca1438..f606a7a74 100644 --- a/core/downloadfromdcthread.h +++ b/core/downloadfromdcthread.h @@ -45,9 +45,11 @@ public: device_data_t* internalData(); Q_INVOKABLE QStringList getProductListFromVendor(const QString& vendor); - Q_INVOKABLE int getDetectedVendorIndex(); - Q_INVOKABLE int getDetectedProductIndex(); - Q_INVOKABLE QString getDetectedDeviceAddress(); + Q_INVOKABLE int getDetectedVendorIndex(const QString ¤tText); + Q_INVOKABLE int getDetectedProductIndex(const QString ¤tVendorText, + const QString ¤tProductText); + Q_INVOKABLE QString getDetectedDeviceAddress(const QString ¤tVendorText, + const QString ¤tProductText); public slots: void setVendor(const QString& vendor); diff --git a/mobile-widgets/qml/DownloadFromDiveComputer.qml b/mobile-widgets/qml/DownloadFromDiveComputer.qml index 6a24f2dc9..80aaaa251 100644 --- a/mobile-widgets/qml/DownloadFromDiveComputer.qml +++ b/mobile-widgets/qml/DownloadFromDiveComputer.qml @@ -57,11 +57,11 @@ Kirigami.Page { id: comboVendor Layout.fillWidth: true model: vendorList - currentIndex: downloadThread.data().getDetectedVendorIndex() + currentIndex: downloadThread.data().getDetectedVendorIndex(currentText) onCurrentTextChanged: { comboProduct.model = downloadThread.data().getProductListFromVendor(comboVendor.currentText) - if (currentIndex == downloadThread.data().getDetectedVendorIndex()) - comboProduct.currentIndex = downloadThread.data().getDetectedProductIndex() + if (currentIndex == downloadThread.data().getDetectedVendorIndex(currentText)) + comboProduct.currentIndex = downloadThread.data().getDetectedProductIndex(currentText, comboProduct.currentText) } } Kirigami.Label { text: qsTr(" Dive Computer:") } @@ -74,7 +74,7 @@ Kirigami.Page { Kirigami.Label { text: qsTr("Bluetooth download:") } CheckBox { id: isBluetooth - checked: downloadThread.data().getDetectedVendorIndex() != -1 + checked: downloadThread.data().getDetectedVendorIndex(ComboBox.currentText) != -1 } } @@ -89,7 +89,8 @@ Kirigami.Page { onClicked: { text: qsTr("Retry") if (downloadThread.deviceData.bluetoothMode) { - var addr = downloadThread.data().getDetectedDeviceAddress() + var addr = downloadThread.data().getDetectedDeviceAddress(comboVendor.currentText, + comboProduct.currentText) if (addr !== "") downloadThread.deviceData.devName = addr } |