This commit is contained in:
Guangzong 2022-06-13 10:38:50 -04:00
parent cfd6706fa5
commit 2d0724098b
No known key found for this signature in database
GPG Key ID: 14CC8AA04C210419
2 changed files with 65 additions and 56 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.21) cmake_minimum_required(VERSION 3.21)
project(com) 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_CXX_STANDARD 14)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)

View File

@ -157,75 +157,84 @@ static int cnt = 0;
QByteArray first_frame; QByteArray first_frame;
bool first = true; bool first = true;
#define MAX_BUF_LENGTH 1e4
void main_window::read_data() { void main_window::read_data() {
static int receive_num_cnt = -2; static int receive_num_cnt = -2;
static int receive_byte_cnt = 0; static int receive_byte_cnt = 0;
static int val = 0; static int val = 0;
auto data = port.readAll(); auto data = port.readAll();
if (first) { auto pre_cursor =hexTextEdit->textCursor();
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];
}
QString new_text = QString(data.toHex(' ').toUpper()) + " "; QString new_text = QString(data.toHex(' ').toUpper()) + " ";
hexTextEdit->moveCursor(QTextCursor::End); hexTextEdit->moveCursor(QTextCursor::End);
bool move_to_end = pre_cursor == hexTextEdit->textCursor();
hexTextEdit->insertPlainText(new_text); 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->moveCursor(QTextCursor::End);
asciiTextEdit->insertPlainText(QString(data)); asciiTextEdit->insertPlainText(QString(data));
if (tmp.length() > 1e3) { if (!move_to_end) asciiTextEdit->setTextCursor(pre_cursor);
hexTextEdit->setPlainText(tmp.last((int) 1e3));
auto tmp = hexTextEdit->toPlainText();
if (tmp.length() > MAX_BUF_LENGTH) {
hexTextEdit->setPlainText(tmp.last((int) MAX_BUF_LENGTH));
hexTextEdit->moveCursor(QTextCursor::End); hexTextEdit->moveCursor(QTextCursor::End);
} }
tmp = asciiTextEdit->toPlainText(); tmp = asciiTextEdit->toPlainText();
if (tmp.length() > 1e3) { if (tmp.length() > MAX_BUF_LENGTH) {
asciiTextEdit->setPlainText(tmp.last(int(1e3))); asciiTextEdit->setPlainText(tmp.last(int(MAX_BUF_LENGTH)));
asciiTextEdit->moveCursor(QTextCursor::End); 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];
// }
} }