diff --git a/mainwindow.cpp b/mainwindow.cpp
index 2f7bb0b..5610656 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -43,7 +43,7 @@ void MainWindow::instructionPreviewShow(const char *fmt, ...) {
QString text(buf);
QString info;
- info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz"));
+ info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz "));
info.append(" |");
info.append(text);
emit doinui_signal(QFunction([this, info]() { ui->instructionPreview->append(info); }));
@@ -60,10 +60,10 @@ void MainWindow::reportPreviewShow(const char *fmt, ...) {
QString text(buf);
QString info;
- info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz"));
+ info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz "));
info.append(text);
emit doinui_signal(QFunction([this, info]() {
- if (ui->reportPreview->document()->lineCount() > 100) {
+ if (ui->reportPreview->document()->lineCount() > 1000) {
ui->reportPreview->document()->clear();
}
ui->reportPreview->append(info);
@@ -79,10 +79,10 @@ void MainWindow::blockDataUploadPreviewShow(const char *fmt, ...) {
QString text(buf);
QString info;
- info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz"));
+ info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz "));
info.append(text);
emit doinui_signal(QFunction([this, info]() {
- if (ui->uploadDataPreview->document()->lineCount() > 100) {
+ if (ui->uploadDataPreview->document()->lineCount() > 1000) {
ui->uploadDataPreview->document()->clear();
}
ui->uploadDataPreview->append(info);
@@ -100,7 +100,7 @@ void MainWindow::rawDataPreviewShow(const char *fmt, ...) {
info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz"));
info.append(text);
emit doinui_signal(QFunction([this, info]() {
- if (ui->rawDataPreview->document()->lineCount() > 100) {
+ if (ui->rawDataPreview->document()->lineCount() > 1000) {
ui->rawDataPreview->document()->clear();
}
ui->rawDataPreview->append(info);
@@ -232,7 +232,7 @@ void MainWindow::constructUI() {
}
case ify_hrs_report_record_upload_end: {
uint32_t checksum = *(uint32_t *)report_packet->data;
- reportPreviewShow("[record_upload ] 0x%08x", checksum);
+ reportPreviewShow("[upload end ] checksum: 0x%08x", checksum);
break;
}
default:
@@ -240,16 +240,18 @@ void MainWindow::constructUI() {
}
});
- ElectrocardiographTester::ins()->regCh4CheckSumPacketReport([this](uint32_t rxcnt, uint32_t report_packet_checksum) { blockDataUploadPreviewShow("RXCNT %d CHECKSUM %d", rxcnt, report_packet_checksum); });
+ ElectrocardiographTester::ins()->regCh4CheckSumPacketReport([this](uint32_t rxcnt, uint32_t report_packet_checksum) { //
+ blockDataUploadPreviewShow("RXCNT %d CHECKSUM 0x%08x", rxcnt, report_packet_checksum);
+ });
ElectrocardiographTester::ins()->regRawDataCB([this](raw_data_type_t type, uint8_t *hex, uint32_t hexlen) {
if (type == kcmd_cmd) {
- blockDataUploadPreviewShow("[CMD ] %s", zhex2str(hex, hexlen).c_str());
+ rawDataPreviewShow("[CMD ] %s", zhex2str(hex, hexlen).c_str());
} else if (type == kcmd_receipt) {
- blockDataUploadPreviewShow("[RECEIPT] %s", zhex2str(hex, hexlen).c_str());
+ rawDataPreviewShow("[RECEIPT] %s", zhex2str(hex, hexlen).c_str());
} else if (type == kcmd_report) {
- blockDataUploadPreviewShow("[REPORT ] %s", zhex2str(hex, hexlen).c_str());
+ rawDataPreviewShow("[REPORT ] %s", zhex2str(hex, hexlen).c_str());
} else if (type == kcmd_ch4_data) {
- // blockDataUploadPreviewShow("[CH4 ] %s", zhex2str(hex, hexlen).c_str());
+ // rawDataPreviewShow("[CH4 ] %s", zhex2str(hex, hexlen).c_str());
}
});
}
@@ -330,11 +332,11 @@ void MainWindow::on_readAllRecords_clicked() {
try {
device_state_receipt_t state;
ElectrocardiographTester::ins()->readDeviceState(&state);
- instructionPreviewShow("index recordid frameNum dataSize sensorNum captRate captPrec compAlgo");
+ instructionPreviewShow("index recordid frameNum dataSize sensorNum captRate captPrec compAlgo checksum");
for (int32_t i = 0; i < state.storage_item_num; i++) {
read_record_info_receipt_t record;
ElectrocardiographTester::ins()->readRecordsInfo(i, &record);
- instructionPreviewShow("%d %s %8d %8d %8d %8d %8d %8d", i, zhex2time(record.record_id, 6).c_str(), record.frameNum, record.dataSize, record.sensorNum, record.captureRate, record.capturePrecision, record.compressAlgorithm);
+ instructionPreviewShow("%d %s %8d %8d %8d %8d %8d %8d 0x%08x", i, zhex2time(record.record_id, 6).c_str(), record.frameNum, record.dataSize, record.sensorNum, record.captureRate, record.capturePrecision, record.compressAlgorithm, record.checksum);
}
} catch (zexception &exception) {
processException(exception);
diff --git a/mainwindow.ui b/mainwindow.ui
index b7c100f..ce28d2e 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -7,7 +7,7 @@
0
0
1448
- 937
+ 1040
@@ -17,7 +17,7 @@
- 相机光源和时序控制器
+ 心电单(三)导上位机
/*
@@ -773,6 +773,18 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
-
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#ff0000;">注意事项:</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#ff0000;">1.当检查上传数据的CHECKSUM(检验和)时,需要先复位下蓝牙主机开发板清空统计信息</span></p></body></html>
+
+
+
+ -
Qt::Vertical
diff --git a/src/electrocardiograph_tester.cpp b/src/electrocardiograph_tester.cpp
index 3461a37..66b0dd7 100644
--- a/src/electrocardiograph_tester.cpp
+++ b/src/electrocardiograph_tester.cpp
@@ -48,6 +48,9 @@ ElectrocardiographTester *ElectrocardiographTester::ins() {
}
return ins;
}
+// 030065ab04000063076207650768076407305b
+// 5aa5030065b00400006607650768076e076407445bb5
+// 5aa5
void ElectrocardiographTester::initialize(IDataChannel *channel) { //
m_channel = channel;
m_channel->regRxListener([this](uint8_t *data, size_t len) {
@@ -100,9 +103,9 @@ void ElectrocardiographTester::initialize(IDataChannel *channel) { //
uint8_t *packet = &m_rxcache[headerpos];
if (packet[0] == 0x5A && packet[1] == 0xA5) {
- processCh3RxData(packet, datalen);
- } else if (packet[0] == 0x4B && packet[1] == 0xB4) {
- processCh4RxData(packet, datalen);
+ processCh3RxData(&packet[2], datalen - 4);
+ } else if (packet[0] == 0x4A && packet[1] == 0xA4) {
+ processCh4RxData(&packet[2], datalen - 4);
} else {
ZLOGI(TAG, "unknow packet: %s", zhex2str(packet, datalen).c_str());
}
@@ -129,18 +132,18 @@ typedef struct {
} block_data_rx_state_t;
void ElectrocardiographTester::processCh4RxData(uint8_t *rx, int32_t rxlen) {
- block_data_rx_state_t *block_data_rx_state = (block_data_rx_state_t *)&rx[2];
+ block_data_rx_state_t *block_data_rx_state = (block_data_rx_state_t *)rx;
if (m_on_ch4_check_sum_packet_report) m_on_ch4_check_sum_packet_report(block_data_rx_state->rxcnt, block_data_rx_state->m_rx_sum_cnt);
return;
}
void ElectrocardiographTester::processCh3RxData(uint8_t *rx, int32_t rxlen) {
- ify_hrs_packet_t *rxcmd = (ify_hrs_packet_t *)&rx[2];
+ ify_hrs_packet_t *rxcmd = (ify_hrs_packet_t *)rx;
if (rxcmd->frame_type == kifyhrs_pt_cmd_receipt || rxcmd->frame_type == kifyhrs_pt_error_receipt) {
if (rxcmd->frame_index == m_rxReceiptContext.waittingIndex) {
lock_guard lock(m_rxReceiptContext_lock);
m_rxReceiptContext.receiptIsReady = true;
m_rxReceiptContext.receiptLen = rxlen;
- memcpy(m_rxReceiptContext.receipt, &rx[2], rxlen - 2);
+ memcpy(m_rxReceiptContext.receipt, &rx[0], rxlen);
} else {
ZLOGE(TAG, "Rx index not match, %s", zhex2str(rx, rxlen).c_str());
return;
diff --git a/src/heart_rate_sensor_protocol.h b/src/heart_rate_sensor_protocol.h
index 653c31f..8bd060a 100644
--- a/src/heart_rate_sensor_protocol.h
+++ b/src/heart_rate_sensor_protocol.h
@@ -31,7 +31,7 @@ typedef enum {
} ify_hrs_error_code_t;
-static inline const char* hrs_ecode2str(ify_hrs_error_code_t ecode){
+static inline const char* hrs_ecode2str(ify_hrs_error_code_t ecode) {
switch (ecode) {
case kifyhrs_ecode_success:
return "success";
@@ -84,22 +84,25 @@ typedef enum {
} ify_hrs_sensor_pos_t;
typedef enum {
- ify_hrs_cmd_read_device_version = 1,
- ify_hrs_cmd_read_sensor_info = 2,
- ify_hrs_cmd_read_device_state = 3,
- ify_hrs_cmd_read_time = 4,
- ify_hrs_cmd_sync_time = 5,
- ify_hrs_cmd_start_capture = 6,
- ify_hrs_cmd_stop_capture = 7,
- ify_hrs_cmd_start_realtime_report = 8,
- ify_hrs_cmd_stop_realtime_report = 9,
- ify_hrs_cmd_read_records_info = 10,
- ify_hrs_cmd_del_record = 11,
- ify_hrs_cmd_start_upload_record = 12,
- ify_hrs_cmd_enter_ota = 13,
- ify_hrs_cmd_read_sn = 14,
- ify_hrs_cmd_reset = 15,
- ify_hrs_cmd_stop_upload_record = 16,
+ ify_hrs_cmd_read_device_version = 1,
+ ify_hrs_cmd_read_sensor_info = 2,
+ ify_hrs_cmd_read_device_state = 3,
+ ify_hrs_cmd_read_time = 4,
+ ify_hrs_cmd_sync_time = 5,
+ ify_hrs_cmd_start_capture = 6,
+ ify_hrs_cmd_stop_capture = 7,
+ ify_hrs_cmd_start_realtime_report = 8,
+ ify_hrs_cmd_stop_realtime_report = 9,
+ ify_hrs_cmd_read_records_info = 10,
+ ify_hrs_cmd_del_record = 11,
+ ify_hrs_cmd_start_upload_record = 12,
+ ify_hrs_cmd_enter_ota = 13,
+ ify_hrs_cmd_read_sn = 14,
+ ify_hrs_cmd_reset = 15,
+ ify_hrs_cmd_stop_upload_record = 16,
+ ify_hrs_cmd_start_capture_time_v2 = 17,
+ ify_hrs_cmd_start_upload_record_v2 = 18,
+
ify_hrs_report_heartrate_data = 101,
ify_hrs_report_battery_level = 102,
ify_hrs_report_low_battey_level = 103,
@@ -183,7 +186,9 @@ typedef struct {
uint8_t captureRate; // N*10HZ
uint8_t capturePrecision;
uint8_t compressAlgorithm; // 压缩算法
+ uint32_t checksum;
} read_record_info_receipt_t;
+#define A sizeof(read_record_info_receipt_t)
typedef struct {
uint8_t record_id[6];
diff --git a/src/qt_serial_datachannel.cpp b/src/qt_serial_datachannel.cpp
index 5a84262..6eadfba 100644
--- a/src/qt_serial_datachannel.cpp
+++ b/src/qt_serial_datachannel.cpp
@@ -21,7 +21,7 @@ void QTDataChannel::init() {
uint8_t rx[1024] = {0};
int rx_cnt = com_receive(rx, 1024);
if (rx_cnt != 0) {
- ZLOGI(TAG, "rx %s ", zhex2str(rx, rx_cnt).c_str());
+ // ZLOGI(TAG, "rx %s ", zhe x2str(rx, rx_cnt).c_str());
if (m_rxcb) m_rxcb(rx, rx_cnt);
}
this_thread::sleep_for(chrono::microseconds(1));