From 4cae23bfddfca24a111368de0a516be067bbde8b Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 3 Apr 2024 19:11:35 +0800 Subject: [PATCH] update --- mainwindow.cpp | 30 ++++++++++++++++-------------- mainwindow.ui | 16 ++++++++++++++-- src/electrocardiograph_tester.cpp | 15 +++++++++------ src/heart_rate_sensor_protocol.h | 39 ++++++++++++++++++++++----------------- src/qt_serial_datachannel.cpp | 2 +- 5 files changed, 62 insertions(+), 40 deletions(-) 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));