From fcd8556c39e4c07a7f04d991270f10812c2a229f Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Tue, 13 Jan 2026 10:27:45 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96ppg=E6=95=B0=E6=8D=AEble?= =?utf8?q?=E4=BC=A0=E8=BE=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c | 93 ++++++++++--------- .../drivers/ppg/ppgBleService/ppgBleService.c | 24 ++++- 2 files changed, 68 insertions(+), 49 deletions(-) diff --git a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c index ccf1d8cf2..b9c439060 100644 --- a/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c +++ b/code/sdk/zhihui/drivers/ppg/hx3695/hx3695.c @@ -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) { time_cnt = 0; -#ifdef SUPPORT_PPG_BLE_SERVICE +#ifdef SUPPORT_PPG_BLE_SERVICE +#if 1 + if(uapi_dev_runtime_get_hrs_ble_status()) { uint8_t ble_data = (uint8_t)avg_hrs; ble_ppgtest_server_send_input_report(&ble_data,1); } -#endif - -// #ifdef SUPPORT_PPG_BLE_SERVICE -// if(uapi_dev_runtime_get_hrs_ble_status()) -// { -// uint8_t encoded_hrm[17] = {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(); +#else + if(uapi_dev_runtime_get_hrs_ble_status()) + { + uint8_t encoded_hrm[17] = {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(int ii=0; iiled_data[0].data_val[ii]<0) -// { -// red_bit = 0x80; -// ppg_sensor_dat->led_data[0].data_val[ii] = -ppg_sensor_dat->led_data[0].data_val[ii]; -// } -// // ppg_sensor_dat->led_data[2].data_val[ii] -// if(ppg_sensor_dat->led_data[3].data_val[ii]<0) -// { -// ir_bit = 0x80; -// ppg_sensor_dat->led_data[3].data_val[ii] = -ppg_sensor_dat->led_data[3].data_val[ii]; -// } + for(int ii=0; iiled_data[0].data_val[ii]<0) + { + red_bit = 0x80; + ppg_sensor_dat->led_data[0].data_val[ii] = -ppg_sensor_dat->led_data[0].data_val[ii]; + } + // ppg_sensor_dat->led_data[2].data_val[ii] + if(ppg_sensor_dat->led_data[3].data_val[ii]<0) + { + ir_bit = 0x80; + ppg_sensor_dat->led_data[3].data_val[ii] = -ppg_sensor_dat->led_data[3].data_val[ii]; + } -// encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确 -// encoded_hrm[1] = (uint8_t)(hrs_result.data_cnt - data_count + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环 -// encoded_hrm[2] = (uint8_t)(hrs_result.hr_result & 0xFF);//心率值 + encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确 + encoded_hrm[1] = (uint8_t)(hrs_result.data_cnt - data_count + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环 + encoded_hrm[2] = (uint8_t)(hrs_result.hr_result & 0xFF);//心率值 -// encoded_hrm[3] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF0000) >> 16) | red_bit; //绿灯原始数据 -// encoded_hrm[4] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF00) >> 8); //绿灯原始数据 -// encoded_hrm[5] = (uint8_t)(ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF); //绿灯原始数据 + encoded_hrm[3] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF0000) >> 16) | red_bit; //绿灯原始数据 + encoded_hrm[4] = (uint8_t)((ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF00) >> 8); //绿灯原始数据 + encoded_hrm[5] = (uint8_t)(ppg_sensor_dat->led_data[0].data_val[ii] & 0xFF); //绿灯原始数据 -// encoded_hrm[6] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF0000) >> 16) | ir_bit; //ir原始数据 -// encoded_hrm[7] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF00) >> 8); //ir原始数据 -// encoded_hrm[8] = (uint8_t)(ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF); //ir原始数据 + encoded_hrm[6] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF0000) >> 16) | ir_bit; //ir原始数据 + encoded_hrm[7] = (uint8_t)((ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF00) >> 8); //ir原始数据 + encoded_hrm[8] = (uint8_t)(ppg_sensor_dat->led_data[3].data_val[ii] & 0xFF); //ir原始数据 -// encoded_hrm[9] = (uint8_t)((gsen_data_x_fifo[ii]&0xFF00)>>8);//模拟x,1234换成填入自己的x数据 -// encoded_hrm[10] = (uint8_t)(gsen_data_x_fifo[ii]&0xFF); -// encoded_hrm[11] = (uint8_t)((gsen_data_y_fifo[ii]&0xFF00)>>8);//模拟y,-1234换成填入自己的y数据 -// encoded_hrm[12] = (uint8_t)(gsen_data_y_fifo[ii]&0xFF); -// encoded_hrm[13] = (uint8_t)((gsen_data_z_fifo[ii]&0xFF00)>>8);//模拟z,3987换成填入自己的z数据 -// encoded_hrm[14] = (uint8_t)(gsen_data_z_fifo[ii]&0xFF); + encoded_hrm[9] = (uint8_t)((gsen_data_x_fifo[ii]&0xFF00)>>8);//模拟x,1234换成填入自己的x数据 + encoded_hrm[10] = (uint8_t)(gsen_data_x_fifo[ii]&0xFF); + encoded_hrm[11] = (uint8_t)((gsen_data_y_fifo[ii]&0xFF00)>>8);//模拟y,-1234换成填入自己的y数据 + encoded_hrm[12] = (uint8_t)(gsen_data_y_fifo[ii]&0xFF); + encoded_hrm[13] = (uint8_t)((gsen_data_z_fifo[ii]&0xFF00)>>8);//模拟z,3987换成填入自己的z数据 + encoded_hrm[14] = (uint8_t)(gsen_data_z_fifo[ii]&0xFF); -// encoded_hrm[15] = ppg_sensor_dat->led_data[0].led_current;//绿灯电流 -// encoded_hrm[16] = wear_status;//红外电流 + encoded_hrm[15] = ppg_sensor_dat->led_data[0].led_current;//绿灯电流 + encoded_hrm[16] = wear_status;//红外电流 -// ble_ppgtest_server_send_input_report(encoded_hrm,17); -// } + ble_ppgtest_server_send_input_report(encoded_hrm,17); + } -// } -// #endif + } +#endif +#endif } break; } diff --git a/code/sdk/zhihui/drivers/ppg/ppgBleService/ppgBleService.c b/code/sdk/zhihui/drivers/ppg/ppgBleService/ppgBleService.c index a4d4cf657..62ae4dec6 100644 --- a/code/sdk/zhihui/drivers/ppg/ppgBleService/ppgBleService.c +++ b/code/sdk/zhihui/drivers/ppg/ppgBleService/ppgBleService.c @@ -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) { // printf("ble_hid_server_send_input_report:%d %d %d",data[0],data[1],len); +#if 1 gatts_ntf_ind_t param = {0}; param.attr_handle = (uint16_t)g_ppgtest_notify_report_att_hdl; - // param.value_len = len; - // param.value = bt_os_new(len); param.value_len = len + 1; param.value = bt_os_new(param.value_len); if (param.value == NULL) { printf( "[ppgtest][ERROR]send input report new fail\r\n"); return ERRCODE_BT_MALLOC_FAIL; } - // if (memcpy_s(param.value, param.value_len, data, len) != EOK) + if (memcpy_s(param.value + 1, param.value_len, data, len) != EOK) { printf( "[ppgtest][ERROR]send input report memcpy fail\r\n"); bt_os_free(param.value); return ERRCODE_BT_FAIL; } +#else + gatts_ntf_ind_t param = {0}; + param.attr_handle = (uint16_t)g_ppgtest_notify_report_att_hdl; + param.value_len = len; + param.value = bt_os_new(len); + if (param.value == NULL) { + printf( "[ppgtest][ERROR]send input report new fail\r\n"); + return ERRCODE_BT_MALLOC_FAIL; + } + if (memcpy_s(param.value, param.value_len, data, len) != EOK) + { + printf( "[ppgtest][ERROR]send input report memcpy fail\r\n"); + bt_os_free(param.value); + return ERRCODE_BT_FAIL; + } + + +#endif + errcode_t ret = 0; // if(g_ble_conn_id==0) -- 2.17.1