Desktop: Use Persisted Device Information for Dive Computer Configuration.

Use the dive computer / device information that was persisted when
previously downloading dives or configuring the dive computer in the
dive computer configuration dialog.
Also rename 'Connect with bluetooth' and 'Cancel' buttons in the dialog
to make them more consistent with what they do.

Signed-off-by: Michael Keller <github@ike.ch>
This commit is contained in:
Michael Keller 2023-06-12 14:27:02 +12:00 committed by Dirk Hohndel
parent 35d88fa6ce
commit 700bba7e30
4 changed files with 102 additions and 63 deletions

View file

@ -1,3 +1,4 @@
desktop: use persisted device information for the dive computer configuration
export: fix bug resulting in invalid CSV for '""' in 'CSV summary dive details' export: fix bug resulting in invalid CSV for '""' in 'CSV summary dive details'
desktop: add support for multiple tanks to the profile ruler desktop: add support for multiple tanks to the profile ruler
export: change format produced by 'CSV summary dive details' from TSV (tab separated) to CSV export: change format produced by 'CSV summary dive details' from TSV (tab separated) to CSV

View file

@ -8,6 +8,7 @@
// For fill_computer_list, descriptorLookup // For fill_computer_list, descriptorLookup
#include "core/downloadfromdcthread.h" #include "core/downloadfromdcthread.h"
#include <array>
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QNetworkReply> #include <QNetworkReply>
@ -98,6 +99,32 @@ void GasTypeComboBoxItemDelegate::setModelData(QWidget *editor, QAbstractItemMod
QStyledItemDelegate::setModelData(editor, model, index); QStyledItemDelegate::setModelData(editor, model, index);
} }
class DiveComputerEntry
{
public:
DiveComputerEntry(QString vendor, QString product, unsigned int transport, bool fwUpgradePossible) :
vendorInt(vendor), productInt(product), transportInt(transport), fwUpgradePossibleInt(fwUpgradePossible) {}
QString vendor() const { return vendorInt; }
QString product() const { return productInt; }
unsigned int transport() const { return transportInt; }
bool fwUpgradePossible() const { return fwUpgradePossibleInt; }
private:
QString vendorInt;
QString productInt;
unsigned int transportInt;
bool fwUpgradePossibleInt;
};
static std::array<DiveComputerEntry, 4> supportedDiveComputers = {
DiveComputerEntry("Heinrichs Weikamp", "OSTC 2N", DC_TRANSPORT_SERIAL, true),
DiveComputerEntry("Heinrichs Weikamp", "OSTC Plus", DC_TRANSPORT_BLUETOOTH, true),
DiveComputerEntry("Heinrichs Weikamp", "OSTC 4", DC_TRANSPORT_BLUETOOTH, true),
DiveComputerEntry("Suunto", "Vyper", DC_TRANSPORT_SERIAL, false),
};
ConfigureDiveComputerDialog::ConfigureDiveComputerDialog(QWidget *parent) : QDialog(parent), ConfigureDiveComputerDialog::ConfigureDiveComputerDialog(QWidget *parent) : QDialog(parent),
config(0), config(0),
#ifdef BT_SUPPORT #ifdef BT_SUPPORT
@ -124,18 +151,37 @@ ConfigureDiveComputerDialog::ConfigureDiveComputerDialog(QWidget *parent) : QDia
connect(ui.connectButton, &QPushButton::clicked, this, &ConfigureDiveComputerDialog::dc_open); connect(ui.connectButton, &QPushButton::clicked, this, &ConfigureDiveComputerDialog::dc_open);
connect(ui.disconnectButton, &QPushButton::clicked, this, &ConfigureDiveComputerDialog::dc_close); connect(ui.disconnectButton, &QPushButton::clicked, this, &ConfigureDiveComputerDialog::dc_close);
#ifdef BT_SUPPORT #ifdef BT_SUPPORT
connect(ui.bluetoothMode, &QPushButton::clicked, this, &ConfigureDiveComputerDialog::selectRemoteBluetoothDevice); connect(ui.connectBluetoothButton, &QPushButton::clicked, this, &ConfigureDiveComputerDialog::selectRemoteBluetoothDevice);
#else #else
ui.bluetoothMode->setVisible(false); ui.connectBluetoothButton->setVisible(false);
#endif #endif
memset(&device_data, 0, sizeof(device_data)); memset(&device_data, 0, sizeof(device_data));
fill_computer_list(); fill_computer_list();
if (!qPrefDiveComputer::device().isEmpty())
ui.device->setEditText(qPrefDiveComputer::device());
ui.DiveComputerList->setCurrentRow(0); unsigned int selectedDiveComputerIndex = 0;
on_DiveComputerList_currentRowChanged(0); for (unsigned i = 0; i < supportedDiveComputers.size(); ++i) {
if (supportedDiveComputers[i].vendor() == qPrefDiveComputer::vendor() &&
supportedDiveComputers[i].product() == qPrefDiveComputer::product()) {
selectedDiveComputerIndex = i;
break;
}
}
ui.DiveComputerList->setCurrentRow(selectedDiveComputerIndex);
on_DiveComputerList_currentRowChanged(selectedDiveComputerIndex);
QString deviceText = qPrefDiveComputer::device();
if (!deviceText.isEmpty()) {
#if defined(BT_SUPPORT)
if (isBluetoothAddress(deviceText)) {
deviceText = BtDeviceSelectionDialog::formatDeviceText(deviceText, qPrefDiveComputer::device_name());
}
#endif
ui.device->setEditText(deviceText);
}
ui.ostc3GasTable->setItemDelegateForColumn(1, new GasSpinBoxItemDelegate(this, GasSpinBoxItemDelegate::PERCENT)); ui.ostc3GasTable->setItemDelegateForColumn(1, new GasSpinBoxItemDelegate(this, GasSpinBoxItemDelegate::PERCENT));
ui.ostc3GasTable->setItemDelegateForColumn(2, new GasSpinBoxItemDelegate(this, GasSpinBoxItemDelegate::PERCENT)); ui.ostc3GasTable->setItemDelegateForColumn(2, new GasSpinBoxItemDelegate(this, GasSpinBoxItemDelegate::PERCENT));
@ -399,10 +445,13 @@ static void fillDeviceList(const char *name, void *data)
void ConfigureDiveComputerDialog::fill_device_list(unsigned int transport) void ConfigureDiveComputerDialog::fill_device_list(unsigned int transport)
{ {
int deviceIndex; int deviceIndex;
QString device = ui.device->currentText();
ui.device->clear(); ui.device->clear();
deviceIndex = enumerate_devices(fillDeviceList, ui.device, transport); deviceIndex = enumerate_devices(fillDeviceList, ui.device, transport);
if (deviceIndex >= 0) if (deviceIndex >= 0)
ui.device->setCurrentIndex(deviceIndex); ui.device->setCurrentIndex(deviceIndex);
else
ui.device->setCurrentText(device);
} }
void ConfigureDiveComputerDialog::populateDeviceDetails() void ConfigureDiveComputerDialog::populateDeviceDetails()
@ -896,29 +945,32 @@ void ConfigureDiveComputerDialog::configError(QString err)
void ConfigureDiveComputerDialog::getDeviceData() void ConfigureDiveComputerDialog::getDeviceData()
{ {
#ifdef BT_SUPPORT
QString device = ui.bluetoothMode && btDeviceSelectionDialog ?
btDeviceSelectionDialog->getSelectedDeviceAddress() :
ui.device->currentText();
#else
QString device = ui.device->currentText(); QString device = ui.device->currentText();
#ifdef BT_SUPPORT
if (isBluetoothAddress(device)) {
QString name;
device = copy_qstring(extractBluetoothNameAddress(device, name));
device_data.btname = copy_qstring(name);
device_data.bluetooth_mode = true;
} else
#endif #endif
{
device_data.bluetooth_mode = false;
}
device_data.devname = copy_qstring(device); device_data.devname = copy_qstring(device);
device_data.vendor = copy_qstring(selected_vendor);
device_data.product = copy_qstring(selected_product);
device_data.descriptor = descriptorLookup.value(selected_vendor.toLower() + selected_product.toLower()); unsigned int selectedDiveComputerIndex = ui.DiveComputerList->currentRow();
QString vendor = supportedDiveComputers[selectedDiveComputerIndex].vendor();
QString product = supportedDiveComputers[selectedDiveComputerIndex].product();
device_data.vendor = copy_qstring(vendor);
device_data.product = copy_qstring(product);
device_data.descriptor = descriptorLookup.value(vendor.toLower() + product.toLower());
device_data.diveid = 0; device_data.diveid = 0;
memset(&device_data.devinfo, 0, sizeof(device_data.devinfo)); memset(&device_data.devinfo, 0, sizeof(device_data.devinfo));
qPrefDiveComputer::set_device(device_data.devname);
#ifdef BT_SUPPORT
if (ui.bluetoothMode && btDeviceSelectionDialog)
qPrefDiveComputer::set_device_name(btDeviceSelectionDialog->getSelectedDeviceName());
#endif
} }
void ConfigureDiveComputerDialog::on_cancel_clicked() void ConfigureDiveComputerDialog::on_close_clicked()
{ {
this->close(); this->close();
} }
@ -1421,31 +1473,14 @@ void ConfigureDiveComputerDialog::on_updateFirmwareButton_clicked()
void ConfigureDiveComputerDialog::on_DiveComputerList_currentRowChanged(int currentRow) void ConfigureDiveComputerDialog::on_DiveComputerList_currentRowChanged(int currentRow)
{ {
switch (currentRow) { unsigned int transport = supportedDiveComputers[currentRow].transport();
case 0:
selected_vendor = "Heinrichs Weikamp"; if (transport != DC_TRANSPORT_BLUETOOTH)
selected_product = "OSTC 2N"; ui.connectBluetoothButton->setEnabled(false);
fw_upgrade_possible = true; else
break; ui.connectBluetoothButton->setEnabled(true);
case 1:
selected_vendor = "Heinrichs Weikamp"; fill_device_list(transport);
selected_product = "OSTC Plus";
fw_upgrade_possible = true;
break;
case 2:
selected_vendor = "Heinrichs Weikamp";
selected_product = "OSTC 4";
fw_upgrade_possible = true;
break;
case 3:
selected_vendor = "Suunto";
selected_product = "Vyper";
fw_upgrade_possible = false;
default:
/* Not Supported */
return;
}
fill_device_list(DC_TRANSPORT_SERIAL);
} }
void ConfigureDiveComputerDialog::checkLogFile(int state) void ConfigureDiveComputerDialog::checkLogFile(int state)
@ -1485,10 +1520,9 @@ void ConfigureDiveComputerDialog::selectRemoteBluetoothDevice()
void ConfigureDiveComputerDialog::bluetoothSelectionDialogIsFinished(int result) void ConfigureDiveComputerDialog::bluetoothSelectionDialogIsFinished(int result)
{ {
if (result == QDialog::Accepted) { if (result == QDialog::Accepted) {
ui.device->setCurrentText(btDeviceSelectionDialog->getSelectedDeviceText()); ui.device->setEditText(btDeviceSelectionDialog->getSelectedDeviceText());
device_data.bluetooth_mode = true;
ui.progressBar->setFormat(tr("Connecting to device...")); ui.progressBar->setFormat(tr("Connecting to device..."));
dc_open(); dc_open();
} }
} }
@ -1509,12 +1543,20 @@ void ConfigureDiveComputerDialog::dc_open()
ui.disconnectButton->setEnabled(true); ui.disconnectButton->setEnabled(true);
ui.restoreBackupButton->setEnabled(true); ui.restoreBackupButton->setEnabled(true);
ui.connectButton->setEnabled(false); ui.connectButton->setEnabled(false);
ui.bluetoothMode->setEnabled(false); ui.connectBluetoothButton->setEnabled(false);
ui.DiveComputerList->setEnabled(false); ui.DiveComputerList->setEnabled(false);
ui.logToFile->setEnabled(false); ui.logToFile->setEnabled(false);
ui.updateFirmwareButton->setEnabled(fw_upgrade_possible);
ui.forceUpdateFirmware->setEnabled(selected_product == "OSTC 4"); unsigned int selectedDiveComputerIndex = ui.DiveComputerList->currentRow();
ui.updateFirmwareButton->setEnabled(supportedDiveComputers[selectedDiveComputerIndex].fwUpgradePossible());
ui.forceUpdateFirmware->setEnabled(supportedDiveComputers[selectedDiveComputerIndex].product() == "OSTC 4");
ui.progressBar->setFormat(tr("Connected to device")); ui.progressBar->setFormat(tr("Connected to device"));
qPrefDiveComputer::set_device(device_data.devname);
qPrefDiveComputer::set_device_name(device_data.btname);
qPrefDiveComputer::set_vendor(device_data.vendor);
qPrefDiveComputer::set_product(device_data.product);
} }
void ConfigureDiveComputerDialog::dc_close() void ConfigureDiveComputerDialog::dc_close()
@ -1526,7 +1568,7 @@ void ConfigureDiveComputerDialog::dc_close()
ui.resetButton_4->setEnabled(false); ui.resetButton_4->setEnabled(false);
ui.disconnectButton->setEnabled(false); ui.disconnectButton->setEnabled(false);
ui.connectButton->setEnabled(true); ui.connectButton->setEnabled(true);
ui.bluetoothMode->setEnabled(true); ui.connectBluetoothButton->setEnabled(true);
ui.backupButton->setEnabled(false); ui.backupButton->setEnabled(false);
ui.saveSettingsPushButton->setEnabled(false); ui.saveSettingsPushButton->setEnabled(false);
ui.restoreBackupButton->setEnabled(false); ui.restoreBackupButton->setEnabled(false);

