diff options
author | Joseph W. Joshua <joejoshw@gmail.com> | 2014-05-30 10:49:58 +0300 |
---|---|---|
committer | Thiago Macieira <thiago@macieira.org> | 2014-08-09 12:01:56 -0300 |
commit | 3e127a059f598a30e9cfd71411783d71f40b315f (patch) | |
tree | 666f4a3e7de121bf3a74973df1dc29e4ccc84a64 /qt-ui | |
parent | a7c9b25b053ee77a816e1555f1c00c3e4b996396 (diff) | |
download | subsurface-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.cpp | 90 | ||||
-rw-r--r-- | qt-ui/configuredivecomputer.h | 26 | ||||
-rw-r--r-- | qt-ui/configuredivecomputerdialog.cpp | 25 | ||||
-rw-r--r-- | qt-ui/configuredivecomputerdialog.h | 4 | ||||
-rw-r--r-- | qt-ui/configuredivecomputerdialog.ui | 18 |
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 && 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> |