优化ppg上电,优化血压测试流程,原相心率增加心率广播 1970/1 1970/head 1973/target/1
authorpenglei <1624952103@qq.com>
Tue, 15 Jul 2025 09:56:42 +0000 (17:56 +0800)
committerpenglei <1624952103@qq.com>
Tue, 15 Jul 2025 09:56:42 +0000 (17:56 +0800)
14 files changed:
code/sdk/application/wearable/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp
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/gh3x2x/src/gh3x2x_afe_user.c
code/sdk/drivers/peripheral/ppg/hal/ppg_hal.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/ppg/pah8009/algorithm/pah_hr/V303009/test_library_HRD.c
code/sdk/drivers/peripheral/ppg/pah8009/sensor/pah800x_main.c
code/sdk/drivers/peripheral/ppg/ppgBleService/ppgBleService.c
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp
code/sdk/drivers/peripheral/ppg/service/ppg_service.h
code/sdk/drivers/peripheral/utils/custom_runtime.c
code/sdk/drivers/peripheral/utils/custom_runtime.h

index 0ed7073..efdde71 100644 (file)
@@ -884,11 +884,11 @@ namespace OHOS
         {
           if (toggleButtonOffline) {
             if (toggleButtonOffline->GetState() == false) {
-                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE);
+                uapi_dev_runtime_set_hrs_ble_status(0);
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hrs_ble_switch false");
             }
             else {
-                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE);
+                uapi_dev_runtime_set_hrs_ble_status(1);
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hrs_ble_switch true");
             }
           } else {
index 3a85e45..a6c4647 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-10 10:45:40\r
+ * @LastEditTime: 2025-07-15 17:48:37\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
@@ -170,7 +170,7 @@ void bn02_int_handle(void)
        }\r
 \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
+               do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_SEND_DATA,(void *)reply_data,cnt);\r
 \r
        if(bn02_data && fp)\r
        {\r
index 020db01..5f24a5b 100644 (file)
@@ -309,7 +309,7 @@ static void dns_found(const char* hostname, const ip_addr_t *ipaddr, void *arg)
     (void)osSemaphoreRelease(ip_sem->dns_done_sem);
 }
 