View file

@ -72,7 +72,7 @@ slots:
void resetSettings(); void resetSettings();
void configMessage(QString msg); void configMessage(QString msg);
void configError(QString err); void configError(QString err);
void on_cancel_clicked(); void on_close_clicked();
void on_saveSettingsPushButton_clicked(); void on_saveSettingsPushButton_clicked();
void deviceDetailsReceived(DeviceDetails *newDeviceDetails); void deviceDetailsReceived(DeviceDetails *newDeviceDetails);
void reloadValues(); void reloadValues();
@ -115,10 +115,6 @@ private:
void reloadValuesSuuntoVyper(); void reloadValuesSuuntoVyper();
void reloadValuesOSTC4(); void reloadValuesOSTC4();
QString selected_vendor;
QString selected_product;
bool fw_upgrade_possible;
#ifdef BT_SUPPORT #ifdef BT_SUPPORT
BtDeviceSelectionDialog *btDeviceSelectionDialog; BtDeviceSelectionDialog *btDeviceSelectionDialog;
#endif #endif

View file

@ -42,9 +42,9 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="bluetoothMode"> <widget class="QPushButton" name="connectBluetoothButton">
<property name="text"> <property name="text">
<string>Connect via Bluetooth</string> <string>Select Bluetooth Device</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -182,9 +182,9 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="cancel"> <widget class="QPushButton" name="close">
<property name="text"> <property name="text">
<string>Cancel</string> <string>Close</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -3972,7 +3972,7 @@
<tabstop>saveSettingsPushButton</tabstop> <tabstop>saveSettingsPushButton</tabstop>
<tabstop>backupButton</tabstop> <tabstop>backupButton</tabstop>
<tabstop>restoreBackupButton</tabstop> <tabstop>restoreBackupButton</tabstop>
<tabstop>cancel</tabstop> <tabstop>close</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="../subsurface.qrc"/> <include location="../subsurface.qrc"/>