data processing
This commit is contained in:
parent
e526ddbc05
commit
c6db7dc49e
101
main_window.cpp
101
main_window.cpp
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user