// };
static const uint32_t fr8012haq_mfp_cfgs_sleep[] = {
- MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_FALL,
+ MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_FLOAT | MFP_LPM_EDGE_FALL,
MFP_EOC /*End of configuration, must have */
};
static const uint32_t fr8012haq_d2_exit_mfp_cfgs[] = {
- MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_FALL,
+ MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
MFP_EOC /*End of configuration, must have */
};
static uint32_t fr8012haq_mfp_cfgs[] = {
gpio_set_direction(GPIO16, GPIO_OUT);
gpio_set_direction(GPIO123, GPIO_OUT);
- //gpio_set_direction(GPIO32, GPIO_OUT);
- // gpio_set_value(GPIO123, GPIO_HIGH);
+ gpio_set_direction(GPIO32, GPIO_IN);
+ gpio_set_value(GPIO123, GPIO_HIGH);
// gpio_set_value(GPIO32, GPIO_HIGH);
}
//发送数据到蓝牙
void fr8012haq_write_data(char *buf,int len)
{
+ //cplog_printf("fr8012haq_write_data:len:%d buf:%s\r\n",len,buf);
+ gpio_enable_edge_detect(GPIO32, 0);//写数据关闭中断
+ gpio_set_value(GPIO123, GPIO_LOW);//唤醒蓝牙
+ unsigned int count = 50;//50ms超时
+ //gps_ui_delay_us(1400*3);
+ while(gpio_get_value(GPIO32))//等待唤醒成功
+ {
+ count --;
+ // if(count%700000)
+ // gpio_set_value(GPIO123, GPIO_HIGH);
+ // else if (count%800000)
+ // gpio_set_value(GPIO123, GPIO_LOW);
+ //UOS_SleepMs(4);
+ gps_ui_delay_us(700);
+ if(count <= 0)
+ {
+ break;
+ }
+ }
- gpio_set_value(GPIO123, GPIO_LOW);
- gps_ui_delay_us(500);
- gpio_set_value(GPIO123, GPIO_HIGH);
- gps_ui_delay_us(1400*3);
- //UOS_SleepMs(1);
+ //gps_ui_delay_us(500);
+ uart4_send_data(buf,len);
+ //gps_ui_delay_us(1400*1);
+ //
+
+ //gps_ui_delay_us(1400*4);
+ //UOS_SleepMs(8);
+ //UOS_SleepMs(4);
// gpio_set_value(GPIO32, GPIO_LOW);
// gps_ui_delay_us(1400);
// gpio_set_value(GPIO32, GPIO_HIGH);
- uart4_send_data(buf,len);
+
+ gpio_set_value(GPIO123, GPIO_HIGH);
+ gpio_enable_edge_detect(GPIO32, EDGE_FLAG_FALL);//写完开中断
+ //FR8012HAQ_LOG("fr8012haq_write_data:count:%d\n",count);
}
}
void fr8012haq_timer_cfg(bool en)
{
-
+ return ;
//FR8012HAQ_LOG("fr8012haq_timer_cfg :%d!!!!!!\n\n",en);
if(en)
{
if(fr8012haq_timer == NULL )
uos_timer_create(&fr8012haq_timer);
//fr8012haq_timer = Helios_Timer_init( (void* )fr8012haq_timerout_cb, NULL);
- if(FR8012HAQ_run_mode == WEAR_MODE)//如果是未佩戴,统一3秒
+ if(FR8012HAQ_run_mode == WEAR_MODE)//
{
- uos_timer_start(fr8012haq_timer, MS_TO_TICKS(5000), MS_TO_TICKS(5000), fr8012haq_timerout_cb, NULL);
+ uos_timer_start(fr8012haq_timer, MS_TO_TICKS(10000), MS_TO_TICKS(10000), fr8012haq_timerout_cb, NULL);
}
else if(FR8012HAQ_run_mode == BP_MODE)//血压500MS
{
FR8012HAQ_LOG("fr8012haq_timer_cfg:BP_MODE!!!!!\n");
- uos_timer_start(fr8012haq_timer, MS_TO_TICKS(500), MS_TO_TICKS(500), fr8012haq_timerout_cb, NULL);
+ uos_timer_start(fr8012haq_timer, MS_TO_TICKS(1000), MS_TO_TICKS(1000), fr8012haq_timerout_cb, NULL);
+ }
+ else if(FR8012HAQ_run_mode == YYL_MODE)//中医10秒
+ {
+ uos_timer_start(fr8012haq_timer, MS_TO_TICKS(10000), MS_TO_TICKS(10000), fr8012haq_timerout_cb, NULL);
}
- //else if(FR8012HAQ_run_mode == YYL_MODE)//中医35秒
- //{
- // uos_timer_start(fr8012haq_timer, MS_TO_TICKS(31000), MS_TO_TICKS(31000), fr8012haq_timerout_cb, NULL);
- //}
else//其他3秒
{
-
uos_timer_start(fr8012haq_timer, MS_TO_TICKS(3000), MS_TO_TICKS(3000), fr8012haq_timerout_cb, NULL);
}
endTime = GetTimer0CNT();
}
while(Timer0IntervalInMicro(startTime, endTime) < us);
+ Timer0_Switch(0);
}
void FR8012HAQ_test(uint32_t mode)
{
+ unsigned char count = 5;//重试次数
s_FR8012HAQ_heart_rate = 0x0;
s_FR8012HAQ_heart_rate_buff_count = 0;
s_FR8012HAQ_high_blood = 0x0;
//s_FR8012HAQ_wear_status = 0;
s_FR8012HAQ_blood_oxygen = 0x0;
FR8012HAQ_LOG("FR8012HAQ_test1:%d!!!!\n\n",mode);
- unsigned char count = 5;//重试次数
+ char send_data[100] = {0};
+ int send_data_len = 0;
+ unsigned int time = 0;
+ Hal_Rtc_Gettime_Count_Utc(&time); //Hal_Rtc_Gettime_Count(&time);
+ count = 5;//重试次数
+ //UOS_SleepMs(100);
+ while(count--)
+ {
+ send_data_len = snprintf(send_data,sizeof(send_data),"{\"cmd\":\"3\",\"set_time\":\"%d\"}\n",time);//发送时间戳
+ fr8012haq_write_data(send_data,send_data_len);
+ if(fr8012haq_parse_returned_data(500) == 3)//必须解析到执行成功
+ break;
+ UOS_SleepMs(20);
+ }
+ UOS_SleepMs(20);
+ count = 5;//重试次数
while(count--)
{
if(mode <= close_MODE)
break;
}
}
- if(fr8012haq_parse_returned_data(100) == 1)//必须解析到执行成功
- break;
- UOS_SleepMs(100);
- }
- char send_data[100] = {0};
- int send_data_len = 0;
- unsigned int time = 0;
- Hal_Rtc_Gettime_Count_Utc(&time); //Hal_Rtc_Gettime_Count(&time);
- count = 5;//重试次数
- UOS_SleepMs(100);
- while(count--)
- {
- send_data_len = snprintf(send_data,sizeof(send_data),"{\"cmd\":\"3\",\"set_time\":\"%d\"}\n",time);//发送时间戳
- fr8012haq_write_data(send_data,send_data_len);
- if(fr8012haq_parse_returned_data(100) == 3)//必须解析到执行成功
+ if(fr8012haq_parse_returned_data(1000) == 1)//必须解析到执行成功
break;
- UOS_SleepMs(100);
+ UOS_SleepMs(30);
}
+
fr8012haq_timer_cfg(true);
-
FR8012HAQ_LOG("FR8012HAQ_test2:%d!!!!\n\n",mode);
}
static void fr8012haq_start(void)
{
FR8012HAQ_LOG("fr8012haq_start:FR8012HAQ_run_mode:%d\n",FR8012HAQ_run_mode);
- Timer0_Switch(1);
-
+ fr8012haq_hisr_ref_flag = 1;//不响应中断
hal_fr8012haq_int_init();
-
-
-
FR8012HAQ_test(FR8012HAQ_run_mode);
-
-
- // hal_gh30x_int_init();
- // fr8012haq_en_gpio_enable(false);
- // DelayInUs(10*1000);
- // fr8012haq_en_gpio_enable(true);
- // DelayInUs(50*1000);
- // int ret = gh30x_module_init();
-
-
- //gh30x_module_start_without_adt(measure_mode);
+ fr8012haq_hisr_ref_flag = 0;
}
static void fr8012haq_stop(void)
{
FR8012HAQ_LOG("[%s][%d]: \n", __FUNCTION__, __LINE__);
- //gh30x_module_stop();
+ fr8012haq_hisr_ref_flag = 1;//不响应中断
//fr8012haq_en_gpio_enable(false);
FR8012HAQ_close();
//FR8012HAQ_run_mode = NULL_MODE;
fr8012haq_ppg_timerout_flag = 0;
fr8012haq_agc_timerout_flag = 0;
- Timer0_Switch(0);
FR8012HAQ_restart();
+ fr8012haq_hisr_ref_flag = 0;//
}
//读取并解析返回数据
#define DATA_HANDLE (1<<24)
FR8012HAQ_LOG("%c",data[i]);
#endif
}
+#define _UART4_RX_BUF_MAX 4*1024
+extern char uart4_rx_buf[_UART4_RX_BUF_MAX];
+extern int uart4_rx_buf_len ;
+int fr8012haq_uart4_recv_data(char *buf,int buf_max_len,unsigned int timeout)
+{
+ int len = 0;
+ int count = 0;
+ static int uart4_rx_buf_len_tmp = 0;
+ //timeout = timeout/8+1;
+ //cplog_printf("uart4_recv_data:timeout:%d\n",timeout);
+ while(1)
+ {
+ if(timeout > 0)
+ timeout--;
+
+
+ gps_ui_delay_us(1400);
+ //UOS_SleepMs(1);
+ if(uart4_rx_buf_len == uart4_rx_buf_len_tmp && uart4_rx_buf_len != 0)
+ {
+ count++;
+ }else
+ count = 0;
+ uart4_rx_buf_len_tmp = uart4_rx_buf_len;
+ if((uart4_rx_buf_len != 0 && count> 8) || (timeout == 0))//连续15ms没新数据,认为是一帧数据,退出
+ {
+ //cplog_printf("uart4_recv_data timeout:%d,count:%d,uart4_rx_buf_len:%d,\n", timeout,count,uart4_rx_buf_len);
+ //cplog_printf("fr8012haq_uart4_recv_data:uart4_rx_buf_len:%d uart4_rx_buf:%c\n",uart4_rx_buf_len,uart4_rx_buf[uart4_rx_buf_len-2]);
+ break;
+ }
+
+ // if(count > 15)//连续15ms没新数据,认为是一帧数据,退出
+ // break;
+ }
+ //cplog_printf("uart4_recv_data:count:%d timeout:%d\n",count,timeout);
+ if(uart4_rx_buf_len > buf_max_len)
+ {
+ len = buf_max_len;
+ }else
+ {
+ len = uart4_rx_buf_len;
+ }
+
+ memcpy(buf,uart4_rx_buf, len);
+ uart4_rx_buf_len = 0;
+ return len;
+}
int fr8012haq_parse_returned_data(int timeout)
{
static char *UART4_buf = NULL;
UART4_buf = malloc(UART4_BUF_LEN);
if(UART4_buf == NULL)
return -1;
- sys_pm_wakeup_no_lcd();
+ gpio_enable_edge_detect(GPIO32, 0);//读关闭中断
+ gpio_set_value(GPIO123, GPIO_LOW);//告诉蓝牙可以发数据了
+ //sys_pm_wakeup_no_lcd();
memset(UART4_buf,0,UART4_BUF_LEN);
- len =uart4_recv_data(UART4_buf,UART4_BUF_LEN,timeout);//读串口数据
+ len =fr8012haq_uart4_recv_data(UART4_buf,UART4_BUF_LEN,timeout);//读串口数据
+ gpio_set_value(GPIO123, GPIO_HIGH);//
if(len)
{
+ uart4_send_data("{\"cmd\":\"0\"}",sizeof("{\"cmd\":\"0\"}"));//回蓝牙
// FR8012HAQ_LOG("UART4:len:%d str:%s",len,UART4_buf);
// FR8012HAQ_LOG("%s\n", (char *)UART4_buf+110);
int print_len_tmp = len ;
FR8012HAQ_LOG("UART4:len:%d data:",len);
//my_str_print(UART4_buf,len);//打印
- FR8012HAQ_LOG("\n\n");
+ FR8012HAQ_LOG("\r\n");
cmd_str_tmp = UART4_buf;
while(1)
{
if(count >30)
break;
cmd_str_tmp = strstr(cmd_str_tmp,"{\"");
+
if(cmd_str_tmp)
{
+ //FR8012HAQ_LOG("cmd_str_tmp:%s \n",cmd_str_tmp);
if(strstr(cmd_str_tmp,"\"cmd\":\"2\""))
{
ret = 2;
}
cmd_str_tmp += strlen("{\"");
}
+
+
+ }else
+ {
+ FR8012HAQ_LOG("fr8012haq_parse_returned_data:TIMEOUT333333333!!!!\n\n");
}
if(UART4_buf!= NULL)
free(UART4_buf);
UART4_buf = NULL;
}
+ gpio_enable_edge_detect(GPIO32, EDGE_FLAG_FALL);//读完开中断
return ret ;
}
void fr8012haq_process_data(uint32_t *process_data)
{
- sys_pm_wakeup_no_lcd();
- Timer0_Switch(1);
+ //sys_pm_wakeup_no_lcd();
FR8012HAQ_LOG("fr8012haq_process_data:%d!!!!\n\n",FR8012HAQ_run_mode);
switch (FR8012HAQ_run_mode)
{
- case HRS_MODE:
- /* code */
- fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"hrs\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrs\"}\n"));
- break;
- case SPO2_MODE:
- /* code */
- fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"spo2\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"spo2\"}\n"));
- break;
- case BP_MODE:
- /* code */
- fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"bp\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"bp\"}\n"));
- break;
- case WEAR_MODE:
- /* code */
- fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"wear\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"wear\"}\n"));
- break;
- case HRV_MODE:
- /* code */
- //fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"hrv\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrv\"}"));
- break;
- case YYL_MODE:
- /* code */
- fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"yyl\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"yyl\"}\n"));
- UOS_SleepMs(50);
- break;
- case TEMP_MODE:
- /* code */
- fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"temp\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"temp\"}\n"));
+ // case HRS_MODE:
+ // /* code */
+ // fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"hrs\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrs\"}\n"));
+ // break;
+ // case SPO2_MODE:
+ // /* code */
+ // fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"spo2\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"spo2\"}\n"));
+ // break;
+ // case BP_MODE:
+ // /* code */
+ // fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"bp\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"bp\"}\n"));
+ // break;
+ // case WEAR_MODE:
+ // /* code */
+ // fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"wear\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"wear\"}\n"));
+ // break;
+ // case HRV_MODE:
+ // /* code */
+ // //fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"hrv\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrv\"}"));
+ // break;
+ // case YYL_MODE:
+ // /* code */
+ // fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"yyl\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"yyl\"}\n"));
+ // //UOS_SleepMs(30);
+ // //gps_ui_delay_us(1400*10);
+ // break;
+ // case TEMP_MODE:
+ // /* code */
+ // fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"temp\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"temp\"}\n"));
- break;
- default:
- break;
+ // break;
+ // default:
+ // break;
}
//UOS_SleepMs(20);
- gps_ui_delay_us(1400*10);
- //FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n",FR8012HAQ_run_mode);
+ //gps_ui_delay_us(1400*2);
+
// float tmp = 0x3FE2E147;
// FR8012HAQ_LOG("float:%f\n",tmp);
- fr8012haq_parse_returned_data(50);
- //fr8012haq_write_data("{\"cmd\":\"0\"}",sizeof("{\"cmd\":\"0\"}"));//保活用
- // gpio_enable_edge_detect(GPIO32, EDGE_FLAG_RISE);
+
+ fr8012haq_parse_returned_data(1000);
+
+
+
// fr8012haq_sleep_resume();
+ //FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n",FR8012HAQ_run_mode);
fr8012haq_hisr_ref_flag=0;
}
//返回是否激活返回0未激活,联网后判断一次是否激活,没激活需要执行激活参数
char get_is_HA_activate(void)
{
fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"is_HA_activate\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"is_HA_activate\"}\n"));
- fr8012haq_parse_returned_data(100);
+ fr8012haq_parse_returned_data(500);
return is_HA_activate;
}
//获取请求码
{
send_data_len = snprintf(send_data,sizeof(send_data),"{\"cmd\":\"3\",\"set_HA_key_code\":\"%s\"}\n",HA_key_code);
fr8012haq_write_data(send_data,send_data_len);
- if(fr8012haq_parse_returned_data(100)==3)
+ if(fr8012haq_parse_returned_data(500)==3)
{
+ UOS_SleepMs(30);
if(get_is_HA_activate() == 1)//查询一次
{
ret = 1;
//获取HA_req_code
while(count--)
{
+ UOS_SleepMs(30);
fr8012haq_write_data("{\"cmd\":\"2\",\"get_data\":\"HA_req_code\"}\n",sizeof("{\"cmd\":\"2\",\"get_data\":\"HA_req_code\"}\n"));
if(fr8012haq_parse_returned_data(500)==2)
break;
static void fr8012haq_isr_callback(void)
{
//sys_pm_wakeup_no_lcd();
- // gpio_enable_edge_detect(GPIO32, 0);
+
// fr8012haq_sleep_suspend();
- FR8012HAQ_LOG("fr8012haq_isr_callback :!!!!!!!!!!!!\n");
+ gpio_enable_edge_detect(GPIO32, 0);//关闭中断
+ //FR8012HAQ_LOG("fr8012haq_isr_callback:111111111111111!!!!!!!\n");
if(fr8012haq_hisr_ref_flag == 1)
return;
fr8012haq_hisr_ref_flag=1;
+ //FR8012HAQ_LOG("fr8012haq_isr_callback:222222222222222!!!!\n");
OS_Activate_HISR(&fr8012haq_hisr_ref);
}
void hal_fr8012haq_int_init(void)
// code implement by user
// must register func hal_gh30x_int_handler as callback
- Timer0_Switch(1);
mfp_config(fr8012haq_mfp_cfgs);
- // gpio_set_direction(GPIO32, GPIO_IN);
- // gpio_register_int_handler(GPIO32, fr8012haq_isr_callback);
- // gpio_enable_edge_detect(GPIO32, EDGE_FLAG_RISE);
+ gpio_set_direction(GPIO32, GPIO_IN);
+ gpio_register_int_handler(GPIO32, fr8012haq_isr_callback);
+ gpio_enable_edge_detect(GPIO32, 0);//先关闭中断,等待初始化完再开
fr8012haq_en_gpio_init();
- UOS_SleepMs(100);
- FR8012HAQ_LOG("FR8012HAQ ID : 0x%02x\n",get_fr8012haq_id());
+ UOS_SleepMs(160);
+ //FR8012HAQ_LOG("FR8012HAQ ID : 0x%02x\n",get_fr8012haq_id());
}
void Fr8012haq_Init(void)
{
//char data[100]= {0};
//int len = 0;
- Timer0_Switch(1);
FR8012HAQ_LOG("Fr8012haq_Init1!!!!\n\n");
+ fr8012haq_hisr_ref_flag = 1;//不响应中断
static bool register_dev_flag = false;
if(!register_dev_flag)
{
FR8012HAQ_LOG("Fr8012haq_Init1.1!!!!\n\n");
}
uart4_debug();
- FR8012HAQ_LOG("Fr8012haq_Init2!!!!\n\n");
+
fr8012haq_create_hisr();
- FR8012HAQ_LOG("Fr8012haq_Init3!!!!\n\n");
+
hal_fr8012haq_int_init();
- FR8012HAQ_LOG("Fr8012haq_Init4!!!!\n\n");
+
FR8012HAQ_restart();
//uart4_debug();
UOS_SleepMs(5);
HA_lib_init();
- // while(1)
- // {
- // UOS_SleepMs(1000);
- // FR8012HAQ_LOG("Fr8012haq_Init5!!!!\n\n");
- // }
- //fr8012haq_init(WEAR_MODE);//打开佩戴检测
- // FR8012HAQ_run_mode = YYL_MODE;
- // fr8012haq_start();
+ fr8012haq_hisr_ref_flag = 0;
}
void FR8012HAQ_restart(void)
{
fr8012haq_en_gpio_enable(false);
- fr8012haq_delay(50);
+ fr8012haq_delay(20);
fr8012haq_en_gpio_enable(true);
- fr8012haq_delay(100);
+ fr8012haq_delay(160);
FR8012HAQ_LOG("FR8012HAQ_restart!!!\n");
}
//printf("[@CHENG_DEBUG][%s][%d]: wear=%d,s_wear=%d\n", __FUNCTION__, __LINE__, wear_status, s_FR8012HAQ_wear_status);
- FR8012HAQ_LOG("s_FR8012HAQ_wear_status:%d !!!!!!!!!!!!!!!!!\n\n\n",s_FR8012HAQ_wear_status);
+ //FR8012HAQ_LOG("s_FR8012HAQ_wear_status:%d !!!!!!!!!!!!!!!!!\n\n\n",s_FR8012HAQ_wear_status);
}
unsigned char FR8012HAQ_result_get_wear_status(void)
{