data processing

This commit is contained in:
guangzong chen 2022-06-10 00:16:29 -04:00
parent e526ddbc05
commit c6db7dc49e
No known key found for this signature in database
GPG Key ID: E7F2158184087A5A
2 changed files with 70 additions and 44 deletions

View File

@ -18,6 +18,9 @@ static bool check_exist(QString str) {
return false;
}
QTextStream receivefileStream;
void main_window::config_enable(bool ena) {
portsComboBox->setEnabled(ena);
stopbitsComboBox->setEnabled(ena);
@ -29,11 +32,18 @@ void main_window::config_enable(bool ena) {
portOpenBtn->setText("open"), is_open = false;
if (receivefile.isOpen())
receivefile.close();
if (rawDataFile.isOpen())
rawDataFile.close();
} else {
portOpenBtn->setText("close"), is_open = true;
auto filename = tmpFilenameEdit->text();
receivefile.setFileName(filename);
receivefile.open(QIODevice::Append);
receivefileStream.setDevice(&receivefile);
rawDataFile.setFileName(filename + "raw");
rawDataFile.open(QIODevice::Append);
}
}
@ -174,61 +184,78 @@ void main_window::open_port() {
}
static uint64_t rest = 0;
static int cnt = 0;
static long long line_cnt = 0;
QByteArray zero_finder;
int zero_pos = -1;
int buf_cnt = 0;
int receive_cnt = 0;
QByteArray first_frame;
bool first = true;
void main_window::read_data() {
auto data = port.readAll();
static int receive_num_cnt = 0;
static int receive_byte_cnt = 0;
static int val = 0;
if (zero_pos == -1) {
if (zero_finder.size() < 10)
zero_finder += data;
if (zero_finder.size() < 10) {
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++) {
if (zero_finder[i] == 0) {
zero_cnt++;
zero_pos = i;
zero_cnt += first_frame[i] == 0 ? 1 : 0;
}
first_frame.remove(0, 1);
} while (zero_cnt != 0);
data = first_frame;
first = false;
}
for (int i = 4; i < zero_finder.size(); i++) {
if (zero_cnt == 1) {
break;
rawDataFile.write(data);
for (int i = 0; i < data.size(); i++) {
if (receive_byte_cnt % 4 == 0) {
if (data[i] != 0) {
// TODO: raise error
return;
}
if (zero_finder[i - 4] == 0)
zero_cnt--;
if (zero_finder[i] == 0) {
zero_cnt++;
zero_pos = i;
receive_num_cnt++;
int real_number = val;
if (real_number & 0x800000) {
// negtive number
real_number = -(~real_number & 0x7fffff + 1);
}
receivefileStream << real_number << " ";
double scaled = (double) real_number / (double) (0x7fffff) * 2.5;
lineChart.data->append((double) receive_byte_cnt / 1000.0, scaled);
while (lineChart.data->count() > 5000) {
// data more than 5000 second, remove first data
lineChart.data->remove(0);
}
for (int i = zero_pos+1; i < zero_finder.size(); i++) {
val = 0;
continue;
}
val <<= 8;
val |= data[i];
receive_byte_cnt++;
}
asciiTextEdit->append(QString(data));
cnt += data.size();
QString new_text = QString(data.toHex(' ').toUpper()) + " ";
hexTextEdit->moveCursor(QTextCursor::End);
hexTextEdit->insertPlainText(new_text);
auto val = hexTextEdit->toPlainText();
receivefile.write(val.toUtf8());
if (hexTextEdit->toPlainText().length() > 1e3) {
hexTextEdit->clear();
asciiTextEdit->clear();
auto tmp = hexTextEdit->toPlainText();
if (tmp.length() > 1e3) {
hexTextEdit->setPlainText(tmp.last((int) 1e3));
hexTextEdit->moveCursor(QTextCursor::End);
}
tmp = asciiTextEdit->toPlainText();
if (tmp.length() > 1e3) {
asciiTextEdit->setPlainText(tmp.last(int(1e3)));
asciiTextEdit->moveCursor(QTextCursor::End);
}
lineChart.data->append(0, 0.5);
lineChart.data->append(0.5, 1);
}

View File

@ -39,6 +39,7 @@ private:
bool is_open = false;
QSerialPort port;
QFile receivefile;
QFile rawDataFile;
QWidget *centralwidget;
QHBoxLayout *horizontalLayout;
@ -64,8 +65,6 @@ private:
QChartView *plotChartView;
QMessageBox box;
// QChart* chart;
// QLineSeries* linedata;
GLineChart lineChart;
private: