优化ppg数据ble传输 3069/1
authorpenglei <1624952103@qq.com>
Tue, 13 Jan 2026 02:27:45 +0000 (10:27 +0800)
committerpenglei <1624952103@qq.com>
Tue, 13 Jan 2026 02:27:45 +0000 (10:27 +0800)
code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c
code/sdk/zhihui/drivers/ppg/ppgBleService/ppgBleService.c

index ccf1d8c..b9c4390 100644 (file)
@@ -1468,65 +1468,66 @@ void hx3695_alg_send_data(ppg_sensor_data_t *ppg_sensor_dat, WORK_MODE_T mode, u
             if(time_cnt >= 3)\r
             {\r
                 time_cnt = 0;\r
-#ifdef SUPPORT_PPG_BLE_SERVICE\r
+#ifdef SUPPORT_PPG_BLE_SERVICE \r
+#if 1\r
+\r
                 if(uapi_dev_runtime_get_hrs_ble_status())\r
                 {\r
                     uint8_t ble_data = (uint8_t)avg_hrs;\r
                     ble_ppgtest_server_send_input_report(&ble_data,1);\r
                 }\r
-#endif\r
-\r
-// #ifdef SUPPORT_PPG_BLE_SERVICE\r
-//             if(uapi_dev_runtime_get_hrs_ble_status())\r
-//             {\r
-//                 uint8_t encoded_hrm[17] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
-//                 uint8_t red_bit = 0;\r
-//                 uint8_t ir_bit = 0;\r
-//                 uint8_t green_bit = 0;\r
-//                 // HRS_CAL_SET_T cal= get_hrs_agc_status();\r
+#else\r
+            if(uapi_dev_runtime_get_hrs_ble_status())\r
+            {\r
+                uint8_t encoded_hrm[17] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
+                uint8_t red_bit = 0;\r
+                uint8_t ir_bit = 0;\r
+                uint8_t green_bit = 0;\r
+                // HRS_CAL_SET_T cal= get_hrs_agc_status();\r
         \r
-//                 for(int ii=0; ii<data_count; ii++)\r
-//                 {\r
-//                     // c\r
-//                     if(ppg_sensor_dat->led_data[0].data_val[ii]<0)\r
-//                     {\r
-//                         red_bit = 0x80;\r
-//                         ppg_sensor_dat->led_data[0].data_val[ii] =  -ppg_sensor_dat->led_data[0].data_val[ii];\r
-//                     }\r
-//                     // ppg_sensor_dat->led_data[2].data_val[ii]\r
-//                     if(ppg_sensor_dat->led_data[3].data_val[ii]<0)\r
-//                     {\r
-//                         ir_bit = 0x80;\r
-//                         ppg_sensor_dat->led_data[3].data_val[ii] =  -ppg_sensor_dat->led_data[3].data_val[ii];\r
-//                     }\r
+                for(int ii=0; ii<data_count; ii++)\r
+                {\r
+                    // c\r
+                    if(ppg_sensor_dat->led_data[0].data_val[ii]<0)\r
+                    {\r
+                        red_bit = 0x80;\r
+                        ppg_sensor_dat->led_data[0].data_val[ii] =  -ppg_sensor_dat->led_data[0].data_val[ii];\r
+                    }\r
+                    // ppg_sensor_dat->led_data[2].data_val[ii]\r
+                    if(ppg_sensor_dat->led_data[3].data_val[ii]<0)\r
+                    {\r
+                        ir_bit = 0x80;\r
+                        ppg_sensor_dat->led_data[3].data_val[ii] =  -ppg_sensor_dat->led_data[3].data_val[ii];\r
+                    }\r
         \r
-//                     encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确\r
-//                     encoded_hrm[1] = (uint8_t)(hrs_result.data_cnt - data_count + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环\r
-//                     encoded_hrm[2] = (uint8_t)(hrs_result.hr_result & 0xFF);//心率值\r
+                    encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确\r
+                    encoded_hrm[1] = (uint8_t)(hrs_result.data_cnt - data_count + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环\r
+                    encoded_hrm[2] = (uint8_t)(hrs_result.hr_result & 0xFF);//心率值\r
         \r
-//                     encoded_hrm[3] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF0000) >> 16) | red_bit;      //绿灯原始数据\r
-//                     encoded_hrm[4] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF00) >> 8);                           //绿灯原始数据\r
-//                     encoded_hrm[5] = (uint8_t)(ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF);                                                    //绿灯原始数据\r
+                    encoded_hrm[3] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF0000) >> 16) | red_bit; //绿灯原始数据\r
+                    encoded_hrm[4] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF00) >> 8);                              //绿灯原始数据\r
+                    encoded_hrm[5] = (uint8_t)(ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF);                                                       //绿灯原始数据\r
         \r
-//                     encoded_hrm[6] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF0000) >> 16) | ir_bit;               //ir原始数据\r
-//                     encoded_hrm[7] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF00) >> 8);                                   //ir原始数据\r
-//                     encoded_hrm[8] = (uint8_t)(ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF);                                                    //ir原始数据\r
+                    encoded_hrm[6] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF0000) >> 16) | ir_bit;          //ir原始数据\r
+                    encoded_hrm[7] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF00) >> 8);                                      //ir原始数据\r
+                    encoded_hrm[8] = (uint8_t)(ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF);                                                       //ir原始数据\r
         \r
