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

149 lines
4.5 KiB
C

#include "include.h"
#include "func.h"
#include "tjd_watch_transmit.h"
#define TRACE_EN 0
#if TRACE_EN
#define TRACE(...) printf(__VA_ARGS__)
#else
#define TRACE(...)
#endif
typedef struct f_dial_push_t_ {
u32 enter_tick;
u32 last_num;
} f_dial_push_t;
enum
{
COMPO_ID_ARC_START = 1,
COMPO_ID_TEXT,
};
extern PUSHDIAL_CMDDATA_T pushDialCmdData;
// size, arc_w, rotation, s_angle, e_angle, content_color, bg_color
static const int16_t push_arc_info[5] = {
GUI_SCREEN_WIDTH/4*3, 20, 0, 0, 3600, //kcal
};
//创建ota界面窗体
compo_form_t *func_dial_push_form_create(void)
{
//新建窗体
compo_form_t *frm = compo_form_create(true);
//创建圆弧
compo_arc_t *arc = compo_arc_create(frm);
compo_arc_set_alpha(arc, 0xff, 0);
compo_arc_set_location(arc, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, push_arc_info[0], push_arc_info[0]);
compo_arc_set_width(arc, push_arc_info[1]);
compo_arc_set_rotation(arc, push_arc_info[2]);
compo_arc_set_angles(arc, push_arc_info[3], push_arc_info[4]);
compo_arc_set_color(arc, make_color(12,237,65), make_color(255,255,255));
compo_arc_set_value(arc, 0);
compo_setid(arc, COMPO_ID_ARC_START);
char buf_pect[10] = {0};
compo_textbox_t *txt = compo_textbox_create(frm, 10);
compo_textbox_set_pos(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y);
compo_textbox_set_forecolor(txt, make_color(255,255,255));
compo_textbox_set_font(txt, UI_BUF_0FONT_FONT_DIN_LIGHT_NUM_15_BIN);
snprintf(buf_pect, sizeof(buf_pect), "%d%%", (int)(pushDialCmdData.curPackNum / pushDialCmdData.totalPackNum));
compo_textbox_set(txt, buf_pect);
compo_setid(txt, COMPO_ID_TEXT);
return frm;
}
static void func_dial_push_animation(void)
{
char buf_pect[10] = {0};
f_dial_push_t *f_dial_push = (f_dial_push_t *)func_cb.f_cb;
#if TRACE_EN
pushDialCmdData.curPackNum = pushDialCmdData.totalPackNum;
// if( pushDialCmdData.curPackNum > pushDialCmdData.totalPackNum)
// pushDialCmdData.curPackNum = 0;
#endif
reset_sleep_delay_all();
// printf("func_dial_push_animation[%d,%d,%d]",f_dial_push->last_num,pushDialCmdData.curPackNum,pushDialCmdData.totalPackNum);
if(f_dial_push->last_num != (pushDialCmdData.curPackNum*100)/pushDialCmdData.totalPackNum)
{
f_dial_push->last_num = (pushDialCmdData.curPackNum*100)/pushDialCmdData.totalPackNum;
compo_arc_t *arc = compo_getobj_byid(COMPO_ID_ARC_START);
compo_arc_set_value(arc, f_dial_push->last_num*10);
compo_textbox_t *txt = compo_getobj_byid(COMPO_ID_TEXT);
snprintf(buf_pect, sizeof(buf_pect), "%d%%", (int)(f_dial_push->last_num));
compo_textbox_set(txt, buf_pect);
}
}
//ota界面能事件处理
static void func_dial_push_process(void)
{
func_dial_push_animation();
func_process();
}
//ota界面功能消息处理
static void func_dial_push_message(size_msg_t msg)
{
switch (msg) {
case MSG_CTP_CLICK:
break;
case MSG_CTP_SHORT_LEFT:
case MSG_CTP_SHORT_RIGHT:
case MSG_CTP_SHORT_DOWN:
case MSG_CTP_SHORT_UP:
case MSG_QDEC_FORWARD:
case MSG_QDEC_BACKWARD:
break;
case KU_LEFT:
case KU_RIGHT:
case KU_BACK:
break;
case MSG_CTP_LONG:
break;
default:
func_message(msg);
break;
}
}
//进入ota界面提醒功能
static void func_dial_push_enter(void)
{
// printf("func_dial_push_enter = %d",pushDialCmdData.totalPackNum);
func_cb.f_cb = func_zalloc(sizeof(f_dial_push_t));
func_cb.frm_main = func_dial_push_form_create();
f_dial_push_t *f_dial_push = (f_dial_push_t *)func_cb.f_cb;
f_dial_push->last_num = (pushDialCmdData.curPackNum*100)/pushDialCmdData.totalPackNum;
}
//退出ota界面功能
static void func_dial_push_exit(void)
{
func_cb.last = FUN_DIAL_PUSH;
SysVariable.dial_push_screen = false;
}
//ota界面功能
void func_dial_push(void)
{
printf("%s\n", __func__);
#if TRACE_EN
pushDialCmdData.curPackNum = 0;
pushDialCmdData.totalPackNum = 10000;
#endif
SysVariable.dial_push_screen = true;
func_dial_push_enter();
while (func_cb.sta == FUN_DIAL_PUSH || pushDialCmdData.work) {
func_dial_push_process();
func_dial_push_message(msg_dequeue());
}
func_dial_push_exit();
}