diff options
Diffstat (limited to 'core')
-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 |
4 files changed, 69 insertions, 16 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); |