From b634024fb24be4d306c56f074cc5a4c372b76ac1 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 13 May 2015 20:00:59 -0400 Subject: [PATCH] Modified the way that the serial port is opened to hopefully be more cross platform. --- mainwindow.cpp | 11 +++++++++-- mainwindow.h | 4 +++- serialworker.cpp | 37 +++++++++++++++++++------------------ serialworker.h | 3 ++- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 9c2cb2f..1c591e5 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -43,7 +43,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->canFramesView->setColumnWidth(4, 40); ui->canFramesView->setColumnWidth(5, 300); - QList ports = QSerialPortInfo::availablePorts(); + ports = QSerialPortInfo::availablePorts(); for (int i = 0; i < ports.count(); i++) { @@ -592,7 +592,14 @@ void MainWindow::handleSaveFile() void MainWindow::connButtonPress() { - emit sendSerialPort(ui->cbSerialPorts->currentText()); + for (int x = 0; x < ports.count(); x++) + { + if (ports.at(x).portName() == ui->cbSerialPorts->currentText()) + { + emit sendSerialPort(ports[x]); + return; + } + } } void MainWindow::showGraphingWindow() diff --git a/mainwindow.h b/mainwindow.h index 8ec283d..543b9c4 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -3,6 +3,7 @@ #include #include +#include #include "canframemodel.h" #include "can_structs.h" #include "graphingwindow.h" @@ -37,13 +38,14 @@ public slots: void gotFrame(CANFrame *frame); signals: - void sendSerialPort(QString portName); + void sendSerialPort(QSerialPortInfo &port); void updateBaudRates(int, int); void sendCANFrame(const CANFrame *, int); private: Ui::MainWindow *ui; CANFrameModel *model; + QList ports; QThread serialWorkerThread; QByteArray inputBuffer; GraphingWindow *graphingWindow; diff --git a/serialworker.cpp b/serialworker.cpp index 975a0f2..232b601 100644 --- a/serialworker.cpp +++ b/serialworker.cpp @@ -16,26 +16,27 @@ SerialWorker::~SerialWorker() if (serial != NULL) delete serial; } -void SerialWorker::setSerialPort(QString portName) +void SerialWorker::setSerialPort(QSerialPortInfo &port) { - if (serial == NULL) serial = new QSerialPort(this); + if (!(serial == NULL)) + { + if (serial->isOpen()) + { + serial->close(); + } + delete serial; + } - if (serial->isOpen()) - { - serial->close(); - } - else - { - qDebug() << "Serial port name is " << portName; - serial->setPortName(portName); - serial->open(QIODevice::ReadWrite); - QByteArray output; - output.append(0xE7); - output.append(0xE7); - serial->write(output); - ///isConnected = true; - connect(serial, SIGNAL(readyRead()), this, SLOT(readSerialData())); - } + serial = new QSerialPort(port); + + qDebug() << "Serial port name is " << port.portName(); + serial->open(QIODevice::ReadWrite); + QByteArray output; + output.append(0xE7); + output.append(0xE7); + serial->write(output); + ///isConnected = true; + connect(serial, SIGNAL(readyRead()), this, SLOT(readSerialData())); } void SerialWorker::readSerialData() diff --git a/serialworker.h b/serialworker.h index b2e6e8d..6e764ca 100644 --- a/serialworker.h +++ b/serialworker.h @@ -3,6 +3,7 @@ #include #include +#include #include "can_structs.h" enum STATE //keep this enum synchronized with the Arduino firmware project @@ -33,7 +34,7 @@ private slots: //we receive things in slots void readSerialData(); public slots: - void setSerialPort(QString); + void setSerialPort(QSerialPortInfo&); void sendFrame(const CANFrame *, int); void updateBaudRates(int, int);