#define MMI_CUSTOMER_MEASURE_TEMPERATURE_DURATION (24 * 1000) // unit:ms
-#define MMI_CUSTOMER_MEASURE_BLOOD_DURATION (63 * 1000) // unit:ms
+#define MMI_CUSTOMER_MEASURE_BLOOD_DURATION (50 * 1000) // unit:ms
#define MMI_CUSTOMER_MEASURE_SPO2_DURATION (54 * 1000) // unit:ms
static int s_hengai_bp_raw_data_len = 0;
+#ifdef __PPG_DATA_TEST_SEND__
+
+#define __SEND_DATA_TIME_INTERVAL (5 * 1000)
+#define __SEND_DATA_BUFF_LEN (MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE * (__SEND_DATA_TIME_INTERVAL / 1000 + 3) * sizeof(int))
+
+static int * __send_raw_data_ptr = NULL;
+static int __send_raw_data_num = 0;
+static int __send_offset_data_num = 0;
+static TIMER_ID __send_per_5s_timer_id = NULL;
+static char __begin_time_str[24] = {0}, __end_time_str[24] = {0};
+
+void __hengai_raw_data_fill(void)
+{
+ if(NULL == __send_raw_data_ptr)
+ {
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+ _lv_memset_00(__send_raw_data_ptr, __SEND_DATA_BUFF_LEN);
+
+ int total_num = 0;
+ char * total_data = fr8012haq_blood_data_get(&total_num);
+
+ __send_raw_data_num = total_num - __send_offset_data_num;
+ _lv_memcpy(__send_raw_data_ptr, total_data + __send_offset_data_num * sizeof(int), __send_raw_data_num * sizeof(int));
+ __send_offset_data_num = total_num;
+
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: raw_data_num=%d, total_num=%d\n", __FUNCTION__, __LINE__, __send_raw_data_num, total_num);
+}
+
+int * __hengai_raw_data_ptr_get(void)
+{
+ return __send_raw_data_ptr;
+}
+
+int __hengai_raw_data_len_get(void)
+{
+ return __send_raw_data_num;
+}
+
+char * __hengai_data_send_begin_time(void)
+{
+ return __begin_time_str;
+}
+
+char * __hengai_data_send_end_time(void)
+{
+ return __end_time_str;
+}
+
+void __hengai_data_send_per_5s_stop(void)
+{
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(NULL != __send_per_5s_timer_id)
+ {
+ Hal_Timer_Stop(__send_per_5s_timer_id);
+ __send_per_5s_timer_id = NULL;
+ }
+
+ if(NULL != __send_raw_data_ptr)
+ {
+ lv_mem_free(__send_raw_data_ptr);
+ __send_raw_data_ptr = NULL;
+ }
+ __send_raw_data_num = 0;
+ __send_offset_data_num = 0;
+}
+
+void __hengai_data_send_per_5s_cb(void * para)
+{
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ __hengai_raw_data_fill();
+ if(true == mmi_protocol_check_state_before_send_action())
+ {
+ hal_rtc_t cur_time = {0};
+ Hal_Rtc_Gettime(&cur_time);
+ sprintf(__end_time_str, "%04d-%02d-%02d %02d:%02d:%02d",
+ cur_time.tm_year,
+ cur_time.tm_mon,
+ cur_time.tm_mday,
+ cur_time.tm_hour,
+ cur_time.tm_min,
+ cur_time.tm_sec);
+
+ __hengai_tcp_bp_measure_raw_data_send();
+
+ sprintf(__begin_time_str, "%04d-%02d-%02d %02d:%02d:%02d",
+ cur_time.tm_year,
+ cur_time.tm_mon,
+ cur_time.tm_mday,
+ cur_time.tm_hour,
+ cur_time.tm_min,
+ cur_time.tm_sec);
+ }
+}
+
+void __hengai_data_send_per_5s_action(void)
+{
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ __hengai_data_send_per_5s_stop();
+
+ if(NULL != __send_raw_data_ptr)
+ {
+ lv_mem_free(__send_raw_data_ptr);
+ __send_raw_data_ptr = NULL;
+ }
+ __send_raw_data_ptr = (int *)lv_mem_alloc(__SEND_DATA_BUFF_LEN);
+ if(NULL == __send_raw_data_ptr)
+ {
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+ _lv_memset_00(__send_raw_data_ptr, __SEND_DATA_BUFF_LEN);
+ __send_raw_data_num = 0;
+ __send_offset_data_num = 0;
+
+ hal_rtc_t cur_time = {0};
+ Hal_Rtc_Gettime(&cur_time);
+ sprintf(__begin_time_str, "%04d-%02d-%02d %02d:%02d:%02d",
+ cur_time.tm_year,
+ cur_time.tm_mon,
+ cur_time.tm_mday,
+ cur_time.tm_hour,
+ cur_time.tm_min,
+ cur_time.tm_sec);
+ __send_per_5s_timer_id = Hal_Timer_Start(__SEND_DATA_TIME_INTERVAL, __hengai_data_send_per_5s_cb, NULL, true);
+}
+#endif
+
+
bool mmi_hengai_bp_measuring_flag_get(void)
{
return (s_hengai_bp_measuring);
watch_set_suspend_enable(true, ACT_ID_HENG_AI_BP_MEASURE, 0);
lv_watch_png_cache_all_free();
+
+#ifdef __PPG_DATA_TEST_SEND__
+ __hengai_data_send_per_5s_stop();
+#endif
+
+
if(mmi_hengai_bp_measuring_flag_get())
{
mmi_hsensor_close();
void mmi_hengai_bp_measure_data_send_task_cb(lv_task_t * task)
{
+#ifdef __PPG_DATA_TEST_SEND__
+ __hengai_data_send_per_5s_stop();
+
+#else
+
if(true == mmi_protocol_check_state_before_send_action())
{
#ifdef __MMI_CUSTOM_HENGAI_HEALTH_UPLOAD_USE_TCP__
{
mmi_hengai_bp_measure_result_timeout(NULL);
}
+#endif
}
void mmi_hengai_bp_measure_finish_screen(void)
mmi_hengai_bp_measuring_flag_set(true);
s_hengai_bp_measure_count = 0;
+
+ #ifdef __PPG_DATA_TEST_SEND__
+ __hengai_data_send_per_5s_action();
+ #endif
+
+
lv_obj_t * label_title = lv_label_create(watch_ext->cont, NULL);
lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
#ifdef __MMI_CUSTOM_HENGAI_HEALTH__
+
+///#define __PPG_DATA_TEST_SEND__ // just for hengai test
+#ifdef __PPG_DATA_TEST_SEND__
+int * __hengai_raw_data_ptr_get(void);
+int __hengai_raw_data_len_get(void);
+char * __hengai_data_send_begin_time(void);
+char * __hengai_data_send_end_time(void);
+#endif
+
+
#define MMI_HENGAI_BP_TAB_COUNT (3)
-#define MMI_BP_MEASURE_TOTAL_COUNT (63) // (60) // times
+#define MMI_BP_MEASURE_TOTAL_COUNT (50) // times
#define MMI_BP_WAIT_RESULT_TIMEOUT (1000 * 10) // ms
static HENGAI_HEALTH_SEND_TYPE_ENUM s_hengai_bp_send_code = HENGAI_HEALTH_SEND_NONE; //
+#ifdef __PPG_DATA_TEST_SEND__
+void __hengai_tcp_bp_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 = __hengai_data_send_begin_time();
+ temp_len += sprintf(json_data + temp_len, "\"begin_time\":\"%s\",", begin_time_str);
+
+ char * end_time_str = __hengai_data_send_end_time();
+ temp_len += sprintf(json_data + temp_len, "\"end_time\":\"%s\",", end_time_str);
+
+ uint16_t i = 0;
+ int * temp_int_ptr = __hengai_raw_data_ptr_get();
+ int temp_int_len = __hengai_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_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;
+ }
+}
+#endif
+
+
+
// back measure data
void mmi_hengai_tcp_bp_back_measure_raw_data_send(void)
{
}
-
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
bool mmi_protocol_fzd_action_get_vc_config(void)