summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/btdiscovery.cpp20
-rw-r--r--core/btdiscovery.h4
-rw-r--r--core/downloadfromdcthread.cpp53
-rw-r--r--core/downloadfromdcthread.h8
-rw-r--r--mobile-widgets/qml/DownloadFromDiveComputer.qml11
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 &currentText)
{
#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 &currentVendorText,
+ const QString &currentProductText)
{
#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 &currentVendorText,
+ const QString &currentProductText)
{
-#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 &currentText);
+ Q_INVOKABLE int getDetectedProductIndex(const QString &currentVendorText,
+ const QString &currentProductText);
+ Q_INVOKABLE QString getDetectedDeviceAddress(const QString &currentVendorText,
+ const QString &currentProductText);
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
}