-int tcp_socket_init(void) 
+int bp_tcp_socket_init(void) 
 {
     uint8_t cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
     if (cnt == 0) {
@@ -555,7 +555,7 @@ void tcp_recv_data_handler(const char *input, int input_len)
 }
 
        
-int tcp_send(int listen_socket, const char *data, size_t size)
+static int tcp_send(int listen_socket, const char *data, size_t size)
 {
     if (data == NULL || size == 0)
         return -1;
@@ -835,7 +835,7 @@ void get_request_code(char *req_code)
  * @param cnt int数据个数
  * @return Base64编码后的长度,失败返回-1
  */
-int calculate_base64_length(int cnt) 
+static int calculate_base64_length(int cnt) 
 {
     if (cnt <= 0)
         return -1;
@@ -855,7 +855,7 @@ int calculate_base64_length(int cnt)
     return base64_length;
 }
 
-static void upload_bp_data(int *data, int cnt)
+static void upload_bp_data(void)
 {
 #if 0
     if (data == NULL || cnt == 0)
@@ -1195,9 +1195,15 @@ FAILED:
     printf("free\n");
 
 #else
-    if (data == NULL || cnt == 0)
+    if (tcp_data == NULL || tcp_data_cnt == 0)
         return;
 
+    if(LK_STATUS != 1)
+    {
+        printf("NOT LK\n");
+        return;
+    }
+
     int ret = -1;
     char *data_str = NULL;
     int data_len = 0;
@@ -1274,7 +1280,7 @@ FAILED:
        }       
 
     // 分配JSON缓冲区
-    int json_len = 512 + calculate_base64_length(cnt);
+    int json_len = 512 + calculate_base64_length(tcp_data_cnt);
     char *json_data = (char *)malloc(json_len);
     if (json_data == NULL) 
     {
@@ -1297,15 +1303,15 @@ FAILED:
 
     // printf("bp_measure_type : %d\n",bp_measure_type);
 
-    for(int i = 0; i < cnt; i++)
+    for(int i = 0; i < tcp_data_cnt; i++)
     {
-        if(i == (cnt - 1))
+        if(i == (tcp_data_cnt - 1))
         {
-            temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d],", data[i]);
+            temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d],", tcp_data[i]);
         }
         else
         {
-            temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d,", data[i]);
+            temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d,", tcp_data[i]);
         }
     }
 
@@ -1913,7 +1919,7 @@ void bp_tcp_data_clean(void)
 
 void do_bp_tcp_server_send_data(int cmd,int *data,uint32_t len)
 {
-    if((data == NULL || len == 0) && cmd == BP_TCP_SERVICE_CMD_DATA_UPLOAD)
+    if((data == NULL || len == 0) && cmd == BP_TCP_SERVICE_CMD_SEND_DATA)
         return;
 
     errcode_t ret;
@@ -2034,26 +2040,27 @@ static void tcp_data_handler(int *data,int len)
 
     if(tcp_data_cnt >= MAX_CNT)
     {
-        printf("tcp_data_cnt : %d\n",tcp_data_cnt);
-        bp_stop();
+        return;
+        // printf("tcp_data_cnt : %d\n",tcp_data_cnt);
+        // bp_stop();
         // for(int i = 0; i < tcp_data_cnt; i ++)
         // {
         //     printf("data[%d]:%d\n",i,tcp_data[i]);
         // }
         // memset((void*)tcp_data,0,MAX_CNT * sizeof(int));
-        LOS_Msleep(1000);
+        // LOS_Msleep(1000);
 
-        if(LK_STATUS == 1)
-        {
-            upload_bp_data(tcp_data,tcp_data_cnt);
-            // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BP_TEST, NULL, 0);
-        }
+        // if(LK_STATUS == 1)
+        // {
+        //     upload_bp_data(tcp_data,tcp_data_cnt);
+        //     // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BP_TEST, NULL, 0);
+        // }
             
-        else
-            printf("NOT LK\n");
+        // else
+        //     printf("NOT LK\n");
 
         // LOS_Msleep(2000);
-        bp_tcp_data_clean();
+        // bp_tcp_data_clean();
     }
     else
     {
@@ -2084,7 +2091,7 @@ static void bp_tcp_server_send_task(void const *arg)
             continue;
         }
 
-        if(mail.cmd == BP_TCP_SERVICE_CMD_DATA_UPLOAD)
+        if(mail.cmd == BP_TCP_SERVICE_CMD_SEND_DATA)
         {
             tcp_data_handler((int *)mail.data,mail.len);
         }
@@ -2096,6 +2103,11 @@ static void bp_tcp_server_send_task(void const *arg)
         {
             bp_tcp_deinit();
         }
+        else if(mail.cmd == BP_TCP_SERVICE_CMD_DATA_UPLOAD)
+        {
+            upload_bp_data();
+            bp_tcp_data_clean();
+        }
     }
 }
 
