From 2d0724098be75f092477b21e6afb4f988be102e7 Mon Sep 17 00:00:00 2001 From: Guangzong Date: Mon, 13 Jun 2022 10:38:50 -0400 Subject: [PATCH] update --- CMakeLists.txt | 2 +- main_window.cpp | 119 ++++++++++++++++++++++++++---------------------- 2 files changed, 65 insertions(+), 56 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cae0f8..026559b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.21) project(com) -set(CMAKE_PREFIX_PATH "C:\\Programs\\Qt\\6.2.4\\msvc2019_64") +#set(CMAKE_PREFIX_PATH "C:\\Programs\\Qt\\6.2.4\\msvc2019_64") set(CMAKE_CXX_STANDARD 14) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) diff --git a/main_window.cpp b/main_window.cpp index 8ddd624..d4a15ab 100755 --- a/main_window.cpp +++ b/main_window.cpp @@ -157,75 +157,84 @@ static int cnt = 0; QByteArray first_frame; bool first = true; - +#define MAX_BUF_LENGTH 1e4 void main_window::read_data() { static int receive_num_cnt = -2; static int receive_byte_cnt = 0; static int val = 0; auto data = port.readAll(); - if (first) { - if (data.length() < 10) { - first_frame += data; - return; - } - while (first_frame[0] != 0) { - first_frame.remove(0, 1); - } - int zero_cnt = 0; - do { - zero_cnt = 0; - while (first_frame[0] != 0) { - first_frame.remove(0, 1); - } - - for (int i = 0; i < 4; i++) { - zero_cnt += first_frame[i] == 0 ? 1 : 0; - } - first_frame.remove(0, 1); - } while (zero_cnt != 0); - data = first_frame; - first = false; - } - // TODO: BUG int data overflow - rawDataFile.write(data); - for (int i = 0; i < data.size(); i++) { - if (receive_byte_cnt % 4 == 0) { - if (data[i] != 0) { - msgBox.setText("Error occurred, please restart transmission."); - msgBox.exec(); - return; - } - receive_num_cnt++; - if (receive_num_cnt == -1) - continue; - int real_number = val; - if (real_number & 0x800000) { - // negative number - real_number = -(~real_number & 0x7fffff + 1); - } - receivefileStream << real_number << " "; - double scaled = (double) real_number / (double) (0x7fffff) * 2.5; - plotChartView->append ((double) receive_num_cnt / 1000.0, scaled); - val = 0; - continue; - } - val <<= 8; - val |= data[i]; - } + auto pre_cursor =hexTextEdit->textCursor(); QString new_text = QString(data.toHex(' ').toUpper()) + " "; hexTextEdit->moveCursor(QTextCursor::End); + bool move_to_end = pre_cursor == hexTextEdit->textCursor(); hexTextEdit->insertPlainText(new_text); - auto tmp = hexTextEdit->toPlainText(); + if (!move_to_end) hexTextEdit->setTextCursor(pre_cursor); + pre_cursor = asciiTextEdit->textCursor(); asciiTextEdit->moveCursor(QTextCursor::End); asciiTextEdit->insertPlainText(QString(data)); - if (tmp.length() > 1e3) { - hexTextEdit->setPlainText(tmp.last((int) 1e3)); + if (!move_to_end) asciiTextEdit->setTextCursor(pre_cursor); + + auto tmp = hexTextEdit->toPlainText(); + if (tmp.length() > MAX_BUF_LENGTH) { + hexTextEdit->setPlainText(tmp.last((int) MAX_BUF_LENGTH)); hexTextEdit->moveCursor(QTextCursor::End); } tmp = asciiTextEdit->toPlainText(); - if (tmp.length() > 1e3) { - asciiTextEdit->setPlainText(tmp.last(int(1e3))); + if (tmp.length() > MAX_BUF_LENGTH) { + asciiTextEdit->setPlainText(tmp.last(int(MAX_BUF_LENGTH))); asciiTextEdit->moveCursor(QTextCursor::End); } + // data processing +// if (first) { +// if (data.length() < 10) { +// first_frame += data; +// return; +// } +// while (first_frame.size() > 0 && first_frame[0] != 0) { +// first_frame.remove(0, 1); +// } +// int zero_cnt = 0; +// do { +// zero_cnt = 0; +// while (first_frame.size() > 0 && first_frame[0] != 0) { +// first_frame.remove(0, 1); +// } +// +// for (int i = 0; i < 4 && i < first_frame.size(); i++) { +// zero_cnt += first_frame[i] == 0 ? 1 : 0; +// } +// first_frame.remove(0, 1); +// } while (zero_cnt != 0); +// data = first_frame; +// first = false; +// } +// +// // TODO: BUG int data overflow +// rawDataFile.write(data); +// for (int i = 0; i < data.size(); i++) { +// if (receive_byte_cnt % 4 == 0) { +// if (data[i] != 0) { +// msgBox.setText("Error occurred, please restart transmission."); +// msgBox.exec(); +// this->open_port(); +// return; +// } +// receive_num_cnt++; +// if (receive_num_cnt == -1) +// continue; +// int real_number = val; +// if (real_number & 0x800000) { +// // negative number +// real_number = -(~real_number & 0x7fffff + 1); +// } +// receivefileStream << real_number << " "; +// double scaled = (double) real_number / (double) (0x7fffff) * 2.5; +// plotChartView->append ((double) receive_num_cnt / 1000.0, scaled); +// val = 0; +// continue; +// } +// val <<= 8; +// val |= data[i]; +// } }