Rev 362 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
#include "SerialWidget.h"SerialWidget::SerialWidget(QWidget *parent) : QWidget(parent){// Serial connection UIbtnSerialConnect = new QPushButton("&Connect");btnSerialRefresh = new QPushButton("&Refresh");labelSerialPort = new QLabel("Serial Port:");labelSerialSpeed = new QLabel("Baud Rate:");labelSerialDataBits = new QLabel("Data:");labelSerialStopBits = new QLabel("Stop:");labelSerialParity = new QLabel("Parity Bit:");labelSerialFlowControl = new QLabel("Flow Control:");cboxSerialPort = new QComboBox();cboxSerialPort->setMinimumWidth(80);cboxSerialSpeed = new QComboBox();cboxSerialSpeed->setEditable(true);cboxSerialSpeed->setValidator(new QIntValidator(0, 100000000, this));cboxSerialDataBits = new QComboBox();cboxSerialDataBits->setMaximumWidth(60);cboxSerialStopBits = new QComboBox();cboxSerialStopBits->setMaximumWidth(60);cboxSerialParity = new QComboBox();cboxSerialFlowControl = new QComboBox();cboxSerialFlowControl->setMinimumWidth(70);QGridLayout *serialSettingsLayout = new QGridLayout();serialSettingsLayout->addWidget(btnSerialConnect, 0, 0);serialSettingsLayout->addWidget(labelSerialPort, 0, 1);serialSettingsLayout->addWidget(cboxSerialPort, 0, 2);serialSettingsLayout->addWidget(labelSerialDataBits, 0, 3);serialSettingsLayout->addWidget(cboxSerialDataBits, 0, 4);serialSettingsLayout->addWidget(labelSerialParity, 0, 5);serialSettingsLayout->addWidget(cboxSerialParity, 0, 6);serialSettingsLayout->addWidget(btnSerialRefresh, 1, 0);serialSettingsLayout->addWidget(labelSerialSpeed, 1, 1);serialSettingsLayout->addWidget(cboxSerialSpeed, 1, 2);serialSettingsLayout->addWidget(labelSerialStopBits, 1, 3);serialSettingsLayout->addWidget(cboxSerialStopBits, 1, 4);serialSettingsLayout->addWidget(labelSerialFlowControl, 1, 5);serialSettingsLayout->addWidget(cboxSerialFlowControl, 1, 6);setLayout(serialSettingsLayout);serialHelper = new SerialHelper();serialThread = new QThread();serialHelper->moveToThread(serialThread);connect(serialHelper, SIGNAL(UpdateStatus(QString)), this, SIGNAL(UpdateStatus(QString)));connect(this, SIGNAL(Serial_QueryParameters()), serialHelper, SLOT(Serial_QueryParameters()));connect(serialHelper, SIGNAL(Serial_UpdateParameters(QStringList,QStringList,QStringList,QStringList,QStringList,QStringList)),this, SLOT(Serial_UpdateParameters(QStringList,QStringList,QStringList,QStringList,QStringList,QStringList)));connect(this, SIGNAL(Serial_Connect(QString,QString,QString,QString,QString,QString)),serialHelper, SLOT(Serial_Connect(QString,QString,QString,QString,QString,QString)));connect(serialHelper, SIGNAL(Serial_Connected()), this, SIGNAL(Serial_Connected()));connect(serialHelper, SIGNAL(Serial_Connected()), this, SLOT(Serial_LocalConnected()));connect(this, SIGNAL(Serial_Disconnect()), serialHelper, SLOT(Serial_Disconnect()));connect(serialHelper, SIGNAL(Serial_Disconnected()), this, SIGNAL(Serial_Disconnected()));connect(serialHelper, SIGNAL(Serial_Disconnected()), this, SLOT(Serial_LocalDisconnected()));connect(this, SIGNAL(Serial_TransmitByteArray(QByteArray)), serialHelper, SLOT(Serial_TransmitByteArray(QByteArray)));connect(serialHelper, SIGNAL(Serial_ReceivedByte(char)), this, SIGNAL(Serial_ReceivedByte(char)));connect(serialThread, SIGNAL(finished()), serialHelper, SLOT(deleteLater()));serialThread->start();connect(btnSerialConnect, SIGNAL(clicked()), this, SLOT(Serial_ConnectToggleBtn()));connect(btnSerialRefresh, SIGNAL(clicked()), this, SIGNAL(Serial_QueryParameters()));emit Serial_QueryParameters();Serial_LocalDisconnected();}SerialWidget::~SerialWidget(){serialThread->quit();}void SerialWidget::Serial_UpdateParameters(QStringList ports, QStringList speeds, QStringList dataBits,QStringList stopBits, QStringList parity, QStringList flowControl){QString currPort = cboxSerialPort->currentText();cboxSerialPort->clear();cboxSerialPort->addItems(ports);if (currPort != "" && ports.contains(currPort))cboxSerialPort->setCurrentText(currPort);QString currSpeed = cboxSerialSpeed->currentText();cboxSerialSpeed->clear();cboxSerialSpeed->addItems(speeds);if (currSpeed != "") cboxSerialSpeed->setCurrentText(currSpeed);int currData = cboxSerialDataBits->currentIndex();cboxSerialDataBits->clear();cboxSerialDataBits->addItems(dataBits);if (currData >= 0) cboxSerialDataBits->setCurrentIndex(currData);int currStop = cboxSerialStopBits->currentIndex();cboxSerialStopBits->clear();cboxSerialStopBits->addItems(stopBits);if (currStop >= 0) cboxSerialStopBits->setCurrentIndex(currStop);int currParity = cboxSerialParity->currentIndex();cboxSerialParity->clear();cboxSerialParity->addItems(parity);if (currParity >= 0) cboxSerialParity->setCurrentIndex(currParity);int currFlow = cboxSerialFlowControl->currentIndex();cboxSerialFlowControl->clear();cboxSerialFlowControl->addItems(flowControl);if (currFlow >= 0) cboxSerialFlowControl->setCurrentIndex(currFlow);}void SerialWidget::Serial_LocalConnected(){btnSerialConnect->setText("&Disconnect");// cboxSerialPort->setEnabled(false);// cboxSerialSpeed->setEnabled(false);// cboxSerialDataBits->setEnabled(false);// cboxSerialStopBits->setEnabled(false);// cboxSerialParity->setEnabled(false);// cboxSerialFlowControl->setEnabled(false);// btnSerialRefresh->setEnabled(false);btnSerialRefresh->hide();labelSerialPort->hide();labelSerialSpeed->hide();labelSerialDataBits->hide();labelSerialStopBits->hide();labelSerialParity->hide();labelSerialFlowControl->hide();cboxSerialPort->hide();cboxSerialSpeed->hide();cboxSerialDataBits->hide();cboxSerialStopBits->hide();cboxSerialParity->hide();cboxSerialFlowControl->hide();}void SerialWidget::Serial_LocalDisconnected(){btnSerialConnect->setText("&Connect");// cboxSerialPort->setEnabled(true);// cboxSerialSpeed->setEnabled(true);// cboxSerialDataBits->setEnabled(true);// cboxSerialStopBits->setEnabled(true);// cboxSerialParity->setEnabled(true);// cboxSerialFlowControl->setEnabled(true);// btnSerialRefresh->setEnabled(true);btnSerialRefresh->show();labelSerialPort->show();labelSerialSpeed->show();labelSerialDataBits->show();labelSerialStopBits->show();labelSerialParity->show();labelSerialFlowControl->show();cboxSerialPort->show();cboxSerialSpeed->show();cboxSerialDataBits->show();cboxSerialStopBits->show();cboxSerialParity->show();cboxSerialFlowControl->show();}void SerialWidget::Serial_ConnectToggleBtn(){if (serialHelper->connected) {emit Serial_Disconnect();} else {if (cboxSerialPort->currentText() != "" && cboxSerialSpeed->currentText() != "") {emit Serial_Connect(cboxSerialPort->currentText(), cboxSerialSpeed->currentText(), cboxSerialDataBits->currentText(),cboxSerialStopBits->currentText(), cboxSerialParity->currentText(), cboxSerialFlowControl->currentText());}}}//void SerialController::Serial_ProcessIncomingData()//{// char tmpBuffer[SERIAL_BUFFER_SIZE];// int len = serialPort->read(tmpBuffer, sizeof(tmpBuffer));// while (len > 0) {// for (int i = 0; i < len; i++) {// // Save received data into local buffer// bufferIn[bufferInIndex] = tmpBuffer[i];// // If newline char is received, end current string// if (tmpBuffer[i] == '\n') {// if (bufferInOverflow)// currString.append(QString::fromLocal8Bit(bufferIn, bufferInIndex));// else// currString = QString::fromLocal8Bit(bufferIn, bufferInIndex);// bufferInOverflow = false;// bufferInIndex = 0;// emit Serial_ReceivedString(currString);// } else {// bufferInIndex++;// }// // If received string is larger than our serial buffer, append to previous data// if (bufferInIndex == SERIAL_BUFFER_SIZE-1) {// bufferIn[SERIAL_BUFFER_SIZE-1] = 0x0;// if (bufferInOverflow)// currString.append(QString::fromLocal8Bit(bufferIn, bufferInIndex));// else// currString = QString::fromLocal8Bit(bufferIn, bufferInIndex);// bufferInOverflow = true;// bufferInIndex = 0;// }// }// // Check if there is more data to be read from the serial port// len = serialPort->read(tmpBuffer, sizeof(tmpBuffer));// }//}