SerialMonitor::SerialMonitor(const QString& portName, QWidget *parent) : QFrame(parent), mPortName(portName) { setupUi(this); sendHexEdit = new QHexEdit(); gridLayoutSend->addWidget(sendHexEdit, 1, 0, 1, 1); recvHexEdit = new QHexEdit(); gridLayoutRecv->addWidget(recvHexEdit, 1, 0, 1, 1); recvHexEdit->setAddressArea(false); recvHexEdit->setOverwriteMode(false); recvHexEdit->setReadOnly(true); sendHexEdit->setAddressArea(false); sendHexEdit->setAsciiArea(false); sendHexEdit->setOverwriteMode(false); settingMenu = 0; serialPort = new QextSerialPort(portName, QextSerialPort::EventDriven); connect(btnConnect, SIGNAL(clicked()), this, SLOT(openDevice())); connect(serialPort, SIGNAL(readyRead()), this, SLOT(onReadyRead())); connect(btnSendData, SIGNAL(clicked()), this, SLOT(wirteData())); settingMapper = new QSignalMapper(); connect(settingMapper, SIGNAL(mapped(QString)), this, SLOT(updateSetting(QString))); connect(btnSendFile, SIGNAL(clicked()),this, SLOT(sendFile())); connect(btnClearRecv, SIGNAL(clicked()), textRecv, SLOT(clear())); connect(btnClearRecv, SIGNAL(clicked()), recvHexEdit, SLOT(clear())); connect(btnRecvTextMode, SIGNAL(clicked()), this, SLOT(switchRecvTextMode())); connect(btnSendTextMode, SIGNAL(clicked()), this, SLOT(switchSendTextMode())); recvTextModeHex = false; sendTextModeHex = false; updateUI(); updateTextMode(); }
bool QAsioTcpSocket::writeDataed(std::size_t bytes_transferred) { writeMutex.lock(); if (static_cast<std::size_t>(writeQueue.head().size()) == bytes_transferred){ writeQueue.dequeue(); if (!writeQueue.isEmpty()) { wirteData(writeQueue.head().data(),static_cast<std::size_t>(writeQueue.head().size())); } writeMutex.unlock(); return true; } else { writeMutex.unlock(); return false; } }
bool QAsioTcpSocket::write(const QByteArray &data) { if (state() != ConnectedState) return false; writeMutex.lock(); if (!data.isEmpty()) writeQueue.append(data); if (writeQueue.isEmpty()) { writeMutex.unlock(); return false; } if (writeQueue.size() == 1) { wirteData(writeQueue.head().data(),static_cast<std::size_t>(writeQueue.head().size())); } writeMutex.unlock(); return true; }
void SerialMonitor::wirteData() { if(serialPort->isOpen()){ if(sendTextModeHex){ serialPort->write(sendHexEdit->data()); }else{ QString text = textSend->toPlainText(); serialPort->write(text.toAscii()); } if(spinBox->value() != 0){ spinBox->setValue(spinBox->value() - 1); } if(spinBox->value() != 0){ QTimer::singleShot(1000, this, SLOT(wirteData())); } } }