适配8311驱动 3097/1 3097/head sdk650pathc0423
authorpenglei <1624952103@qq.com>
Fri, 16 Jan 2026 06:34:12 +0000 (14:34 +0800)
committerpenglei <1624952103@qq.com>
Fri, 16 Jan 2026 06:34:12 +0000 (14:34 +0800)
code/sdk/build/config/target_config/brandy/config.py
code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h
code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_hrv_alg.c
code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h
code/sdk/zhihui/drivers/ppg/pah831x/pah831x_factory_20251217/pah831x_factory_test_v3.c
code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_comm.c
code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_main.c

index 8fedf75..acf26c7 100644 (file)
@@ -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",
index 4973ad4..583b0c8 100644 (file)
@@ -1,3 +1,11 @@
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2025-12-25 09:34:31\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2026-01-15 15:46:45\r
+ * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_RR_alg_V30x.h\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
 /*==============================================================================\r
 * Edit History\r
 * \r
@@ -19,6 +27,8 @@
 #include <string.h>\r
 //#include "pah831x_data_types.h"\r
 \r
+#define ENABLE_PXI_ALG_RR_2\r
+\r
 bool  report_fifo_data_rr_2(\r
 uint32_t ppg_timestamp,     \r
 uint32_t time_period, \r
index 1d87a92..8b683ee 100644 (file)
@@ -38,7 +38,7 @@ typedef struct
 \r
 #define HRV_SAMPLING_RATE        25//20\r
 \r
-#define HRV_COLLECTION_SECONDS  180    // HRV measure seconds\r
+#define HRV_COLLECTION_SECONDS  60    // HRV measure seconds\r
 \r
 static main_hrv_state_s _state;\r
 static hrv_state_s _hrv_state;\r
index 874c19e..b3a29f6 100644 (file)
@@ -1,3 +1,11 @@
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2025-12-25 09:34:31\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2026-01-15 16:21:24\r
+ * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/pah831x/PXI_ALG/RR_HRV_STRESS_RRI/V3131/pah_stress_alg.h\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
 /*==============================================================================\r
 * Edit History\r
 * \r
@@ -24,6 +32,8 @@
 //HR\r
 #include "pxialg.h"\r
 \r
+#define ENABLE_PXI_ALG_STRESS\r
+\r
 bool  report_fifo_data_stress(\r
 uint32_t ppg_timestamp,        \r
 uint32_t time_period, \r
index 551bcc9..d578d2c 100644 (file)
@@ -12,7 +12,7 @@
 #include "pah831x_verify_cal_v3.h"\r
 \r
 \r
-void LOG_PRINT(const char* format, ...);\r
+void printf(const char* format, ...);\r
 /*============================================================================\r
 TYPE DEFINITIONS\r
 ============================================================================*/\r
@@ -72,7 +72,7 @@ static bool pah831x_comm_write(uint8_t addr, uint8_t data)
 {\r
     \r
     //pxi_nrf_i2c_831x_write(addr, &data,1);\r
-    //LOG_PRINT("I2C_W= 0x%2x ,0x%2x\n",addr,data);\r
+    //printf("I2C_W= 0x%2x ,0x%2x\n",addr,data);\r
     uint8_t i = 0 ;\r
     uint8_t data_read = 0 ;\r
     uint8_t data_out = 0 ;\r
@@ -87,21 +87,24 @@ static bool pah831x_comm_write(uint8_t addr, uint8_t data)
             {\r
                 pah831x_comm_read(addr,&data_read);\r
                 data_out = (data_read&0x0F)+ (data&0xF0);\r
-                pxi_nrf_i2c_write(0x40, addr, &data_out, 1);\r
-//                LOG_PRINT("I2C_W= 0x%2x ,0x%2x\n",addr,data_out);\r
+                // pxi_nrf_i2c_write(0x40, addr, &data_out, 1);\r
+                pah_comm_i2c_write( addr, &data_out, 1);\r
+//                printf("I2C_W= 0x%2x ,0x%2x\n",addr,data_out);\r
                 return true;\r
             }\r
         }\r
     }\r
     \r
-    pxi_nrf_i2c_write(0x40, addr, &data, 1);\r
+    // pxi_nrf_i2c_write(0x40, addr, &data, 1);\r
+    pah_comm_i2c_write( addr, &data, 1);\r
 return true;\r
 }\r
 \r
 static bool pah831x_comm_read(uint8_t addr, uint8_t *data)\r
 {\r
     //pxi_nrf_i2c_831x_read(addr, data,1);\r
-    pxi_nrf_i2c_read(0x40, addr, data, 1);\r
+    // pxi_nrf_i2c_read(0x40, addr, data, 1);\r
+    pah_comm_i2c_read(addr, data, 1);\r
     return true;\r
 }\r
 \r
