summaryrefslogtreecommitdiff
path: root/qt/RGBController/controllerwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt/RGBController/controllerwindow.cpp')
-rwxr-xr-xqt/RGBController/controllerwindow.cpp335
1 files changed, 230 insertions, 105 deletions
diff --git a/qt/RGBController/controllerwindow.cpp b/qt/RGBController/controllerwindow.cpp
index a0e9b52..cfc2428 100755
--- a/qt/RGBController/controllerwindow.cpp
+++ b/qt/RGBController/controllerwindow.cpp
@@ -4,10 +4,15 @@ controllerWindow::controllerWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::controllerWindow)
{
- /* TODO convert to QStandardPaths::standardLocations(QStandardPaths::AppDataLocation) */
/* this is our setup function, we set things up here */
ui->setupUi(this);
info_log("RGB Controller started");
+ /* serial */
+ ser = new QSerialPort(this);
+ connect(ser, &QSerialPort::readyRead, this, &controllerWindow::read);
+ ptimer = new QTimer(this);
+ connect(ptimer, SIGNAL(timeout()), this, SLOT(ping()));
+ pingtries = 0;
/* disable buttons and widgets that should not be enabled yet, set slider values to 0 */
ui->disconnect_button->setEnabled(false);
ui->connect_button->setEnabled(false);
@@ -27,32 +32,32 @@ controllerWindow::controllerWindow(QWidget *parent) :
ui->r_slider->setValue(0);
ui->g_slider->setValue(0);
ui->b_slider->setValue(0);
- ui->red_fade_button->setEnabled(false);
- ui->green_fade_button->setEnabled(false);
- ui->blue_fade_button->setEnabled(false);
- ui->speed_button->setEnabled(false);
- ui->rfrom->setEnabled(false);
- ui->rto->setEnabled(false);
- ui->gfrom->setEnabled(false);
- ui->gto->setEnabled(false);
- ui->bfrom->setEnabled(false);
- ui->bto->setEnabled(false);
- ui->r_speed_slider->setEnabled(false);
- ui->g_speed_slider->setEnabled(false);
- ui->b_speed_slider->setEnabled(false);
- ui->speed_slider->setEnabled(false);
- ui->r_speed_slider->setValue(0);
- ui->g_speed_slider->setValue(0);
- ui->b_speed_slider->setValue(0);
- ui->speed_slider->setValue(0);
- ui->rfrom->setValue(0);
- ui->rto->setValue(0);
- ui->gfrom->setValue(0);
- ui->gto->setValue(0);
- ui->bfrom->setValue(0);
- ui->bto->setValue(0);
- presetsfile = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/presets.txt";
- tempfile = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/tmp.file";
+ ui->red_fade_button->setEnabled(false);
+ ui->green_fade_button->setEnabled(false);
+ ui->blue_fade_button->setEnabled(false);
+ ui->speed_button->setEnabled(false);
+ ui->rfrom->setEnabled(false);
+ ui->rto->setEnabled(false);
+ ui->gfrom->setEnabled(false);
+ ui->gto->setEnabled(false);
+ ui->bfrom->setEnabled(false);
+ ui->bto->setEnabled(false);
+ ui->r_speed_slider->setEnabled(false);
+ ui->g_speed_slider->setEnabled(false);
+ ui->b_speed_slider->setEnabled(false);
+ ui->speed_slider->setEnabled(false);
+ ui->r_speed_slider->setValue(0);
+ ui->g_speed_slider->setValue(0);
+ ui->b_speed_slider->setValue(0);
+ ui->speed_slider->setValue(0);
+ ui->rfrom->setValue(100);
+ ui->rto->setValue(255);
+ ui->gfrom->setValue(100);
+ ui->gto->setValue(255);
+ ui->bfrom->setValue(100);
+ ui->bto->setValue(255);
+ presetsfile = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/presets.txt";
+ tempfile = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/tmp.file";
/* set some crucial ints */
preset_index = 0, r = 0, g = 0, b = 0;
/* populate our serial port dropdown box */
@@ -111,7 +116,7 @@ void controllerWindow::load_presets()
* -> add [0] to dropdown (name), add [1] to an array that stores all the values
*/
- QFile inputFile(presetsfile);
+ QFile inputFile(presetsfile);
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
@@ -128,7 +133,7 @@ void controllerWindow::load_presets()
info_log("Presets loaded");
} else
{
- show_msgbox("Unable to load the presets file.\n");
+ show_msgbox("Unable to load the presets file.\n");
info_log("Presets file not found.");
}
}
@@ -136,9 +141,9 @@ void controllerWindow::load_presets()
void controllerWindow::save_preset(QString name)
{
/* this function will save our preset to file */
- if (!QDir("Folder").exists())
- QDir().mkdir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
- QFile file(presetsfile);
+ if (!QDir("Folder").exists())
+ QDir().mkdir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
+ QFile file(presetsfile);
if(!file.open(QIODevice::Append)) {
show_msgbox("Fatal error opening presets for appending text.");
@@ -160,7 +165,7 @@ void controllerWindow::delete_preset(QString name)
{
/*
* here we will delete a preset from the presets file
- * process:
+ * process:
* retrieve preset name
* go through preset file line by line and write it to a seperate tmp file
* if the [0] of split('=') equals the preset name, don't write it to the tmp file
@@ -172,8 +177,8 @@ void controllerWindow::delete_preset(QString name)
{
case QMessageBox::Ok:
{
- info_log("deleting preset: " + name);
- QFile file(tempfile);
+ info_log("deleting preset: " + name);
+ QFile file(tempfile);
if(!file.open(QIODevice::Append)) {
show_msgbox("Fatal error opening temp file for writing");
@@ -190,8 +195,8 @@ void controllerWindow::delete_preset(QString name)
}
file.close();
/* remove the current presets file then rename the temp file to presets.txt */
- QFile::remove(presetsfile);
- QFile::rename(tempfile, presetsfile);
+ QFile::remove(presetsfile);
+ QFile::rename(tempfile, presetsfile);
/* reload presets into memory and clear the drop down box */
ui->presets_dropdown->clear();
presets.clear();
@@ -213,8 +218,8 @@ void controllerWindow::delete_preset(QString name)
void controllerWindow::serial_rgb_change(int r, int g, int b)
{
- /* un used function */
- portf.rgb_change(r, g, b);
+ /* un used function */
+ rgb_change(r, g, b);
}
void controllerWindow::show_msgbox(QString message)
@@ -243,13 +248,14 @@ int controllerWindow::show_question_box(QString message, QString omessage)
void controllerWindow::on_connect_button_clicked()
{
- /*
+ /*
* here we need to call our serial port connect function
* if our connection is sucessful we need to enable and disable a few buttons and widgets
* we must also change our rgb sliders etc
*/
+ pingtries = 0;
port = ui->arduino_port_dropdown->currentText();
- if (portf.serial_connect(port))
+ if (serial_connect(port))
{ // if true we are connected
info_log("Connection established");
ui->arduino_status_label->setText("<font color=green>Connected</font>");
@@ -271,20 +277,21 @@ void controllerWindow::on_connect_button_clicked()
ui->b_slider->setEnabled(true);
ui->refresh_port_button->setEnabled(false);
ui->arduino_port_dropdown->setEnabled(false);
- ui->red_fade_button->setEnabled(true);
- ui->green_fade_button->setEnabled(true);
- ui->blue_fade_button->setEnabled(true);
- ui->speed_button->setEnabled(true);
- ui->rfrom->setEnabled(true);
- ui->rto->setEnabled(true);
- ui->gfrom->setEnabled(true);
- ui->gto->setEnabled(true);
- ui->bfrom->setEnabled(true);
- ui->bto->setEnabled(true);
- ui->r_speed_slider->setEnabled(true);
- ui->g_speed_slider->setEnabled(true);
- ui->b_speed_slider->setEnabled(true);
- ui->speed_slider->setEnabled(true);
+ ui->red_fade_button->setEnabled(true);
+ ui->green_fade_button->setEnabled(true);
+ ui->blue_fade_button->setEnabled(true);
+ ui->speed_button->setEnabled(true);
+ ui->rfrom->setEnabled(true);
+ ui->rto->setEnabled(true);
+ ui->gfrom->setEnabled(true);
+ ui->gto->setEnabled(true);
+ ui->bfrom->setEnabled(true);
+ ui->bto->setEnabled(true);
+ ui->r_speed_slider->setEnabled(true);
+ ui->g_speed_slider->setEnabled(true);
+ ui->b_speed_slider->setEnabled(true);
+ ui->speed_slider->setEnabled(true);
+ ptimer->start(60000);
} else
{
info_log("Unable to connect (port in use?)");
@@ -298,7 +305,7 @@ void controllerWindow::on_disconnect_button_clicked()
* here we will attempt to disconnect from our serial port
* we will also enable/disable some buttons and widgets and set slider values to 0
*/
- if (portf.serial_disconnect())
+ if (serial_disconnect())
{
info_log("Disconnected from serial port");
ui->arduino_status_label->setText("<font color=red>Disconnected</font>");
@@ -322,30 +329,30 @@ void controllerWindow::on_disconnect_button_clicked()
ui->r_slider->setValue(0);
ui->g_slider->setValue(0);
ui->b_slider->setValue(0);
- ui->red_fade_button->setEnabled(false);
- ui->green_fade_button->setEnabled(false);
- ui->blue_fade_button->setEnabled(false);
- ui->speed_button->setEnabled(false);
- ui->rfrom->setEnabled(false);
- ui->rto->setEnabled(false);
- ui->gfrom->setEnabled(false);
- ui->gto->setEnabled(false);
- ui->bfrom->setEnabled(false);
- ui->bto->setEnabled(false);
- ui->r_speed_slider->setEnabled(false);
- ui->g_speed_slider->setEnabled(false);
- ui->b_speed_slider->setEnabled(false);
- ui->speed_slider->setEnabled(false);
- ui->r_speed_slider->setValue(0);
- ui->g_speed_slider->setValue(0);
- ui->b_speed_slider->setValue(0);
- ui->speed_slider->setValue(0);
- ui->rfrom->setValue(0);
- ui->rto->setValue(0);
- ui->gfrom->setValue(0);
- ui->gto->setValue(0);
- ui->bfrom->setValue(0);
- ui->bto->setValue(0);
+ ui->red_fade_button->setEnabled(false);
+ ui->green_fade_button->setEnabled(false);
+ ui->blue_fade_button->setEnabled(false);
+ ui->speed_button->setEnabled(false);
+ ui->rfrom->setEnabled(false);
+ ui->rto->setEnabled(false);
+ ui->gfrom->setEnabled(false);
+ ui->gto->setEnabled(false);
+ ui->bfrom->setEnabled(false);
+ ui->bto->setEnabled(false);
+ ui->r_speed_slider->setEnabled(false);
+ ui->g_speed_slider->setEnabled(false);
+ ui->b_speed_slider->setEnabled(false);
+ ui->speed_slider->setEnabled(false);
+ ui->r_speed_slider->setValue(0);
+ ui->g_speed_slider->setValue(0);
+ ui->b_speed_slider->setValue(0);
+ ui->speed_slider->setValue(0);
+ ui->rfrom->setValue(100);
+ ui->rto->setValue(255);
+ ui->gfrom->setValue(100);
+ ui->gto->setValue(255);
+ ui->bfrom->setValue(100);
+ ui->bto->setValue(255);
} else
{
/* I have no clue how we'd get here */
@@ -369,22 +376,22 @@ void controllerWindow::on_reload_preset_button_clicked()
void controllerWindow::on_r_slider_valueChanged(int value)
{
r = value;
- //serial_rgb_change(r, g, b);
- portf.send("red=" + QString::number(r));
+ //serial_rgb_change(r, g, b);
+ send("red=" + QString::number(r));
}
void controllerWindow::on_g_slider_valueChanged(int value)
{
g = value;
- //serial_rgb_change(r, g, b);
- portf.send("green=" + QString::number(g));
+ //serial_rgb_change(r, g, b);
+ send("green=" + QString::number(g));
}
void controllerWindow::on_b_slider_valueChanged(int value)
{
b = value;
- //serial_rgb_change(r, g, b);
- portf.send("blue=" + QString::number(b));
+ //serial_rgb_change(r, g, b);
+ send("blue=" + QString::number(b));
}
void controllerWindow::on_red_button_clicked()
@@ -410,9 +417,9 @@ void controllerWindow::on_blue_button_clicked()
void controllerWindow::on_off_button_clicked()
{
- ui->r_slider->setValue(1);
- ui->g_slider->setValue(1);
- ui->b_slider->setValue(1);
+ ui->r_slider->setValue(1);
+ ui->g_slider->setValue(1);
+ ui->b_slider->setValue(1);
ui->r_slider->setValue(0);
ui->g_slider->setValue(0);
ui->b_slider->setValue(0);
@@ -460,68 +467,186 @@ void controllerWindow::on_preset_delete_button_clicked()
void controllerWindow::on_red_fade_button_clicked()
{
- portf.send("redfade");
+ send("redfade");
}
void controllerWindow::on_green_fade_button_clicked()
{
- portf.send("greenfade");
+ send("greenfade");
}
void controllerWindow::on_blue_fade_button_clicked()
{
- portf.send("bluefade");
+ send("bluefade");
}
void controllerWindow::on_speed_button_clicked()
{
- portf.send("speed=" + QString::number(ui->speed_slider->value()));
+ send("speed=" + QString::number(ui->speed_slider->value()));
}
void controllerWindow::on_r_speed_slider_valueChanged(int value)
{
- portf.send("rspeed=" + QString::number(value));
+ send("rspeed=" + QString::number(value));
}
void controllerWindow::on_g_speed_slider_valueChanged(int value)
{
- portf.send("gspeed=" + QString::number(value));
+ send("gspeed=" + QString::number(value));
}
void controllerWindow::on_b_speed_slider_valueChanged(int value)
{
- portf.send("bspeed=" + QString::number(value));
+ send("bspeed=" + QString::number(value));
}
void controllerWindow::on_rfrom_valueChanged(int arg1)
{
- portf.send("rf=" + QString::number(arg1));
- ui->r_slider->setValue(arg1);
+ send("rf=" + QString::number(arg1));
+ //ui->r_slider->setValue(arg1);
}
void controllerWindow::on_rto_valueChanged(int arg1)
{
- portf.send("rt=" + QString::number(arg1));
+ send("rt=" + QString::number(arg1));
}
void controllerWindow::on_gfrom_valueChanged(int arg1)
{
- portf.send("gf=" + QString::number(arg1));
- ui->g_slider->setValue(arg1);
+ send("gf=" + QString::number(arg1));
+ //ui->g_slider->setValue(arg1);
}
void controllerWindow::on_gto_valueChanged(int arg1)
{
-portf.send("gt=" + QString::number(arg1));
+ send("gt=" + QString::number(arg1));
}
void controllerWindow::on_bfrom_valueChanged(int arg1)
{
- portf.send("bf=" + QString::number(arg1));
- ui->b_slider->setValue(arg1);
+ send("bf=" + QString::number(arg1));
+ //ui->b_slider->setValue(arg1);
}
void controllerWindow::on_bto_valueChanged(int arg1)
{
- portf.send("bt=" + QString::number(arg1));
+ send("bt=" + QString::number(arg1));
+}
+
+bool controllerWindow::serial_connect(QString port)
+{
+ /* this function will attempt a ser.connection if we are not already connected */
+ if (!ser->isOpen())
+ {
+ ser->setPortName(port);
+ ser->setBaudRate(QSerialPort::Baud9600);
+ ser->setDataBits(QSerialPort::Data8);
+ ser->setParity(QSerialPort::NoParity);
+ ser->setStopBits(QSerialPort::OneStop);
+ ser->setFlowControl(QSerialPort::NoFlowControl);
+ ser->open(QIODevice::ReadWrite);
+ ser->waitForBytesWritten(9000);
+ if (ser->isWritable()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool controllerWindow::serial_disconnect()
+{
+ /* this function disconnects from the serial port if it is connected already */
+ if (ser->isOpen())
+ {
+ ser->close();
+ ptimer->stop();
+ return true;
+ }
+ return false;
+}
+
+void controllerWindow::send(QString com)
+{
+ data = "";
+ //qDebug() << com;
+ data.append(com + "\n");
+ if (ser->isOpen())
+ ser->write(data);
+}
+
+void controllerWindow::rgb_change(int r, int g, int b)
+{
+ // NOT USED FUNCTION
+
+ /* here we send our rgb values to the serial port */
+ data = "";
+ /* the 0 is a hack, i need to look into it at some point */
+ data.append("red=" + QString::number(r) + "," + QString::number(g) + "," + QString::number(b) + "\n");
+ if (ser->isOpen())
+ ser->write(data);
+}
+
+void controllerWindow::read()
+{
+ if (serdata[serdata.size() - 1] == '\n')
+ {
+ parse(QString(serdata));
+ serdata = "";
+ }
+ else
+ serdata = serdata + ser->readAll();
+}
+
+void controllerWindow::parse(QString message)
+{
+ qDebug() << message;
+ if (message.contains("="))
+ {
+ QString command = message.split("=")[0].remove(QRegExp("[\\n\\t\\r]"));
+ QString text = message.split("=")[1].remove(QRegExp("[\\n\\t\\r]"));
+ if (command == "msgbox")
+ show_msgbox(text);
+ if (command == "ping")
+ {
+ qDebug() << "pong from arduino";
+ tping = true;
+ }
+ }
+}
+
+void controllerWindow::on_serial_send_button_clicked()
+{
+ send(ui->serial_input->text());
+}
+// timer after ping send, if the timer timeout()'s, disconnect, claim no connection
+void controllerWindow::ping()
+{
+ qDebug() << "sending ping";
+ send("ping\n");
+ tping = false;
+ QTimer::singleShot(1000, this, SLOT(check_ping()));
+}
+
+void controllerWindow::check_ping()
+{
+ if (tping)
+ {
+ qDebug() << "connection fine";
+ tping = false;
+ pingtries = 0;
+ }
+ else
+ {
+ if (pingtries >= 3)
+ {
+ qDebug() << "connection lost";
+ on_disconnect_button_clicked();
+ show_msgbox("Disconnected from Arduino.\nNo ping response after 3 tries.");
+ }
+ else
+ {
+ pingtries++;
+ qDebug() << "no ping response try" << pingtries;
+ }
+ }
}