From cbffe5ec773b47b92ee416c9b78c6a0872da5567 Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Thu, 8 Jan 2026 18:26:49 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96272=E5=BF=83=E7=8E=87=E7=AA=81?= =?utf8?q?=E7=84=B6=E6=8E=890=E7=9A=84=E6=83=85=E5=86=B5(=E8=A1=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c | 41 +++++++++++++++------ 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c index 3ae5fc629..4ba09374d 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c +++ b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c @@ -368,7 +368,7 @@ uint16_t hx3695_read_fifo_data(ppg_sensor_data_t *ppg_sensor_dat) uint16_t fifo_read_length = 0; uint16_t fifo_read_bytes = 0; uint16_t fifo_out_count = 0; - + uint8_t retry_cnt = 0; data_len_h = hx3695_read_reg(0x21); data_len_l = hx3695_read_reg(0x20); fifo_data_length = (((data_len_h&0x01)<<8)|data_len_l); @@ -388,13 +388,23 @@ uint16_t hx3695_read_fifo_data(ppg_sensor_data_t *ppg_sensor_dat) // printf("threshold : %d\n",threshold); - if(fifo_data_length > threshold) - { - data_len_h = hx3695_read_reg(0x21); - data_len_l = hx3695_read_reg(0x20); - fifo_data_length = (((data_len_h&0x01)<<8)|data_len_l); - // printf("222 fifo data length again %d %d %d\n", data_len_h, data_len_l, fifo_data_length); - } + if(fifo_data_length > threshold) + { + for(int i = 0 ; i < 3; i++) + { + data_len_h = hx3695_read_reg(0x21); + data_len_l = hx3695_read_reg(0x20); + fifo_data_length = (((data_len_h&0x01)<<8)|data_len_l); + // printf("222 fifo data length again %d %d %d\n", data_len_h, data_len_l, fifo_data_length); + if(fifo_data_length > threshold) + { + retry_cnt ++; + } + else + break; + } + } + if (fifo_data_length>FIFO_DATA_LENGTH) { @@ -417,6 +427,15 @@ uint16_t hx3695_read_fifo_data(ppg_sensor_data_t *ppg_sensor_dat) hx3695_get_led_para(ppg_sensor_dat); + if(retry_cnt >= 3) + { + if(work_mode_flag == WEAR_MODE) + fifo_out_count = 25; + else + fifo_out_count = 8; + } + + return fifo_out_count; } @@ -501,11 +520,11 @@ void hx3695_software_reset(void) #endif } -bool hx3695_check_wear(ppg_sensor_data_t *ppg_sensor_dat) +bool hx3695_check_wear(ppg_sensor_data_t *ppg_sensor_dat,uint8_t count) { uint8_t ii = 0; - for(ii=0;iiled_data[3].data_count;ii++) + for(ii=0;iiled_data[3].data_val[ii] > CHECK_WEAR_THRE) { @@ -1570,7 +1589,7 @@ void hx3695_ppg_Int_handle(ppg_sensor_data_t *ppg_sensor_dat) // printf("count:%d\n",count); if(count > 0) { - hx3695_check_wear(ppg_sensor_dat); + hx3695_check_wear(ppg_sensor_dat,count); if(wear_status == MSG_WEAR) { hx3695_alg_send_data(ppg_sensor_dat,work_mode_flag,count); -- 2.17.1