259 lines
8.1 KiB
C
259 lines
8.1 KiB
C
#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
|