0,0 → 1,217 |
#include "SerialWidget.h" |
|
SerialWidget::SerialWidget(QWidget *parent) : QWidget(parent) |
{ |
// Serial connection UI |
btnSerialConnect = 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)); |
// } |
//} |