KT24-1110_65E-HA-651B/apps/common/ui/lcd_simple/ui_mainmenu.c

259 lines
8.1 KiB
C
Raw Permalink Normal View History

2024-11-10 10:44:17 +00:00
#include "app_config.h"
#include "includes.h"
#include "system/includes.h"
#include "fs/fs.h"
#include "ui/ui_simple/ui_res.h"
#include "ui/lcd_simple/ui_mainmenu.h"
#include "ui/lcd_simple/ui.h"
#include "key_event_deal.h"
#include "app_task.h"
#include "app_msg.h"
#if (TCFG_UI_ENABLE&&(CONFIG_UI_STYLE == STYLE_UI_SIMPLE))
/* APP_POWERON_TASK = 1, */
/* APP_POWEROFF_TASK = 2, */
/* APP_BT_TASK = 3, */
/* APP_MUSIC_TASK = 4, */
/* APP_FM_TASK = 5, */
/* APP_RECORD_TASK = 6, */
/* APP_LINEIN_TASK = 7, */
/* APP_RTC_TASK = 8, */
/* APP_SLEEP_TASK = 9, */
/* APP_IDLE_TASK = 10, */
/* APP_PC_TASK = 11, */
/* APP_SPDIF_TASK = 12, */
/* APP_WATCH_UPDATE_TASK = 13, */
/* APP_SMARTBOX_ACTION_TASK = 14, */
/* */
const TASKSTRUCT taskbuf[TASKTOTLE] = {
{"none", 0xffff, 0xffff, 0,},//0
{"poweron", 0xffff, 0xffff, 0,},//1
{"powerff", 0xffff, 0xffff, 0,},//2
{"bt", FM, t_fm, 1,},//3
{"music", MUSIC1, t_music, 1,},//4
{"fm", FM, t_fm, 1,},//5
{"record", RECORD1, t_record, 1,},//6
{"linein", LINEIN1, alarm1, 1,},//7
{"rtctime", TOOLP, fm_rtue, 1,},//8
{"end", 0xffff, 0xffff, 0,},//必须 以end 结束
};
u8 taskindex[TASKTOTLE] = {0xff, 0, 1, 2, 3, 4, 5, 0xff, 0xff, 6, 7};
u8 taskshow[TASKTOTLE];
u8 g_taskshowsum;
#define LCDPAGE 8
#define LCDCOLUMN 128
#define SCR_WIDTH LCDCOLUMN
#define SCR_HEIGHT (LCDPAGE*8)
extern u8 LCDBuff[LCDPAGE][LCDCOLUMN];
void findtaskexist(u8 tasksum)
{
u8 i;
u8 ret;
u8 n = 0;
u8 appnumber = 0;
u16 taskexist = 0x0001; //必有 main task
u8 taskfile[16];
memset(&taskindex, 0xff, sizeof(taskindex));
for (i = 1; i < tasksum; i++) { //不用检查main task 0
if (!strcmp(taskbuf[i].taskname, "end")) {
break;
}
taskexist |= BIT(i);
if (taskbuf[i].showflag == 1) { //该task需显性显示
taskshow[n] = i;
taskindex[i] = appnumber++;
n++;
}
}
g_taskshowsum = n;
}
u8 Set_LeftTriangle(u8 Start_x, u8 Start_y) //左三角标
{
u8 x, y;
u8 LeftTrianglePixelBuf[2][3] = {0x80, 0xC0, 0xE0,
0x00, 0x01, 0x03
};
if ((Start_x > SCR_WIDTH - 3) || (Start_y > LCDPAGE)) {
return false;
}
for (x = Start_x; x < Start_x + 3; x++) {
for (y = Start_y; y < Start_y + 2; y++) {
LCDBuff[y][x] = LeftTrianglePixelBuf[y - Start_y][x - Start_x];
}
}
return true;
}
u8 Set_RightTriangle(u8 Start_x, u8 Start_y) //右三角标
{
u8 x, y;
u8 LeftTrianglePixelBuf[2][3] = {0xE0, 0xC0, 0x80,
0x03, 0x01, 0x00
};
if ((Start_x > SCR_WIDTH - 3) || (Start_y > LCDPAGE)) {
return false;
}
for (x = Start_x; x < Start_x + 3; x++) {
for (y = Start_y; y < Start_y + 2; y++) {
LCDBuff[y][x] = LeftTrianglePixelBuf[y - Start_y][x - Start_x];
}
}
return true;
}
void draw_mainmenu(s8 scr_index, s8 start_task_num)
{
u8 n;
u8 mem_start_task_num;
mem_start_task_num = start_task_num;
clear_lcd();
for (n = 0; n < (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM); n++) {
if (n == scr_index) {
clear_lcd_area(0, 1);
ResShowMultiString(0, 0, taskbuf[taskshow[start_task_num]].strID);
ResShowPic(taskbuf[taskshow[start_task_num]].bmpID + 1, n * 24 + 4, 2 * 8); //选中的图标
} else {
ResShowPic(taskbuf[taskshow[start_task_num]].bmpID + 0, n * 24 + 4, 2 * 8); //未选中的图标
}
start_task_num++;
}
if (mem_start_task_num != (g_taskshowsum - (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM))) {
Set_RightTriangle((SCR_WIDTH - 1) - 3, 3);
}
if (mem_start_task_num != 0) {
Set_LeftTriangle(0, 3);
}
draw_lcd(0, 8) ;
}
u8 UI_mainmenu(s8 apprun)
{
u8 need_draw = 0 ;
u8 autoruntime = AUTORUNTIMEMAX;
int msg[16] = {0};
s8 task_index; //任务索引号
s8 screen_index; //当前屏幕显示高亮图标的索引号0-4
s8 start_task_index; //当前屏幕显示的第一个任务图标的索引号
s8 mem_task_app; //传递进来的任务号
mem_task_app = apprun;//6 1
task_index = taskindex[apprun]; //5 0
// deg_string("\n task_index init: ");
// printf_u8(task_index);
if (task_index <= (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM)) {
if (task_index == SCREENSHOWTASKSUM) {
screen_index = task_index - 1;
start_task_index = task_index - ((g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM) - 1);
//task_index = task_index-1;
} else {
screen_index = task_index;
start_task_index = 0;
}
} else {
screen_index = (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM) - 1; //4
start_task_index = task_index - ((g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM) - 1); //1
}
draw_mainmenu(screen_index, start_task_index);
while (1) {
if (need_draw != 0) {
draw_mainmenu(screen_index, start_task_index) ;
need_draw = FALSE;
draw_lcd(0, 8) ;
autoruntime = AUTORUNTIMEMAX;
}
app_task_get_msg(msg, ARRAY_SIZE(msg), 1);
switch (msg[0]) {
#if APP_CASE_EARPHONE
case Q_EVENT:
#else
case APP_MSG_SYS_EVENT:
#endif
printf("ui %s key = %d value = %x\n", __func__, msg[1], msg[2]);
switch (msg[1]) {
case KEY_OK:
return taskshow[task_index];
case KEY_UP:
task_index--;
if (task_index < 0) {
task_index = 0;
}
screen_index--;
if (screen_index < 0) {
start_task_index--;
if (start_task_index < 0) {
start_task_index = 0;
}
}
if (screen_index < 0) {
screen_index = 0;
}
// deg_string("\n task_index: ");
// printf_u8(task_index);
// deg_string("\n screen_index: ");
// printf_u8(screen_index);
need_draw = TRUE;
break;
case KEY_DOWN:
task_index++;
if (task_index > (g_taskshowsum - 1)) {
task_index = g_taskshowsum - 1 ;
}
screen_index++;
if (screen_index > (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM) - 1) {
start_task_index++;
if (start_task_index > g_taskshowsum - (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM)) {
start_task_index = g_taskshowsum - (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM);
}
}
if (screen_index > ((g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM) - 1)) {
screen_index = (g_taskshowsum < SCREENSHOWTASKSUM ? g_taskshowsum : SCREENSHOWTASKSUM) - 1;
}
// deg_string("\n task_index: ");
// printf_u8(task_index);
// deg_string("\n screen_index: ");
// printf_u8(screen_index);
need_draw = TRUE;
break;
case MSG_HALF_SECOND:
autoruntime-- ;
if (autoruntime == 0) {
//return taskshow[mem_task_app-1];
clear_lcd();
return 0xff;
}
break ;
default:
break;
}
}
}
}
#endif