From c0c8075ee9db292e9e128f7d273416fc7d2da2db Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Fri, 16 Jan 2026 14:34:12 +0800 Subject: [PATCH] =?utf8?q?=E9=80=82=E9=85=8D8311=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../config/target_config/brandy/config.py | 2 + .../RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h | 10 + .../RR_HRV_STRESS_RRI/V3131/pah_hrv_alg.c | 2 +- .../RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h | 10 + .../pah831x_factory_test_v3.c | 171 +++++++++--------- .../ppg/pah831x/pah_sensor/pah831x_comm.c | 12 +- .../ppg/pah831x/pah_sensor/pah831x_main.c | 38 ++-- 7 files changed, 148 insertions(+), 97 deletions(-) diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 8fedf75d8..acf26c7aa 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -1003,6 +1003,7 @@ target = { 'NANDFLASH_F35UQA', 'BLE_INSTRUCT', 'PPG_PAH8009', + # 'PPG_PAH831X', # 'AILPAY_SUPPORT', 'SUPPORT_FACTORY_SERVICE', # 'MEMORY_CORRUPTION', @@ -1020,6 +1021,7 @@ target = { 'media_at_service', 'bt_manager_at_service', "ppg_sensor_pah8009", + # "ppg_sensor_pah831x", "ppgBleService", "mag_sensor_mmc5603", "vibrator", diff --git a/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h b/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h index 4973ad415..583b0c8a0 100644 --- a/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h +++ b/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h @@ -1,3 +1,11 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-12-25 09:34:31 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2026-01-15 15:46:45 + * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ /*============================================================================== * Edit History * @@ -19,6 +27,8 @@ #include //#include "pah831x_data_types.h" +#define ENABLE_PXI_ALG_RR_2 + bool report_fifo_data_rr_2( uint32_t ppg_timestamp, uint32_t time_period, diff --git a/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_hrv_alg.c b/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_hrv_alg.c index 1d87a9298..8b683eeab 100644 --- a/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_hrv_alg.c +++ b/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_hrv_alg.c @@ -38,7 +38,7 @@ typedef struct #define HRV_SAMPLING_RATE 25//20 -#define HRV_COLLECTION_SECONDS 180 // HRV measure seconds +#define HRV_COLLECTION_SECONDS 60 // HRV measure seconds static main_hrv_state_s _state; static hrv_state_s _hrv_state; diff --git a/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h b/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h index 874c19e83..b3a29f679 100644 --- a/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h +++ b/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h @@ -1,3 +1,11 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-12-25 09:34:31 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2026-01-15 16:21:24 + * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ /*============================================================================== * Edit History * @@ -24,6 +32,8 @@ //HR #include "pxialg.h" +#define ENABLE_PXI_ALG_STRESS + bool report_fifo_data_stress( uint32_t ppg_timestamp, uint32_t time_period, diff --git a/code/sdk/zhihui/drivers/ppg/pah831x/pah831x_factory_20251217/pah831x_factory_test_v3.c b/code/sdk/zhihui/drivers/ppg/pah831x/pah831x_factory_20251217/pah831x_factory_test_v3.c index 551bcc974..d578d2c1f 100644 --- a/code/sdk/zhihui/drivers/ppg/pah831x/pah831x_factory_20251217/pah831x_factory_test_v3.c +++ b/code/sdk/zhihui/drivers/ppg/pah831x/pah831x_factory_20251217/pah831x_factory_test_v3.c @@ -12,7 +12,7 @@ #include "pah831x_verify_cal_v3.h" -void LOG_PRINT(const char* format, ...); +void printf(const char* format, ...); /*============================================================================ TYPE DEFINITIONS ============================================================================*/ @@ -72,7 +72,7 @@ static bool pah831x_comm_write(uint8_t addr, uint8_t data) { //pxi_nrf_i2c_831x_write(addr, &data,1); - //LOG_PRINT("I2C_W= 0x%2x ,0x%2x\n",addr,data); + //printf("I2C_W= 0x%2x ,0x%2x\n",addr,data); uint8_t i = 0 ; uint8_t data_read = 0 ; uint8_t data_out = 0 ; @@ -87,21 +87,24 @@ static bool pah831x_comm_write(uint8_t addr, uint8_t data) { pah831x_comm_read(addr,&data_read); data_out = (data_read&0x0F)+ (data&0xF0); - pxi_nrf_i2c_write(0x40, addr, &data_out, 1); -// LOG_PRINT("I2C_W= 0x%2x ,0x%2x\n",addr,data_out); + // pxi_nrf_i2c_write(0x40, addr, &data_out, 1); + pah_comm_i2c_write( addr, &data_out, 1); +// printf("I2C_W= 0x%2x ,0x%2x\n",addr,data_out); return true; } } } - pxi_nrf_i2c_write(0x40, addr, &data, 1); + // pxi_nrf_i2c_write(0x40, addr, &data, 1); + pah_comm_i2c_write( addr, &data, 1); return true; } static bool pah831x_comm_read(uint8_t addr, uint8_t *data) { //pxi_nrf_i2c_831x_read(addr, data,1); - pxi_nrf_i2c_read(0x40, addr, data, 1); + // pxi_nrf_i2c_read(0x40, addr, data, 1); + pah_comm_i2c_read(addr, data, 1); return true; } @@ -112,11 +115,13 @@ static bool pah831x_comm_burstread(uint8_t addr, uint8_t *data, uint16_t num) uint16_t read_index = 0 ; while(read_num>250) { - pxi_nrf_i2c_read(0x40, addr, data+read_index, 250); + // pxi_nrf_i2c_read(0x40, addr, data+read_index, 250); + pah_comm_i2c_read(addr, data+read_index, 250); read_index+=250; read_num = read_num- 250; } - pxi_nrf_i2c_read(0x40, addr, data+read_index, read_num); + // pxi_nrf_i2c_read(0x40, addr, data+read_index, read_num); + pah_comm_i2c_read(addr, data+read_index, read_num); return true; } @@ -125,18 +130,18 @@ void pah831x_delay_ms(uint16_t delay_ms) LOS_Mdelay(delay_ms); } -void LOG_PRINT(const char* format, ...) -{ - static char dest[256]; - va_list argptr; - int char_num = 0; +// void printf(const char* format, ...) +// { +// // static char dest[256]; +// // va_list argptr; +// // int char_num = 0; - va_start(argptr, format); - char_num = vsprintf(dest, format, argptr); - va_end(argptr); - - pxi_nrf_uart_transmit((uint8_t*)dest, (uint16_t)(char_num + 1)); -} +// // va_start(argptr, format); +// // char_num = vsprintf(dest, format, argptr); +// // va_end(argptr); +// printf(format); +// // pxi_nrf_uart_transmit((uint8_t*)dest, (uint16_t)(char_num + 1)); +// } static void pah831x_startup(void) { @@ -159,7 +164,7 @@ void pah831x_read_id(uint16_t *id) *id= data ; uint8_t version = 0 ; pah831x_comm_read(0x02,&version); - LOG_PRINT("Product_ID = 0x%x ,version 0x%x\n",data,version); + printf("Product_ID = 0x%x ,version 0x%x\n",data,version); } uint32_t get_pah813x_verify_reg_version(void) @@ -298,8 +303,8 @@ static void pah831x_get_channel_num(const uint8_t reg_array[][2], uint16_t lengt } } } - //LOG_PRINT("channel_en_ch_real = %d ,channel_en_bit 0x%x\n",channel_en_ch_real,channel_en_bit); - //LOG_PRINT("channel_en_num = %d ,channel_en_bit_out 0x%x\n",*channel_en_num,*channel_en_bit_out); + //printf("channel_en_ch_real = %d ,channel_en_bit 0x%x\n",channel_en_ch_real,channel_en_bit); + //printf("channel_en_num = %d ,channel_en_bit_out 0x%x\n",*channel_en_num,*channel_en_bit_out); } static bool pah831x_factory_test_INT(uint16_t *int1_l, uint16_t *int1_h,uint16_t *int2_l, uint16_t *int2_h) @@ -310,20 +315,20 @@ static bool pah831x_factory_test_INT(uint16_t *int1_l, uint16_t *int1_h,uint16_t //pah831x_update_flag(); pah831x_delay_ms(200); //*int_l = Get_Voltage(PAH8SERIES_INT_AD,100); - *int1_l=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1); + // *int1_l=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1); //*int2_h=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT2); pah831x_write_reg_array(pah831x_verify_int_test_2_array,sizeof(pah831x_verify_int_test_2_array)/2); //pah831x_update_flag(); pah831x_delay_ms(200); //*int_h = Get_Voltage(PAH8SERIES_INT_AD,100); - *int1_h=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1); + // *int1_h=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1); // *int2_l=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT2); //// - LOG_PRINT("INT1-Low %d\n",*int1_l); - LOG_PRINT("INT1-High %d\n",*int1_h); - // LOG_PRINT("INT2-Low %d\n",*int2_l); - // LOG_PRINT("INT2-High %d\n",*int2_h); + printf("INT1-Low %d\n",*int1_l); + printf("INT1-High %d\n",*int1_h); + // printf("INT2-Low %d\n",*int2_l); + // printf("INT2-High %d\n",*int2_h); //if((*int1_l==0)&&(*int1_h==1)&&(*int2_l==0)&&(*int2_h==1)) if((*int1_l==0)&&(*int1_h==1)) @@ -495,14 +500,14 @@ static bool pah831x_factory_test_Check_ADC(uint8_t test_mode,uint32_t *touch, ui { adc_value = 0 ; } - LOG_PRINT("CH_%c_ppg%d ,(min ,value,max)= ( %d ,%d , %d) \n",((read_index_1-1)/4)+65,ppg_1_2,g_state.test_spec_array[read_index_1][1],adc_value,g_state.test_spec_array[read_index_1][2]); + printf("CH_%c_ppg%d ,(min ,value,max)= ( %d ,%d , %d) \n",((read_index_1-1)/4)+65,ppg_1_2,g_state.test_spec_array[read_index_1][1],adc_value,g_state.test_spec_array[read_index_1][2]); if(( adc_value > g_state.test_spec_array[read_index_1][2])||(adc_value < g_state.test_spec_array[read_index_1][1])) { verify_result = false ; } }else { - LOG_PRINT("CH_%c_ppg%d_on ,(min ,value,max)= ( %d ,%d , %d) \n",((read_index_1-1)/4)+65,ppg_1_2,g_state.test_spec_array[read_index_1][1],adc_value_on,g_state.test_spec_array[read_index_1][2]); + printf("CH_%c_ppg%d_on ,(min ,value,max)= ( %d ,%d , %d) \n",((read_index_1-1)/4)+65,ppg_1_2,g_state.test_spec_array[read_index_1][1],adc_value_on,g_state.test_spec_array[read_index_1][2]); if(( adc_value_on > g_state.test_spec_array[read_index_1][2])||(adc_value_on < g_state.test_spec_array[read_index_1][1])) { verify_result = false ; @@ -511,7 +516,7 @@ static bool pah831x_factory_test_Check_ADC(uint8_t test_mode,uint32_t *touch, ui } if(g_state.test_spec_array[read_index_2][0]) { - LOG_PRINT("CH_%c_ppg%d_off ,(min ,value,max)= ( %d ,%d , %d) \n",((read_index_1-1)/4)+65,ppg_1_2,g_state.test_spec_array[read_index_2][1],adc_value_off,g_state.test_spec_array[read_index_2][2]); + printf("CH_%c_ppg%d_off ,(min ,value,max)= ( %d ,%d , %d) \n",((read_index_1-1)/4)+65,ppg_1_2,g_state.test_spec_array[read_index_2][1],adc_value_off,g_state.test_spec_array[read_index_2][2]); if(( adc_value_off > g_state.test_spec_array[read_index_2][2])||(adc_value_off < g_state.test_spec_array[read_index_2][1])) { verify_result = false ; @@ -522,7 +527,7 @@ static bool pah831x_factory_test_Check_ADC(uint8_t test_mode,uint32_t *touch, ui *touch = touch_value ; if(g_state.test_spec_array[0][0]) { - LOG_PRINT("CH T ,(min ,value,max)= ( %d ,%d , %d) \n",g_state.test_spec_array[0][1],*touch,g_state.test_spec_array[0][2]); + printf("CH T ,(min ,value,max)= ( %d ,%d , %d) \n",g_state.test_spec_array[0][1],*touch,g_state.test_spec_array[0][2]); if(( *touch > g_state.test_spec_array[0][2])||(*touch < g_state.test_spec_array[0][1])) { verify_result = false ; @@ -619,7 +624,7 @@ static bool pah831x_factory_test_Check_PPG_AFE_BUILT_IN(uint16_t *adc_data) if(g_state.test_spec_array[i][0]) { - LOG_PRINT("CH_%c_ppg_on ,(min ,value,max)= ( %d ,%d , %d) \n",i+65,g_state.test_spec_array[i][1],adc_value,g_state.test_spec_array[i][2]); + printf("CH_%c_ppg_on ,(min ,value,max)= ( %d ,%d , %d) \n",i+65,g_state.test_spec_array[i][1],adc_value,g_state.test_spec_array[i][2]); if(( adc_value > g_state.test_spec_array[i][2])||(adc_value < g_state.test_spec_array[i][1])) { verify_result = false ; @@ -691,7 +696,7 @@ static bool pah831x_factory_test_Check_ECG_Waveform(uint32_t stop_time_ms) pah831x_comm_write(0x7A, 0x01); pah831x_comm_burstread(0x7b, data_buff, fifo_read_num_per_sample*5); pah831x_comm_write(0x7A, 0x00); - LOG_PRINT("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample); + printf("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample); for(i = 0; i < fifo_read_num_per_sample; i++) { ECG_ADC_data[i]=cvt24bit((uint32_t)(data_buff[i * 5 + 4]<<16)+(data_buff[i * 5 + 3]<<8)+(data_buff[i * 5 + 2])); @@ -699,7 +704,7 @@ static bool pah831x_factory_test_Check_ECG_Waveform(uint32_t stop_time_ms) for(j = 15; j < fifo_read_num_per_sample; j++) { - LOG_PRINT("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]); + printf("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]); DATA_MAX = (ECG_ADC_data[j] >= DATA_MAX) ? ECG_ADC_data[j] : DATA_MAX; DATA_MIN = (ECG_ADC_data[j] <= DATA_MIN) ? ECG_ADC_data[j] : DATA_MIN; } @@ -710,7 +715,7 @@ static bool pah831x_factory_test_Check_ECG_Waveform(uint32_t stop_time_ms) ECG_mV_VPP = (ECG_mV_MAX- ECG_mV_MIN); - LOG_PRINT("ECG_mV_MAX =%f ,ECG_mV_MIN =%f ,ECG_mV_VPP = %f,\n",ECG_mV_MAX,ECG_mV_MIN,ECG_mV_VPP); + printf("ECG_mV_MAX =%f ,ECG_mV_MIN =%f ,ECG_mV_VPP = %f,\n",ECG_mV_MAX,ECG_mV_MIN,ECG_mV_VPP); pah831x_delay_ms(stop_time_ms); pah831x_powerdown(); @@ -756,7 +761,7 @@ static bool pah831x_factory_test_Check_ECG_DC(uint32_t stop_time_ms) pah831x_comm_write(0x7A, 0x01); pah831x_comm_burstread(0x7b, data_buff, fifo_read_num_per_sample*5); pah831x_comm_write(0x7A, 0x00); - LOG_PRINT("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample); + printf("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample); for(i = 0; i < fifo_read_num_per_sample; i++) { ECG_ADC_data[i]=cvt24bit((uint32_t)(data_buff[i * 5 + 4]<<16)+(data_buff[i * 5 + 3]<<8)+(data_buff[i * 5 + 2])); @@ -764,7 +769,7 @@ static bool pah831x_factory_test_Check_ECG_DC(uint32_t stop_time_ms) for(j = 15; j < fifo_read_num_per_sample; j++) { - LOG_PRINT("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]); + printf("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]); DATA_MAX = (ECG_ADC_data[j] >= DATA_MAX) ? ECG_ADC_data[j] : DATA_MAX; DATA_MIN = (ECG_ADC_data[j] <= DATA_MIN) ? ECG_ADC_data[j] : DATA_MIN; } @@ -773,7 +778,7 @@ static bool pah831x_factory_test_Check_ECG_DC(uint32_t stop_time_ms) ECG_mV_MAX=ADC_to_mV(DATA_MAX); ECG_mV_MIN=ADC_to_mV(DATA_MIN); - LOG_PRINT("ECG_mV_MAX =%f ,ECG_mV_MIN =%f \n",ECG_mV_MAX,ECG_mV_MIN); + printf("ECG_mV_MAX =%f ,ECG_mV_MIN =%f \n",ECG_mV_MAX,ECG_mV_MIN); pah831x_delay_ms(stop_time_ms); pah831x_powerdown(); @@ -798,166 +803,166 @@ void demo_factory_mode(pah831x_factory_test_e test_mode) switch(test_mode) { case Check_Brightness_PCB_Only_test_1_Side_A_2_LED: - LOG_PRINT("//----Check_Brightness_PCB_Only_test_1_Side_A_2_LED--// \n"); + printf("//----Check_Brightness_PCB_Only_test_1_Side_A_2_LED--// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Check_Brightness_PCB_Only_test_2_Side_B_2_LED: - LOG_PRINT("//----Check_Brightness_PCB_Only_test_2_Side_B_2_LED--// \n"); + printf("//----Check_Brightness_PCB_Only_test_2_Side_B_2_LED--// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Check_Brightness_PCB_Only_test_1_Side_A_1_LED: - LOG_PRINT("//----Check_Brightness_PCB_Only_test_1_Side_A_1_LED--// \n"); + printf("//----Check_Brightness_PCB_Only_test_1_Side_A_1_LED--// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Check_Brightness_PCB_Only_test_2_Side_B_1_LED: - LOG_PRINT("//----Check_Brightness_PCB_Only_test_2_Side_B_1_LED--// \n"); + printf("//----Check_Brightness_PCB_Only_test_2_Side_B_1_LED--// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case INT_TEST: - LOG_PRINT("//----INT_TEST----// \n"); + printf("//----INT_TEST----// \n"); verify_result = pah831x_factory_test_INT(&int1_low,&int1_high,&int2_low,&int2_high); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Check_Brightness_with_mechanical_cover_test_1_Side_A_2_LED: - LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_2_LED----// \n"); + printf("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_2_LED----// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Check_Brightness_with_mechanical_cover_test_2_Side_B_2_LED: - LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_2_LED----// \n"); + printf("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_2_LED----// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED: - LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED----// \n"); + printf("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED----// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Check_Brightness_with_mechanical_cover_test_2_Side_B_1_LED: - LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_1_LED----// \n"); + printf("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_1_LED----// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n"); + printf("TEST Fail \n"); } break; case Light_Leak_Test_2_LED: - LOG_PRINT("//----Light_Leak_Test_2_LED----// \n"); + printf("//----Light_Leak_Test_2_LED----// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n\n"); + printf("TEST Fail \n\n"); } break; case Light_Leak_Test_1_LED: - LOG_PRINT("//----Light_Leak_Test_1_LED----// \n"); + printf("//----Light_Leak_Test_1_LED----// \n"); verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n\n"); + printf("TEST Fail \n\n"); } break; case Check_PPG_AFE_BUILT_IN_TEST: - LOG_PRINT("//----Check_PPG_AFE_BUILT_IN_TEST----// \n"); + printf("//----Check_PPG_AFE_BUILT_IN_TEST----// \n"); verify_result = pah831x_factory_test_Check_PPG_AFE_BUILT_IN(adc_data); if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n\n"); + printf("TEST Fail \n\n"); } break; case Check_ECG_WAVEFORM_TEST: - LOG_PRINT("//----ECG_Waveform_Test----// \n"); + printf("//----ECG_Waveform_Test----// \n"); verify_result = pah831x_factory_test_Check_ECG_Waveform(1000);//set delay time ms for LL PIN Test if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n\n"); + printf("TEST Fail \n\n"); } break; case Check_ECG_DC_TEST: - LOG_PRINT("//----ECG_DC_Test----// \n"); + printf("//----ECG_DC_Test----// \n"); verify_result = pah831x_factory_test_Check_ECG_DC(1000);//set delay time ms for LL PIN Test if(verify_result) { - LOG_PRINT("TEST Pass \n"); + printf("TEST Pass \n"); }else { - LOG_PRINT("TEST Fail \n\n"); + printf("TEST Fail \n\n"); } break; case Factory_Test_Stop: - LOG_PRINT("//----Factory_Test_Stop----// \n"); + printf("//----Factory_Test_Stop----// \n"); pah831x_powerdown(); break; default: - LOG_PRINT("Not implemented yet \n"); + printf("Not implemented yet \n"); } pah831x_delay_ms(150); diff --git a/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_comm.c b/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_comm.c index 6b2de9f54..b1c3f1a53 100644 --- a/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_comm.c +++ b/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_comm.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2025-12-25 09:34:31 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-12-25 12:23:57 + * @LastEditTime: 2026-01-15 15:12:15 * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_comm.c * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -32,13 +32,23 @@ static uint8_t _curr_bank = 0xFF; pah_ret pah_comm_i2c_write( uint8_t addr, const uint8_t *data, size_t write_size) { + // DEBUG_PRINT("Write { 0x%02X, 0x%02X }\n",addr, data[0]); custom_i2c_write_reg(PAH831X_DEFAULT_I2C_SLAVE_ADDR, addr, 1, data, write_size, PAH831X_I2C_BUS); return PAH_RET_SUCCESS; } pah_ret pah_comm_i2c_read( uint8_t addr, uint8_t *data, size_t read_size) { + // DEBUG_PRINT("Read { 0x%02X }, Length =%d\n",addr,read_size); custom_i2c_read_regs(PAH831X_DEFAULT_I2C_SLAVE_ADDR, addr, 1, data, read_size,PAH831X_I2C_BUS); + // if(read_size==2) + // { + // DEBUG_PRINT("Read { 0x%02X }, Data { 0x%02X, 0x%02x }\n",addr, data[0],data[1]); + // } + // else if(read_size==1) + // { + // DEBUG_PRINT("Read {0x%02X }, Data { 0x%02x }\n", addr, data[0]); + // } return PAH_RET_SUCCESS; } diff --git a/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_main.c b/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_main.c index f116d4554..779bc85a5 100644 --- a/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_main.c +++ b/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_main.c @@ -21,7 +21,7 @@ #ifdef SUPPORT_PPG_SERVICE #include "ppg_service.h" #endif - +#include "pah831x_factory_test_v3.h" //============================================================================ // Macro //============================================================================ @@ -1049,8 +1049,8 @@ static int cal_sbp_in = 0; static int cal_dbp_in = 0; static int CalValue_in = 0; static int CalValue1_in = 0; -// static uint8_t calibration_mode = ECG_PPG_BP_CALI; -static uint8_t calibration_mode = ECG_PPG_BP_ESTIMATE; +static uint8_t calibration_mode = ECG_PPG_BP_CALI; +// static uint8_t calibration_mode = ECG_PPG_BP_ESTIMATE; // 2. 固定基准参数:静态常量,全程不变 static const uint8_t user_age = 40; @@ -1211,12 +1211,15 @@ void pah831x_hr_start(void) ppg_work_status = get_ppg_enable() ; } -void pah831x_ecg_bp_start(void) +void pah831x_ecg_bp_start(uint8_t cmd) { - if(time == 0) + if(cmd == 0) + { + calibration_mode = ECG_PPG_BP_CALI; + } + else if(cmd == 1) { - uapi_get_timestampe_ss(&time); - printf("1111 time:%d\n",time); + calibration_mode = ECG_PPG_BP_ESTIMATE; } if(calibration_mode==ECG_PPG_BP_CALI) @@ -1358,6 +1361,12 @@ void pah831x_control(char *mode,uint8_t enable) if(g_pah831x_timer != NULL && work_mode < 4 && work_mode > 0) osTimerStop(g_pah831x_timer); + + if(strcmp(mode, "leaklight") == 0) + { + demo_factory_mode(Factory_Test_Stop); + } + pah831x_sensor_stop(); work_mode = 0; @@ -1385,8 +1394,8 @@ void pah831x_control(char *mode,uint8_t enable) time_out = 200; } else if (strcmp(mode, "hrv") == 0) { // md = HRV_MODE; - // pah831x_hrv_start(); - pah831x_ecg_bp_start(); + pah831x_hrv_start(); + // pah831x_ecg_bp_start(); work_mode = 3; time_out = 800; } else if (strcmp(mode, "spo2") == 0) { @@ -1403,15 +1412,20 @@ void pah831x_control(char *mode,uint8_t enable) } else if (strcmp(mode, "ecgbp") == 0) { // md = HRV_MODE; // pah831x_hrv_start(); - pah831x_ecg_bp_start(); + pah831x_ecg_bp_start(0); + // demo_factory_mode(Check_ECG_WAVEFORM_TEST); work_mode = 4; - time_out = 400; + time_out = 200; }else if (strcmp(mode, "leaklight") == 0) { // md = FT_LEAK_LIGHT_MODE; // factory_test_mode(factory_test_leak_light_target_sample, 0, 0, 0, 0); // extern void test_library_HRD(void); // test_library_HRD(); - work_mode = 6; + // work_mode = 6; + // pah831x_ecg_bp_start(1); + demo_factory_mode(Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED); + work_mode = 4; + // time_out = 200; } else if (strcmp(mode, "wear") == 0) { // pah_sensor_init(diw_4mm_g_ir_hrd); // touch_only_sensor_start(); -- 2.17.1