aboutsummaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
authorGravatar Joseph W. Joshua <joejoshw@gmail.com>2014-05-30 10:49:58 +0300
committerGravatar Thiago Macieira <thiago@macieira.org>2014-08-09 12:01:56 -0300
commit3e127a059f598a30e9cfd71411783d71f40b315f (patch)
tree666f4a3e7de121bf3a74973df1dc29e4ccc84a64 /qt-ui
parenta7c9b25b053ee77a816e1555f1c00c3e4b996396 (diff)
downloadsubsurface-3e127a059f598a30e9cfd71411783d71f40b315f.tar.gz
Create class to write settings to dive computer
Adds a class to write settings to dive computer, and modifies the existing ones to integrate it. Signed-off-by: Joseph W. Joshua <joejoshw@gmail.com> Signed-off-by: Thiago Macieira <thiago@macieira.org>
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/configuredivecomputer.cpp90
-rw-r--r--qt-ui/configuredivecomputer.h26
-rw-r--r--qt-ui/configuredivecomputerdialog.cpp25
-rw-r--r--qt-ui/configuredivecomputerdialog.h4
-rw-r--r--qt-ui/configuredivecomputerdialog.ui18
5 files changed, 155 insertions, 8 deletions
diff --git a/qt-ui/configuredivecomputer.cpp b/qt-ui/configuredivecomputer.cpp
index d02ceffb7..fcd8fbc80 100644
--- a/qt-ui/configuredivecomputer.cpp
+++ b/qt-ui/configuredivecomputer.cpp
@@ -3,7 +3,8 @@
#include <QDebug>
ConfigureDiveComputer::ConfigureDiveComputer(QObject *parent) :
QObject(parent),
- readThread(0)
+ readThread(0),
+ writeThread(0)
{
setState(INITIAL);
}
@@ -23,27 +24,55 @@ void ConfigureDiveComputer::readSettings(device_data_t *data)
readThread->start();
}
+void ConfigureDiveComputer::setDeviceName(device_data_t *data, QString newName)
+{
+ writeSettingToDevice(data, "Name", newName);
+}
+
+void ConfigureDiveComputer::setDeviceDateAndTime(device_data_t *data, QDateTime dateAndTime)
+{
+ writeSettingToDevice(data, "DateAndTime", dateAndTime);
+}
+
void ConfigureDiveComputer::setState(ConfigureDiveComputer::states newState)
{
currentState = newState;
emit stateChanged(currentState);
}
+void ConfigureDiveComputer::writeSettingToDevice(device_data_t *data, QString settingName, QVariant settingValue)
+{
+ setState(READING);
+
+ if (writeThread)
+ writeThread->deleteLater();
+
+ writeThread = new WriteSettingsThread(this, data, settingName, settingValue);
+ connect (writeThread, SIGNAL(error(QString)), this, SLOT(setError(QString)));
+ connect (writeThread, SIGNAL(finished()), this, SLOT(writeThreadFinished()));
+
+ writeThread->start();
+}
+
void ConfigureDiveComputer::setError(QString err)
{
lastError = err;
emit error(err);
}
-void ConfigureDiveComputer::readHWSettings(device_data_t *data)
+void ConfigureDiveComputer::readThreadFinished()
{
-
+ setState(DONE);
+ emit deviceSettings(readThread->result);
}
-void ConfigureDiveComputer::readThreadFinished()
+void ConfigureDiveComputer::writeThreadFinished()
{
setState(DONE);
- emit deviceSettings(readThread->result);
+ if (writeThread->lastError.isEmpty()) {
+ //No error
+ emit message(tr("Setting successfully written to device"));
+ }
}
ReadSettingsThread::ReadSettingsThread(QObject *parent, device_data_t *data)
@@ -72,3 +101,54 @@ void ReadSettingsThread::run()
emit error(lastError);
}
}
+
+WriteSettingsThread::WriteSettingsThread(QObject *parent, device_data_t *data, QString settingName, QVariant settingValue)
+ : QThread(parent), data(data), m_settingName(settingName), m_settingValue(settingValue)
+{
+
+}
+
+void WriteSettingsThread::run()
+{
+ bool supported = false;
+ dc_status_t rc;
+ QString product = data->product;
+ QString vendor = data->vendor;
+ rc = dc_device_open(&data->device, data->context, data->descriptor, data->devname);
+ if (rc == DC_STATUS_SUCCESS) {
+ dc_status_t result;
+ if (product.trimmed() == "OSTC 3") {
+ if (m_settingName == "Name") {
+ supported = true;
+ result = hw_ostc3_device_customtext(data->device, m_settingValue.toByteArray().data());
+ }
+ }
+ if (vendor.trimmed() == "Heinrichs Weikamp" && m_settingName == "DateAndTime") {
+ supported = true;
+ QDateTime timeToSet = m_settingValue.toDateTime();
+ dc_datetime_t time;
+ time.year = timeToSet.date().year();
+ time.month = timeToSet.date().month();
+ time.day = timeToSet.date().day();
+ time.hour = timeToSet.time().hour();
+ time.minute = timeToSet.time().minute();
+ time.second = timeToSet.time().second();
+ result = hw_ostc_device_clock(data->device, &time); //Toto fix error here
+ }
+ if (result != DC_STATUS_SUCCESS) {
+ qDebug() << result;
+ lastError = tr("An error occurred while sending data to the dive computer.");
+ //Todo Update this message to change depending on actual result.
+
+ emit error(lastError);
+ }
+ dc_device_close(data->device);
+ } else {
+ lastError = tr("Could not a establish connection to the dive computer.");
+ emit error(lastError);
+ }
+ if (!supported) {
+ lastError = tr("This feature is not yet available for the selected dive computer.");
+ emit error(lastError);
+ }
+}
diff --git a/qt-ui/configuredivecomputer.h b/qt-ui/configuredivecomputer.h
index 8441c0cec..8b1c4b4c7 100644
--- a/qt-ui/configuredivecomputer.h
+++ b/qt-ui/configuredivecomputer.h
@@ -3,8 +3,9 @@
#include <QObject>
#include <QThread>
+#include <QVariant>
#include "libdivecomputer.h"
-
+#include <QDateTime>
class ReadSettingsThread : public QThread {
Q_OBJECT
public:
@@ -18,6 +19,21 @@ private:
device_data_t *data;
};
+class WriteSettingsThread : public QThread {
+ Q_OBJECT
+public:
+ WriteSettingsThread(QObject *parent, device_data_t *data, QString settingName, QVariant settingValue);
+ virtual void run();
+ QString result;
+ QString lastError;
+signals:
+ void error(QString err);
+private:
+ device_data_t *data;
+ QString m_settingName;
+ QVariant m_settingValue;
+};
+
class ConfigureDiveComputer : public QObject
{
Q_OBJECT
@@ -37,6 +53,9 @@ public:
QString lastError;
states currentState;
+
+ void setDeviceName(device_data_t *data, QString newName);
+ void setDeviceDateAndTime(device_data_t *data, QDateTime dateAndTime);
signals:
void deviceSettings(QString settings);
void message(QString msg);
@@ -46,12 +65,13 @@ signals:
void stateChanged(states newState);
private:
ReadSettingsThread *readThread;
+ WriteSettingsThread *writeThread;
void setState(states newState);
-
- void readHWSettings(device_data_t *data);
+ void writeSettingToDevice(device_data_t *data, QString settingName, QVariant settingValue);
private slots:
void readThreadFinished();
+ void writeThreadFinished();
void setError(QString err);
};
diff --git a/qt-ui/configuredivecomputerdialog.cpp b/qt-ui/configuredivecomputerdialog.cpp
index 53544575c..b88715fc9 100644
--- a/qt-ui/configuredivecomputerdialog.cpp
+++ b/qt-ui/configuredivecomputerdialog.cpp
@@ -7,6 +7,8 @@
#include "../display.h"
#include "../divelist.h"
#include "configuredivecomputer.h"
+#include <QInputDialog>
+
struct product {
const char *product;
dc_descriptor_t *descriptor;
@@ -185,3 +187,26 @@ void ConfigureDiveComputerDialog::on_cancel_clicked()
{
this->close();
}
+
+void ConfigureDiveComputerDialog::on_setDeviceName_clicked()
+{
+ ui->statusLabel->clear();
+ ui->errorLabel->clear();
+ ui->availableDetails->clear();
+
+ QString newDeviceName = QInputDialog::getText(this, tr("Set device name"), tr("Enter the new name for this device:"));
+ if (newDeviceName.length() > 0) {
+ getDeviceData();
+ config->setDeviceName(&device_data, newDeviceName);
+ }
+}
+
+void ConfigureDiveComputerDialog::on_setDateAndTime_clicked()
+{
+ ui->statusLabel->clear();
+ ui->errorLabel->clear();
+ ui->availableDetails->clear();
+
+ getDeviceData();
+ config->setDeviceDateAndTime(&device_data, QDateTime::currentDateTime());
+}
diff --git a/qt-ui/configuredivecomputerdialog.h b/qt-ui/configuredivecomputerdialog.h
index 116968b79..4c63c8c8f 100644
--- a/qt-ui/configuredivecomputerdialog.h
+++ b/qt-ui/configuredivecomputerdialog.h
@@ -28,6 +28,10 @@ private slots:
void configMessage(QString msg);
void configError(QString err);
void on_cancel_clicked();
+ void on_setDeviceName_clicked();
+
+ void on_setDateAndTime_clicked();
+
private:
Ui::ConfigureDiveComputerDialog *ui;
diff --git a/qt-ui/configuredivecomputerdialog.ui b/qt-ui/configuredivecomputerdialog.ui
index fe36512b2..71fa541c3 100644
--- a/qt-ui/configuredivecomputerdialog.ui
+++ b/qt-ui/configuredivecomputerdialog.ui
@@ -95,6 +95,24 @@
<widget class="QTextBrowser" name="availableDetails"/>
</item>
<item>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QPushButton" name="setDeviceName">
+ <property name="text">
+ <string>Set Device Name</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="setDateAndTime">
+ <property name="text">
+ <string>Set Date &amp;&amp; Time</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<widget class="QLabel" name="errorLabel">
<property name="styleSheet">
<string notr="true">color: rgb(242, 19, 25);</string>