static unsigned char s_FR8012HAQ_heart_rate = 0x0;//心律
static unsigned char s_FR8012HAQ_high_blood = 0x0;//血压/高压
static unsigned char s_FR8012HAQ_low_blood = 0x0;//血压/低压
-unsigned char s_FR8012HAQ_blood_data[48*2] = {0};//血压数据
+#define s_FR8012HAQ_blood_freq 81
+#define s_FR8012HAQ_blood_data_mxa_len s_FR8012HAQ_blood_freq*4*60 //60秒存的字节数大小
+int * s_FR8012HAQ_blood_data = NULL;//血压数据
+int s_FR8012HAQ_blood_data_len = 0;//接收的血压数据长度
static unsigned char s_FR8012HAQ_blood_oxygen = 0x0;//血氧
static unsigned char s_FR8012HAQ_HRV = 0x0;//hrv
unsigned char s_FR8012HAQ_wear_status = 1;//佩戴状态
}else
{
- uos_timer_start(fr8012haq_timer, MS_TO_TICKS(1000), MS_TO_TICKS(1000), fr8012haq_timerout_cb, NULL);
+ uos_timer_start(fr8012haq_timer, MS_TO_TICKS(150), MS_TO_TICKS(150), fr8012haq_timerout_cb, NULL);
}
//Helios_Timer_Start(fr8012haq_timer, 320, 1);
s_FR8012HAQ_heart_rate_buff_count = 0;
s_FR8012HAQ_high_blood = 0x0;
s_FR8012HAQ_low_blood = 0x0;
- memset(s_FR8012HAQ_blood_data,0,sizeof(s_FR8012HAQ_blood_data));
s_FR8012HAQ_HRV = 0;
//s_FR8012HAQ_wear_status = 0;
s_FR8012HAQ_blood_oxygen = 0x0;
break;
case BP_MODE:
/* code */
+ if(s_FR8012HAQ_blood_data ==NULL)
+ {
+ s_FR8012HAQ_blood_data = malloc(s_FR8012HAQ_blood_data_mxa_len);
+ memset(s_FR8012HAQ_blood_data,0,s_FR8012HAQ_blood_data_mxa_len);
+ }
+ s_FR8012HAQ_blood_data_len =0;
+
uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"bp\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"bp\"}"));
break;
case WEAR_MODE:
char *tem_data = NULL;
char num_buf[20] = {0};
unsigned char num_buf_len = 0;
+ int i = 0;
/*心率*/
tem_data = strstr(data,"\"hrs_data\":\"");
if(tem_data)
tem_data = strstr(data,"\"bp_data\":\"");
if(tem_data)
{
-
- unsigned char spo2 = 0;
tem_data += strlen("\"bp_data\":\"");
num_buf_len = find_c(tem_data,'\"');
- if(num_buf_len>sizeof(s_FR8012HAQ_blood_data))
- num_buf_len = sizeof(s_FR8012HAQ_blood_data);
- memcpy(s_FR8012HAQ_blood_data,tem_data,num_buf_len);
+ for(i=0;i<num_buf_len;i+=6)
+ {
+ memcpy(num_buf,&tem_data[i],6);
+ num_buf[6] = 0;
+ //FR8012HAQ_LOG("num_buf:0x%s\n",num_buf);
+ if(s_FR8012HAQ_blood_data && s_FR8012HAQ_blood_data_len < s_FR8012HAQ_blood_data_mxa_len/4)
+ {
+ s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len] = strtol(num_buf, NULL, 16);
+ //FR8012HAQ_LOG("s_FR8012HAQ_blood_data[%d]:%x\n",s_FR8012HAQ_blood_data_len,s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]);
+ s_FR8012HAQ_blood_data_len++;
+ }
+
+
+ }
+
}
/*体温*/
break;
}
FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n\n",FR8012HAQ_jobs_mode);
- len =uart4_recv_data(data,UART4_BUF_LEN,10000);
+ len =uart4_recv_data(data,UART4_BUF_LEN,60);
if(len)
{
FR8012HAQ_LOG("UART4:len:%d str:%s",len,data);
//UOS_SleepMs(100);
}
-
free(data);
}
void hal_fr8012haq_int_init(void)
FR8012HAQ_LOG("FR8012HAQ_close !!!!!!!!\n");
watch_set_sleep_lcd_only(false);
is_measuring_flag = false;
+ if(s_FR8012HAQ_blood_data!= NULL)
+ {
+ free(s_FR8012HAQ_blood_data);
+ s_FR8012HAQ_blood_data = NULL;
+ }
uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"close\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"close\"}"));
fr8012haq_timer_cfg(false);
//fr8012haq_hrs_disable
s_FR8012HAQ_blood_oxygen = bo;
s_FR8012HAQ_high_blood = bp_high ;
s_FR8012HAQ_low_blood = bp_low ;
- memset(s_FR8012HAQ_blood_data,0,sizeof(s_FR8012HAQ_blood_data));
// if(hr > 0) {
// fr8012haq_hr_bp_bo_value.hr = hr;
if(bo != NULL)
*bo = s_FR8012HAQ_blood_oxygen;
}
-//获取48字节aslcc码的十六进制血压数据到blood_buf,注意:blood_buf长度要大于等于48*2字节
-void fr8012haq_blood_data_get(char *blood_buf)
+//获取1分钟血压数据,总共81*60个int数组,返回数据数组,len:长度返回,当长度等于81*60时表示存够数据
+int *fr8012haq_blood_data_get(int *len)
{
- memcpy(blood_buf,s_FR8012HAQ_blood_data,sizeof(s_FR8012HAQ_blood_data));
+ //memcpy(blood_buf,s_FR8012HAQ_blood_data,sizeof(s_FR8012HAQ_blood_data));
+ *len = s_FR8012HAQ_blood_data_len;
+ return s_FR8012HAQ_blood_data;
}
void fr8012haq_hr_bp_bo_value_clear(void)
s_FR8012HAQ_heart_rate_buff_count = 0;
s_FR8012HAQ_high_blood = 0x0;
s_FR8012HAQ_low_blood = 0x0;
- memset(s_FR8012HAQ_blood_data,0,sizeof(s_FR8012HAQ_blood_data));
s_FR8012HAQ_HRV = 0;
//s_FR8012HAQ_wear_status = 0;
s_FR8012HAQ_blood_oxygen = 0x0;
+ s_FR8012HAQ_blood_data_len = 0;
//memset(&fr8012haq_hr_bp_bo_value, 0, sizeof(fr8012haq_hr_bp_bo_value));
}
//s_FR8012HAQ_heart_rate = heart_rate;
if(s_FR8012HAQ_heart_rate_buff_count >= HEART_RATE_BUFF_LEN)
s_FR8012HAQ_heart_rate_buff_count = 0;
- s_FR8012HAQ_high_blood = (uint8_t)(heart_rate * 1.5);
+// s_FR8012HAQ_high_blood = (uint8_t)(heart_rate * 1.5);
- s_FR8012HAQ_low_blood = (uint8_t)(heart_rate * 0.95);
+// s_FR8012HAQ_low_blood = (uint8_t)(heart_rate * 0.95);
}
void FR8012HAQ_result_set_wear_status(unsigned char wear_status)
{