gengxin
author@CHENG <2393524978@qq.com>
Thu, 28 Mar 2024 06:06:57 +0000 (14:06 +0800)
committer@CHENG <2393524978@qq.com>
Thu, 28 Mar 2024 06:06:57 +0000 (14:06 +0800)
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h

index 7dbed3d..34bdf98 100644 (file)
@@ -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
index 4b02ae4..bf45ba7 100644 (file)
@@ -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);
index 38300bc..33e014f 100644 (file)
 
 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;
                }       
index be48c0b..325aedd 100644 (file)
@@ -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);