@@ -2124,7 +2136,7 @@ void bp_tcp_server_recv_task(void *pvParameters)
         }
         if (g_listen_sock < 0) 
         {
-            g_listen_sock = tcp_socket_init();
+            g_listen_sock = bp_tcp_socket_init();
             if (g_listen_sock < 0)
             {
                 PRINT("wating tcp socket init\n");
index e5ce290..42c9450 100644 (file)
@@ -41,6 +41,7 @@ typedef struct
 #define BP_TCP_SERVICE_CMD_DATA_UPLOAD 0x1
 #define BP_TCP_SERVICE_CMD_SERVER_INIT 0x2
 #define BP_TCP_SERVICE_CMD_SERVER_DEINIT 0x3
+#define BP_TCP_SERVICE_CMD_SEND_DATA 0x4
 
 void do_bp_tcp_server_send_data(int cmd,int *data,uint32_t len);
 void tcp_recv_data_handler(const char *input, int input_len) ;
index c067d1a..72781f9 100644 (file)
@@ -134,7 +134,7 @@ void hal_gh3x2x_afe_i2c_init(void)
 GU8 hal_gh3x2x_afe_i2c_write(GU8 device_id, const GU8 write_buffer[], GU16 length)\r
 {\r
     // custom_i2c_transfer(0x14,write_buffer, length, NULL, 0, GH3X2X_I2C_BUS);\r
-    custom_i2c_write_reg(0x14, 0, 0, write_buffer, length, GH3X2X_I2C_BUS);\r
+    custom_i2c_write_reg(device_id, 0, 0, write_buffer, length, GH3X2X_I2C_BUS);\r
     return 1;\r
 }\r
 \r
@@ -160,7 +160,10 @@ GU8 hal_gh3x2x_afe_i2c_read(GU8 device_id, const GU8 write_buffer[], GU16 write_
 {\r
     // custom_i2c_transfer(0x14,write_buffer, write_length, read_buffer, read_length, GH3X2X_I2C_BUS);\r
     // custom_i2c_write_reg(0x14, 0, 0, write_buffer, length, GH3X2X_I2C_BUS);\r
-    custom_i2c_read_regs(0x14, write_buffer, write_length, read_buffer,read_length, GH3X2X_I2C_BUS);\r
+\r
+    // printf("write_buffer[:0x%x%x]\n",write_buffer[0],write_buffer[1]);\r
+\r
+    custom_i2c_transfer(device_id,write_buffer, write_length, read_buffer, read_length, GH3X2X_I2C_BUS);\r
     return 1;\r
 }\r
 \r
index 65b7e20..9f4ef78 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-13 15:08:38
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-07-10 17:18:40
+ * @LastEditTime: 2025-07-15 12:13:23
  * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
  * @Description: 
  * 
@@ -34,7 +34,7 @@
 #endif
 
 #ifdef PPG_GH3X2X
-// #include "gh3x2x_afe_drv.h"
+#include "gh3x2x_afe_drv.h"
 #endif
 
 
@@ -54,11 +54,11 @@ void ppg_power_on(void)
     uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO);
     uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT);
     uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_HIGH);
-   
+    LOS_Mdelay(10);
     uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO);
     uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT);
     uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_HIGH);
-    LOS_Mdelay(50);
+    LOS_Mdelay(100);
 }
 
 void ppg_power_off(void)
@@ -67,11 +67,11 @@ void ppg_power_off(void)
     uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO);
     uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT);
     uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_LOW);
-   
+    LOS_Mdelay(10);
     uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO);
     uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT);
     uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_LOW);
-    LOS_Mdelay(50);
+    LOS_Mdelay(100);
 }
 
 uint8_t ppg_get_hrs(void)
@@ -153,7 +153,7 @@ void ppg_send_cmd_to_driver(char* mode, uint8_t enable)
 #elif defined PPG_PAH8009
     pah8009_control(mode,enable);
 #elif defined PPG_GH3X2X
-    // gh3x2x_control(mode,enable);
+    gh3x2x_control(mode,enable);
 #endif
     if(!enable)
         ppg_power_off();
index b98ba29..8494713 100644 (file)
@@ -75,7 +75,7 @@ int32_t PPG_buf_vec[8];
 // #include "sys_init.h"\r
 // #include "cwm_api.h"\r
 \r
-static uint8_t hrs_ble_falg = 0;\r
+\r
 #define PPG_DATA_LEN_MAX 17\r
 int32_t s_buf[256];\r
 uint32_t cnt_num = 0;\r
@@ -2709,17 +2709,6 @@ static void get_avg_hrs(int32_t hrs)
     }\r
 }\r
 \r
