添加心率血氧蓝牙服务
authorpenglei <1624952103@qq.com>
Sat, 27 Apr 2024 10:12:15 +0000 (18:12 +0800)
committerpenglei <1624952103@qq.com>
Sat, 27 Apr 2024 10:12:15 +0000 (18:12 +0800)
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c

index c508439..98d82f5 100644 (file)
@@ -63,6 +63,9 @@ int32_t PPG_buf_vec[8];
 #endif\r
 // #include "sys_init.h"\r
 // #include "cwm_api.h"\r
+\r
+#define HANKCREAT_APK 1\r
+#define PPG_DATA_LEN_MAX 17\r
 int32_t s_buf[256];\r
 uint32_t cnt_num = 0;\r
 uint32_t  phase3_rdy_num = 0;\r
@@ -2922,6 +2925,60 @@ void hx3695_hrs_ppg_Int_handle(void)
       func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
       func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
     }\r
+\r
+#if HANKCREAT_APK\r
+    {\r
+        uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {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(ii=0; ii<*count; ii++)\r
+        {\r
+            if(PPG_buf[ii]<0)\r
+            {\r
+                red_bit = 0x80;\r
+                PPG_buf[ii] =  -PPG_buf[ii];\r
+            }\r
+            if(ir_buf[ii]<0)\r
+            {\r
+                ir_bit = 0x80;\r
+                ir_buf[ii] =  -ir_buf[ii];\r
+            }\r
+\r
+            encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确\r
+            encoded_hrm[1] = (uint8_t)(alg_results.data_cnt - *count + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环\r
+            encoded_hrm[2] = (uint8_t)(alg_results.hr_result & 0xFF);//心率值\r
+\r
+            encoded_hrm[3] = (uint8_t)((PPG_buf[ii] & 0xFF0000) >> 16) | red_bit;      //绿灯原始数据\r
+            encoded_hrm[4] = (uint8_t)((PPG_buf[ii] & 0xFF00) >> 8);                           //绿灯原始数据\r
+            encoded_hrm[5] = (uint8_t)(PPG_buf[ii] & 0xFF);                                                    //绿灯原始数据\r
+\r
+            encoded_hrm[6] = (uint8_t)((ir_buf[ii] & 0xFF0000) >> 16) | ir_bit;                //ir原始数据\r
+            encoded_hrm[7] = (uint8_t)((ir_buf[ii] & 0xFF00) >> 8);                                    //ir原始数据\r
+            encoded_hrm[8] = (uint8_t)(ir_buf[ii] & 0xFF);                                                     //ir原始数据\r
+\r
+            encoded_hrm[9] = (uint8_t)((1234&0xFF00)>>8);//模拟x,1234换成填入自己的x数据\r
+            encoded_hrm[10] = (uint8_t)(1234&0xFF);\r
+            encoded_hrm[11] = (uint8_t)((-1234&0xFF00)>>8);//模拟y,-1234换成填入自己的y数据\r
+            encoded_hrm[12] = (uint8_t)(-1234&0xFF);\r
+            encoded_hrm[13] = (uint8_t)((3987&0xFF00)>>8);//模拟z,3987换成填入自己的z数据\r
+            encoded_hrm[14] = (uint8_t)(3987&0xFF);       \r
+            \r
+            encoded_hrm[15] = ppg_s_data.green_cur;//绿灯电流\r
+            encoded_hrm[16] = ppg_s_data.ir_cur;//红外电流\r
+\r
+            if(custom_ble_service_on_flag())\r
+              ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\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
+#endif\r
+\r
+\r
 ////////////////////////////////////////////////////////////////////////////////////\r
 }\r
 #endif\r
@@ -3306,6 +3363,63 @@ void hx3695_spo2_ppg_Int_handle(void)
     }\r
 #endif\r
 \r
+#if HANKCREAT_APK\r
+{\r
+\r
+        uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {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
+        //rawdata_vector_t rawdata;\r
+        // SPO2_CAL_SET_T cal= get_spo2_agc_status();\r
+\r
+        for(ii=0; ii<*count; ii++)\r
+        {\r
+            if(red_buf[ii]<0)\r
+            {\r
+                red_bit = 0x80;\r
+                red_buf[ii] =  -red_buf[ii];\r
+            }\r
+            if(ir_buf[ii]<0)\r
+            {\r
+                ir_bit = 0x80;\r
+                ir_buf[ii] =  -ir_buf[ii];\r
+            }\r
+\r
+            encoded_hrm[0] = 0x66;//血氧标志位,一定要对\r
+            encoded_hrm[1] = (uint8_t)(spo2_alg_results.data_cnt - *count + ii) % 256;\r
+            encoded_hrm[2] = (uint8_t)(spo2_alg_results.spo2_result& 0xFF);\r
+\r
+            encoded_hrm[3] = (uint8_t)((red_buf[ii] & 0xFF0000) >> 16) | red_bit;      //红灯原始数据\r
+            encoded_hrm[4] = (uint8_t)((red_buf[ii] & 0xFF00) >> 8);\r
+            encoded_hrm[5] = (uint8_t)(red_buf[ii] & 0xFF);\r
+\r
+            encoded_hrm[6] = (uint8_t)((ir_buf[ii] & 0xFF0000) >> 16) | ir_bit;                //ir原始数据\r
+            encoded_hrm[7] = (uint8_t)((ir_buf[ii] & 0xFF00) >> 8);\r
+            encoded_hrm[8] = (uint8_t)(ir_buf[ii] & 0xFF);\r
+\r
+            #ifdef SAR_ALG_LIB\r
+                encoded_hrm[9] = (uint8_t)((gdiff[0]&0xFF00)>>8);//sar diff\r
+                encoded_hrm[10] = (uint8_t)(gdiff[0]&0xFF);\r
+            #else\r
+                encoded_hrm[9] = (uint8_t)((1234&0xFF00)>>8);//模拟x\r
+                encoded_hrm[10] = (uint8_t)(1234&0xFF);\r
+            #endif\r
+\r
+            encoded_hrm[11] = (uint8_t)((-1234&0xFF00)>>8);//模拟y\r
+            encoded_hrm[12] = (uint8_t)(-1234&0xFF);\r
+            encoded_hrm[13] = (uint8_t)((3987&0xFF00)>>8);//模拟z\r
+            encoded_hrm[14] = (uint8_t)(3987&0xFF);        \r
+            \r
+            encoded_hrm[15] = cal.R_LED;\r
+            encoded_hrm[16] = cal.IR_LED1;\r
+            if(custom_ble_service_on_flag())\r
+              ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\r
+        }\r
+    }\r
+#endif\r
+\r
+\r
 /////////////////////////////////////////////////////////////////////////////////////////////////\r
 }\r
 #endif //SPO2_ALG_LIB\r