mcu_ab568x/app/projects/AB5681F_240_32M/functions/func_findphone.c
2025-05-30 18:03:10 +08:00

316 lines
9.1 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "include.h"
#include "func.h"
#include "app_variable.h"
#include "protocol_device.h"
#if TRACE_EN
#define TRACE(...) printf(__VA_ARGS__)
#else
#define TRACE(...)
#endif
#define FINDPHONE_POS_ICON_RIGHT 127
#define FINDPHONE_POS_ICON_DOWN GUI_SCREEN_CENTER_Y+7
#define FINDPHONE_POS_ICON_LEFT 113
#define FINDPHONE_POS_ICON_UP GUI_SCREEN_CENTER_Y-7
#define FINDPHONE_FIND_TIME_MAX 5000
typedef struct f_findphone_t_ {
u8 cur_sta;
u16 pos_x;
u16 pos_y;
u8 flag_find;
u32 find_tick;
bool music_flag; //是否在播放音乐标志位
u8 pos_flag;
} f_findphone_t;
enum {
COMPO_ID_TEXT_FIND = 1,
COMPO_ID_PIC_FIND,
COMPO_ID_PIC_FIND_TEXT,
COMPO_ID_PIC_FIND_CLICK,
COMPO_ID_PIC_FIND_ICON,
};
//查找手机检测状态
enum {
FP_STA_IDLE, //空闲
FP_STA_WORKING, //查找中
};
//创建查找手机窗体
compo_form_t *func_findphone_form_create(void)
{
//新建窗体
compo_form_t *frm = compo_form_create(true);
//设置标题栏
compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME);
compo_form_set_title(frm, i18n[STR_FIND_PHONE]);
//新建图像
compo_picturebox_t *pic;
pic = compo_picturebox_create(frm, UI_BUF_COMMON_FIND_PHONE_BIN);
compo_setid(pic, COMPO_ID_PIC_FIND);
compo_picturebox_set_pos(pic, GUI_SCREEN_CENTER_X, 78+60);
//创建矩形
widget_rect_t *rect = widget_rect_create(frm->page);
widget_rect_set_color(rect,make_color(0, 228, 198));
widget_set_location(rect, GUI_SCREEN_CENTER_X, 230+25, 216, 50);
widget_rect_set_radius(rect,14);
//创建按钮
compo_button_t *btn = compo_button_create(frm);
compo_setid(btn, COMPO_ID_PIC_FIND_CLICK);
compo_button_set_location(btn, GUI_SCREEN_CENTER_X, 230+25, 216, 50);
//创建按钮
// btn = compo_button_create_by_image(frm, UI_BUF_COMMON_BG_GREEN_BIN);
// compo_setid(btn, COMPO_ID_PIC_FIND_CLICK);
// compo_button_set_pos(btn, GUI_SCREEN_CENTER_X, 230+25);
//新建文字
compo_textbox_t *txt = compo_textbox_create(frm, 100);
compo_setid(txt, COMPO_ID_PIC_FIND_TEXT);
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 230+25, 180, 30);
compo_textbox_set(txt, i18n[STR_FIND_PHONE1]);
compo_textbox_set_align_center(txt, true);
compo_textbox_set_autoroll_mode(txt, TEXT_AUTOROLL_MODE_SROLL_CIRC);
//放大境
compo_picturebox_create_coordinate(frm,UI_BUF_FIND_PHONE_ICON_BIN,GUI_SCREEN_CENTER_X,GUI_SCREEN_CENTER_Y,COMPO_ID_PIC_FIND_ICON,true);
return frm;
}
static void func_findphone_stop(void)
{
f_findphone_t *f_act = (f_findphone_t *)func_cb.f_cb;
compo_textbox_t *text = compo_getobj_byid(COMPO_ID_PIC_FIND_TEXT);
compo_picturebox_t *icon = compo_getobj_byid(COMPO_ID_PIC_FIND_ICON);
if (f_act == NULL || text == NULL)
return;
bsp_motor_stop(MOTOR_PORT);
Send_Protocol_Stop_FindPhone();
compo_textbox_set(text, i18n[STR_FIND_PHONE1]);
f_act->cur_sta = FP_STA_IDLE;
if(bt_a2dp_is_connected() == 0
#ifdef TJD_SETTING_AUDIO_SWITCH
&& SysVariable.bt_a2dp_profile_state
#endif
)
{
printf("[%s %d][bt_a2dp_profile_en() <<<<<<<<<<<<<<]\n", __func__, __LINE__);
bt_a2dp_profile_en();
}
if (f_act->music_flag == true)
{
f_act->music_flag=false;
delay_5ms(100); // 需要先延迟一下可能会出现第一时间a2dp没有开的情况
bt_music_play();
}
f_act->pos_x=GUI_SCREEN_CENTER_X;
f_act->pos_y=GUI_SCREEN_CENTER_Y+7;
f_act->pos_flag=0;
compo_picturebox_set_pos(icon,GUI_SCREEN_CENTER_X,GUI_SCREEN_CENTER_Y);
}
//查找手机功能事件处理
static void func_findphone_process(void)
{
f_findphone_t *f_act = (f_findphone_t *)func_cb.f_cb;
compo_picturebox_t *pic = compo_getobj_byid(COMPO_ID_PIC_FIND);
compo_picturebox_t *icon = compo_getobj_byid(COMPO_ID_PIC_FIND_ICON);
static u32 ticks = 0;
// 判断 蓝牙是否连接
if ((SysVariable.ble_state == TRUE))
{
if ((f_act->cur_sta == FP_STA_WORKING))
{
if (tick_check_expire(f_act->find_tick, FINDPHONE_FIND_TIME_MAX)) {
func_findphone_stop();
return;
}
// 开始查找手机
if (tick_check_expire(ticks, 25))
{
ticks = tick_get();
if (f_act->pos_x <= FINDPHONE_POS_ICON_RIGHT&&f_act->pos_flag==0)
{
f_act->pos_x++;
f_act->pos_y--;
if(f_act->pos_x == FINDPHONE_POS_ICON_RIGHT)
f_act->pos_flag=1;
}
else if(f_act->pos_y >= FINDPHONE_POS_ICON_UP&&f_act->pos_flag==1)
{
f_act->pos_x--;
f_act->pos_y--;
if(f_act->pos_y == FINDPHONE_POS_ICON_UP)
f_act->pos_flag=2;
}
else if(f_act->pos_x >= FINDPHONE_POS_ICON_LEFT&&f_act->pos_flag==2)
{
f_act->pos_x--;
f_act->pos_y++;
if(f_act->pos_x == FINDPHONE_POS_ICON_LEFT)
f_act->pos_flag=3;
}
else
{
f_act->pos_x++;
f_act->pos_y++;
if(f_act->pos_y == FINDPHONE_POS_ICON_DOWN)
f_act->pos_flag=0;
}
}
compo_picturebox_set_pos(icon,f_act->pos_x,f_act->pos_y);
}
else{/*
f_act->pos_x=GUI_SCREEN_CENTER_X;
f_act->pos_y=GUI_SCREEN_CENTER_Y+7;
f_act->pos_flag=0;
compo_picturebox_set_pos(icon,GUI_SCREEN_CENTER_X,GUI_SCREEN_CENTER_Y);*/
}
}
func_process();
}
//按键事件处理
static void func_findphone_click(void)
{
f_findphone_t *f_act = (f_findphone_t *)func_cb.f_cb;
compo_textbox_t *text = compo_getobj_byid(COMPO_ID_PIC_FIND_TEXT);
int id = compo_get_button_id();
switch (id) {
case COMPO_ID_PIC_FIND_CLICK:
if ((SysVariable.ble_state == TRUE))
{
if (bt_get_status() == BT_STA_PLAYING) {
f_act->music_flag = true;
bt_music_pause();
} else {
f_act->music_flag = false;
}
if (f_act->cur_sta == FP_STA_IDLE) {
Send_Protocol_FindPhone();
if (bt_a2dp_is_connected()) {
printf("[%s %d][bt_a2dp_profile_dis() <<<<<<<<<<<<<<]\n", __func__, __LINE__);
bt_a2dp_profile_dis();
}
sys_cb.motor_flag = 1;
set_func_motor(80, 2, 2, 1);
f_act->cur_sta = FP_STA_WORKING;
f_act->find_tick = tick_get();
compo_textbox_set(text, i18n[STR_FIND_PHONEING]);
} else {
func_findphone_stop();
}
} else {
if (f_act->cur_sta == FP_STA_WORKING) {
func_findphone_stop();
} else {
func_popup_new(POPUP_ID_BLE_REMIND);
}
}
break;
default:
break;
}
}
//查找手机功能消息处理
static void func_findphone_message(size_msg_t msg)
{
f_findphone_t *f_act = (f_findphone_t *)func_cb.f_cb;
switch (msg) {
case MSG_CTP_CLICK:
func_findphone_click();
break;
case MSG_CTP_SHORT_UP:
break;
case MSG_CTP_SHORT_DOWN:
break;
case MSG_CTP_SHORT_RIGHT:
if (f_act->cur_sta == FP_STA_WORKING) {
func_findphone_stop();
}
func_message(msg);
break;
case MSG_CTP_LONG:
break;
case KU_BACK:
func_back_to();
break;
default:
func_message(msg);
break;
}
}
//进入查找手机功能
static void func_findphone_enter(void)
{
func_cb.f_cb = func_zalloc(sizeof(f_findphone_t));
func_cb.frm_main = func_findphone_form_create();
f_findphone_t *f_act = (f_findphone_t *)func_cb.f_cb;
f_act->cur_sta = FP_STA_IDLE;
f_act->pos_x=GUI_SCREEN_CENTER_X;
f_act->pos_y=GUI_SCREEN_CENTER_Y+7;
f_act->pos_flag=0;
}
//退出查找手机功能
static void func_findphone_exit(void)
{
//关闭查找手机
printf("%s\n", __func__);
Send_Protocol_Stop_FindPhone();
func_cb.last = FUNC_FINDPHONE;
if(bt_a2dp_is_connected() == 0
#ifdef TJD_SETTING_AUDIO_SWITCH
&& SysVariable.bt_a2dp_profile_state
#endif
)
{
bt_a2dp_profile_en();
}
printf("%s22\n", __func__);
}
//查找手机功能
void func_findphone(void)
{
printf("%s\n", __func__);
func_findphone_enter();
while (func_cb.sta == FUNC_FINDPHONE) {
func_findphone_process();
func_findphone_message(msg_dequeue());
}
func_findphone_exit();
}