aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joseph W. Joshua <joejoshw@gmail.com>2014-06-10 18:25:25 +0300
committerGravatar Thiago Macieira <thiago@macieira.org>2014-08-13 10:48:11 -0700
commit20eb62a98a70c1773ff99ece05f1c69e6ca8ce15 (patch)
tree0d7e18fd5405b0b259c9ae35b8315887dd4658b6
parent4fc16b16749a73b8c06d41cb7cb22b78c77ab29e (diff)
downloadsubsurface-20eb62a98a70c1773ff99ece05f1c69e6ca8ce15.tar.gz
Polish up on classes
This patch polishes up on all classes added for dive computer configuration to give a clean workflow. The classes can now write and read data from the OSTC 3. Signed-off-by: Joseph W. Joshua <joejoshw@gmail.com> Signed-off-by: Thiago Macieira <thiago@macieira.org>
-rw-r--r--qt-ui/configuredivecomputer.cpp23
-rw-r--r--qt-ui/configuredivecomputer.h6
-rw-r--r--qt-ui/configuredivecomputerdialog.cpp32
-rw-r--r--qt-ui/configuredivecomputerdialog.h2
-rw-r--r--qt-ui/configuredivecomputerdialog.ui74
-rw-r--r--qt-ui/configuredivecomputerthreads.cpp61
-rw-r--r--qt-ui/configuredivecomputerthreads.h12
7 files changed, 150 insertions, 60 deletions
diff --git a/qt-ui/configuredivecomputer.cpp b/qt-ui/configuredivecomputer.cpp
index d24c8905d..ad431eefe 100644
--- a/qt-ui/configuredivecomputer.cpp
+++ b/qt-ui/configuredivecomputer.cpp
@@ -4,31 +4,42 @@
ConfigureDiveComputer::ConfigureDiveComputer(QObject *parent) :
QObject(parent),
readThread(0),
- writeThread(0),
- m_deviceDetails(0)
+ writeThread(0)
{
setState(INITIAL);
}
-void ConfigureDiveComputer::readSettings(DeviceDetails *deviceDetails, device_data_t *data)
+void ConfigureDiveComputer::readSettings(device_data_t *data)
{
setState(READING);
- m_deviceDetails = deviceDetails;
if (readThread)
readThread->deleteLater();
- readThread = new ReadSettingsThread(this, deviceDetails, data);
+ readThread = new ReadSettingsThread(this, data);
connect (readThread, SIGNAL(finished()),
this, SLOT(readThreadFinished()), Qt::QueuedConnection);
connect (readThread, SIGNAL(error(QString)), this, SLOT(setError(QString)));
+ connect (readThread, SIGNAL(devicedetails(DeviceDetails*)), this,
+ SIGNAL(deviceDetailsChanged(DeviceDetails*)));
readThread->start();
}
-void ConfigureDiveComputer::saveDeviceDetails()
+void ConfigureDiveComputer::saveDeviceDetails(DeviceDetails *details, device_data_t *data)
{
+ setState(WRITING);
+ if (writeThread)
+ writeThread->deleteLater();
+
+ writeThread = new WriteSettingsThread(this, data);
+ connect (writeThread, SIGNAL(finished()),
+ this, SLOT(writeThreadFinished()), Qt::QueuedConnection);
+ connect (writeThread, SIGNAL(error(QString)), this, SLOT(setError(QString)));
+
+ writeThread->setDeviceDetails(details);
+ writeThread->start();
}
void ConfigureDiveComputer::setState(ConfigureDiveComputer::states newState)
diff --git a/qt-ui/configuredivecomputer.h b/qt-ui/configuredivecomputer.h
index 65ceaa780..f21f02910 100644
--- a/qt-ui/configuredivecomputer.h
+++ b/qt-ui/configuredivecomputer.h
@@ -13,7 +13,7 @@ class ConfigureDiveComputer : public QObject
Q_OBJECT
public:
explicit ConfigureDiveComputer(QObject *parent = 0);
- void readSettings(DeviceDetails *deviceDetails, device_data_t *data);
+ void readSettings(device_data_t *data);
enum states {
INITIAL,
@@ -27,9 +27,8 @@ public:
QString lastError;
states currentState;
- DeviceDetails *m_deviceDetails;
device_data_t *m_data;
- void saveDeviceDetails();
+ void saveDeviceDetails(DeviceDetails *details, device_data_t *data);
void fetchDeviceDetails();
signals:
@@ -38,6 +37,7 @@ signals:
void readFinished();
void writeFinished();
void stateChanged(states newState);
+ void deviceDetailsChanged(DeviceDetails *newDetails);
private:
ReadSettingsThread *readThread;
diff --git a/qt-ui/configuredivecomputerdialog.cpp b/qt-ui/configuredivecomputerdialog.cpp
index 8ae250468..ea5e764dc 100644
--- a/qt-ui/configuredivecomputerdialog.cpp
+++ b/qt-ui/configuredivecomputerdialog.cpp
@@ -8,6 +8,7 @@
#include "../divelist.h"
#include "configuredivecomputer.h"
#include <QInputDialog>
+#include <QDebug>
struct product {
const char *product;
@@ -43,6 +44,8 @@ ConfigureDiveComputerDialog::ConfigureDiveComputerDialog(QWidget *parent) :
connect (config, SIGNAL(error(QString)), this, SLOT(configError(QString)));
connect (config, SIGNAL(message(QString)), this, SLOT(configMessage(QString)));
connect (config, SIGNAL(readFinished()), this, SLOT(deviceReadFinished()));
+ connect (config, SIGNAL(deviceDetailsChanged(DeviceDetails*)),
+ this, SLOT(deviceDetailsReceived(DeviceDetails*)));
fill_computer_list();
@@ -159,7 +162,7 @@ void ConfigureDiveComputerDialog::readSettings()
ui->errorLabel->clear();
getDeviceData();
- config->readSettings(deviceDetails, &device_data);
+ config->readSettings(&device_data);
}
void ConfigureDiveComputerDialog::configMessage(QString msg)
@@ -183,8 +186,6 @@ void ConfigureDiveComputerDialog::getDeviceData()
set_default_dive_computer(device_data.vendor, device_data.product);
set_default_dive_computer_device(device_data.devname);
-
- //deviceDetails->setData(&device_data);
}
void ConfigureDiveComputerDialog::on_cancel_clicked()
@@ -194,11 +195,32 @@ void ConfigureDiveComputerDialog::on_cancel_clicked()
void ConfigureDiveComputerDialog::deviceReadFinished()
{
- ui->brightnessComboBox->setCurrentIndex(config->m_deviceDetails->brightness());
+
}
void ConfigureDiveComputerDialog::on_saveSettingsPushButton_clicked()
{
- config->saveDeviceDetails();
+ deviceDetails->setBrightness(ui->brightnessComboBox->currentIndex());
+ deviceDetails->setLanguage(ui->languageComboBox->currentIndex());
+ deviceDetails->setDateFormat(ui->dateFormatComboBox->currentIndex());
+ deviceDetails->setCustomText(ui->customTextLlineEdit->text());
+ getDeviceData();
+ config->saveDeviceDetails(deviceDetails, &device_data);
+}
+
+void ConfigureDiveComputerDialog::deviceDetailsReceived(DeviceDetails *newDeviceDetails)
+{
+ deviceDetails = newDeviceDetails;
+ reloadValues();
+}
+
+void ConfigureDiveComputerDialog::reloadValues()
+{
+ ui->serialNoLineEdit->setText(deviceDetails->serialNo());
+ ui->firmwareVersionLineEdit->setText(deviceDetails->firmwareVersion());
+ ui->customTextLlineEdit->setText(deviceDetails->customText());
+ ui->brightnessComboBox->setCurrentIndex(deviceDetails->brightness());
+ ui->languageComboBox->setCurrentIndex(deviceDetails->language());
+ ui->dateFormatComboBox->setCurrentIndex(deviceDetails->dateFormat());
}
diff --git a/qt-ui/configuredivecomputerdialog.h b/qt-ui/configuredivecomputerdialog.h
index 5a8bf63e1..e8c941fcf 100644
--- a/qt-ui/configuredivecomputerdialog.h
+++ b/qt-ui/configuredivecomputerdialog.h
@@ -29,6 +29,8 @@ private slots:
void on_cancel_clicked();
void deviceReadFinished();
void on_saveSettingsPushButton_clicked();
+ void deviceDetailsReceived(DeviceDetails *newDeviceDetails);
+ void reloadValues();
private:
Ui::ConfigureDiveComputerDialog *ui;
diff --git a/qt-ui/configuredivecomputerdialog.ui b/qt-ui/configuredivecomputerdialog.ui
index d7c584e0c..4f1c7a8af 100644
--- a/qt-ui/configuredivecomputerdialog.ui
+++ b/qt-ui/configuredivecomputerdialog.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>343</width>
- <height>365</height>
+ <height>390</height>
</rect>
</property>
<property name="windowTitle">
@@ -93,12 +93,8 @@
</item>
<item>
<layout class="QGridLayout" name="gridLayout_2">
- <item row="3" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Brightness:</string>
- </property>
- </widget>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="customTextLlineEdit"/>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="brightnessComboBox">
@@ -119,10 +115,10 @@
</item>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="serialNoLineEdit">
- <property name="readOnly">
- <bool>true</bool>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Firmware Version:</string>
</property>
</widget>
</item>
@@ -150,20 +146,17 @@
</item>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="customTextLlineEdit"/>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_6">
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_4">
<property name="text">
- <string>Language:</string>
+ <string>Brightness:</string>
</property>
</widget>
</item>
- <item row="0" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Serial No.</string>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="serialNoLineEdit">
+ <property name="readOnly">
+ <bool>true</bool>
</property>
</widget>
</item>
@@ -174,10 +167,17 @@
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_8">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_7">
<property name="text">
- <string>Firmware Version:</string>
+ <string>Serial No.</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Language:</string>
</property>
</widget>
</item>
@@ -188,6 +188,32 @@
</property>
</widget>
</item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Date Format:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QComboBox" name="dateFormatComboBox">
+ <item>
+ <property name="text">
+ <string>MMDDYY</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>DDMMYY</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>YYMMDD</string>
+ </property>
+ </item>
+ </widget>
+ </item>
</layout>
</item>
<item>
diff --git a/qt-ui/configuredivecomputerthreads.cpp b/qt-ui/configuredivecomputerthreads.cpp
index f1ac3b5d9..5d9f0e8b0 100644
--- a/qt-ui/configuredivecomputerthreads.cpp
+++ b/qt-ui/configuredivecomputerthreads.cpp
@@ -2,8 +2,8 @@
#include "libdivecomputer/hw.h"
#include <QDebug>
-ReadSettingsThread::ReadSettingsThread(QObject *parent, DeviceDetails *deviceDetails, device_data_t *data)
- : QThread(parent), m_deviceDetails(deviceDetails), m_data(data)
+ReadSettingsThread::ReadSettingsThread(QObject *parent, device_data_t *data)
+ : QThread(parent), m_data(data)
{
}
@@ -14,6 +14,7 @@ void ReadSettingsThread::run()
dc_status_t rc;
rc = rc = dc_device_open(&m_data->device, m_data->context, m_data->descriptor, m_data->devname);
if (rc == DC_STATUS_SUCCESS) {
+ DeviceDetails *m_deviceDetails = new DeviceDetails(0);
switch (dc_device_get_type(m_data->device)) {
case DC_FAMILY_HW_OSTC3:
supported = true;
@@ -25,7 +26,8 @@ void ReadSettingsThread::run()
m_deviceDetails->setLanguage(0);
m_deviceDetails->setLastDeco(0);
m_deviceDetails->setSerialNo("");
- unsigned char uData[1];
+ //Read general settings
+ unsigned char uData[1] = {0};
rc = hw_ostc3_device_config_read(m_data->device, 0x2D, uData, sizeof(uData));
if (rc == DC_STATUS_SUCCESS)
m_deviceDetails->setBrightness(uData[0]);
@@ -35,6 +37,20 @@ void ReadSettingsThread::run()
rc = hw_ostc3_device_config_read(m_data->device, 0x33, uData, sizeof(uData));
if (rc == DC_STATUS_SUCCESS)
m_deviceDetails->setDateFormat(uData[0]);
+
+ //read firmware settings
+ unsigned char fData[64] = {0};
+ rc = hw_ostc3_device_version (m_data->device, fData, sizeof (fData));
+ if (rc == DC_STATUS_SUCCESS) {
+ int serial = fData[0] + (fData[1] << 8);
+ m_deviceDetails->setSerialNo(QString::number(serial));
+ int fw = (fData[2] << 8) + fData[3];
+ m_deviceDetails->setFirmwareVersion(QString::number(fw));
+ QByteArray ar((char *)fData + 4, 60);
+ m_deviceDetails->setCustomText(ar.trimmed());
+ }
+
+ emit devicedetails(m_deviceDetails);
break;
}
@@ -51,31 +67,46 @@ void ReadSettingsThread::run()
}
}
-WriteSettingsThread::WriteSettingsThread(QObject *parent, DeviceDetails *deviceDetails, QString settingName, QVariant settingValue)
- : QThread(parent), m_deviceDetails(deviceDetails), m_settingName(settingName), m_settingValue(settingValue)
-{
+WriteSettingsThread::WriteSettingsThread(QObject *parent, device_data_t *data)
+ : QThread(parent), m_data(data) {
+
+}
+void WriteSettingsThread::setDeviceDetails(DeviceDetails *details)
+{
+ m_deviceDetails = details;
}
void WriteSettingsThread::run()
{
bool supported = false;
dc_status_t rc;
+ rc = rc = dc_device_open(&m_data->device, m_data->context, m_data->descriptor, m_data->devname);
+ if (rc == DC_STATUS_SUCCESS) {
+ switch (dc_device_get_type(m_data->device)) {
+ case DC_FAMILY_HW_OSTC3:
+ supported = true;
+ //write general settings
+ hw_ostc3_device_customtext(m_data->device, m_deviceDetails->customText().toUtf8().data());
+ unsigned char data[1] = {0};
+ data[0] = m_deviceDetails->brightness();
+ hw_ostc3_device_config_write(m_data->device, 0x2D, data, sizeof(data));
+ data[0] = m_deviceDetails->language();
+ hw_ostc3_device_config_write(m_data->device, 0x32, data, sizeof(data));
+ data[0] = m_deviceDetails->dateFormat();
+ hw_ostc3_device_config_write(m_data->device, 0x33, data, sizeof(data));
+ break;
- switch (dc_device_get_type(data->device)) {
- case DC_FAMILY_HW_OSTC3:
- rc = dc_device_open(&data->device, data->context, data->descriptor, data->devname);
- if (rc == DC_STATUS_SUCCESS) {
-
- } else {
- lastError = tr("Could not a establish connection to the dive computer.");
- emit error(lastError);
}
- break;
+ dc_device_close(m_data->device);
if (!supported) {
lastError = tr("This feature is not yet available for the selected dive computer.");
emit error(lastError);
}
}
+ else {
+ lastError = tr("Could not a establish connection to the dive computer.");
+ emit error(lastError);
+ }
}
diff --git a/qt-ui/configuredivecomputerthreads.h b/qt-ui/configuredivecomputerthreads.h
index c684cddaa..db54db460 100644
--- a/qt-ui/configuredivecomputerthreads.h
+++ b/qt-ui/configuredivecomputerthreads.h
@@ -11,31 +11,29 @@
class ReadSettingsThread : public QThread {
Q_OBJECT
public:
- ReadSettingsThread(QObject *parent, DeviceDetails *deviceDetails, device_data_t *data);
+ ReadSettingsThread(QObject *parent, device_data_t *data);
virtual void run();
QString result;
QString lastError;
signals:
void error(QString err);
+ void devicedetails(DeviceDetails *newDeviceDetails);
private:
- DeviceDetails *m_deviceDetails;
device_data_t *m_data;
};
class WriteSettingsThread : public QThread {
Q_OBJECT
public:
- WriteSettingsThread(QObject *parent, DeviceDetails *deviceDetails, QString settingName, QVariant settingValue);
+ WriteSettingsThread(QObject *parent, device_data_t *data);
+ void setDeviceDetails(DeviceDetails *details);
virtual void run();
QString result;
QString lastError;
signals:
void error(QString err);
private:
- device_data_t *data;
- QString m_settingName;
- QVariant m_settingValue;
-
+ device_data_t *m_data;
DeviceDetails *m_deviceDetails;
};