@@ -112,11 +115,13 @@ static bool pah831x_comm_burstread(uint8_t addr, uint8_t *data, uint16_t num)
     uint16_t read_index = 0 ;\r
     while(read_num>250)\r
     {\r
-        pxi_nrf_i2c_read(0x40, addr, data+read_index, 250);\r
+        // pxi_nrf_i2c_read(0x40, addr, data+read_index, 250);\r
+        pah_comm_i2c_read(addr, data+read_index, 250);\r
         read_index+=250;\r
         read_num = read_num- 250;\r
     }\r
-    pxi_nrf_i2c_read(0x40, addr, data+read_index, read_num);\r
+    // pxi_nrf_i2c_read(0x40, addr, data+read_index, read_num);\r
+    pah_comm_i2c_read(addr, data+read_index, read_num);\r
     return true;\r
 }\r
 \r
@@ -125,18 +130,18 @@ void pah831x_delay_ms(uint16_t delay_ms)
     LOS_Mdelay(delay_ms);\r
 }\r
 \r
-void LOG_PRINT(const char* format, ...)\r
-{\r
-    static char dest[256];\r
-    va_list argptr;\r
-    int char_num = 0;\r
+// void printf(const char* format, ...)\r
+// {\r
+//     // static char dest[256];\r
+//     // va_list argptr;\r
+//     // int char_num = 0;\r
     \r
-    va_start(argptr, format);\r
-    char_num = vsprintf(dest, format, argptr);\r
-    va_end(argptr);\r
-\r
-    pxi_nrf_uart_transmit((uint8_t*)dest, (uint16_t)(char_num + 1));\r
-}\r
+//     // va_start(argptr, format);\r
+//     // char_num = vsprintf(dest, format, argptr);\r
+//     // va_end(argptr);\r
+//     printf(format);\r
+//     // pxi_nrf_uart_transmit((uint8_t*)dest, (uint16_t)(char_num + 1));\r
+// }\r
 \r
 static void pah831x_startup(void)\r
 {\r
@@ -159,7 +164,7 @@ void pah831x_read_id(uint16_t *id)
     *id= data ;\r
     uint8_t version = 0 ;\r
     pah831x_comm_read(0x02,&version);\r
-    LOG_PRINT("Product_ID = 0x%x ,version  0x%x\n",data,version);\r
+    printf("Product_ID = 0x%x ,version  0x%x\n",data,version);\r
 }\r
 \r
 uint32_t get_pah813x_verify_reg_version(void)\r
@@ -298,8 +303,8 @@ static void pah831x_get_channel_num(const uint8_t reg_array[][2], uint16_t lengt
             }\r
         } \r
     }        \r
-    //LOG_PRINT("channel_en_ch_real = %d ,channel_en_bit  0x%x\n",channel_en_ch_real,channel_en_bit);\r
-    //LOG_PRINT("channel_en_num = %d ,channel_en_bit_out  0x%x\n",*channel_en_num,*channel_en_bit_out);\r
+    //printf("channel_en_ch_real = %d ,channel_en_bit  0x%x\n",channel_en_ch_real,channel_en_bit);\r
+    //printf("channel_en_num = %d ,channel_en_bit_out  0x%x\n",*channel_en_num,*channel_en_bit_out);\r
 }\r
 \r
 static bool pah831x_factory_test_INT(uint16_t *int1_l, uint16_t *int1_h,uint16_t *int2_l, uint16_t *int2_h)\r
@@ -310,20 +315,20 @@ static bool pah831x_factory_test_INT(uint16_t *int1_l, uint16_t *int1_h,uint16_t
     //pah831x_update_flag();\r
     pah831x_delay_ms(200);\r
     //*int_l = Get_Voltage(PAH8SERIES_INT_AD,100);\r
-    *int1_l=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1);\r
+    // *int1_l=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1);\r
     //*int2_h=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT2);\r
     \r
     pah831x_write_reg_array(pah831x_verify_int_test_2_array,sizeof(pah831x_verify_int_test_2_array)/2);\r
     //pah831x_update_flag();\r
     pah831x_delay_ms(200);\r
     //*int_h = Get_Voltage(PAH8SERIES_INT_AD,100);\r