-//                     encoded_hrm[9] = (uint8_t)((gsen_data_x_fifo[ii]&0xFF00)>>8);//模拟x,1234换成填入自己的x数据\r
-//                     encoded_hrm[10] = (uint8_t)(gsen_data_x_fifo[ii]&0xFF);\r
-//                     encoded_hrm[11] = (uint8_t)((gsen_data_y_fifo[ii]&0xFF00)>>8);//模拟y,-1234换成填入自己的y数据\r
-//                     encoded_hrm[12] = (uint8_t)(gsen_data_y_fifo[ii]&0xFF);\r
-//                     encoded_hrm[13] = (uint8_t)((gsen_data_z_fifo[ii]&0xFF00)>>8);//模拟z,3987换成填入自己的z数据\r
-//                     encoded_hrm[14] = (uint8_t)(gsen_data_z_fifo[ii]&0xFF);       \r
+                    encoded_hrm[9] = (uint8_t)((gsen_data_x_fifo[ii]&0xFF00)>>8);//模拟x,1234换成填入自己的x数据\r
+                    encoded_hrm[10] = (uint8_t)(gsen_data_x_fifo[ii]&0xFF);\r
+                    encoded_hrm[11] = (uint8_t)((gsen_data_y_fifo[ii]&0xFF00)>>8);//模拟y,-1234换成填入自己的y数据\r
+                    encoded_hrm[12] = (uint8_t)(gsen_data_y_fifo[ii]&0xFF);\r
+                    encoded_hrm[13] = (uint8_t)((gsen_data_z_fifo[ii]&0xFF00)>>8);//模拟z,3987换成填入自己的z数据\r
+                    encoded_hrm[14] = (uint8_t)(gsen_data_z_fifo[ii]&0xFF);       \r
                     \r
-//                     encoded_hrm[15] = ppg_sensor_dat->led_data[0].led_current;//绿灯电流\r
-//                     encoded_hrm[16] = wear_status;//红外电流\r
+                    encoded_hrm[15] = ppg_sensor_dat->led_data[0].led_current;//绿灯电流\r
+                    encoded_hrm[16] = wear_status;//红外电流\r
 \r
-//                     ble_ppgtest_server_send_input_report(encoded_hrm,17);\r
-//                 }\r
+                    ble_ppgtest_server_send_input_report(encoded_hrm,17);\r
+                }\r
 \r
-//             }\r
-// #endif  \r
+            }\r
+#endif  \r
+#endif\r
         }\r
                        break;\r
                }\r
index a4d4cf6..62ae4de 100644 (file)
@@ -112,23 +112,41 @@ static void ble_ppgtest_add_character_and_information(uint8_t server_id, uint16_
 errcode_t ble_ppgtest_server_send_input_report(const uint8_t *data, uint8_t len)\r
 {\r
     // printf("ble_hid_server_send_input_report:%d %d %d",data[0],data[1],len);\r
+#if 1\r
     gatts_ntf_ind_t param = {0};\r
     param.attr_handle = (uint16_t)g_ppgtest_notify_report_att_hdl;\r
-    // param.value_len = len;\r
-    // param.value = bt_os_new(len);\r
     param.value_len = len + 1;\r
     param.value = bt_os_new(param.value_len);\r
     if (param.value == NULL) {\r
         printf(  "[ppgtest][ERROR]send input report new fail\r\n");\r
         return ERRCODE_BT_MALLOC_FAIL;\r
     }\r
-    // if (memcpy_s(param.value, param.value_len, data, len) != EOK) \r
+\r
     if (memcpy_s(param.value + 1, param.value_len, data, len) != EOK)\r
     {\r
         printf( "[ppgtest][ERROR]send input report memcpy fail\r\n");\r
         bt_os_free(param.value);\r
         return ERRCODE_BT_FAIL;\r
     }\r
+#else\r
+    gatts_ntf_ind_t param = {0};\r
+    param.attr_handle = (uint16_t)g_ppgtest_notify_report_att_hdl;\r
+    param.value_len = len;\r
+    param.value = bt_os_new(len);\r
+    if (param.value == NULL) {\r
+        printf(  "[ppgtest][ERROR]send input report new fail\r\n");\r
+        return ERRCODE_BT_MALLOC_FAIL;\r
+    }\r
+    if (memcpy_s(param.value, param.value_len, data, len) != EOK) \r
+    {\r
+        printf( "[ppgtest][ERROR]send input report memcpy fail\r\n");\r
+        bt_os_free(param.value);\r
+        return ERRCODE_BT_FAIL;\r
+    }\r
+\r
+\r
+#endif\r
+\r
     errcode_t ret = 0;\r
 \r
     // if(g_ble_conn_id==0)\r