227 lines
5.2 KiB
C
227 lines
5.2 KiB
C
#include "kt_ui.h"
|
|
#include "ui_home.h"
|
|
#include "ui_bt.h"
|
|
#include "ui_music.h"
|
|
#include "lvgl.h"
|
|
#include "lv_port_disp.h"
|
|
#include "drv_st7789.h"
|
|
#include "kt.h"
|
|
#include "app_task.h"
|
|
#include "key_event_deal.h"
|
|
|
|
void kt_ui_entry(void *priv);
|
|
|
|
//-----------------------------TIMER 2-----------------------------------
|
|
static const u32 __div[] = {
|
|
/*0000*/ 1,
|
|
/*0001*/ 4,
|
|
/*0010*/ 16,
|
|
/*0011*/ 64,
|
|
/*0100*/ 2,
|
|
/*0101*/ 8,
|
|
/*0110*/ 32,
|
|
/*0111*/ 128,
|
|
/*1000*/ 256,
|
|
/*1001*/ 4 * 256,
|
|
/*1010*/ 16 * 256,
|
|
/*1011*/ 64 * 256,
|
|
/*1100*/ 2 * 256,
|
|
/*1101*/ 8 * 256,
|
|
/*1110*/ 32 * 256,
|
|
/*1111*/ 128 * 256,
|
|
};
|
|
|
|
#define APP_TIMER_CLK clk_get("timer")
|
|
#define MAX_TIME_CNT 0x7fff
|
|
#define MIN_TIME_CNT 0x100
|
|
|
|
#define TIMER_UNIT_MS 1
|
|
#define MAX_TIMER_PERIOD_MS (1000 / TIMER_UNIT_MS)
|
|
|
|
#define LV_HANDLE_INTERVAL 5 /* 每 5ms 投递一次,避免队列溢出 */
|
|
|
|
___interrupt
|
|
AT_VOLATILE_RAM_CODE static void
|
|
__timer2_isr(void)
|
|
{
|
|
static u8 tick_cnt;
|
|
JL_TIMER2->CON |= BIT(14);
|
|
lv_tick_inc(1);
|
|
if (++tick_cnt >= LV_HANDLE_INTERVAL)
|
|
{
|
|
tick_cnt = 0;
|
|
os_taskq_post_msg(KT_TASK_UI_NAME, 1, KT_TASK_CMD_TIMHANDLE);
|
|
}
|
|
}
|
|
|
|
static void __timer2_init(void)
|
|
{
|
|
u32 prd_cnt;
|
|
u8 index;
|
|
|
|
for (index = 0; index < (sizeof(__div) / sizeof(__div[0])); index++)
|
|
{
|
|
prd_cnt = TIMER_UNIT_MS * (APP_TIMER_CLK / 1000) / __div[index];
|
|
if (prd_cnt > MIN_TIME_CNT && prd_cnt < MAX_TIME_CNT)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
JL_TIMER2->CNT = 0;
|
|
JL_TIMER2->PRD = prd_cnt; // 2ms
|
|
request_irq(IRQ_TIME2_IDX, 3, __timer2_isr, 0);
|
|
JL_TIMER2->CON = (index << 4) | BIT(0) | BIT(3);
|
|
|
|
printf("PRD : 0x%x / %d", JL_TIMER2->PRD, clk_get("timer"));
|
|
}
|
|
|
|
//-----------------------------TIMER 2 END--------------------------------
|
|
|
|
void kt_ui_init(void)
|
|
{
|
|
printf("kt_ui_init\n");
|
|
os_task_create(kt_ui_entry, NULL, 2, 2048, 2048, KT_TASK_UI_NAME);
|
|
}
|
|
|
|
void kt_ui_show_page(int page_id)
|
|
{
|
|
os_taskq_post_msg(KT_TASK_UI_NAME, 2, KT_TASK_CMD_SHOW_PAGE, page_id);
|
|
}
|
|
|
|
void kt_ui_post_key_event(int key_event, int key_value)
|
|
{
|
|
printf("kt_ui_post_key_event: key_event:%d, key_value:%d\n", key_event, key_value);
|
|
os_taskq_post_msg(KT_TASK_UI_NAME, 3, KT_TASK_CMD_KEY_EVENT, key_event, key_value);
|
|
}
|
|
|
|
void kt_ui_post_update_play_time(tPlayTime *play_time)
|
|
{
|
|
os_taskq_post_msg(KT_TASK_UI_NAME, 4, KT_TASK_CMD_UPDATE_PLAY_TIME, (u32)&play_time);
|
|
}
|
|
|
|
/* 三个页面屏幕 */
|
|
static lv_obj_t *scr_home;
|
|
static lv_obj_t *scr_bt;
|
|
static lv_obj_t *scr_music;
|
|
static int current_page_id = KT_PAGE_HOME;
|
|
|
|
static void lv_show_page(int page_id)
|
|
{
|
|
lv_obj_t *scr = NULL;
|
|
switch (page_id)
|
|
{
|
|
case KT_PAGE_HOME:
|
|
scr = scr_home;
|
|
break;
|
|
case KT_PAGE_BT:
|
|
scr = scr_bt;
|
|
break;
|
|
case KT_PAGE_MUSIC:
|
|
scr = scr_music;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
if (scr)
|
|
{
|
|
current_page_id = page_id;
|
|
lv_scr_load(scr);
|
|
}
|
|
}
|
|
|
|
int kt_ui_get_current_page(void)
|
|
{
|
|
return current_page_id;
|
|
}
|
|
|
|
/* 按键分发: 根据当前页面调用对应页面的按键处理 */
|
|
static void ui_dispatch_key_event(int key_event, int key_value)
|
|
{
|
|
//printf("ui_dispatch_key_event: current_page_id:%d, key_event:%d, key_value:%d\n", current_page_id, key_event, key_value);
|
|
switch (current_page_id)
|
|
{
|
|
case KT_PAGE_HOME:
|
|
//printf("ui_dispatch_key_event: KT_PAGE_HOME\n");
|
|
ui_home_on_key(key_event, key_value);
|
|
break;
|
|
case KT_PAGE_BT:
|
|
ui_bt_on_key(key_event, key_value);
|
|
break;
|
|
case KT_PAGE_MUSIC:
|
|
ui_music_on_key(key_event, key_value);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void lv_ui_init(void)
|
|
{
|
|
scr_home = ui_home_create();
|
|
scr_bt = ui_bt_create();
|
|
scr_music = ui_music_create();
|
|
|
|
lv_show_page(KT_PAGE_HOME);
|
|
}
|
|
|
|
void kt_ui_entry(void *priv)
|
|
{
|
|
// tMsg msg_body;
|
|
int msg[8];
|
|
|
|
printf(" kt_ui_entry \n");
|
|
lv_init();
|
|
__timer2_init(); /* 启动 1ms tick + 每 5ms 投递 TIMHANDLE */
|
|
printf(" lv_port_disp_init \n");
|
|
lv_port_disp_init();
|
|
// printf(" lv_port_indev_init \n");
|
|
// lv_port_indev_init();
|
|
lv_ui_init();
|
|
|
|
while (1)
|
|
{
|
|
int ret = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg));
|
|
if (ret != OS_TASKQ)
|
|
{
|
|
continue;
|
|
}
|
|
if (msg[0] != Q_MSG)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
switch (msg[1])
|
|
{
|
|
case KT_TASK_CMD_TIMHANDLE:
|
|
lv_task_handler();
|
|
break;
|
|
|
|
case KT_TASK_CMD_SHOW_PAGE:
|
|
if (msg[2] >= KT_PAGE_HOME && msg[2] <= KT_PAGE_MUSIC)
|
|
{
|
|
lv_show_page(msg[2]);
|
|
}
|
|
lv_task_handler();
|
|
break;
|
|
|
|
case KT_TASK_CMD_KEY_EVENT:
|
|
//printf("KT_TASK_CMD_KEY_EVENT: key_event:%d, key_value:%d\n", msg[2], msg[3]);
|
|
ui_dispatch_key_event(msg[2], msg[3]);
|
|
lv_task_handler();
|
|
break;
|
|
|
|
case KT_TASK_CMD_UPDATE_PLAY_TIME:
|
|
if (current_page_id == KT_PAGE_BT)
|
|
{
|
|
ui_bt_update_play_time();
|
|
}
|
|
lv_task_handler();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|