737 lines
17 KiB
C
737 lines
17 KiB
C
|
#include "app_config.h"
|
|||
|
#include "includes.h"
|
|||
|
#include "ui/ui_api.h"
|
|||
|
#include "ui/ui.h"
|
|||
|
#include "typedef.h"
|
|||
|
#include "clock_cfg.h"
|
|||
|
|
|||
|
#if (TCFG_UI_ENABLE &&TCFG_SPI_LCD_ENABLE && (!TCFG_SIMPLE_LCD_ENABLE))
|
|||
|
|
|||
|
#include "ui/ui_sys_param.h"
|
|||
|
#include "ui/res_config.h"
|
|||
|
|
|||
|
#define CURR_WINDOW_MAIN (0)
|
|||
|
|
|||
|
#define UI_NO_ARG (-1)
|
|||
|
#define UI_TASK_NAME "ui"
|
|||
|
|
|||
|
enum {
|
|||
|
UI_MSG_OTHER,
|
|||
|
UI_MSG_KEY,
|
|||
|
UI_MSG_TOUCH,
|
|||
|
UI_MSG_SHOW,
|
|||
|
UI_MSG_HIDE,
|
|||
|
UI_TIME_TOUCH_RESUME,
|
|||
|
UI_TIME_TOUCH_SUPEND,
|
|||
|
UI_MSG_EXIT,
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct ui_server_env {
|
|||
|
u8 init: 1;
|
|||
|
u8 key_lock : 1;
|
|||
|
OS_SEM start_sem;
|
|||
|
int (*touch_event_call)(void);
|
|||
|
int touch_event_interval;
|
|||
|
u16 timer;
|
|||
|
u8 shut_down_time;
|
|||
|
};
|
|||
|
|
|||
|
int lcd_backlight_status();
|
|||
|
int lcd_backlight_ctrl(u8 on);
|
|||
|
void ui_backlight_open(void);
|
|||
|
void ui_backlight_close(void);
|
|||
|
int lcd_sleep_ctrl(u8 enter);
|
|||
|
|
|||
|
static struct ui_server_env __ui_display = {0};
|
|||
|
static u8 lcd_bl_idle_flag = 0;
|
|||
|
|
|||
|
int key_is_ui_takeover()
|
|||
|
{
|
|||
|
return __ui_display.key_lock;
|
|||
|
}
|
|||
|
|
|||
|
void key_ui_takeover(u8 on)
|
|||
|
{
|
|||
|
__ui_display.key_lock = !!on;
|
|||
|
}
|
|||
|
|
|||
|
static int post_ui_msg(int *msg, u8 len)
|
|||
|
{
|
|||
|
int err = 0;
|
|||
|
int count = 0;
|
|||
|
if (!__ui_display.init) {
|
|||
|
return -1;
|
|||
|
}
|
|||
|
__retry:
|
|||
|
err = os_taskq_post_type(UI_TASK_NAME, msg[0], len - 1, &msg[1]);
|
|||
|
|
|||
|
if (cpu_in_irq() || cpu_irq_disabled()) {
|
|||
|
return err;
|
|||
|
}
|
|||
|
|
|||
|
if (err) {
|
|||
|
if (!strcmp(os_current_task(), UI_TASK_NAME)) {
|
|||
|
return err;
|
|||
|
}
|
|||
|
if (count > 20) {
|
|||
|
return -1;
|
|||
|
}
|
|||
|
count++;
|
|||
|
os_time_dly(1);
|
|||
|
goto __retry;
|
|||
|
}
|
|||
|
return err;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//=================================================================================//
|
|||
|
// @brief: 显示主页 应用于非ui线程显示主页使用
|
|||
|
//有针对ui线程进行处理,允许用于ui线程等同ui_show使用
|
|||
|
//=================================================================================//
|
|||
|
int ui_show_main(int id)
|
|||
|
{
|
|||
|
u32 rets;//, reti;
|
|||
|
__asm__ volatile("%0 = rets":"=r"(rets));
|
|||
|
printf("__func__ %s %x\n", __func__, rets);
|
|||
|
|
|||
|
static u32 mem_id[8] = {0};
|
|||
|
static OS_SEM sem;// = zalloc(sizeof(OS_SEM));
|
|||
|
int msg[8];
|
|||
|
int i;
|
|||
|
|
|||
|
|
|||
|
if (id <= 0) {
|
|||
|
if (mem_id[7 + id]) {
|
|||
|
id = mem_id[7 + id];
|
|||
|
} else {
|
|||
|
printf("[ui_show_main] id %d is invalid.\n", id);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
}
|
|||
|
//else {
|
|||
|
if (mem_id[7] != id) {
|
|||
|
for (i = 1; i <= 7; i++) {
|
|||
|
mem_id[i - 1] = mem_id[i];
|
|||
|
}
|
|||
|
mem_id[7] = id;
|
|||
|
}
|
|||
|
//}
|
|||
|
|
|||
|
printf("[ui_show_main] id = 0x%x\n", id);
|
|||
|
|
|||
|
/* if (!strcmp(os_current_task(), UI_TASK_NAME)) { */
|
|||
|
/* ui_show(id); */
|
|||
|
/* return 0; */
|
|||
|
/* } */
|
|||
|
u8 need_pend = 0;
|
|||
|
if (!(cpu_in_irq() || cpu_irq_disabled())) {
|
|||
|
if (strcmp(os_current_task(), UI_TASK_NAME)) {
|
|||
|
need_pend = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
msg[0] = UI_MSG_SHOW;
|
|||
|
msg[1] = id;
|
|||
|
msg[2] = 0;
|
|||
|
|
|||
|
if (need_pend) {
|
|||
|
os_sem_create(&sem, 0);
|
|||
|
msg[2] = (int)&sem;
|
|||
|
}
|
|||
|
|
|||
|
if (!post_ui_msg(msg, 3)) {
|
|||
|
if (need_pend) {
|
|||
|
os_sem_pend(&sem, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if (!lcd_backlight_status()) {
|
|||
|
printf("backlight is close ... ui_show_main_now\n");
|
|||
|
lcd_bl_idle_flag = 0;
|
|||
|
ui_auto_shut_down_enable();
|
|||
|
ui_touch_timer_start();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//=================================================================================//
|
|||
|
// @brief: 关闭主页 应用于非ui线程关闭使用
|
|||
|
//有针对ui线程进行处理,允许用于ui线程等同ui_hide使用
|
|||
|
//=================================================================================//
|
|||
|
int ui_hide_main(int id)
|
|||
|
{
|
|||
|
u32 rets;//, reti;
|
|||
|
__asm__ volatile("%0 = rets":"=r"(rets));
|
|||
|
printf("__func__ %s %x\n", __func__, rets);
|
|||
|
|
|||
|
|
|||
|
static OS_SEM sem;// = zalloc(sizeof(OS_SEM));
|
|||
|
int msg[8];
|
|||
|
|
|||
|
u8 need_pend = 0;;
|
|||
|
if (!(cpu_in_irq() || cpu_irq_disabled())) {
|
|||
|
if (strcmp(os_current_task(), UI_TASK_NAME)) {
|
|||
|
need_pend = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
/* if (!strcmp(os_current_task(), UI_TASK_NAME)) { */
|
|||
|
/* if (CURR_WINDOW_MAIN == id) { */
|
|||
|
/* id = ui_get_current_window_id(); */
|
|||
|
/* } */
|
|||
|
/* ui_hide(id); */
|
|||
|
/* return 0; */
|
|||
|
/* } */
|
|||
|
msg[0] = UI_MSG_HIDE;
|
|||
|
msg[1] = id;
|
|||
|
msg[2] = 0;
|
|||
|
|
|||
|
if (need_pend) {
|
|||
|
os_sem_create(&sem, 0);
|
|||
|
msg[2] = (int)&sem;
|
|||
|
}
|
|||
|
|
|||
|
if (!post_ui_msg(msg, 3)) {
|
|||
|
if (need_pend) {
|
|||
|
os_sem_pend(&sem, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================//
|
|||
|
// @brief: 关闭当前主页 灵活使用自动判断当前主页进行关闭
|
|||
|
//用户可以不用关心当前打开的主页,特别适用于一个任务使用了多个主页的场景
|
|||
|
//=================================================================================//
|
|||
|
int ui_hide_curr_main()
|
|||
|
{
|
|||
|
return ui_hide_main(CURR_WINDOW_MAIN);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//=================================================================================//
|
|||
|
// @brief: 应用往ui发送消息,ui主页需要注册回调函数关闭当前主页
|
|||
|
// //消息发送方法demo: UI_MSG_POST("test1:a=%4,test2:bcd=%4,test3:efgh=%4,test4:hijkl=%4", 1,2,3,4);
|
|||
|
// 往test1、test2、test3、test4发送了字符为a、bcd、efgh、hijkl,附带变量为1、2、3、4
|
|||
|
// 每次可以只发一个消息,也可以不带数据例如:UI_MSG_POST("test1")
|
|||
|
//=================================================================================//
|
|||
|
int ui_server_msg_post(const char *msg, ...)
|
|||
|
{
|
|||
|
int ret = 0;
|
|||
|
int argv[9];
|
|||
|
argv[0] = UI_MSG_OTHER;
|
|||
|
argv[1] = (int)msg;
|
|||
|
va_list argptr;
|
|||
|
va_start(argptr, msg);
|
|||
|
for (int i = 2; i < 7; i++) {
|
|||
|
argv[i] = va_arg(argptr, int);
|
|||
|
}
|
|||
|
va_end(argptr);
|
|||
|
return post_ui_msg(argv, 9);
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================//
|
|||
|
// @brief: 应用往ui发送key消息,由ui控件分配
|
|||
|
//=================================================================================//
|
|||
|
int ui_key_msg_post(int key)
|
|||
|
{
|
|||
|
u8 count = 0;
|
|||
|
int msg[8];
|
|||
|
|
|||
|
if (key >= 0x80) {
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
msg[0] = UI_MSG_KEY;
|
|||
|
msg[1] = key;
|
|||
|
return post_ui_msg(msg, 2);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//=================================================================================//
|
|||
|
// @brief: 应用往ui发送触摸消息,由ui控件分配
|
|||
|
//=================================================================================//
|
|||
|
int ui_touch_msg_post(struct touch_event *event)
|
|||
|
{
|
|||
|
int msg[8];
|
|||
|
int i = 0;
|
|||
|
ui_auto_shut_down_modify();
|
|||
|
if (!lcd_backlight_status()) {
|
|||
|
ui_backlight_open();
|
|||
|
return 0;
|
|||
|
}
|
|||
|
msg[0] = UI_MSG_TOUCH;
|
|||
|
msg[1] = (int)NULL;
|
|||
|
memcpy(&msg[2], event, sizeof(struct touch_event));
|
|||
|
return post_ui_msg(msg, sizeof(struct touch_event) / 4 + 2);
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================//
|
|||
|
// @brief: 应用往ui发送触摸消息,由ui控件分配
|
|||
|
//=================================================================================//
|
|||
|
int ui_touch_msg_post_withcallback(struct touch_event *event, void (*cb)(u8 finish))
|
|||
|
{
|
|||
|
int msg[8];
|
|||
|
int i = 0;
|
|||
|
msg[0] = UI_MSG_TOUCH;
|
|||
|
msg[1] = (int)cb;
|
|||
|
memcpy(&msg[2], event, sizeof(struct touch_event));
|
|||
|
return post_ui_msg(msg, sizeof(struct touch_event) / 4 + 2);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
const char *str_substr_iter(const char *str, char delim, int *iter)
|
|||
|
{
|
|||
|
const char *substr;
|
|||
|
ASSERT(str != NULL);
|
|||
|
substr = str + *iter;
|
|||
|
if (*substr == '\0') {
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
for (str = substr; *str != '\0'; str++) {
|
|||
|
(*iter)++;
|
|||
|
if (*str == delim) {
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return substr;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static int do_msg_handler(const char *msg, va_list *pargptr, int (*handler)(const char *, u32))
|
|||
|
{
|
|||
|
int ret = 0;
|
|||
|
int width;
|
|||
|
int step = 0;
|
|||
|
u32 arg = 0x5678;
|
|||
|
int m[16];
|
|||
|
char *t = (char *)&m[3];
|
|||
|
va_list argptr = *pargptr;
|
|||
|
|
|||
|
if (*msg == '\0') {
|
|||
|
handler((const char *)' ', 0);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
while (*msg && *msg != ',') {
|
|||
|
switch (step) {
|
|||
|
case 0:
|
|||
|
if (*msg == ':') {
|
|||
|
step = 1;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
switch (*msg) {
|
|||
|
case '%':
|
|||
|
msg++;
|
|||
|
if (*msg >= '0' && *msg <= '9') {
|
|||
|
if (*msg == '1') {
|
|||
|
arg = va_arg(argptr, int) & 0xff;
|
|||
|
} else if (*msg == '2') {
|
|||
|
arg = va_arg(argptr, int) & 0xffff;
|
|||
|
} else if (*msg == '4') {
|
|||
|
arg = va_arg(argptr, int);
|
|||
|
}
|
|||
|
} else if (*msg == 'p') {
|
|||
|
arg = va_arg(argptr, int);
|
|||
|
}
|
|||
|
m[2] = arg;
|
|||
|
handler((char *)&m[3], m[2]);
|
|||
|
t = (char *)&m[3];
|
|||
|
step = 0;
|
|||
|
break;
|
|||
|
case '=':
|
|||
|
*t = '\0';
|
|||
|
break;
|
|||
|
case ' ':
|
|||
|
break;
|
|||
|
default:
|
|||
|
*t++ = *msg;
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
msg++;
|
|||
|
}
|
|||
|
*pargptr = argptr;
|
|||
|
return ret;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
int ui_message_handler(int id, const char *msg, va_list argptr)
|
|||
|
{
|
|||
|
int iter = 0;
|
|||
|
const char *str;
|
|||
|
const struct uimsg_handl *handler;
|
|||
|
struct window *window = (struct window *)ui_core_get_element_by_id(id);
|
|||
|
if (!window || !window->private_data) {
|
|||
|
return -EINVAL;
|
|||
|
}
|
|||
|
handler = (const struct uimsg_handl *)window->private_data;
|
|||
|
while ((str = str_substr_iter(msg, ',', &iter)) != NULL) {
|
|||
|
for (; handler->msg != NULL; handler++) {
|
|||
|
if (!memcmp(str, handler->msg, strlen(handler->msg))) {
|
|||
|
do_msg_handler(str + strlen(handler->msg), &argptr, handler->handler);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
extern void sys_param_init(void);
|
|||
|
|
|||
|
void ui_touch_timer_delete()
|
|||
|
{
|
|||
|
if (!__ui_display.init) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
#if UI_WATCH_RES_ENABLE
|
|||
|
local_irq_disable();
|
|||
|
if (!__ui_display.timer) {
|
|||
|
local_irq_enable();
|
|||
|
return;
|
|||
|
}
|
|||
|
local_irq_enable();
|
|||
|
#endif
|
|||
|
int msg[8];
|
|||
|
msg[0] = UI_TIME_TOUCH_SUPEND;
|
|||
|
post_ui_msg(msg, 1);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void ui_touch_timer_start()
|
|||
|
{
|
|||
|
if (!__ui_display.init) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
local_irq_disable();
|
|||
|
if (__ui_display.timer) {
|
|||
|
local_irq_enable();
|
|||
|
return;
|
|||
|
}
|
|||
|
local_irq_enable();
|
|||
|
int msg[8];
|
|||
|
msg[0] = UI_TIME_TOUCH_RESUME;
|
|||
|
post_ui_msg(msg, 1);
|
|||
|
}
|
|||
|
|
|||
|
void ui_set_touch_event(int (*touch_event)(void), int interval)
|
|||
|
{
|
|||
|
__ui_display.touch_event_call = touch_event;
|
|||
|
__ui_display.touch_event_interval = interval;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void ui_auto_shut_down_enable(void);
|
|||
|
void ui_auto_shut_down_disable(void);
|
|||
|
static int ui_auto_shut_down_timer = 0;
|
|||
|
static u8 open_flag = 0;
|
|||
|
void ui_backlight_open(void)
|
|||
|
{
|
|||
|
|
|||
|
u32 rets;//, reti;
|
|||
|
__asm__ volatile("%0 = rets":"=r"(rets));
|
|||
|
|
|||
|
lcd_bl_idle_flag = 0;
|
|||
|
if (!__ui_display.init) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (open_flag) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
printf("__func__ %s %x\n", __func__, rets);
|
|||
|
if (!lcd_backlight_status()) {
|
|||
|
|
|||
|
open_flag = 1;
|
|||
|
|
|||
|
|
|||
|
/* UI_MSG_POST("ui_lp_cb:exit=%4", 1); */
|
|||
|
/* sys_key_event_enable();//关闭按键 */
|
|||
|
ui_auto_shut_down_enable();
|
|||
|
//lcd_sleep_ctrl(0);//屏幕退出低功耗
|
|||
|
#if UI_WATCH_RES_ENABLE
|
|||
|
ui_show_main(0);//恢复当前ui
|
|||
|
#endif
|
|||
|
ui_touch_timer_start();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void ui_backlight_close(void)
|
|||
|
{
|
|||
|
|
|||
|
if (!__ui_display.init) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
open_flag = 0;
|
|||
|
|
|||
|
if (lcd_backlight_status()) {
|
|||
|
/* UI_MSG_POST("ui_lp_cb:enter=%4", 0); */
|
|||
|
/* sys_key_event_disable();//关闭按键 */
|
|||
|
#if UI_WATCH_RES_ENABLE
|
|||
|
ui_hide_curr_main();//关闭当前页面
|
|||
|
#endif
|
|||
|
ui_auto_shut_down_disable();
|
|||
|
ui_touch_timer_delete();
|
|||
|
}
|
|||
|
lcd_bl_idle_flag = 1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#if TCFG_UI_SHUT_DOWN_TIME
|
|||
|
void ui_set_shut_down_time(u8 time)
|
|||
|
{
|
|||
|
__ui_display.shut_down_time = time;
|
|||
|
}
|
|||
|
int ui_get_shut_down_time()
|
|||
|
{
|
|||
|
return __ui_display.shut_down_time;
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
void ui_auto_shut_down_enable(void)
|
|||
|
{
|
|||
|
#if TCFG_UI_SHUT_DOWN_TIME
|
|||
|
if (!__ui_display.init) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (ui_auto_shut_down_timer == 0) {
|
|||
|
if (__ui_display.shut_down_time == 0) {
|
|||
|
__ui_display.shut_down_time = 10;
|
|||
|
}
|
|||
|
if (__ui_display.shut_down_time > 20) {
|
|||
|
__ui_display.shut_down_time = 20;
|
|||
|
}
|
|||
|
g_printf("ui shut down time:%d", __ui_display.shut_down_time);
|
|||
|
ui_auto_shut_down_timer = sys_timeout_add(NULL, ui_backlight_close, __ui_display.shut_down_time * 1000);
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
void ui_auto_shut_down_disable(void)
|
|||
|
{
|
|||
|
#if TCFG_UI_SHUT_DOWN_TIME
|
|||
|
if (ui_auto_shut_down_timer) {
|
|||
|
sys_timeout_del(ui_auto_shut_down_timer);
|
|||
|
ui_auto_shut_down_timer = 0;
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
void ui_auto_shut_down_modify(void)
|
|||
|
{
|
|||
|
#if TCFG_UI_SHUT_DOWN_TIME
|
|||
|
if (ui_auto_shut_down_timer) {
|
|||
|
sys_timer_modify(ui_auto_shut_down_timer, __ui_display.shut_down_time * 1000);
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
static u8 lcd_bl_idle_query(void)
|
|||
|
{
|
|||
|
return lcd_bl_idle_flag;
|
|||
|
}
|
|||
|
REGISTER_LP_TARGET(lcd_backlight_lp_target) = {
|
|||
|
.name = "lcd_backlight",
|
|||
|
.is_idle = lcd_bl_idle_query,
|
|||
|
};
|
|||
|
|
|||
|
__attribute__((weak)) void ui_sysinfo_init()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
static void ui_task(void *p)
|
|||
|
{
|
|||
|
int msg[32];
|
|||
|
int ret;
|
|||
|
struct element_key_event e = {0};
|
|||
|
|
|||
|
sys_param_init();
|
|||
|
/* struct ui_style style; */
|
|||
|
/* style.file = NULL; */
|
|||
|
extern void ui_sysinfo_init();
|
|||
|
ui_sysinfo_init();
|
|||
|
|
|||
|
ui_framework_init(p);
|
|||
|
/* ret = ui_set_style_file(&style); */
|
|||
|
/* if (ret) { */
|
|||
|
/* printf("ui task fail!\n"); */
|
|||
|
/* return; */
|
|||
|
/* } */
|
|||
|
|
|||
|
__ui_display.init = 1;
|
|||
|
os_sem_post(&(__ui_display.start_sem));
|
|||
|
struct touch_event *touch;
|
|||
|
struct element_touch_event t;
|
|||
|
|
|||
|
if (__ui_display.touch_event_call && __ui_display.touch_event_interval) {
|
|||
|
__ui_display.timer = sys_timer_add((void *)NULL, __ui_display.touch_event_call, __ui_display.touch_event_interval); //注册按键扫描定时器
|
|||
|
}
|
|||
|
|
|||
|
while (1) {
|
|||
|
ret = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg)); //500ms_reflash
|
|||
|
if (ret != OS_TASKQ) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
switch (msg[0]) { //action
|
|||
|
case UI_MSG_EXIT:
|
|||
|
os_sem_post((OS_SEM *)msg[1]);
|
|||
|
os_time_dly(10000);
|
|||
|
break;
|
|||
|
case UI_MSG_OTHER:
|
|||
|
ui_message_handler(ui_get_current_window_id(), (const char *)msg[1], (void *)&msg[2]);
|
|||
|
break;
|
|||
|
case UI_MSG_KEY:
|
|||
|
e.value = msg[1];
|
|||
|
ui_event_onkey(&e);
|
|||
|
break;
|
|||
|
case UI_MSG_TOUCH:
|
|||
|
touch = (struct touch_event *)&msg[2];
|
|||
|
t.event = touch->event;
|
|||
|
t.pos.x = touch->x;
|
|||
|
t.pos.y = touch->y;
|
|||
|
/* printf("event = %d %d %d \n", t.event, t.pos.x, t.pos.y); */
|
|||
|
if (msg[1]) {
|
|||
|
((void(*)(u8))msg[1])(0);
|
|||
|
}
|
|||
|
ui_event_ontouch(&t);
|
|||
|
if (msg[1]) {
|
|||
|
((void(*)(u8))msg[1])(1);
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
case UI_MSG_SHOW:
|
|||
|
if (!lcd_backlight_status()) {
|
|||
|
lcd_sleep_ctrl(0);//退出低功耗
|
|||
|
}
|
|||
|
|
|||
|
if (ui_id2type((msg[1])) == CTRL_TYPE_WINDOW && ui_get_current_window_id() > 0) {
|
|||
|
printf("ui = %x show repeat.....\n", ui_get_current_window_id());
|
|||
|
ui_hide(ui_get_current_window_id());
|
|||
|
}
|
|||
|
|
|||
|
ui_show(msg[1]);
|
|||
|
if (msg[2]) {
|
|||
|
os_sem_post((OS_SEM *)msg[2]);
|
|||
|
}
|
|||
|
break;
|
|||
|
case UI_MSG_HIDE:
|
|||
|
if (CURR_WINDOW_MAIN == msg[1]) {
|
|||
|
ui_hide(ui_get_current_window_id());
|
|||
|
} else {
|
|||
|
ui_hide(msg[1]);
|
|||
|
}
|
|||
|
|
|||
|
if (msg[2]) {
|
|||
|
os_sem_post((OS_SEM *)msg[2]);
|
|||
|
}
|
|||
|
break;
|
|||
|
case UI_TIME_TOUCH_RESUME:
|
|||
|
lcd_backlight_ctrl(true);
|
|||
|
if (__ui_display.timer) {
|
|||
|
break;
|
|||
|
}
|
|||
|
if (__ui_display.touch_event_call && __ui_display.touch_event_interval) {
|
|||
|
__ui_display.timer = sys_timer_add((void *)NULL, __ui_display.touch_event_call, __ui_display.touch_event_interval); //注册按键扫描定时器
|
|||
|
}
|
|||
|
break;
|
|||
|
case UI_TIME_TOUCH_SUPEND:
|
|||
|
if (__ui_display.timer) {
|
|||
|
sys_timer_del(__ui_display.timer);
|
|||
|
__ui_display.timer = 0;
|
|||
|
}
|
|||
|
lcd_backlight_ctrl(false);
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
extern int ui_file_check_valid();
|
|||
|
extern int ui_upgrade_file_check_valid();
|
|||
|
|
|||
|
int lcd_ui_init(void *arg)
|
|||
|
{
|
|||
|
int err = 0;
|
|||
|
clock_add_set(DEC_UI_CLK);
|
|||
|
printf("open_resouece_start...\n");
|
|||
|
if (ui_file_check_valid()) {
|
|||
|
printf("ui_file_check_valid fail!!!\n");
|
|||
|
if (ui_upgrade_file_check_valid()) {
|
|||
|
printf("ui_upgrade_file_check_valid fail!!!\n");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
os_sem_create(&(__ui_display.start_sem), 0);
|
|||
|
err = task_create(ui_task, arg, UI_TASK_NAME);
|
|||
|
os_sem_pend(&(__ui_display.start_sem), 0);
|
|||
|
return err;
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
int key_is_ui_takeover()
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
void key_ui_takeover(u8 on)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
int ui_key_msg_post(int key)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
int ui_touch_msg_post(struct touch_event *event)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
int ui_touch_msg_post_withcallback(struct touch_event *event, void (*cb)(u8 finish))
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
void ui_touch_timer_delete()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void ui_touch_timer_start()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void ui_backlight_ctrl(u8 lcd_open_flag)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
#endif
|
|||
|
|