-void hx3695_set_hrs_ble_swtich(uint8_t cmd)\r
-{\r
-  hrs_ble_falg = cmd;\r
-  // PRINT("hrs_ble_falg : %d \n",hrs_ble_falg);\r
-}\r
-\r
-uint8_t hx3695_get_hrs_ble_swtich(void)\r
-{\r
-  uint8_t cmd = hrs_ble_falg;\r
-  return cmd;\r
-}\r
 \r
 void hx3695_wearstatus_update(void)\r
 {\r
@@ -3110,7 +3099,7 @@ void hx3695_hrs_ppg_Int_handle(void)
     ble_rawdata_send_handler();\r
 #endif\r
 \r
-    if(hrs_ble_falg)\r
+    if(uapi_dev_runtime_get_hrs_ble_status())\r
     {\r
         uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
         uint8_t red_bit = 0;\r
@@ -3548,7 +3537,7 @@ void hx3695_spo2_ppg_Int_handle(void)
     }\r
 #endif\r
 \r
-if(hrs_ble_falg)\r
+if(uapi_dev_runtime_get_hrs_ble_status())\r
 {\r
 \r
         uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
index 204d613..0730dc2 100644 (file)
@@ -113,5 +113,5 @@ void test_library_HRD(void)
 \r
 void log_printf(char *s, float f)\r
 {\r
-    printf("%s: %f\n", s, f);\r
+    // printf("%s: %f\n", s, f);\r
 }
\ No newline at end of file
index 2229772..c650f00 100644 (file)
@@ -16,7 +16,7 @@
 #include "cywee_service.h"\r
 #endif\r
 #include "custom_runtime.h"\r
-\r
+#include "ppgBleService.h"\r
 //============================================================================\r
 // Static Global Variable\r
 //============================================================================\r
@@ -89,6 +89,8 @@ static uint8_t time_cnt = 0;
 \r
 static int history_wear_status = -1;\r
 \r
+static int data_cnt = 0;\r
+\r
 //============================================================================\r
 // Private function\r
 //============================================================================\r
@@ -445,6 +447,8 @@ void hr_algorithm_disable(void)
     _main.hr_is_enabled = false;\r
 }\r
 \r
+\r
+\r
 void hr_alg_task(void)\r
 {\r
     if(Check_alg_enable())\r
@@ -501,7 +505,7 @@ void hr_alg_task(void)
                 time_cnt++;\r
 \r
                 ppg_msg_callback_t func =  ppg_get_send_msg_callback_func();\r
-\r
+                int ii=0;\r
                 if(func != NULL && time_cnt >= 25)\r
                 {\r
                     uint8_t data = (uint8_t)hr;\r
@@ -509,7 +513,49 @@ void hr_alg_task(void)
                     // data = cywee_wear_status;\r
                     // func(PPG_MSG_TYPE_WEARSTAT_UPDATE, &data, 1);\r
                     time_cnt = 0;\r
+\r
+                    data_cnt+=8;\r
+                \r
+                if(uapi_dev_runtime_get_hrs_ble_status())\r
+                {\r
+                    uint8_t encoded_hrm[17] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
+  \r
+                    for(ii = 0; ii<8; ii++)\r
+                    {\r
+\r
+                        encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确\r
+                        encoded_hrm[1] = (uint8_t)(data_cnt - 8 + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环\r
+                        encoded_hrm[2] = (uint8_t)hr;//心率值\r
+\r
+                        encoded_hrm[3] = 0;    //绿灯原始数据\r
+                        encoded_hrm[4] = 0;                            //绿灯原始数据\r
+                        encoded_hrm[5] = 0;                                                    //绿灯原始数据\r
+\r
+                        encoded_hrm[6] = 0;            //ir原始数据\r
+                        encoded_hrm[7] = 0;                                    //ir原始数据\r
+                        encoded_hrm[8] = 0;                                                    //ir原始数据\r
+\r
+                        encoded_hrm[9] = 0;//模拟x,1234换成填入自己的x数据\r
+                        encoded_hrm[10] = 0;\r
+                        encoded_hrm[11] = 0;//模拟y,-1234换成填入自己的y数据\r
+                        encoded_hrm[12] = 0;\r
+                        encoded_hrm[13] = 0;//模拟z,3987换成填入自己的z数据\r
+                        encoded_hrm[14] = 0;       \r
+                        \r
+                        encoded_hrm[15] = 0;//绿灯电流\r
+                        encoded_hrm[16] = 0;//红外电流\r
+\r
+                        // if(cm_custom_ble_service_on_flag())\r
+                            ble_ppgtest_server_send_input_report(encoded_hrm,17);\r
+\r
+                        // ble_op_att_send_data(ATT_CHARACTERISTIC_2a37_01_VALUE_HANDLE,encoded_hrm, \\r
+                        //     sizeof(encoded_hrm)/sizeof(encoded_hrm[0]), ATT_OP_NOTIFY);//heartrate \r
+                    }\r
+                }\r
+\r
                 }\r
+\r
+                    \r
 #endif\r
                 report_hr_data(&ppg_mems_data_alg, ret, hr, hr_grader);\r
 \r
index 53d176c..fc1668d 100644 (file)
@@ -127,8 +127,11 @@ errcode_t ble_ppgtest_server_send_input_report(const uint8_t *data, uint8_t len)
     }\r
     errcode_t ret = 0;\r
 \r
-    if(g_ble_conn_id==0)\r
-    return ERRCODE_BT_FAIL;\r
+    // if(g_ble_conn_id==0)\r
+    // {\r
+    //     printf( "g_ble_conn_id==0\r\n");\r
+    //     return ERRCODE_BT_FAIL;\r
+    // }\r
 \r
     ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &param);\r
     //printf("ble_ppgtest_server_send_input_report: 0x%x g_ble_conn_id:%d g_ppgtest_notify_report_att_hdl:%d\r\n",\r
index 1d934b1..08cb733 100644 (file)
@@ -309,20 +309,7 @@ static void ppg_service_check_task(void  *arg)
             cmd = "spo2";
             enable = 0;
         }
