优化血压测量结果获取 1950/1
authorpenglei <1624952103@qq.com>
Thu, 10 Jul 2025 02:55:36 +0000 (10:55 +0800)
committerpenglei <1624952103@qq.com>
Thu, 10 Jul 2025 02:55:36 +0000 (10:55 +0800)
code/sdk/drivers/boards/brandy_evb/board_config/board_w9.h
code/sdk/drivers/peripheral/bp/bn02/bn02.c
code/sdk/drivers/peripheral/bp/service/bp_tcp_server.c
code/sdk/drivers/peripheral/bp/service/bp_tcp_server.h
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h

index 92725bf..e42d63c 100644 (file)
@@ -336,8 +336,12 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = {
      {   S_AGPIO_R3, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, bp_int_callback },
 #endif
 #ifdef SUPPORT_PPG_SERVICE
+#ifdef PPG_GH3X2X
+    {   S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE,  ppg_int_callback},
+#elif defined PPG_PAH8009
     {   S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE,  ppg_int_callback},
 #endif
+#endif
 #ifdef ROTARYENCODER_MIXO
     // {   S_AGPIO_L0, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE,  mixo_int_callback},
 #endif
index bebd4fc..3a85e45 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2025-01-16 12:35:15\r
  * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-07-04 17:18:32\r
+ * @LastEditTime: 2025-07-10 10:45:40\r
  * @FilePath: /sdk615/code/sdk/zhihui/drivers/bp/bn02/bn02.c\r
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
  */\r
@@ -21,8 +21,8 @@
 #define BN02_I2C_BUS I2C_BUS_0\r
 #define I2C_ADDR_BN02_W      0x0a\r
 #define I2C_ADDR_BN02_R      0x0b\r
-#define P_EN          S_AGPIO_L19\r
-#define P_INT         S_AGPIO_R3\r
+#define BP_EN          S_AGPIO_L19\r
+#define BP_INT         S_AGPIO_R3\r
 \r
 #define POWER_EN      S_AGPIO_R0\r
 \r
@@ -119,17 +119,17 @@ void Bn02_Power_Ctrl(int onoff)
                uapi_gpio_set_dir(POWER_EN, GPIO_DIRECTION_OUTPUT);\r
                uapi_gpio_set_val(POWER_EN, GPIO_LEVEL_HIGH);\r
                LOS_Mdelay(1);\r
-               uapi_pin_set_mode(P_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
-               uapi_gpio_set_dir(P_EN, GPIO_DIRECTION_OUTPUT);\r
-               uapi_gpio_set_val(P_EN, GPIO_LEVEL_HIGH);\r
+               uapi_pin_set_mode(BP_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
+               uapi_gpio_set_dir(BP_EN, GPIO_DIRECTION_OUTPUT);\r
+               uapi_gpio_set_val(BP_EN, GPIO_LEVEL_HIGH);\r
                // delay_ms(20);\r
                LOS_Mdelay(50);\r
        }\r
        else\r
        {\r
-               uapi_pin_set_mode(P_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
-               uapi_gpio_set_dir(P_EN, GPIO_DIRECTION_OUTPUT);\r
-               uapi_gpio_set_val(P_EN, GPIO_LEVEL_LOW);\r
+               uapi_pin_set_mode(BP_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
+               uapi_gpio_set_dir(BP_EN, GPIO_DIRECTION_OUTPUT);\r
+               uapi_gpio_set_val(BP_EN, GPIO_LEVEL_LOW);\r
                LOS_Mdelay(1);\r
                uapi_pin_set_mode(POWER_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
                uapi_gpio_set_dir(POWER_EN, GPIO_DIRECTION_OUTPUT);\r
@@ -140,12 +140,12 @@ void Bn02_Power_Ctrl(int onoff)
 \r
 void bn02_int_init(void)\r
 {\r
-       uapi_pin_set_ie(P_INT,HAL_PIO_IE_ENBALE);\r
+       uapi_pin_set_ie(BP_INT,HAL_PIO_IE_ENBALE);\r
 }\r
 \r
 void bn02_int_deinit(void)\r
 {\r
-       uapi_pin_set_ie(P_INT,HAL_PIO_IE_DISABLE);\r
+       uapi_pin_set_ie(BP_INT,HAL_PIO_IE_DISABLE);\r
 }\r
 \r
 void bn02_int_handle(void)\r
@@ -169,7 +169,8 @@ void bn02_int_handle(void)
                // printf("0x%x 0x%x 0x%x 0x%x\n",i,bn02_buf[i],bn02_buf[i+1],bn02_buf[i+2],reply_data[cnt]);\r
        }\r
 \r
-       do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_DATA_UPLOAD,(void *)reply_data,cnt);\r
+       if(uapi_cat1_get_power_stat())\r
+               do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_DATA_UPLOAD,(void *)reply_data,cnt);\r
 \r
        if(bn02_data && fp)\r
        {\r
index 38d3442..020db01 100644 (file)
 
 
 
-#define MAX_CNT 16 * 5 * 60
+// #define MAX_CNT 16 * 5 * 60
+#define MAX_CNT 16 * 5 * 50
+
+
 static unsigned long g_app_queue= 0xFFFFFFFF;
 
 static int *tcp_data = NULL;
@@ -58,11 +61,7 @@ static int g_listen_sock = -1;
 static uint8_t LK_STATUS = 0;
 static uint8_t BP_GET_STATUS = 0;
 
-static int bp_sbp = 0;
-static int bp_dbp = 0;
-static int bp_pressure = 0;
-static int bp_fatigue = 0;
-static int bp_emo = 0;
+static bp_data_t bp_data = {0};
 
 static char *imei = NULL;
 
@@ -84,8 +83,8 @@ struct bp_ipaddr_t
 
 void bp_set_adjust_data(int sbp,int dbp)
 {
-    bp_sbp = sbp;
-    bp_dbp = dbp;
+    bp_data.sbp = sbp;
+    bp_data.dbp = dbp;
 }
 
 void bp_set_measure_type(uint8_t type)
@@ -93,14 +92,12 @@ void bp_set_measure_type(uint8_t type)
     bp_measure_type = type;
 }
 
-void bp_get_data(int *sbp,int *dbp)
+void bp_get_data(bp_data_t *data)
 {
-    if(sbp == NULL || dbp == NULL)
+    if(data == NULL)
         return;
-    *sbp = bp_sbp;
-    *dbp = bp_dbp;
-    bp_sbp = 0;
-    bp_dbp = 0;
+
+    memcpy_s(data,sizeof(bp_data_t),&bp_data,sizeof(bp_data_t));
 }
 
 static void bp_save_request_code(char *reqeust_code,int len)
@@ -511,19 +508,19 @@ void tcp_recv_data_handler(const char *input, int input_len)
             if (sbp && dbp && emo && pressure && fatigue) 
             {
                 printf("sbp: %d\n", sbp->valueint);
-                bp_sbp = sbp->valueint;
+                bp_data.sbp = sbp->valueint;
 
                 printf("dbp: %d\n", dbp->valueint);
-                bp_dbp = dbp->valueint;
+                bp_data.dbp = dbp->valueint;
 
-                printf("emo: %d\n", emo->valueint);
-                bp_emo = emo->valueint;
+                printf("emo: %s\n", emo->valuestring);
+                memcpy_s(bp_data.emo,sizeof(bp_data.emo),emo->valuestring,strlen(emo->valuestring));
 
                 printf("pressure: %d\n", pressure->valueint);
-                bp_pressure = pressure->valueint;
+                bp_data.pressure = pressure->valueint;
 
                 printf("fatigue: %d\n", fatigue->valueint);
-                bp_fatigue = fatigue->valueint;
+                bp_data.fatigue = fatigue->valueint;
 
                 BP_GET_STATUS = 1;
 
@@ -1312,14 +1309,21 @@ FAILED:
         }
     }
 
-       temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\"}", 81);
+       // temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\"}", 81);
 
     
     // if(bp_measure_type == BP_ADJUST)
     // {
-    //     temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"cal_value\":[%d,%d],", 120,80);
-    //     bp_sbp = 0;
-    //     bp_dbp = 0;
+    //     
+    if(bp_measure_type == BP_ADJUST)
+    {
+        temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\",", 81);
+        temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"cal_value\":[%d,%d]\"}",120,80);
+    }
+    else
+    {
+        temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\"}", 81);
+    }
     // }
 
 
