From: @CHENG <2393524978@qq.com> Date: Thu, 28 Mar 2024 06:06:57 +0000 (+0800) Subject: gengxin X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=e412a109a1b739a382fe8ad37f37cddaf6ea96e4;p=mirrors%2FASR3603_Z5.git gengxin --- diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c index 7dbed3d6..34bdf98f 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c @@ -88,6 +88,24 @@ void mmi_hengai_bp_raw_data_free(void) } +void mmi_hengai_bp_back_measure_result(uint16_t bp_value_high, uint16_t bp_value_low) +{ + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d/%d\n", __FUNCTION__, __LINE__, bp_value_high, bp_value_low); + + if(0 == bp_value_high || 0 == bp_value_low || bp_value_high <= bp_value_low) + { + return; // fail + } + + mmi_protocol_action_send_blood(bp_value_high, bp_value_low); + + nv_watch_health_info_t health_info = {0}; + mmi_health_info_get(&health_info); + health_info.blood_high_value = bp_value_high; + health_info.blood_low_value = bp_value_low; + mmi_health_info_set(&health_info); +} + void mmi_hengai_bp_back_measure_finish(void) { mmi_hengai_bp_raw_data_fill(); @@ -96,7 +114,7 @@ void mmi_hengai_bp_back_measure_finish(void) if(true == mmi_protocol_check_state_before_send_action()) { #ifdef __MMI_CUSTOM_HENGAI_HEALTH_UPLOAD_USE_TCP__ - mmi_hengai_tcp_bp_measure_raw_data_send(); + mmi_hengai_tcp_bp_back_measure_raw_data_send(); #else mmi_hengai_bp_measure_raw_data_send(); #endif diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h index 4b02ae4c..bf45ba7d 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h @@ -82,6 +82,7 @@ typedef struct +void mmi_hengai_bp_back_measure_result(uint16_t bp_value_high, uint16_t bp_value_low); void mmi_hengai_bp_back_measure_finish(void); void mmi_hengai_bp_back_measure_action(void); diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c index 38300bc2..33e014f0 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c @@ -14,6 +14,154 @@ static HENGAI_HEALTH_SEND_TYPE_ENUM s_hengai_bp_send_code = HENGAI_HEALTH_SEND_NONE; // +// back measure data +void mmi_hengai_tcp_bp_back_measure_raw_data_send(void) +{ + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + + char * data_ptr = NULL; + uint32_t data_len = 0; + char * encode_str = NULL; + uint32_t encode_len = 0; + char * encode_header_str = NULL; + uint32_t encode_header_len = 0; + uint32_t output_len = 0; + uint32_t output_header_len = 0; + int temp_len = 0; + int json_data_len = MMI_HENGAI_BP_RAW_DATA_LEN * 11 + 256; + char * json_data = NULL; + + // json body + json_data = lv_mem_alloc(json_data_len); + if(NULL == json_data) + { + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__); + goto FREE_AND_EXIT; + } + _lv_memset_00(json_data, json_data_len); + + temp_len = 0; + temp_len += sprintf(json_data + temp_len, "{\"app_key\":\"%s\",", HENGAI_HTTP_POST_APP_KEY); + + char imei[16 + 1] = {0}; + app_adp_get_imei_req(imei); + temp_len += sprintf(json_data + temp_len, "\"mac\":\"%s\",", imei); + + char * begin_time_str = mmi_hengai_bp_measure_action_time_string_get(1); + temp_len += sprintf(json_data + temp_len, "\"begin_time\":\"%s\",", begin_time_str); + + char * end_time_str = mmi_hengai_bp_measure_action_time_string_get(0); + temp_len += sprintf(json_data + temp_len, "\"end_time\":\"%s\",", end_time_str); + + uint16_t i = 0; + int * temp_int_ptr = mmi_hengai_bp_raw_data_ptr_get(); + int temp_int_len = mmi_hengai_bp_raw_data_len_get(); + temp_len += sprintf(json_data + temp_len, "\"pulse_wave\":["); + for(i = 0; i < temp_int_len; i++) + { + if(i == (temp_int_len - 1)) + { + temp_len += sprintf(json_data + temp_len, "%d],", temp_int_ptr[i]); + } + else + { + temp_len += sprintf(json_data + temp_len, "%d,", temp_int_ptr[i]); + } + } + + temp_len += sprintf(json_data + temp_len, "\"sample_rate\":%d}", MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE); + + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, temp_len); + + // base64 body + encode_len = temp_len * 3 / 2; + encode_str = lv_mem_alloc(encode_len); + if(NULL == encode_str) + { + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__); + goto FREE_AND_EXIT; + } + _lv_memset_00(encode_str, encode_len); + if(0 != mbedtls_base64_encode(encode_str, encode_len, &output_len, json_data, temp_len)) + { + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: base64 encode failed\n", __FUNCTION__, __LINE__); + goto FREE_AND_EXIT; + } + + // json header + _lv_memset_00(json_data, json_data_len); + + temp_len = 0; + temp_len += sprintf(json_data + temp_len, "{\"headers\":["); + + temp_len += sprintf(json_data + temp_len, "{\"key\":\"token\","); + + char * token = mmi_hengai_health_token_get(); + temp_len += sprintf(json_data + temp_len, "\"value\":\"%s\"}", token); + + temp_len += sprintf(json_data + temp_len, "]}"); + + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, temp_len); + + // base64 header + encode_header_len = temp_len * 3 / 2; + encode_header_str = lv_mem_alloc(encode_header_len); + if(NULL == encode_header_str) + { + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__); + goto FREE_AND_EXIT; + } + _lv_memset_00(encode_header_str, encode_header_len); + if(0 != mbedtls_base64_encode(encode_header_str, encode_header_len, &output_header_len, json_data, temp_len)) + { + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: base64 encode failed\n", __FUNCTION__, __LINE__); + goto FREE_AND_EXIT; + } + + // content + data_len = output_len + output_header_len + 128; + data_ptr = lv_mem_alloc(data_len); + if(NULL == data_ptr) + { + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__); + goto FREE_AND_EXIT; + } + _lv_memset_00(data_ptr, data_len); + + #if 1 + sprintf(data_ptr, ",POST,%s%s,%s,%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, "/health/bp/measurement", encode_header_str, encode_str); + #else + sprintf(data_ptr, "POST,%s%s,%s,%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, "/health/bp/measurement", encode_header_str, encode_str); + #endif + data_len = strlen(data_ptr); + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, data_len); + + s_hengai_bp_send_code = HENGAI_HEALTH_SEND_BACK_MEASURE_DATA; + mmi_protocol_fzd_action_tcp_http(data_ptr, data_len); + +FREE_AND_EXIT: + if(NULL != json_data) + { + lv_mem_free(json_data); + json_data = NULL; + } + if(NULL != encode_str) + { + lv_mem_free(encode_str); + encode_str = NULL; + } + if(NULL != encode_header_str) + { + lv_mem_free(encode_header_str); + encode_header_str = NULL; + } + if(NULL != data_ptr) + { + lv_mem_free(data_ptr); + data_ptr = NULL; + } +} + // measure data void mmi_hengai_tcp_bp_measure_raw_data_send(void) { @@ -956,7 +1104,7 @@ bool mmi_hengai_health_data_parse(unsigned char * next_buff, unsigned int next_b mmi_ui_msg_action_hengai_bp_calibrate_result(status_value); break; - case HENGAI_HEALTH_SEND_MEASURE_DATA: + case HENGAI_HEALTH_SEND_MEASURE_DATA: // ui measure if(cJSON_IsTrue(cJSON_GetObjectItem(json_recv, "status"))) { HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: true\n", __FUNCTION__, __LINE__); @@ -977,6 +1125,21 @@ bool mmi_hengai_health_data_parse(unsigned char * next_buff, unsigned int next_b } break; + case HENGAI_HEALTH_SEND_BACK_MEASURE_DATA: // back measure + if(cJSON_IsTrue(cJSON_GetObjectItem(json_recv, "status"))) + { + HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: true\n", __FUNCTION__, __LINE__); + + cJSON * json_data = cJSON_GetObjectItem(json_recv, "data"); + uint16_t bp_value_high = cJSON_GetIntValue(cJSON_GetObjectItem(json_data, "sbp")); + uint16_t bp_value_low = cJSON_GetIntValue(cJSON_GetObjectItem(json_data, "dbp")); + //char * description = cJSON_GetStringValue(cJSON_GetObjectItem(json_data, "description")); + + // update + mmi_hengai_bp_back_measure_result(bp_value_high, bp_value_low); + } + break; + default: break; } diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h index be48c0bf..325aedde 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h @@ -56,11 +56,13 @@ typedef enum HENGAI_HEALTH_SEND_CALIBRATE_DATA, HENGAI_HEALTH_SEND_CALIBRATE_MODEL, HENGAI_HEALTH_SEND_MEASURE_DATA, + HENGAI_HEALTH_SEND_BACK_MEASURE_DATA, HENGAI_HEALTH_SEND_MAX, }HENGAI_HEALTH_SEND_TYPE_ENUM; +void mmi_hengai_tcp_bp_back_measure_raw_data_send(void); void mmi_hengai_tcp_bp_measure_raw_data_send(void); void mmi_hengai_tcp_bp_calibrate_raw_data_send(uint8_t calibrate_times, uint16_t bp_value_high, uint16_t bp_value_low); void mmi_hengai_tcp_algorithm_interface_login_action(void);