-    *int1_h=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1);\r
+    // *int1_h=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT1);\r
    // *int2_l=nrf_gpio_pin_read(GPIO_INPUT_PIN_INT2);\r
 ////          \r
-    LOG_PRINT("INT1-Low  %d\n",*int1_l);\r
-    LOG_PRINT("INT1-High %d\n",*int1_h);\r
-   // LOG_PRINT("INT2-Low  %d\n",*int2_l);\r
-   // LOG_PRINT("INT2-High %d\n",*int2_h); \r
+    printf("INT1-Low  %d\n",*int1_l);\r
+    printf("INT1-High %d\n",*int1_h);\r
+   // printf("INT2-Low  %d\n",*int2_l);\r
+   // printf("INT2-High %d\n",*int2_h); \r
     \r
     //if((*int1_l==0)&&(*int1_h==1)&&(*int2_l==0)&&(*int2_h==1))\r
     if((*int1_l==0)&&(*int1_h==1))\r
@@ -495,14 +500,14 @@ static bool pah831x_factory_test_Check_ADC(uint8_t test_mode,uint32_t *touch, ui
                     {\r
                         adc_value = 0 ; \r
                     }\r
-                    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]);\r
+                    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]);\r
                     if(( adc_value > g_state.test_spec_array[read_index_1][2])||(adc_value < g_state.test_spec_array[read_index_1][1]))\r
                     {\r
                         verify_result = false ;\r
                     }\r
                 }else\r
                 {                \r
-                    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]);\r
+                    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]);\r
                     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]))\r
                     {\r
                         verify_result = false ;\r
@@ -511,7 +516,7 @@ static bool pah831x_factory_test_Check_ADC(uint8_t test_mode,uint32_t *touch, ui
             }           \r
             if(g_state.test_spec_array[read_index_2][0])\r
             {\r
-                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]);\r
+                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]);\r
                 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]))\r
                 {\r
                     verify_result = false ;\r
@@ -522,7 +527,7 @@ static bool pah831x_factory_test_Check_ADC(uint8_t test_mode,uint32_t *touch, ui
     *touch  = touch_value ;\r
     if(g_state.test_spec_array[0][0])\r
     {\r
-        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]);\r
+        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]);\r
         if(( *touch > g_state.test_spec_array[0][2])||(*touch < g_state.test_spec_array[0][1]))\r
         {\r
             verify_result = false ;\r
@@ -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])\r
             {\r
                                 \r
-                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]);\r
+                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]);\r
                 if(( adc_value > g_state.test_spec_array[i][2])||(adc_value < g_state.test_spec_array[i][1]))\r
                 {\r
                     verify_result = false ;\r
@@ -691,7 +696,7 @@ static bool pah831x_factory_test_Check_ECG_Waveform(uint32_t stop_time_ms)
     pah831x_comm_write(0x7A, 0x01);\r
     pah831x_comm_burstread(0x7b, data_buff, fifo_read_num_per_sample*5);\r
     pah831x_comm_write(0x7A, 0x00);\r
-    LOG_PRINT("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample);\r
+    printf("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample);\r
     for(i = 0; i < fifo_read_num_per_sample; i++)\r
     {\r
         ECG_ADC_data[i]=cvt24bit((uint32_t)(data_buff[i * 5 + 4]<<16)+(data_buff[i * 5 + 3]<<8)+(data_buff[i * 5 + 2]));\r
@@ -699,7 +704,7 @@ static bool pah831x_factory_test_Check_ECG_Waveform(uint32_t stop_time_ms)
     \r
     for(j = 15; j < fifo_read_num_per_sample; j++)\r
     {\r
-        LOG_PRINT("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]);\r
+        printf("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]);\r
         DATA_MAX = (ECG_ADC_data[j] >= DATA_MAX) ? ECG_ADC_data[j] : DATA_MAX;\r
         DATA_MIN = (ECG_ADC_data[j] <= DATA_MIN) ? ECG_ADC_data[j] : DATA_MIN;\r
     }\r
@@ -710,7 +715,7 @@ static bool pah831x_factory_test_Check_ECG_Waveform(uint32_t stop_time_ms)
 \r
     ECG_mV_VPP = (ECG_mV_MAX- ECG_mV_MIN);\r
 \r
-    LOG_PRINT("ECG_mV_MAX =%f ,ECG_mV_MIN =%f ,ECG_mV_VPP = %f,\n",ECG_mV_MAX,ECG_mV_MIN,ECG_mV_VPP);\r
+    printf("ECG_mV_MAX =%f ,ECG_mV_MIN =%f ,ECG_mV_VPP = %f,\n",ECG_mV_MAX,ECG_mV_MIN,ECG_mV_VPP);\r
     \r
     pah831x_delay_ms(stop_time_ms);\r
     pah831x_powerdown();\r
@@ -756,7 +761,7 @@ static bool pah831x_factory_test_Check_ECG_DC(uint32_t stop_time_ms)
     pah831x_comm_write(0x7A, 0x01);\r
     pah831x_comm_burstread(0x7b, data_buff, fifo_read_num_per_sample*5);\r
     pah831x_comm_write(0x7A, 0x00);\r
-    LOG_PRINT("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample);\r
+    printf("fifo_read_num_per_sample =%d \n",fifo_read_num_per_sample);\r
     for(i = 0; i < fifo_read_num_per_sample; i++)\r
     {\r
         ECG_ADC_data[i]=cvt24bit((uint32_t)(data_buff[i * 5 + 4]<<16)+(data_buff[i * 5 + 3]<<8)+(data_buff[i * 5 + 2]));\r
@@ -764,7 +769,7 @@ static bool pah831x_factory_test_Check_ECG_DC(uint32_t stop_time_ms)
     \r
     for(j = 15; j < fifo_read_num_per_sample; j++)\r
     {\r
-        LOG_PRINT("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]);\r
+        printf("ECG_ADC_data[%d] =%d \n",j,ECG_ADC_data[j]);\r
         DATA_MAX = (ECG_ADC_data[j] >= DATA_MAX) ? ECG_ADC_data[j] : DATA_MAX;\r
         DATA_MIN = (ECG_ADC_data[j] <= DATA_MIN) ? ECG_ADC_data[j] : DATA_MIN;\r
     }\r
@@ -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);\r
     ECG_mV_MIN=ADC_to_mV(DATA_MIN);\r
 \r
-    LOG_PRINT("ECG_mV_MAX =%f ,ECG_mV_MIN =%f \n",ECG_mV_MAX,ECG_mV_MIN);\r
+    printf("ECG_mV_MAX =%f ,ECG_mV_MIN =%f \n",ECG_mV_MAX,ECG_mV_MIN);\r
 \r
     pah831x_delay_ms(stop_time_ms);\r
     pah831x_powerdown();\r
@@ -798,166 +803,166 @@ void demo_factory_mode(pah831x_factory_test_e test_mode)
     switch(test_mode)\r
     {\r
         case  Check_Brightness_PCB_Only_test_1_Side_A_2_LED:\r
-            LOG_PRINT("//----Check_Brightness_PCB_Only_test_1_Side_A_2_LED--// \n");\r
+            printf("//----Check_Brightness_PCB_Only_test_1_Side_A_2_LED--// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
            case  Check_Brightness_PCB_Only_test_2_Side_B_2_LED:\r
-            LOG_PRINT("//----Check_Brightness_PCB_Only_test_2_Side_B_2_LED--// \n");\r
+            printf("//----Check_Brightness_PCB_Only_test_2_Side_B_2_LED--// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
             case  Check_Brightness_PCB_Only_test_1_Side_A_1_LED:\r
-            LOG_PRINT("//----Check_Brightness_PCB_Only_test_1_Side_A_1_LED--// \n");\r
+            printf("//----Check_Brightness_PCB_Only_test_1_Side_A_1_LED--// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
            case  Check_Brightness_PCB_Only_test_2_Side_B_1_LED:\r
-            LOG_PRINT("//----Check_Brightness_PCB_Only_test_2_Side_B_1_LED--// \n");\r
+            printf("//----Check_Brightness_PCB_Only_test_2_Side_B_1_LED--// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
         case INT_TEST:\r
-            LOG_PRINT("//----INT_TEST----// \n");\r
+            printf("//----INT_TEST----// \n");\r
             verify_result = pah831x_factory_test_INT(&int1_low,&int1_high,&int2_low,&int2_high);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
         case Check_Brightness_with_mechanical_cover_test_1_Side_A_2_LED:\r
-            LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_2_LED----// \n");\r
+            printf("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_2_LED----// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
         case Check_Brightness_with_mechanical_cover_test_2_Side_B_2_LED:\r
-            LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_2_LED----// \n");\r
+            printf("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_2_LED----// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
         case Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED:\r
-            LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED----// \n");\r
+            printf("//----Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED----// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
         case Check_Brightness_with_mechanical_cover_test_2_Side_B_1_LED:\r
-            LOG_PRINT("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_1_LED----// \n");\r
+            printf("//----Check_Brightness_with_mechanical_cover_test_2_Side_B_1_LED----// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n");\r
+                printf("TEST Fail \n");\r
             }\r
         break;\r
         case Light_Leak_Test_2_LED:\r
-            LOG_PRINT("//----Light_Leak_Test_2_LED----// \n");\r
+            printf("//----Light_Leak_Test_2_LED----// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n\n");\r
+                printf("TEST Fail \n\n");\r
             }       \r
         break;\r
         case Light_Leak_Test_1_LED:\r
-            LOG_PRINT("//----Light_Leak_Test_1_LED----// \n");\r
+            printf("//----Light_Leak_Test_1_LED----// \n");\r
             verify_result = pah831x_factory_test_Check_ADC(test_mode ,&touch, adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n\n");\r
+                printf("TEST Fail \n\n");\r
             }       \r
         break;\r
         case Check_PPG_AFE_BUILT_IN_TEST:\r
-            LOG_PRINT("//----Check_PPG_AFE_BUILT_IN_TEST----// \n");\r
+            printf("//----Check_PPG_AFE_BUILT_IN_TEST----// \n");\r
             verify_result = pah831x_factory_test_Check_PPG_AFE_BUILT_IN(adc_data);\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n\n");\r
+                printf("TEST Fail \n\n");\r
             }       \r
         break;\r
         case Check_ECG_WAVEFORM_TEST:\r
-            LOG_PRINT("//----ECG_Waveform_Test----// \n");\r
+            printf("//----ECG_Waveform_Test----// \n");\r
             verify_result = pah831x_factory_test_Check_ECG_Waveform(1000);//set delay time ms for LL PIN Test\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n\n");\r
+                printf("TEST Fail \n\n");\r
             }       \r
         break;\r
         case Check_ECG_DC_TEST:\r
-            LOG_PRINT("//----ECG_DC_Test----// \n");\r
+            printf("//----ECG_DC_Test----// \n");\r
             verify_result = pah831x_factory_test_Check_ECG_DC(1000);//set delay time ms for LL PIN Test\r
             if(verify_result) \r
             {\r
-                LOG_PRINT("TEST Pass \n");\r
+                printf("TEST Pass \n");\r
             }else\r
             {\r
-                LOG_PRINT("TEST Fail \n\n");\r
+                printf("TEST Fail \n\n");\r
             }       \r
         break;\r
         case Factory_Test_Stop:\r
-            LOG_PRINT("//----Factory_Test_Stop----// \n");\r
+            printf("//----Factory_Test_Stop----// \n");\r
             pah831x_powerdown();\r
       \r
         break;            \r
         default:\r
-            LOG_PRINT("Not implemented yet \n");\r
+            printf("Not implemented yet \n");\r
     }\r
 \r
     pah831x_delay_ms(150);\r
index 6b2de9f..b1c3f1a 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2025-12-25 09:34:31\r
  * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-12-25 12:23:57\r
+ * @LastEditTime: 2026-01-15 15:12:15\r
  * @FilePath: /FD230/code/sdk/zhihui/drivers/ppg/pah831x/pah_sensor/pah831x_comm.c\r
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
  */\r
@@ -32,13 +32,23 @@ static uint8_t _curr_bank = 0xFF;
 \r
 pah_ret pah_comm_i2c_write( uint8_t addr, const uint8_t *data, size_t write_size)\r
 {\r
+    // DEBUG_PRINT("Write { 0x%02X, 0x%02X }\n",addr, data[0]);\r
     custom_i2c_write_reg(PAH831X_DEFAULT_I2C_SLAVE_ADDR, addr, 1, data, write_size, PAH831X_I2C_BUS);\r
     return PAH_RET_SUCCESS;\r
 }\r
 \r
 pah_ret pah_comm_i2c_read( uint8_t addr, uint8_t *data, size_t read_size)\r
 {\r
+    // DEBUG_PRINT("Read { 0x%02X }, Length =%d\n",addr,read_size);\r
     custom_i2c_read_regs(PAH831X_DEFAULT_I2C_SLAVE_ADDR, addr, 1, data, read_size,PAH831X_I2C_BUS);\r
+    // if(read_size==2)\r
+    // {\r
+    //     DEBUG_PRINT("Read { 0x%02X }, Data { 0x%02X, 0x%02x }\n",addr, data[0],data[1]);\r
+    // }\r
+    // else if(read_size==1)\r
+    // {\r
+    //     DEBUG_PRINT("Read {0x%02X  }, Data { 0x%02x }\n", addr, data[0]);\r
+    // }\r
     return PAH_RET_SUCCESS;\r
 }\r
 \r
index f116d45..779bc85 100644 (file)
@@ -21,7 +21,7 @@
 #ifdef SUPPORT_PPG_SERVICE\r
 #include "ppg_service.h"\r
 #endif\r
-\r
+#include "pah831x_factory_test_v3.h"\r
 //============================================================================\r
 // Macro\r
 //============================================================================\r
@@ -1049,8 +1049,8 @@ static int cal_sbp_in = 0;
 static int cal_dbp_in = 0;\r
 static int CalValue_in = 0;\r
 static int CalValue1_in = 0;\r
-// static uint8_t calibration_mode = ECG_PPG_BP_CALI;\r
-static uint8_t calibration_mode = ECG_PPG_BP_ESTIMATE;\r
+static uint8_t calibration_mode = ECG_PPG_BP_CALI;\r
+// static uint8_t calibration_mode = ECG_PPG_BP_ESTIMATE;\r
 \r
 // 2. 固定基准参数:静态常量,全程不变\r
 static const uint8_t user_age = 40;\r
@@ -1211,12 +1211,15 @@ void pah831x_hr_start(void)
     ppg_work_status = get_ppg_enable() ;\r
 }\r
 \r
-void pah831x_ecg_bp_start(void)\r
+void pah831x_ecg_bp_start(uint8_t cmd)\r
 {\r
-    if(time == 0)\r
+    if(cmd == 0)\r
+    {\r
+        calibration_mode = ECG_PPG_BP_CALI;\r
+    }\r
+    else if(cmd == 1)\r
     {\r
-        uapi_get_timestampe_ss(&time);\r
-        printf("1111 time:%d\n",time);\r
+        calibration_mode = ECG_PPG_BP_ESTIMATE;\r
     }\r
 \r
     if(calibration_mode==ECG_PPG_BP_CALI)\r
@@ -1358,6 +1361,12 @@ void pah831x_control(char *mode,uint8_t enable)
         if(g_pah831x_timer != NULL && work_mode < 4 && work_mode > 0)\r
             osTimerStop(g_pah831x_timer);\r
 \r
+\r
+        if(strcmp(mode, "leaklight") == 0)\r
+        {\r
+            demo_factory_mode(Factory_Test_Stop);\r
+        }\r
+\r
         pah831x_sensor_stop();\r
 \r
         work_mode = 0;\r
@@ -1385,8 +1394,8 @@ void pah831x_control(char *mode,uint8_t enable)
             time_out = 200;\r
         } else if (strcmp(mode, "hrv") == 0) {\r
             // md = HRV_MODE;\r
-            // pah831x_hrv_start();\r
-            pah831x_ecg_bp_start();\r
+            pah831x_hrv_start();\r
+            // pah831x_ecg_bp_start();\r
             work_mode = 3;\r
             time_out = 800;\r
         } else if (strcmp(mode, "spo2") == 0) {\r
@@ -1403,15 +1412,20 @@ void pah831x_control(char *mode,uint8_t enable)
         } else if (strcmp(mode, "ecgbp") == 0) {\r
             // md = HRV_MODE;\r
             // pah831x_hrv_start();\r
-            pah831x_ecg_bp_start();\r
+            pah831x_ecg_bp_start(0);\r
+            // demo_factory_mode(Check_ECG_WAVEFORM_TEST);\r
             work_mode = 4;\r
-            time_out = 400;\r
+            time_out = 200;\r
         }else if (strcmp(mode, "leaklight") == 0) {\r
             // md = FT_LEAK_LIGHT_MODE;\r
             // factory_test_mode(factory_test_leak_light_target_sample, 0, 0, 0, 0);\r
             // extern void test_library_HRD(void);\r
             // test_library_HRD();\r
-            work_mode = 6;\r
+            // work_mode = 6;\r
+            // pah831x_ecg_bp_start(1);\r
+            demo_factory_mode(Check_Brightness_with_mechanical_cover_test_1_Side_A_1_LED);\r
+            work_mode = 4;\r
+            // time_out = 200;\r
         } else if (strcmp(mode, "wear") == 0) {\r
             // pah_sensor_init(diw_4mm_g_ir_hrd);\r
             // touch_only_sensor_start();\r