@@ -1409,9 +1413,9 @@ FAILED:
     //     goto FAILED;
     // }
 
-    for(int i = 0; i < send_len; i += 512) 
+    for(int i = 0; i < send_len; i += 1024) 
     {
-        int chunk_size = (send_len - i > 512) ? 512 : send_len - i; 
+        int chunk_size = (send_len - i > 1024) ? 1024 : send_len - i; 
         
         ret = tcp_send(g_listen_sock, send_str + i, chunk_size);
         if(ret != 0) 
@@ -1892,6 +1896,7 @@ void bp_check_active_code(char *active_code)
 
 void bp_tcp_data_clean(void)
 {
+    memset(&bp_data,0,sizeof(bp_data));
     if(tcp_data != NULL)
     {
         free(tcp_data);
index 7f39ed8..e5ce290 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2025-02-14 10:30:32
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-07-02 14:04:37
+ * @LastEditTime: 2025-07-07 16:10:14
  * @FilePath: /sdk615/code/sdk/zhihui/drivers/bp/service/bp_ble_service.h
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -26,6 +26,18 @@ typedef struct {
     uint32_t len;
 } bp_tcp_data_mail_t;
 
+
+#pragma pack(1)
+typedef struct 
+{
+    int sbp;
+    int dbp;
+    int pressure; //压力
+    int fatigue;  //疲劳度
+    char emo[20];      //情绪
+}bp_data_t;
+#pragma pack()
+
 #define BP_TCP_SERVICE_CMD_DATA_UPLOAD 0x1
 #define BP_TCP_SERVICE_CMD_SERVER_INIT 0x2
 #define BP_TCP_SERVICE_CMD_SERVER_DEINIT 0x3
@@ -38,7 +50,7 @@ int get_active_code(void);
 int tcp_sign_up(void);
 int bp_tcp_login(void);
 void bp_activate_algorithm(void);
-void bp_get_data(int *sbp,int *dbp);
+void bp_get_data(bp_data_t *data);
 void bp_set_measure_type(uint8_t type);
 
 void bp_set_adjust_data(int sbp,int dbp);
index b855bda..1d934b1 100644 (file)
@@ -390,22 +390,17 @@ errcode_t uapi_ppg_service_init(void)
 {
     PRINT("uapi_ppg_service_init !\r\n");
 
-    ppg_power_on();
-
     if (ppg_get_chip_id() != PPG_CHIP_ID)
     {
-        ppg_power_off();
         LOS_Mdelay(10);
-        ppg_power_on();
 
         if (ppg_get_chip_id() != PPG_CHIP_ID)
         {
             PRINT("ppg not exist!\r\n");
-            ppg_power_off();
             return ERRCODE_FAIL;
         }
     }
-    ppg_power_off();
+
     ppg_register_msg_callback(ppg_msg_callback);//注册驱动回调
     // ppg_send_cmd_to_driver("wear",0);
 
index 81e180f..f31e212 100644 (file)
@@ -551,6 +551,9 @@ void startup_post_init_task(void)
         CustomEventPublish(TOPIC_EVENT_NEXTDAY_UPDATE, NULL , 0);
         //do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESET_DAILY_DATA,NULL);
     }
+
+    // LOS_Msleep(1000);
+    // uapi_set4GCapability(true);
 #ifdef A5133_DEMO_SERVER
     uapi_button_register_event_cb(a5133_demo_msg_unbind_callback, BUTTON_PWR_CLICKUP_2);
     a5133_demo_msg_change_callback();
@@ -2657,32 +2660,30 @@ error:
     return (ret>0) ? ret*-1: ret;
 }
 
-
-errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex)
+errcode_t custom_i2c_transfer(uint16_t slaveAddr,uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex)
 {
+
+    uint8_t cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+    if (cnt == 0) 
+    {
+        uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
+    }
+
     errcode_t ret;
     uint32_t retry;
     i2c_data_t data;
     uint8_t *write_data = NULL;
     int16_t write_len = 0;
 
-    //custom_i2c_init();
-    write_len = regLength + writeDataSize;
+    //custom_iic_init();
+    write_len = writeDataSize;
     write_data = (uint8_t *)osal_kmalloc(write_len, OSAL_GFP_KERNEL);
     if (write_data == NULL) {
         PRINT(" send buff malloc fail!");
         goto error;
     }
 
-    if( regLength == 2)
-    {
-        write_data[0] = ((uint8_t*)&reg)[0];
-        write_data[1] = ((uint8_t*)&reg)[1];
-    }else{
-        write_data[0] = (uint8_t)reg;
-    }
-
-    ret = (uint32_t)memcpy_s(write_data + regLength, writeDataSize, writeData, writeDataSize);
+    ret = (uint32_t)memcpy_s(write_data, writeDataSize, writeData, writeDataSize);
     if (ret != EOK) {
         PRINT("send_buf content copy fail! ret=0x%x\n", ret);
         goto free_mem;
@@ -2699,12 +2700,19 @@ errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, u
         }
     }
     if (ret != ERRCODE_SUCC) {
-        PRINT("data read fail! ret=0x%x\n", ret);
+        PRINT("data read fail! ret=0x%x slaveAddr : 0x%x\n", ret,slaveAddr);
     }
 
 free_mem:
     osal_kfree(write_data);
 error:
+
+    cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+    if (cnt == 1) 
+    {
+        uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
+    }
+
     return (ret>0) ? ret*-1: ret;
 }
 
index db7c88e..288ce83 100644 (file)
@@ -324,7 +324,7 @@ void uapi_restore_factory_setting(void);
 void custom_i2c_reset(uint8_t i2cbus, uint16_t i2c_clock);
 errcode_t custom_i2c_write_reg(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, int busIndex);
 errcode_t custom_i2c_read_regs(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *readData, int readDataSize, int busIndex);
-errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex);
+errcode_t custom_i2c_transfer(uint16_t slaveAddr,uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex);
 errcode_t custom_i2c_test(void);
 
 uint32_t custom_i2c_suspend(void);