// // Created by zong on 5/18/22. // #include "main_window.h" #include #include #include #include #include #include static bool check_exist(QString str) { for (auto &port: QSerialPortInfo::availablePorts()) { if (str == port.portName()) return true; } return false; } void main_window::setUiComponent() { this->ui = new Ui::MainWindow; ui->setupUi(this); portsComboBox = ui->portsComboBox; hexTextEdit = ui->hexTextEdit; tmpFilenameEdit = ui->tmpFilenameEdit; portOpenBtn = ui->portOpenBtn; portsComboBox = ui->portsComboBox; portUpdBtn = ui->portUpdBtn; statusbar = ui->statusbar; stopbitsComboBox = ui->stopbitsComboBox; QObject::connect(portOpenBtn, SIGNAL(clicked()), this, SLOT(open_port())); QObject::connect(portUpdBtn, SIGNAL(clicked()), this, SLOT(update_ui_port())); } main_window::main_window(QWidget *parent) : QMainWindow(parent) { setUiComponent(); QObject::connect(&port, SIGNAL(readyRead()), this, SLOT(read_data())); QFont font("Courier"); hexTextEdit->setFont(font); QSerialPortInfo info; auto tmp = QSerialPortInfo::availablePorts(); portsComboBox->clear(); for (auto &port: tmp) { qDebug() << port.portName(); portsComboBox->addItem(port.portName()); } hexTextEdit->setLineWrapMode(QTextEdit::FixedColumnWidth); hexTextEdit->setLineWrapColumnOrWidth(48); hexTextEdit->setWordWrapMode(QTextOption::WordWrap); hexTextEdit->setFontFamily("Mono"); } main_window::~main_window() { delete ui; } void main_window::update_ui_port() { portsComboBox->clear(); for (auto &port: QSerialPortInfo::availablePorts()) { portsComboBox->addItem(port.portName()); } } void main_window::open_port() { if (is_open) { port.close(); QFile file; auto filename = tmpFilenameEdit->text(); file.setFileName(filename); file.open(QIODevice::Append); auto val = hexTextEdit->toPlainText(); hexTextEdit->clear(); file.write(val.toUtf8()); file.close(); is_open = false; portOpenBtn->setText("open"); return; } if (portsComboBox->count() == 0) { return; } auto cur_port = portsComboBox->currentText(); if (!check_exist(cur_port)) return; port.setPortName(cur_port); auto stopbits = stopbitsComboBox->currentText(); if (stopbits == QString("1")) port.setStopBits(QSerialPort::OneStop); else if (stopbits == QString("1.5")) port.setStopBits(QSerialPort::OneAndHalfStop); else if (stopbits == QString("2")) port.setStopBits(QSerialPort::TwoStop); else { QMessageBox box; box.setText("wrong stopbits settings"); box.exec(); return; } // TODO: read info from config port.setBaudRate(115200); port.setDataBits(QSerialPort::Data8); port.setParity(QSerialPort::NoParity); port.setFlowControl(QSerialPort::NoFlowControl); if (port.open(QIODevice::ReadWrite)) { is_open = true; portOpenBtn->setText("close"); statusbar->showMessage("open port success"); } else is_open = false; } #include #include static uint64_t rest = 0; static QLineSeries linedata; static int cnt = 0; static long long line_cnt = 0; void main_window::read_data() { auto data = port.readAll(); // for (int i = 0; i < data.size(); i++) { // linedata.append(line_cnt++, int(data[i])); // } cnt += data.size(); QString new_text = QString(data.toHex(' ').toUpper()) + " "; hexTextEdit->moveCursor(QTextCursor::End); hexTextEdit->insertPlainText(new_text); if (cnt > 1e3) { QFile file; auto filename = tmpFilenameEdit->text(); file.setFileName(filename); file.open(QIODevice::Append); auto val = hexTextEdit->toPlainText(); hexTextEdit->clear(); file.write(val.toUtf8()); file.close(); cnt = 0; } } #include #include #include void main_window::update_chart() { // TODO: memory leakage QChart *chart = new QChart(); linedata.append(1, 10); linedata.append(10, 7); chart->addSeries(&linedata); chart->createDefaultAxes(); chart->setTitle("WIP"); QChartView *chartview = new QChartView(chart); chartview->show(); }