From: penglei <1624952103@qq.com> Date: Sat, 27 Apr 2024 10:12:15 +0000 (+0800) Subject: 添加心率血氧蓝牙服务 X-Git-Tag: release_V1.2.70_20241020_135402~1025^2~57^2~4 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=2eb2b37ac49a94449b70d9c66f8963b160dae277;p=mirrors%2FFD230.git 添加心率血氧蓝牙服务 --- diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c index c50843984..98d82f50a 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c @@ -63,6 +63,9 @@ int32_t PPG_buf_vec[8]; #endif // #include "sys_init.h" // #include "cwm_api.h" + +#define HANKCREAT_APK 1 +#define PPG_DATA_LEN_MAX 17 int32_t s_buf[256]; uint32_t cnt_num = 0; uint32_t phase3_rdy_num = 0; @@ -2922,6 +2925,60 @@ void hx3695_hrs_ppg_Int_handle(void) func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t)); } + +#if HANKCREAT_APK + { + uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配 + uint8_t red_bit = 0; + uint8_t ir_bit = 0; + uint8_t green_bit = 0; + HRS_CAL_SET_T cal= get_hrs_agc_status(); + + for(ii=0; ii<*count; ii++) + { + if(PPG_buf[ii]<0) + { + red_bit = 0x80; + PPG_buf[ii] = -PPG_buf[ii]; + } + if(ir_buf[ii]<0) + { + ir_bit = 0x80; + ir_buf[ii] = -ir_buf[ii]; + } + + encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确 + encoded_hrm[1] = (uint8_t)(alg_results.data_cnt - *count + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环 + encoded_hrm[2] = (uint8_t)(alg_results.hr_result & 0xFF);//心率值 + + encoded_hrm[3] = (uint8_t)((PPG_buf[ii] & 0xFF0000) >> 16) | red_bit; //绿灯原始数据 + encoded_hrm[4] = (uint8_t)((PPG_buf[ii] & 0xFF00) >> 8); //绿灯原始数据 + encoded_hrm[5] = (uint8_t)(PPG_buf[ii] & 0xFF); //绿灯原始数据 + + encoded_hrm[6] = (uint8_t)((ir_buf[ii] & 0xFF0000) >> 16) | ir_bit; //ir原始数据 + encoded_hrm[7] = (uint8_t)((ir_buf[ii] & 0xFF00) >> 8); //ir原始数据 + encoded_hrm[8] = (uint8_t)(ir_buf[ii] & 0xFF); //ir原始数据 + + encoded_hrm[9] = (uint8_t)((1234&0xFF00)>>8);//模拟x,1234换成填入自己的x数据 + encoded_hrm[10] = (uint8_t)(1234&0xFF); + encoded_hrm[11] = (uint8_t)((-1234&0xFF00)>>8);//模拟y,-1234换成填入自己的y数据 + encoded_hrm[12] = (uint8_t)(-1234&0xFF); + encoded_hrm[13] = (uint8_t)((3987&0xFF00)>>8);//模拟z,3987换成填入自己的z数据 + encoded_hrm[14] = (uint8_t)(3987&0xFF); + + encoded_hrm[15] = ppg_s_data.green_cur;//绿灯电流 + encoded_hrm[16] = ppg_s_data.ir_cur;//红外电流 + + if(custom_ble_service_on_flag()) + ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX); + + // ble_op_att_send_data(ATT_CHARACTERISTIC_2a37_01_VALUE_HANDLE,encoded_hrm, \ + // sizeof(encoded_hrm)/sizeof(encoded_hrm[0]), ATT_OP_NOTIFY);//heartrate + } + } +#endif + + //////////////////////////////////////////////////////////////////////////////////// } #endif @@ -3306,6 +3363,63 @@ void hx3695_spo2_ppg_Int_handle(void) } #endif +#if HANKCREAT_APK +{ + + uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配 + uint8_t red_bit = 0; + uint8_t ir_bit = 0; + uint8_t green_bit = 0; + //rawdata_vector_t rawdata; + // SPO2_CAL_SET_T cal= get_spo2_agc_status(); + + for(ii=0; ii<*count; ii++) + { + if(red_buf[ii]<0) + { + red_bit = 0x80; + red_buf[ii] = -red_buf[ii]; + } + if(ir_buf[ii]<0) + { + ir_bit = 0x80; + ir_buf[ii] = -ir_buf[ii]; + } + + encoded_hrm[0] = 0x66;//血氧标志位,一定要对 + encoded_hrm[1] = (uint8_t)(spo2_alg_results.data_cnt - *count + ii) % 256; + encoded_hrm[2] = (uint8_t)(spo2_alg_results.spo2_result& 0xFF); + + encoded_hrm[3] = (uint8_t)((red_buf[ii] & 0xFF0000) >> 16) | red_bit; //红灯原始数据 + encoded_hrm[4] = (uint8_t)((red_buf[ii] & 0xFF00) >> 8); + encoded_hrm[5] = (uint8_t)(red_buf[ii] & 0xFF); + + encoded_hrm[6] = (uint8_t)((ir_buf[ii] & 0xFF0000) >> 16) | ir_bit; //ir原始数据 + encoded_hrm[7] = (uint8_t)((ir_buf[ii] & 0xFF00) >> 8); + encoded_hrm[8] = (uint8_t)(ir_buf[ii] & 0xFF); + + #ifdef SAR_ALG_LIB + encoded_hrm[9] = (uint8_t)((gdiff[0]&0xFF00)>>8);//sar diff + encoded_hrm[10] = (uint8_t)(gdiff[0]&0xFF); + #else + encoded_hrm[9] = (uint8_t)((1234&0xFF00)>>8);//模拟x + encoded_hrm[10] = (uint8_t)(1234&0xFF); + #endif + + encoded_hrm[11] = (uint8_t)((-1234&0xFF00)>>8);//模拟y + encoded_hrm[12] = (uint8_t)(-1234&0xFF); + encoded_hrm[13] = (uint8_t)((3987&0xFF00)>>8);//模拟z + encoded_hrm[14] = (uint8_t)(3987&0xFF); + + encoded_hrm[15] = cal.R_LED; + encoded_hrm[16] = cal.IR_LED1; + if(custom_ble_service_on_flag()) + ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX); + } + } +#endif + + ///////////////////////////////////////////////////////////////////////////////////////////////// } #endif //SPO2_ALG_LIB