-        else if (mail == PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE)
-        {
-#ifdef PPG_HX3695
-            hx3695_set_hrs_ble_swtich(1);
-#endif
-            continue ;
-        }
-        else if (mail == PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE)
-        {
-#ifdef PPG_HX3695
-            hx3695_set_hrs_ble_swtich(0);
-#endif
-            continue ;
-        }else if (mail == PPG_SERVICE_CMD_TYPE_INT_HANDLER){
+        else if (mail == PPG_SERVICE_CMD_TYPE_INT_HANDLER){
 // #ifdef PPG_VC9202
 //             vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,0);
 // #elif defined PPG_VC921X
index 094718d..e434fda 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-27 09:07:00
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-06-05 14:24:03
+ * @LastEditTime: 2025-07-14 13:58:55
  * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/service/ppg_service.h
  * @Description: 
  * 
@@ -44,10 +44,8 @@ extern "C" {
 #define PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST 0x21
 #define PPG_SERVICE_CMD_TYPE_DO_LED_OFF_MODE_TEST 0x22
 #define PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST 0x23
-#define PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE 0x24
-#define PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE 0x25
-#define PPG_SERVICE_CMD_TYPE_FPC_TEST 0x27
-#define PPG_SERVICE_CMD_TYPE_FACTORY_TEST 0x28
+#define PPG_SERVICE_CMD_TYPE_FPC_TEST 0x24
+#define PPG_SERVICE_CMD_TYPE_FACTORY_TEST 0x25
 
 errcode_t uapi_ppg_service_init(void);
 void uapi_ppg_service_deinit(void);
index e56618f..5ce3a98 100644 (file)
@@ -108,6 +108,7 @@ typedef struct
     uint8_t atuoota_status;//是否处于自动ota状态
     uint8_t voice_status;//是否处于使用语音助手
     uint8_t bp_status;//血压测量状态
+    uint8_t hrs_ble_status;//心率蓝牙广播
 } runtime_status_t;
 
 
@@ -671,3 +672,14 @@ uint8_t uapi_dev_runtime_get_bp_status_flag(void)
 {
     return g_runtime.bp_status;
 }
+
+// 设置是否为心率蓝牙广播状态
+void uapi_dev_runtime_set_hrs_ble_status(uint8_t status)
+{
+    g_runtime.hrs_ble_status = status;
+}
+// 获取是否为心率蓝牙广播状态
+uint8_t uapi_dev_runtime_get_hrs_ble_status(void)
+{
+    return g_runtime.hrs_ble_status;
+}
index 0fb18c4..f9b1fc6 100644 (file)
@@ -332,6 +332,9 @@ uint32_t uapi_get_gate_AudioStreamType_status(void);
 
 bool uapi_get_gate_mixture_status(void);
 
+void uapi_dev_runtime_set_hrs_ble_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_hrs_ble_status(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }