Compare commits
10 Commits
9b3d457da6
...
b139aa7ca7
| Author | SHA1 | Date |
|---|---|---|
|
|
b139aa7ca7 | |
|
|
89e7401955 | |
|
|
65f38bb5a3 | |
|
|
c8e32958a7 | |
|
|
805ca0c94b | |
|
|
89e28ce693 | |
|
|
2f84c3bb9b | |
|
|
41052d334d | |
|
|
e62c2270af | |
|
|
f8675e3529 |
104
APP/app_log.c
|
|
@ -14,11 +14,93 @@ static char s_debug_level = 'D';
|
||||||
static char s_cmd_buf[48];
|
static char s_cmd_buf[48];
|
||||||
static uint8_t s_cmd_len;
|
static uint8_t s_cmd_len;
|
||||||
|
|
||||||
|
/* RTT 二进制烧录:将 ui0902_res.bin 写到 W25Q128 @ UI0902_RES_BASE */
|
||||||
|
static uint8_t s_flash_mode;
|
||||||
|
static uint32_t s_flash_addr;
|
||||||
|
static uint32_t s_flash_remain;
|
||||||
|
static uint32_t s_flash_last_sector;
|
||||||
|
static uint16_t s_flash_page_len;
|
||||||
|
static uint8_t s_flash_page[256];
|
||||||
|
|
||||||
|
uint8_t app_log_flash_busy(void)
|
||||||
|
{
|
||||||
|
return s_flash_mode;
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t app_log_ms(void)
|
static uint32_t app_log_ms(void)
|
||||||
{
|
{
|
||||||
return (uint32_t)(rt_tick_get() * 1000U / RT_TICK_PER_SECOND);
|
return (uint32_t)(rt_tick_get() * 1000U / RT_TICK_PER_SECOND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void app_log_flash_flush_page(void)
|
||||||
|
{
|
||||||
|
uint32_t sector;
|
||||||
|
char ack[40];
|
||||||
|
|
||||||
|
if (s_flash_page_len == 0U) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sector = s_flash_addr & ~0xFFFU;
|
||||||
|
if (sector != s_flash_last_sector) {
|
||||||
|
W25Q128_Erase_Sector(sector);
|
||||||
|
s_flash_last_sector = sector;
|
||||||
|
}
|
||||||
|
W25Q128_Write(s_flash_page, s_flash_addr, s_flash_page_len);
|
||||||
|
s_flash_addr += s_flash_page_len;
|
||||||
|
s_flash_remain -= s_flash_page_len;
|
||||||
|
s_flash_page_len = 0U;
|
||||||
|
|
||||||
|
/* 每页 ACK,避免主机打爆 RTT 下行缓冲 */
|
||||||
|
snprintf(ack, sizeof(ack), "FLASH_ACK %lu\n", (unsigned long)s_flash_addr);
|
||||||
|
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, ack);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void app_log_flash_feed(const uint8_t *data, unsigned len)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for (i = 0; i < len && s_flash_remain > 0U; i++) {
|
||||||
|
if (s_flash_page_len == 0U && s_flash_addr == UI0902_RES_BASE && i == 0U) {
|
||||||
|
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "FLASH_RX\n");
|
||||||
|
}
|
||||||
|
s_flash_page[s_flash_page_len++] = data[i];
|
||||||
|
if (s_flash_page_len >= sizeof(s_flash_page) ||
|
||||||
|
s_flash_page_len >= s_flash_remain) {
|
||||||
|
app_log_flash_flush_page();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s_flash_remain == 0U && s_flash_mode) {
|
||||||
|
s_flash_mode = 0U;
|
||||||
|
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "FLASH_UI0902_OK\n");
|
||||||
|
UI_DrawModeSelectScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void app_log_flash_start(uint32_t size)
|
||||||
|
{
|
||||||
|
char msg[64];
|
||||||
|
|
||||||
|
if (size == 0U || size > (2U * 1024U * 1024U)) {
|
||||||
|
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "FLASH_UI0902_ERR size\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_flash_mode = 1U;
|
||||||
|
s_flash_addr = UI0902_RES_BASE;
|
||||||
|
s_flash_remain = size;
|
||||||
|
s_flash_last_sector = 0xFFFFFFFFUL;
|
||||||
|
s_flash_page_len = 0U;
|
||||||
|
s_cmd_len = 0U;
|
||||||
|
s_cmd_buf[0] = '\0';
|
||||||
|
|
||||||
|
snprintf(msg, sizeof(msg),
|
||||||
|
"FLASH_UI0902_GO base=0x%08lX size=%lu\n",
|
||||||
|
(unsigned long)UI0902_RES_BASE, (unsigned long)size);
|
||||||
|
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, msg);
|
||||||
|
}
|
||||||
|
|
||||||
static void app_log_slot_store(const char *line)
|
static void app_log_slot_store(const char *line)
|
||||||
{
|
{
|
||||||
uint16_t idx = s_head;
|
uint16_t idx = s_head;
|
||||||
|
|
@ -177,6 +259,18 @@ uint8_t app_log_try_command(const char *cmd)
|
||||||
app_log_sys_reset();
|
app_log_sys_reset();
|
||||||
return 1U;
|
return 1U;
|
||||||
}
|
}
|
||||||
|
if (strncmp(cmd, "flash ui0902 ", 13) == 0) {
|
||||||
|
uint32_t size = (uint32_t)strtoul(cmd + 13, NULL, 10);
|
||||||
|
app_log_flash_start(size);
|
||||||
|
return 1U;
|
||||||
|
}
|
||||||
|
if (strncmp(cmd, "ui boot", 7) == 0) {
|
||||||
|
LCD_BLK_Set();
|
||||||
|
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_BOOT_LOGO_W, UI0902_BOOT_LOGO_H,
|
||||||
|
UI0902_BOOT_LOGO_ADDR);
|
||||||
|
SEGGER_RTT_WriteString(APP_LOG_RTT_CHANNEL, "UI_BOOT_OK\n");
|
||||||
|
return 1U;
|
||||||
|
}
|
||||||
return 0U;
|
return 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -207,7 +301,7 @@ static void app_log_feed_char(char c)
|
||||||
|
|
||||||
void app_log_poll(void)
|
void app_log_poll(void)
|
||||||
{
|
{
|
||||||
char rx[16];
|
uint8_t rx[64];
|
||||||
unsigned read_len;
|
unsigned read_len;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
|
|
@ -216,8 +310,13 @@ void app_log_poll(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s_flash_mode) {
|
||||||
|
app_log_flash_feed(rx, read_len);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < read_len; i++) {
|
for (i = 0; i < read_len; i++) {
|
||||||
app_log_feed_char(rx[i]);
|
app_log_feed_char((char)rx[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -234,5 +333,6 @@ void app_log_write(char level, const char *cat, const char *fmt, ...) { (void)le
|
||||||
void app_log_poll(void) {}
|
void app_log_poll(void) {}
|
||||||
uint8_t app_log_try_command(const char *cmd) { (void)cmd; return 0U; }
|
uint8_t app_log_try_command(const char *cmd) { (void)cmd; return 0U; }
|
||||||
void app_log_set_ui_page(const char *name) { (void)name; }
|
void app_log_set_ui_page(const char *name) { (void)name; }
|
||||||
|
uint8_t app_log_flash_busy(void) { return 0U; }
|
||||||
|
|
||||||
#endif /* APP_LOG_ENABLE */
|
#endif /* APP_LOG_ENABLE */
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ void app_log_write(char level, const char *cat, const char *fmt, ...);
|
||||||
void app_log_poll(void);
|
void app_log_poll(void);
|
||||||
uint8_t app_log_try_command(const char *cmd);
|
uint8_t app_log_try_command(const char *cmd);
|
||||||
void app_log_set_ui_page(const char *name);
|
void app_log_set_ui_page(const char *name);
|
||||||
|
uint8_t app_log_flash_busy(void);
|
||||||
|
|
||||||
#if APP_LOG_ENABLE
|
#if APP_LOG_ENABLE
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,52 +33,67 @@ GUI_SWITCH ParamGuiData[] =
|
||||||
|
|
||||||
|
|
||||||
const LEBEL_UI UI_Label[] = {
|
const LEBEL_UI UI_Label[] = {
|
||||||
{5, 115, 30, 60, (const uint8_t*)"\xD2\xC6\xB5\xF7", LCD_ALIGN_CENTER, WHITE,BLACK,11, LCD_ALIGN_CENTER,WHITE,BLACK,16, GUI_TRANSPOSE},
|
/* 0819:移调/速度 标签11、主值16 */
|
||||||
{125,110, 30, 60, (const uint8_t*)"\xCB\xD9\xB6\xC8", LCD_ALIGN_CENTER, WHITE,BLACK,11, LCD_ALIGN_CENTER,WHITE,BLACK,16, GUI_SPEED},
|
{UI0902_MARGIN_X, UI0902_CARD_W, UI0902_CARD_Y, UI0902_CARD_H,
|
||||||
{5, 230, 95, 55, (const uint8_t*)"\xB8\xE8\xC7\xFA\xD1\xA1\xD2\xE9", LCD_ALIGN_LEFT,WHITE,BLACK,11,LCD_ALIGN_CENTER,WHITE,BLACK,13,GUI_MODE_PARAM},
|
(const uint8_t*)"\xD2\xC6\xB5\xF7", LCD_ALIGN_CENTER, WHITE,BLACK,UI0902_FONT_LABEL,
|
||||||
{5, 230, 155,55, (const uint8_t*)"\xCF\xD2\xD2\xF4\xC9\xAB\xD1\xA1\xD2\xE9",LCD_ALIGN_LEFT,WHITE,BLACK,11,LCD_ALIGN_CENTER,WHITE,BLACK,13,GUI_TIMBRE_SELECT},
|
LCD_ALIGN_CENTER,WHITE,BLACK,UI0902_FONT_HERO, GUI_TRANSPOSE},
|
||||||
{5, 230, 210,55, (const uint8_t*)"\xD1\xDD\xD7\xE0\xB6\xCE\xC2\xE4",LCD_ALIGN_LEFT,WHITE,BLACK,11,LCD_ALIGN_CENTER,WHITE,BLACK,13,GUI_PLAY_SECTION},
|
{UI0902_MARGIN_X + UI0902_CARD_W + UI0902_CARD_GAP, UI0902_CARD_W, UI0902_CARD_Y, UI0902_CARD_H,
|
||||||
};
|
(const uint8_t*)"\xCB\xD9\xB6\xC8", LCD_ALIGN_CENTER, WHITE,BLACK,UI0902_FONT_LABEL,
|
||||||
|
LCD_ALIGN_CENTER,WHITE,BLACK,UI0902_FONT_HERO, GUI_SPEED},
|
||||||
|
/* 0819:TAB/行标题11、曲目正文13 */
|
||||||
|
{UI0902_MARGIN_X, UI0902_CONTENT_W, UI0902_MODE_Y, UI0902_MODE_H,
|
||||||
|
(const uint8_t*)"\xB8\xE8\xC7\xFA\xD1\xA1\xD2\xE9", LCD_ALIGN_LEFT,WHITE,BLACK,UI0902_FONT_LABEL,
|
||||||
|
LCD_ALIGN_CENTER,WHITE,BLACK,UI0902_FONT_BODY,GUI_MODE_PARAM},
|
||||||
|
{UI0902_MARGIN_X, UI0902_CONTENT_W, UI0902_TIMBRE_Y, UI0902_TIMBRE_H,
|
||||||
|
(const uint8_t*)"\xCF\xD2\xD2\xF4\xC9\xAB\xD1\xA1\xD2\xE9",LCD_ALIGN_LEFT,WHITE,BLACK,UI0902_FONT_LABEL,
|
||||||
|
LCD_ALIGN_CENTER,WHITE,BLACK,UI0902_FONT_BODY,GUI_TIMBRE_SELECT},
|
||||||
|
/* 0819:演奏段落 字号13 */
|
||||||
|
{UI0902_MARGIN_X, UI0902_CONTENT_W, UI0902_SECTION_Y, UI0902_SECTION_H,
|
||||||
|
(const uint8_t*)"\xD1\xDD\xD7\xE0\xB6\xCE\xC2\xE4",LCD_ALIGN_LEFT,WHITE,BLACK,UI0902_FONT_BODY,
|
||||||
|
LCD_ALIGN_CENTER,WHITE,BLACK,UI0902_FONT_BODY,GUI_PLAY_SECTION},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 4<><34><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>֣<EFBFBD>
|
// 4<><34><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>֣<EFBFBD>
|
||||||
Fader_t faders[4] = {
|
Fader_t faders[4] = {
|
||||||
{ 40-10, 60, 30, 200, 7, 0, 0, "\xB0\xE9\xD7\xE0" }, // 0: <20><><EFBFBD><EFBFBD>(MIX)
|
{ 150-15, 35, 30, 215, 7, 0, 0, "\xB0\xE9\xD7\xE0" }, /* 0: MIX 伴奏 slot2 */
|
||||||
{ 95-10, 60, 30, 200, 7, 1, 0, "\xCF\xD2" }, // 1: <20><>(STR)
|
{ 90-15, 35, 30, 215, 7, 1, 0, "\xCF\xD2" }, /* 1: STR 吉他 slot1 */
|
||||||
{ 150-10, 60, 30, 200, 7, 2, 0, "\xC2\xF3" }, // 2: <20><>(MIC)
|
{ 30-15, 35, 30, 215, 7, 2, 0, "\xC2\xF3" }, /* 2: MIC slot0 */
|
||||||
{ 205-10, 60, 30, 200, 7, 3, 0, "\xC2\xF3\xBB\xEC\xCF\xEC" } // 3: <20><><EFBFBD><EFBFBD><EFBFBD>(REV)
|
{ 210-15, 35, 30, 215, 7, 3, 0, "\xC2\xF3\xBB\xEC\xCF\xEC" } /* 3: REV 人声效果 slot3 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const Touch_AreaTypeDef Touch_Areas[] =
|
const Touch_AreaTypeDef Touch_Areas[] =
|
||||||
{
|
{
|
||||||
/* Xmin,Xmax,Ymin,Ymax, Flag, Value, ID, action — 坐标相对 240x320 */
|
/* Xmin,Xmax,Ymin,Ymax, Flag, Value, ID, action — 与 UI_Label 网格同步 */
|
||||||
{ 0, 60, 25, 95, -1, 0, GUI_TRANSPOSE, NULL },
|
{ 12, 62, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, -1, 0, GUI_TRANSPOSE, NULL },
|
||||||
{ 60, 120, 25, 95, 1, 0, GUI_TRANSPOSE, NULL },
|
{ 63, 114, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, 1, 0, GUI_TRANSPOSE, NULL },
|
||||||
|
|
||||||
{ 125, 180, 25, 95, -1, 0, GUI_SPEED, NULL },
|
{ 125, 175, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, -1, 0, GUI_SPEED, NULL },
|
||||||
{ 180, 239, 25, 95, 1, 0, GUI_SPEED, NULL },
|
{ 176, 227, UI0902_CARD_Y, UI0902_CARD_Y + UI0902_CARD_H - 1, 1, 0, GUI_SPEED, NULL },
|
||||||
|
|
||||||
{ 0, 85, 95, 130, 0, 0, GUI_AUTOBAND_SW, NULL },
|
/* 节奏类型 / 本地曲目 TAB(0902:12-66 / 72-127) */
|
||||||
{ 90, 175, 95, 130, 0, 1, GUI_AUTOBAND_SW, NULL },
|
{ 12, 66, UI0902_MODE_Y, UI0902_MODE_Y + UI0902_TAB_H - 1, 0, 0, GUI_AUTOBAND_SW, NULL },
|
||||||
|
{ 72, 127, UI0902_MODE_Y, UI0902_MODE_Y + UI0902_TAB_H - 1, 0, 1, GUI_AUTOBAND_SW, NULL },
|
||||||
|
|
||||||
{ 0, 120, 130, 165, -1, 0, GUI_MODE_PARAM, NULL },
|
{ 13, 120, UI0902_MODE_Y + UI0902_TAB_H + 4, UI0902_MODE_Y + UI0902_MODE_H - 1, -1, 0, GUI_MODE_PARAM, NULL },
|
||||||
{ 120, 239, 130, 165, 1, 0, GUI_MODE_PARAM, NULL },
|
{ 121, 227, UI0902_MODE_Y + UI0902_TAB_H + 4, UI0902_MODE_Y + UI0902_MODE_H - 1, 1, 0, GUI_MODE_PARAM, NULL },
|
||||||
|
|
||||||
{ 0, 120, 165, 215, -1, 0, GUI_TIMBRE_SELECT, NULL },
|
{ 13, 120, UI0902_TIMBRE_Y, UI0902_TIMBRE_Y + UI0902_TIMBRE_H - 1, -1, 0, GUI_TIMBRE_SELECT, NULL },
|
||||||
{ 120, 239, 165, 215, 1, 0, GUI_TIMBRE_SELECT, NULL },
|
{ 121, 227, UI0902_TIMBRE_Y, UI0902_TIMBRE_Y + UI0902_TIMBRE_H - 1, 1, 0, GUI_TIMBRE_SELECT, NULL },
|
||||||
|
|
||||||
/* 演奏段落 1~4 */
|
/* 演奏段落 1~4(0902:12/68/125/182 起,宽 47,步进 57) */
|
||||||
{ 10, 60, 220, 270, 0, 0, GUI_PLAY_SECTION, NULL },
|
{ 12, 58, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 0, GUI_PLAY_SECTION, NULL },
|
||||||
{ 60, 110, 220, 270, 0, 1, GUI_PLAY_SECTION, NULL },
|
{ 68, 114, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 1, GUI_PLAY_SECTION, NULL },
|
||||||
{ 110, 165, 220, 270, 0, 2, GUI_PLAY_SECTION, NULL },
|
{ 125, 171, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 2, GUI_PLAY_SECTION, NULL },
|
||||||
{ 165, 220, 220, 270, 0, 3, GUI_PLAY_SECTION, NULL },
|
{ 182, 228, UI0902_SECTION_Y, UI0902_SECTION_Y + UI0902_SECTION_BTN_H - 1, 0, 3, GUI_PLAY_SECTION, NULL },
|
||||||
|
|
||||||
/* 底栏 TAB:万能/普通/专业/设置(Value=目标 TAB) */
|
/* 底栏四键:万能 | 普通 | 专业 | 设置 */
|
||||||
{ 0, 60, 275, 319, 0, 0, GUI_TAB_INDEX, NULL },
|
{ 0, 59, 280, 319, 0, UI0902_NAV_UNIVERSAL, GUI_NAV_BAR, NULL },
|
||||||
{ 60, 120, 275, 319, 0, 2, GUI_TAB_INDEX, NULL },
|
{ 60, 119, 280, 319, 0, UI0902_NAV_NORMAL, GUI_NAV_BAR, NULL },
|
||||||
{ 120, 180, 275, 319, 0, 1, GUI_TAB_INDEX, NULL },
|
{ 120, 179, 280, 319, 0, UI0902_NAV_EXPERT, GUI_NAV_BAR, NULL },
|
||||||
{ 180, 239, 275, 319, 0, 3, GUI_TAB_INDEX, NULL },
|
{ 180, 239, 280, 319, 0, UI0902_NAV_SETTING, GUI_NAV_BAR, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
int16_t MIC_VOL_MAP[10]= {-9000,-7000,-5000,-3000,-1000,1000,3000,5000,7000,9000};
|
int16_t MIC_VOL_MAP[10]= {-9000,-7000,-5000,-3000,-1000,1000,3000,5000,7000,9000};
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,7 @@ typedef enum {
|
||||||
GUI_AUTOBAND_SW,
|
GUI_AUTOBAND_SW,
|
||||||
GUI_BL_SW,
|
GUI_BL_SW,
|
||||||
GUI_TAB_LAST_INDEX,
|
GUI_TAB_LAST_INDEX,
|
||||||
|
GUI_NAV_BAR, /* 0902 底栏:Value 0万能 1普通 2专业 3设置 */
|
||||||
}GUIID;
|
}GUIID;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
100
UI/UI_Idle.c
|
|
@ -24,61 +24,31 @@ static uint8_t s_mode_select_focus = 0;
|
||||||
|
|
||||||
extern bool InModeFlag;
|
extern bool InModeFlag;
|
||||||
|
|
||||||
static void UI_DrawModeSelectButton(uint16_t y, const uint8_t *row, uint8_t focused);
|
/* 0902/0819:三行模式撑满状态栏下方至底边(无底栏),222x88 @ y=43/135/225 */
|
||||||
static void UI_ModeSelect_DrawButtons(void);
|
#define UI0902_MODE_ROW_X 9
|
||||||
|
#define UI0902_MODE_ROW_W 222
|
||||||
|
#define UI0902_MODE_ROW_H 88
|
||||||
|
#define UI0902_MODE_ROW_Y0 43
|
||||||
|
#define UI0902_MODE_ROW_DY 92
|
||||||
|
|
||||||
void UI_ReturnToModeSelect(void)
|
static const uint32_t s_mode_row_addr[3][2] = {
|
||||||
|
{ UI0902_ROW_UNIVERSAL_NOT_ADDR, UI0902_ROW_UNIVERSAL_SEL_ADDR }, /* 0 万能 */
|
||||||
|
{ UI0902_ROW_NORMAL_NOT_ADDR, UI0902_ROW_NORMAL_SEL_ADDR }, /* 1 普通 */
|
||||||
|
{ UI0902_ROW_EXPERT_NOT_ADDR, UI0902_ROW_EXPERT_SEL_ADDR }, /* 2 专业 */
|
||||||
|
};
|
||||||
|
|
||||||
|
static void UI_DrawModeSelectButton(uint16_t y, uint8_t idx, uint8_t focused)
|
||||||
{
|
{
|
||||||
StartFlag = 0;
|
LCD_WR_PIC_FROM_FLASH(UI0902_MODE_ROW_X, y, UI0902_MODE_ROW_W, UI0902_MODE_ROW_H,
|
||||||
InModeFlag = false;
|
s_mode_row_addr[idx][focused ? 1 : 0]);
|
||||||
AutoBandTop1_Stop();
|
|
||||||
s_mode_select_focus = 0;
|
|
||||||
CallUI_Idle();
|
|
||||||
UI_DrawModeSelectScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 0831 美工试用图:图标+MiSans 文字整行位图 */
|
|
||||||
static void UI_DrawModeSelectButton(uint16_t y, const uint8_t *row, uint8_t focused)
|
|
||||||
{
|
|
||||||
const uint16_t btn_w = 220;
|
|
||||||
const uint16_t btn_h = 87;
|
|
||||||
const uint16_t btn_r = 10;
|
|
||||||
const uint16_t btn_x = (240 - btn_w) / 2;
|
|
||||||
const uint16_t row_x = (uint16_t)(btn_x + (btn_w - UI_MODE0831_ROW_W) / 2);
|
|
||||||
const uint16_t row_y = (uint16_t)(y + (btn_h - UI_MODE0831_ROW_H) / 2);
|
|
||||||
|
|
||||||
if (focused)
|
|
||||||
{
|
|
||||||
LCD_FillRoundRectGradient(btn_x, y, btn_w, btn_h, btn_r,
|
|
||||||
START_COLOR, END_COLOR);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LCD_FillRoundRect(btn_x, y, btn_w, btn_h, btn_r, COLOR_NORMAL_BG);
|
|
||||||
}
|
|
||||||
|
|
||||||
LCD_WR_PIC_Trans(row_x, row_y, UI_MODE0831_ROW_W, UI_MODE0831_ROW_H, row, BLACK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UI_ModeSelect_DrawButtonAt(uint8_t idx)
|
static void UI_ModeSelect_DrawButtonAt(uint8_t idx)
|
||||||
{
|
{
|
||||||
switch (idx)
|
if (idx > 2)
|
||||||
{
|
return;
|
||||||
case 0:
|
UI_DrawModeSelectButton((uint16_t)(UI0902_MODE_ROW_Y0 + idx * UI0902_MODE_ROW_DY),
|
||||||
UI_DrawModeSelectButton(40, gImage_Mode0831_Universal_Row_180_52,
|
idx, s_mode_select_focus == idx);
|
||||||
s_mode_select_focus == 0);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
UI_DrawModeSelectButton(132, gImage_Mode0831_Normal_Row_180_52,
|
|
||||||
s_mode_select_focus == 1);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
UI_DrawModeSelectButton(224, gImage_Mode0831_Expert_Row_180_52,
|
|
||||||
s_mode_select_focus == 2);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UI_ModeSelect_SetFocus(uint8_t idx)
|
static void UI_ModeSelect_SetFocus(uint8_t idx)
|
||||||
|
|
@ -101,21 +71,32 @@ static void UI_ModeSelect_DrawButtons(void)
|
||||||
UI_ModeSelect_DrawButtonAt(2);
|
UI_ModeSelect_DrawButtonAt(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UI_ReturnToModeSelect(void)
|
||||||
|
{
|
||||||
|
StartFlag = 0;
|
||||||
|
InModeFlag = false;
|
||||||
|
AutoBandTop1_Stop();
|
||||||
|
s_mode_select_focus = 0;
|
||||||
|
CallUI_Idle();
|
||||||
|
UI_DrawModeSelectScreen();
|
||||||
|
}
|
||||||
|
|
||||||
void UI_DrawModeSelectScreen(void)
|
void UI_DrawModeSelectScreen(void)
|
||||||
{
|
{
|
||||||
UI_ClearFocus();
|
UI_ClearFocus();
|
||||||
pCurrentTouch_Area = Touch_ModeSelect_Areas;
|
pCurrentTouch_Area = Touch_ModeSelect_Areas;
|
||||||
|
|
||||||
LCD_FillByColor(0, 0, 240, 320, BLACK);
|
LCD_FillByColor(0, 0, 240, 320, UI0902_BG_COLOR);
|
||||||
label_top();
|
label_top();
|
||||||
UI_ModeSelect_DrawButtons();
|
UI_ModeSelect_DrawButtons();
|
||||||
}
|
/* 设计稿 0902-01:模式选择页无底部三栏导航,仅三行模式按钮 */
|
||||||
|
}
|
||||||
|
|
||||||
const Touch_AreaTypeDef Touch_ModeSelect_Areas[] = {
|
const Touch_AreaTypeDef Touch_ModeSelect_Areas[] = {
|
||||||
/* Flag=按钮序号(0万能/1普通/2专业);ID=进入 TAB */
|
/* Flag=按钮序号(0万能/1普通/2专业);ID=进入 TAB。三行撑满,无底栏 */
|
||||||
{ 0, 239, 38, 127, 0, 0, 0, NULL },
|
{ 9, 231, 43, 130, 0, 0, 0, NULL },
|
||||||
{ 0, 239, 128, 219, 1, 0, 2, NULL },
|
{ 9, 231, 135, 222, 1, 0, 2, NULL },
|
||||||
{ 0, 239, 220, 311, 2, 0, 1, NULL },
|
{ 9, 231, 225, 312, 2, 0, 1, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TOUCH_AREA_MODE_SELECT_NUM (sizeof(Touch_ModeSelect_Areas)/sizeof(Touch_AreaTypeDef))
|
#define TOUCH_AREA_MODE_SELECT_NUM (sizeof(Touch_ModeSelect_Areas)/sizeof(Touch_AreaTypeDef))
|
||||||
|
|
@ -200,8 +181,8 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
{
|
{
|
||||||
case MSG_ID_POWER_ON :
|
case MSG_ID_POWER_ON :
|
||||||
LCD_BLK_Set();
|
LCD_BLK_Set();
|
||||||
LCD_FillByColor(0, 0, 240, 320, WHITE);
|
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_BOOT_LOGO_W, UI0902_BOOT_LOGO_H,
|
||||||
LCD_WR_PIC_FROM_FLASH(40, 80, 168, 155, 0x00000000);
|
UI0902_BOOT_LOGO_ADDR);
|
||||||
BSP_SelectAdcChannel(6);
|
BSP_SelectAdcChannel(6);
|
||||||
/* 让出 CPU,避免忙等卡住触摸/主循环线程 */
|
/* 让出 CPU,避免忙等卡住触摸/主循环线程 */
|
||||||
rt_thread_mdelay(1000);
|
rt_thread_mdelay(1000);
|
||||||
|
|
@ -249,8 +230,6 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
LOG_I("UI", "mode_select hit area=%u row=%u focus=%u x=%u y=%u",
|
LOG_I("UI", "mode_select hit area=%u row=%u focus=%u x=%u y=%u",
|
||||||
(unsigned)k, (unsigned)row, (unsigned)s_mode_select_focus,
|
(unsigned)k, (unsigned)row, (unsigned)s_mode_select_focus,
|
||||||
(unsigned)msg.HiByte, (unsigned)msg.LoByte);
|
(unsigned)msg.HiByte, (unsigned)msg.LoByte);
|
||||||
/* 调试十字:确认触点是否落在按钮上 */
|
|
||||||
TP_Drow_Touch_Point(msg.HiByte, msg.LoByte, RED);
|
|
||||||
/* 已聚焦 → 进入;未聚焦 → 切蓝焦点,再点一次进入 */
|
/* 已聚焦 → 进入;未聚焦 → 切蓝焦点,再点一次进入 */
|
||||||
if (row == s_mode_select_focus) {
|
if (row == s_mode_select_focus) {
|
||||||
if (now - s_last_enter_ms < 300U)
|
if (now - s_last_enter_ms < 300U)
|
||||||
|
|
@ -267,7 +246,6 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
if (!hit) {
|
if (!hit) {
|
||||||
LOG_I("UI", "mode_select miss x=%u y=%u",
|
LOG_I("UI", "mode_select miss x=%u y=%u",
|
||||||
(unsigned)msg.HiByte, (unsigned)msg.LoByte);
|
(unsigned)msg.HiByte, (unsigned)msg.LoByte);
|
||||||
TP_Drow_Touch_Point(msg.HiByte, msg.LoByte, YELLOW);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -313,7 +291,7 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
else if (vol <= 95) level = 3;
|
else if (vol <= 95) level = 3;
|
||||||
else if (vol <= 115) level = 4;
|
else if (vol <= 115) level = 4;
|
||||||
else level = 5;
|
else level = 5;
|
||||||
Draw_Volume_Bar(5, 5, level, 1, WHITE, GRAY);
|
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, level, 1, WHITE, GRAY);
|
||||||
uint8_t mMasterSysExVolume[12] = { 0xF0, 0x41, 0x00, 0x42, 0x12, 0x40, 0x00, 0x04, 0x64, 0x00, 0x00,0xF7};
|
uint8_t mMasterSysExVolume[12] = { 0xF0, 0x41, 0x00, 0x42, 0x12, 0x40, 0x00, 0x04, 0x64, 0x00, 0x00,0xF7};
|
||||||
memset(mMasterSysExVolume+8,msg.ID,1);
|
memset(mMasterSysExVolume+8,msg.ID,1);
|
||||||
SendMidiDataToDreamDSP(mMasterSysExVolume,12);
|
SendMidiDataToDreamDSP(mMasterSysExVolume,12);
|
||||||
|
|
|
||||||
234
UI/UI_Mixer.c
|
|
@ -1,43 +1,38 @@
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
|
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
|
||||||
static int8_t s_mixer_focus = -1;
|
static int8_t s_mixer_focus = -1;
|
||||||
// ==================== <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD> ====================
|
|
||||||
#define BTN_Y 275 // <20><>ť<EFBFBD><C5A5>ʼY
|
|
||||||
#define BTN_H 40 // <20><>ť<EFBFBD>߶<EFBFBD>
|
|
||||||
#define BTN_W 105 // <20><>ť<EFBFBD><C5A5><EFBFBD>
|
|
||||||
#define BTN_G 5 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD>м<EFBFBD><D0BC><EFBFBD>
|
|
||||||
|
|
||||||
// ==================== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ====================
|
/* ???????????????????? / ?????(???) / ????? */
|
||||||
const Touch_AreaTypeDef Touch_Btn[] = {
|
const Touch_AreaTypeDef Touch_Mixer_Areas[] = {
|
||||||
{ 0, 50, 0, 50, 0, 0, 0, NULL },
|
{ 0, 59, 280, 319, 0, UI0902_NAV_UNIVERSAL, GUI_NAV_BAR, NULL },
|
||||||
|
{ 60, 119, 280, 319, 0, UI0902_NAV_NORMAL, GUI_NAV_BAR, NULL },
|
||||||
|
{ 120, 179, 280, 319, 0, UI0902_NAV_EXPERT, GUI_NAV_BAR, NULL },
|
||||||
|
{ 180, 239, 280, 319, 0, UI0902_NAV_SETTING, GUI_NAV_BAR, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TOUCH_BTN_NUM (sizeof(Touch_Btn)/sizeof(Touch_AreaTypeDef))
|
#define TOUCH_BTN_NUM (sizeof(Touch_Mixer_Areas)/sizeof(Touch_AreaTypeDef))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ?????????????????? Flash ??????id0 ???? id1 ???? id2 MIC id3 ???????? */
|
||||||
|
static const uint32_t s_fader_label[4][3] = { /* addr, w, h */
|
||||||
|
{ UI0902_TXT_MIXER_BAND_ADDR, UI0902_TXT_MIXER_BAND_W, UI0902_TXT_MIXER_BAND_H },
|
||||||
|
{ UI0902_TXT_MIXER_GUITAR_ADDR, UI0902_TXT_MIXER_GUITAR_W, UI0902_TXT_MIXER_GUITAR_H },
|
||||||
|
{ UI0902_TXT_MIXER_MIC_ADDR, UI0902_TXT_MIXER_MIC_W, UI0902_TXT_MIXER_MIC_H },
|
||||||
|
{ UI0902_TXT_MIXER_VOCALFX_ADDR, UI0902_TXT_MIXER_VOCALFX_W, UI0902_TXT_MIXER_VOCALFX_H },
|
||||||
|
};
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// 完整绘制推子(首次初始化 / 页面切换时调用)
|
// ????????????????????? / ?????????????
|
||||||
// ============================================================
|
// ============================================================
|
||||||
void DrawFader(Fader_t *f)
|
void DrawFader(Fader_t *f)
|
||||||
{
|
{
|
||||||
uint16_t x = f->x, y = f->y, w = f->w, h = f->h;
|
uint16_t cx = f->x + f->w / 2;
|
||||||
// 清除整个推子区域
|
uint16_t slider_y;
|
||||||
LCD_FillByColor(x - 10, y, x + w + 10, y + h, BLACK);
|
LCD_FillByColor(cx - 20, f->y, cx + 20, f->y + f->h + 30, UI0902_BG_COLOR);
|
||||||
// 绘制完整槽背景
|
LCD_WR_PIC_FROM_FLASH(cx - 15, f->y, 31, 215, UI0902_MIXER_TRACK_ADDR);
|
||||||
DrawFaderGrooveAt(f, y + 5, y + 5 + h);
|
LCD_WR_PIC_FROM_FLASH_Trans(cx - s_fader_label[f->id][1] / 2, f->y + f->h + 8,
|
||||||
// 刻度线
|
(uint16_t)s_fader_label[f->id][1], (uint16_t)s_fader_label[f->id][2],
|
||||||
for (int i = 0; i < 10; i++) {
|
s_fader_label[f->id][0]);
|
||||||
uint16_t tick_y = y + 7 + (h * i) / 10;
|
slider_y = CalcSliderY(f);
|
||||||
LCD_DrawLine(x + w / 2 - 3, tick_y, x + w / 2 + 3, tick_y, FADER_TEXT);
|
|
||||||
}
|
|
||||||
// 底部文字
|
|
||||||
LCD_ShowChinese_AutoAlign(x + 10, x + (w / 2) - 8, y + h + 20,
|
|
||||||
(uint8_t*)f->name, LCD_ALIGN_CENTER, FADER_TEXT, BLACK, 0, 12);
|
|
||||||
// 画滑块并记录位置
|
|
||||||
uint16_t slider_y = CalcSliderY(f);
|
|
||||||
DrawFaderSlider(f, slider_y);
|
DrawFaderSlider(f, slider_y);
|
||||||
f->prev_slider_y = slider_y;
|
f->prev_slider_y = slider_y;
|
||||||
}
|
}
|
||||||
|
|
@ -45,8 +40,6 @@ void DrawFader(Fader_t *f)
|
||||||
void DrawAllFaders(void)
|
void DrawAllFaders(void)
|
||||||
{
|
{
|
||||||
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
||||||
// 鍏堟竻鏁翠釜鎺ㄥ瓙鍖哄煙锛屽交搴曟秷闄ゆ畫锟?
|
|
||||||
//LCD_FillByColor(0, 35, 240, 320, BLACK);
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
DrawFader(&faders[i]);
|
DrawFader(&faders[i]);
|
||||||
}
|
}
|
||||||
|
|
@ -69,86 +62,39 @@ void DrawAllFaders(void)
|
||||||
drv_nvm_save_to_flash();
|
drv_nvm_save_to_flash();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 0902????????? + ????????????????????? */
|
||||||
|
#define MIXER_KNOB_W 28
|
||||||
|
#define MIXER_KNOB_H 28
|
||||||
|
#define MIXER_KNOB_R 6
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// 绘制推子槽背景局部区域(y_start ~ y_end 范围)
|
// ?????????? + ??? + ?????????
|
||||||
// RED/CYAN 用 FillRoundRect_Solid 自带圆角
|
|
||||||
// GREEN 覆盖 RED 底部圆角,YELLOW 覆盖 CYAN 顶部圆角
|
|
||||||
// ============================================================
|
|
||||||
static void DrawFaderGrooveAt(Fader_t *f, uint16_t y_start, uint16_t y_end)
|
|
||||||
{
|
|
||||||
if (y_start >= y_end) return;
|
|
||||||
uint16_t x = f->x, y = f->y, w = f->w, h = f->h;
|
|
||||||
uint16_t groove_top = y + 5;
|
|
||||||
uint16_t groove_bot = y + 5 + h;
|
|
||||||
const uint16_t r = 15;
|
|
||||||
// 裁剪到槽边界
|
|
||||||
if (y_start < groove_top) y_start = groove_top;
|
|
||||||
if (y_end > groove_bot) y_end = groove_bot;
|
|
||||||
if (y_start >= y_end) return;
|
|
||||||
// 1. 灰色底色(纯矩形)
|
|
||||||
LCD_FillByColor(x, y_start, x + w, y_end, BLACK);
|
|
||||||
// 2. 青色段 — FillRoundRect_Solid 自带底部圆角
|
|
||||||
{ uint16_t s = groove_top + 100, e = groove_top + h;
|
|
||||||
if (y_start < e && y_end > s) {
|
|
||||||
FillRoundRect_Solid(x, s, w, e - s, r, 0x3fAE);
|
|
||||||
} }
|
|
||||||
// 3. 黄色段 — 纯矩形,覆盖青色顶部圆角
|
|
||||||
{ uint16_t s = groove_top + 100 - 33, e = groove_top + 100 + 16;
|
|
||||||
if (y_start < e && y_end > s) {
|
|
||||||
uint16_t ys = y_start > s ? y_start : s;
|
|
||||||
uint16_t ye = y_end < e ? y_end : e;
|
|
||||||
LCD_FillByColor(x, ys, x + w, ye, YELLOW);
|
|
||||||
} }
|
|
||||||
// 4. 红色段 — FillRoundRect_Solid 自带顶部圆角
|
|
||||||
{ uint16_t s = groove_top, e = groove_top + 49;
|
|
||||||
if (y_start < e && y_end > s) {
|
|
||||||
FillRoundRect_Solid(x, s, w, e - s, r, RED);
|
|
||||||
} }
|
|
||||||
// 5. 绿色段 — 纯矩形,覆盖红色底部圆角
|
|
||||||
{ uint16_t s = groove_top + 100 - 66, e = groove_top + 100 - 32;
|
|
||||||
if (y_start < e && y_end > s) {
|
|
||||||
uint16_t ys = y_start > s ? y_start : s;
|
|
||||||
uint16_t ye = y_end < e ? y_end : e;
|
|
||||||
LCD_FillByColor(x, ys, x + w, ye, RGB(21,40,7));
|
|
||||||
} }
|
|
||||||
// 6. 脏区域内的刻度线
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
uint16_t tick_y = y + 7 + (h * i) / 10;
|
|
||||||
if (tick_y >= y_start && tick_y <= y_end) {
|
|
||||||
LCD_DrawLine(x + w / 2 - 3, tick_y, x + w / 2 + 3, tick_y, FADER_TEXT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ============================================================
|
|
||||||
// 仅绘制滑块 + 数值文字(用于增量刷新)
|
|
||||||
// 滑块尺寸和文字位置与原版完全一致
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
static void DrawFaderSlider(Fader_t *f, uint16_t slider_y)
|
static void DrawFaderSlider(Fader_t *f, uint16_t slider_y)
|
||||||
{
|
{
|
||||||
uint16_t x = f->x, w = f->w, slider_h = 20;
|
uint16_t cx = f->x + f->w / 2;
|
||||||
uint16_t bg = (s_mixer_focus == (int8_t)f->id) ? COLOR_PRIMARY : COLOR_NORMAL_BG;
|
uint16_t ly = f->y + f->h + 8;
|
||||||
|
uint16_t kx = (uint16_t)(cx - MIXER_KNOB_W / 2);
|
||||||
char buf[8];
|
char buf[8];
|
||||||
LCD_FillRoundRect(x+5, slider_y, w-10, slider_h, 5, bg);
|
LCD_FillRoundRect(kx, slider_y, MIXER_KNOB_W, MIXER_KNOB_H, MIXER_KNOB_R, COLOR_PRIMARY);
|
||||||
sprintf(buf, "%d", f->val);
|
sprintf(buf, "%d", f->val);
|
||||||
LCD_ShowString_AutoAlign(x, x + w, slider_y, (uint8_t*)buf, LCD_ALIGN_CENTER, FADER_TEXT, bg, 0, 15);
|
LCD_ShowString_AutoAlign(kx, (uint16_t)(kx + MIXER_KNOB_W),
|
||||||
|
(uint16_t)(slider_y + (MIXER_KNOB_H - 11) / 2),
|
||||||
|
(uint8_t*)buf, LCD_ALIGN_CENTER, WHITE, COLOR_PRIMARY, 0, 11);
|
||||||
|
LCD_FillByColor(cx - 15, ly + 17, cx + 15, ly + 19, UI0902_BG_COLOR);
|
||||||
|
if (s_mixer_focus == (int8_t)f->id)
|
||||||
|
LCD_FillByColor(cx - 15, ly + 17, cx + 15, ly + 19, COLOR_PRIMARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// 完整重绘滑块(槽背景 + 刻度线 + 滑块)
|
// ???????????????????????????????????? Flash ????
|
||||||
// ============================================================
|
// ============================================================
|
||||||
static void UpdateFaderSlider(Fader_t *f)
|
static void UpdateFaderSlider(Fader_t *f)
|
||||||
{
|
{
|
||||||
uint16_t x = f->x, y = f->y, w = f->w, h = f->h;
|
uint16_t cx = f->x + f->w / 2;
|
||||||
uint16_t new_y = CalcSliderY(f);
|
uint16_t new_y = CalcSliderY(f);
|
||||||
if (f->prev_slider_y == new_y) return;
|
if (f->prev_slider_y == new_y) return;
|
||||||
// 完整重绘整个推子槽区域
|
LCD_WR_PIC_FROM_FLASH(cx - 15, f->y, 31, 215, UI0902_MIXER_TRACK_ADDR);
|
||||||
LCD_FillByColor(x - 10, y, x + w + 10, y + h, BLACK);
|
|
||||||
DrawFaderGrooveAt(f, y + 5, y + 5 + h);
|
|
||||||
// 刻度线
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
uint16_t tick_y = y + 7 + (h * i) / 10;
|
|
||||||
LCD_DrawLine(x + w / 2 - 3, tick_y, x + w / 2 + 3, tick_y, FADER_TEXT);
|
|
||||||
}
|
|
||||||
// 画滑块
|
|
||||||
DrawFaderSlider(f, new_y);
|
DrawFaderSlider(f, new_y);
|
||||||
f->prev_slider_y = new_y;
|
f->prev_slider_y = new_y;
|
||||||
}
|
}
|
||||||
|
|
@ -168,14 +114,13 @@ void UpdateFaderByTouch(int idx, uint16_t y)
|
||||||
}
|
}
|
||||||
uint16_t y_min = f->y;
|
uint16_t y_min = f->y;
|
||||||
uint16_t y_max = f->y + f->h;
|
uint16_t y_max = f->y + f->h;
|
||||||
if (y < y_min + 8) { // 闈犺繎椤堕儴 鈫?鐩存帴10
|
if (y < y_min + 8) {
|
||||||
f->val = 10;
|
f->val = 10;
|
||||||
}
|
}
|
||||||
else if (y > y_max - 8) { // 闈犺繎搴曢儴 鈫?鐩存帴0
|
else if (y > y_max - 8) {
|
||||||
f->val = 0;
|
f->val = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// 姝e父璁$畻
|
|
||||||
int32_t val_raw = 10 - ((int32_t)(y - y_min) * 10) / (y_max - y_min);
|
int32_t val_raw = 10 - ((int32_t)(y - y_min) * 10) / (y_max - y_min);
|
||||||
if(val_raw < 0) val_raw = 0;
|
if(val_raw < 0) val_raw = 0;
|
||||||
if(val_raw > 10) val_raw = 10;
|
if(val_raw > 10) val_raw = 10;
|
||||||
|
|
@ -183,10 +128,8 @@ void UpdateFaderByTouch(int idx, uint16_t y)
|
||||||
}
|
}
|
||||||
UpdateFaderSlider(f);
|
UpdateFaderSlider(f);
|
||||||
DrawFaderSlider(f, f->prev_slider_y);
|
DrawFaderSlider(f, f->prev_slider_y);
|
||||||
// 闊抽噺杈撳嚭
|
|
||||||
switch(idx) {
|
switch(idx) {
|
||||||
case 0:
|
case 0:
|
||||||
// MIX 閫氶亾
|
|
||||||
val_127 = (f->val * 127) / 10;
|
val_127 = (f->val * 127) / 10;
|
||||||
SendVolumeChangeMidiEvent(1,val_127);
|
SendVolumeChangeMidiEvent(1,val_127);
|
||||||
SendVolumeChangeMidiEvent(2,val_127);
|
SendVolumeChangeMidiEvent(2,val_127);
|
||||||
|
|
@ -205,29 +148,24 @@ void UpdateFaderByTouch(int idx, uint16_t y)
|
||||||
SendVolumeChangeMidiEvent(15,val_127);
|
SendVolumeChangeMidiEvent(15,val_127);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// STR 寮︿箰閫氶亾
|
|
||||||
STR_val = (f->val * 127) / 10;
|
STR_val = (f->val * 127) / 10;
|
||||||
SendVolumeChangeMidiEvent(0,STR_val);
|
SendVolumeChangeMidiEvent(0,STR_val);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// MIC 楹﹀厠椋庨€氶亾
|
|
||||||
AW816_Set_Volume(MIC_VOL_MAP[f->val]);
|
AW816_Set_Volume(MIC_VOL_MAP[f->val]);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// REV 娣峰搷閫氶亾
|
|
||||||
// 鍦ㄨ繖閲屽啓娣峰搷鎺у埗
|
|
||||||
AW816_Set_Reverb(f->val * 10);
|
AW816_Set_Reverb(f->val * 10);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// 计算滑块Y坐标(根据val值 0~10)
|
// ??????Y????????val? 0~10??
|
||||||
// ============================================================
|
// ============================================================
|
||||||
static uint16_t CalcSliderY(Fader_t *f)
|
static uint16_t CalcSliderY(Fader_t *f)
|
||||||
{
|
{
|
||||||
uint16_t slider_h = 16;
|
uint16_t slider_h = MIXER_KNOB_H;
|
||||||
uint16_t fill_h = (f->val * f->h) / 10;
|
uint16_t fill_h = (f->val * f->h) / 10;
|
||||||
if (fill_h > f->h) fill_h = f->h;
|
if (fill_h > f->h) fill_h = f->h;
|
||||||
uint16_t slider_y = f->y + f->h - fill_h - (slider_h / 2);
|
uint16_t slider_y = f->y + f->h - fill_h - (slider_h / 2);
|
||||||
|
|
@ -236,39 +174,10 @@ static uint16_t CalcSliderY(Fader_t *f)
|
||||||
return slider_y;
|
return slider_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================
|
|
||||||
// 绘制实心圆角矩形(用 FillByColor 逐行填充圆弧区域)
|
|
||||||
// 身体填充比 LCD_FillRoundRect 多延伸 1 像素,消除缝隙
|
|
||||||
// ============================================================
|
|
||||||
static void FillRoundRect_Solid(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t r, uint16_t color)
|
|
||||||
{
|
|
||||||
if (r > w / 2) r = w / 2;
|
|
||||||
if (r > h / 2) r = h / 2;
|
|
||||||
if (r == 0) { LCD_FillByColor(x, y, x + w, y + h, color); return; }
|
|
||||||
// 身体填充(中间 + 左右两侧直边)
|
|
||||||
LCD_FillByColor(x + r, y, x + w - r, y + h, color);
|
|
||||||
LCD_FillByColor(x, y + r, x + r, y + h - r, color);
|
|
||||||
LCD_FillByColor(x + w - r, y + r, x + w, y + h - r, color);
|
|
||||||
// 4 个圆弧角:从圆心向边缘逐行填充实心行
|
|
||||||
for (uint16_t dy = 0; dy < r; dy++) {
|
|
||||||
// dx = floor(sqrt(r² - (r-dy)²)) = floor(sqrt(2*r*dy - dy²))
|
|
||||||
uint16_t d = 2 * r * dy - dy * dy;
|
|
||||||
uint16_t dx = 0;
|
|
||||||
while ((dx + 1) * (dx + 1) <= d) dx++;
|
|
||||||
// 填充从 x+r-dx 到 x+r+1(+1确保dx=0时覆盖中心像素)
|
|
||||||
LCD_FillByColor(x + r - dx, y + dy, x + r + 1, y + dy + 1, color); // 顶左角
|
|
||||||
LCD_FillByColor(x + w - r, y + dy, x + w - r + dx + 1, y + dy + 1, color); // 顶右角
|
|
||||||
LCD_FillByColor(x + r - dx, y + h - 1 - dy, x + r + 1, y + h - dy, color); // 底左角
|
|
||||||
LCD_FillByColor(x + w - r, y + h - 1 - dy, x + w - r + dx + 1, y + h - dy, color); // 底右角
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int CheckTouchFader(uint16_t x, uint16_t y)
|
int CheckTouchFader(uint16_t x, uint16_t y)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
Fader_t *f = &faders[i];
|
Fader_t *f = &faders[i];
|
||||||
// 鎵╁ぇ瑙︽懜鍖哄煙锛屾彁鍗囨嫋鍔ㄤ綋锟?
|
|
||||||
if (x >= f->x - 10 && x <= f->x + f->w + 10 &&
|
if (x >= f->x - 10 && x <= f->x + f->w + 10 &&
|
||||||
y >= f->y && y <= f->y + f->h) {
|
y >= f->y && y <= f->y + f->h) {
|
||||||
return i;
|
return i;
|
||||||
|
|
@ -277,19 +186,20 @@ int CheckTouchFader(uint16_t x, uint16_t y)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> ====================
|
// ==================== ????? ====================
|
||||||
void UI_Mixer_Init(void)
|
void UI_Mixer_Init(void)
|
||||||
{
|
{
|
||||||
s_mixer_focus = -1;
|
s_mixer_focus = -1;
|
||||||
UI_ClearFocus();
|
UI_ClearFocus();
|
||||||
// LCD_WR_REG(0x28); // Display OFF
|
LCD_FillByColor(0, 0, 240, 320, UI0902_BG_COLOR);
|
||||||
UI_DrawTop_TiaoYinTai();
|
LCD_ShowChinese_AutoAlign(0, 240, 8, (uint8_t*)"\xB5\xF7\xD2\xF4\xCC\xA8",
|
||||||
|
LCD_ALIGN_CENTER, WHITE, UI0902_BG_COLOR, 0, 16);
|
||||||
DrawAllFaders();
|
DrawAllFaders();
|
||||||
pCurrentTouch_Area = Touch_Btn;
|
Draw_Bottom_Bar(UI0902_NAV_NONE, 0);
|
||||||
// LCD_WR_REG(0x29); // Display ON/
|
pCurrentTouch_Area = Touch_Mixer_Areas;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD> ====================
|
// ==================== ???????? ====================
|
||||||
void UI_Mixer_Process(DisplayTaskMessage_Type msg)
|
void UI_Mixer_Process(DisplayTaskMessage_Type msg)
|
||||||
{
|
{
|
||||||
uint16_t tx,ty;
|
uint16_t tx,ty;
|
||||||
|
|
@ -300,7 +210,7 @@ void UI_Mixer_Process(DisplayTaskMessage_Type msg)
|
||||||
tx = msg.HiByte;
|
tx = msg.HiByte;
|
||||||
ty = msg.LoByte;
|
ty = msg.LoByte;
|
||||||
|
|
||||||
// 1. <EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 1. ?????????
|
||||||
fader_idx = CheckTouchFader(tx, ty);
|
fader_idx = CheckTouchFader(tx, ty);
|
||||||
if (fader_idx >= 0)
|
if (fader_idx >= 0)
|
||||||
{
|
{
|
||||||
|
|
@ -308,16 +218,21 @@ void UI_Mixer_Process(DisplayTaskMessage_Type msg)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. <EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD> ȡ<><C8A1> / ȷ<><C8B7> <20><>ť
|
// 2. ????????
|
||||||
for(uint8_t i=0; i<TOUCH_BTN_NUM; i++)
|
for(uint8_t i=0; i<TOUCH_BTN_NUM; i++)
|
||||||
{
|
{
|
||||||
if( tx >= Touch_Btn[i].x_min && tx <= Touch_Btn[i].x_max &&
|
if( tx >= Touch_Mixer_Areas[i].x_min && tx <= Touch_Mixer_Areas[i].x_max &&
|
||||||
ty >= Touch_Btn[i].y_min && ty <= Touch_Btn[i].y_max )
|
ty >= Touch_Mixer_Areas[i].y_min && ty <= Touch_Mixer_Areas[i].y_max )
|
||||||
{
|
{
|
||||||
// <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>¼<EFBFBD>
|
switch (Touch_Mixer_Areas[i].Value)
|
||||||
if(Touch_Btn[i].ID == 0)
|
|
||||||
{
|
{
|
||||||
MenuPage_SystemSetting_Proc();
|
case UI0902_NAV_UNIVERSAL:
|
||||||
|
case UI0902_NAV_NORMAL:
|
||||||
|
case UI0902_NAV_EXPERT:
|
||||||
|
case UI0902_NAV_SETTING:
|
||||||
|
UI_NavBar_Action(Touch_Mixer_Areas[i].Value);
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -326,21 +241,6 @@ void UI_Mixer_Process(DisplayTaskMessage_Type msg)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSG_ID_EC_VOL:
|
case MSG_ID_EC_VOL:
|
||||||
// //LCD_ShowString(200, 0, Num_To_String(msg.DataU16[1],buff,3), RED, WHITE, 16, 0);
|
|
||||||
// uint8_t vol = msg.DataU16[1];
|
|
||||||
// uint8_t level;
|
|
||||||
// if (vol <= 5) level = 0;
|
|
||||||
// else if (vol <= 35) level = 1;
|
|
||||||
// else if (vol <= 65) level = 2;
|
|
||||||
// else if (vol <= 95) level = 3;
|
|
||||||
// else if (vol <= 115) level = 4;
|
|
||||||
// else level = 5;
|
|
||||||
// //Draw_Volume_Bar(5, 5, level, 1, WHITE, GRAY);
|
|
||||||
// uint8_t mMasterSysExVolume[12] = { 0xF0, 0x41, 0x00, 0x42, 0x12, 0x40, 0x00, 0x04, 0x64, 0x00, 0x00,0xF7};
|
|
||||||
// memset(mMasterSysExVolume+8,msg.DataU16[1],1);
|
|
||||||
// SendMidiDataToDreamDSP(mMasterSysExVolume,12);
|
|
||||||
//
|
|
||||||
// ResetAutoPowerCount();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,12 @@
|
||||||
#ifndef __UI_MIXER_H__
|
#ifndef __UI_MIXER_H__
|
||||||
#define __UI_MIXER_H__
|
#define __UI_MIXER_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void DrawFaderGrooveAt(Fader_t *f, uint16_t y_start, uint16_t y_end);
|
|
||||||
static void DrawFaderSlider(Fader_t *f, uint16_t slider_y);
|
static void DrawFaderSlider(Fader_t *f, uint16_t slider_y);
|
||||||
void UpdateFaderByTouch(int idx, uint16_t y);
|
void UpdateFaderByTouch(int idx, uint16_t y);
|
||||||
static uint16_t CalcSliderY(Fader_t *f);
|
static uint16_t CalcSliderY(Fader_t *f);
|
||||||
static void FillRoundRect_Solid(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t r, uint16_t color);
|
|
||||||
int CheckTouchFader(uint16_t x, uint16_t y);
|
int CheckTouchFader(uint16_t x, uint16_t y);
|
||||||
|
|
||||||
|
|
||||||
void UI_Mixer_Init(void);
|
void UI_Mixer_Init(void);
|
||||||
void UI_Mixer_Process(DisplayTaskMessage_Type msg);
|
void UI_Mixer_Process(DisplayTaskMessage_Type msg);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
160
UI/UI_Restore.c
|
|
@ -1,119 +1,34 @@
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
|
|
||||||
// ==============================
|
/* ==============================
|
||||||
// 按键界面配置参数
|
* 0902 ????????????????? + ????? + ???/?????? + ????
|
||||||
// ==============================
|
* ============================== */
|
||||||
#define BTN_Y_START 115 // 按键Y轴起始坐标
|
|
||||||
#define BTN_HEIGHT 80 // 按键高度
|
|
||||||
#define BTN_WIDTH 220 // 按键宽度
|
|
||||||
#define BTN_GAP 5 // 按键之间的间距
|
|
||||||
#define BTN_RADIUS 6 // 圆角半径
|
|
||||||
|
|
||||||
// 按键颜色配置
|
|
||||||
#define BTN_COLOR_CANCEL 0x4A4A // 取消按键背景色
|
|
||||||
#define BTN_COLOR_CONFIRM 0x03B7 // 确认按键背景色
|
|
||||||
#define BTN_TEXT_COLOR 0xFFFF // 按键字体颜色
|
|
||||||
#define BTN_TEXT_SIZE 24 // 按键文字字号
|
|
||||||
|
|
||||||
|
|
||||||
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
|
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
|
||||||
|
|
||||||
const Touch_AreaTypeDef Touch_Restore_Areas[] =
|
const Touch_AreaTypeDef Touch_Restore_Areas[] =
|
||||||
{
|
{
|
||||||
// Xmin, Xmax, Ymin, Ymax, flag, Value, ID, action
|
// Xmin, Xmax, Ymin, Ymax, flag, Value, ID, action
|
||||||
{ 0, 50, 0, 50, 0, 0, 0, NULL },
|
{ 13, 119, 185, 241, 0, 0, 1, NULL }, /* ??? */
|
||||||
{ 10, 10+BTN_WIDTH, BTN_Y_START, BTN_Y_START+BTN_HEIGHT, 0, 1, 1, NULL },
|
{ 121, 227, 185, 241, 0, 0, 2, NULL }, /* ??? */
|
||||||
{ 10, 10+BTN_WIDTH, BTN_Y_START, BTN_Y_START+BTN_HEIGHT, 0, 2, 0, NULL },
|
{ 0, 59, 280, 319, 0, UI0902_NAV_UNIVERSAL, GUI_NAV_BAR, NULL },
|
||||||
|
{ 60, 119, 280, 319, 0, UI0902_NAV_NORMAL, GUI_NAV_BAR, NULL },
|
||||||
|
{ 120, 179, 280, 319, 0, UI0902_NAV_EXPERT, GUI_NAV_BAR, NULL },
|
||||||
|
{ 180, 239, 280, 319, 0, UI0902_NAV_SETTING, GUI_NAV_BAR, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TOUCH_AREA_SYSTEMSETTING_NUM (sizeof(Touch_Restore_Areas)/sizeof(Touch_AreaTypeDef))
|
#define TOUCH_AREA_RESTORE_NUM (sizeof(Touch_Restore_Areas)/sizeof(Touch_AreaTypeDef))
|
||||||
|
|
||||||
void UI_Draw_Buttons(void)
|
|
||||||
{
|
|
||||||
// LCD_FillByColor(10, 270, 220, 320, BLACK);
|
|
||||||
LCD_FillRoundRect(
|
|
||||||
10,
|
|
||||||
BTN_Y_START,
|
|
||||||
BTN_WIDTH,
|
|
||||||
BTN_HEIGHT,
|
|
||||||
BTN_RADIUS,
|
|
||||||
BTN_COLOR_CANCEL
|
|
||||||
);
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
|
||||||
10, 10 + BTN_WIDTH,
|
|
||||||
BTN_Y_START + (BTN_HEIGHT - BTN_TEXT_SIZE)/2,
|
|
||||||
(uint8_t*)"\xC8\xB7\xB6\xA8\x00",
|
|
||||||
LCD_ALIGN_CENTER,
|
|
||||||
BTN_TEXT_COLOR,
|
|
||||||
BTN_COLOR_CANCEL,
|
|
||||||
0,
|
|
||||||
BTN_TEXT_SIZE
|
|
||||||
);
|
|
||||||
|
|
||||||
LCD_FillRoundRect(
|
|
||||||
10,
|
|
||||||
BTN_Y_START+BTN_HEIGHT+BTN_GAP,
|
|
||||||
BTN_WIDTH,
|
|
||||||
BTN_HEIGHT,
|
|
||||||
BTN_RADIUS,
|
|
||||||
BTN_COLOR_CONFIRM
|
|
||||||
);
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
|
||||||
10, 10 + BTN_WIDTH,
|
|
||||||
BTN_Y_START + BTN_HEIGHT + (BTN_HEIGHT - BTN_TEXT_SIZE)/2,
|
|
||||||
(uint8_t*)"\xC8\xB1\xCF\xF8\x00",
|
|
||||||
LCD_ALIGN_CENTER,
|
|
||||||
BTN_TEXT_COLOR,
|
|
||||||
BTN_COLOR_CONFIRM,
|
|
||||||
0,
|
|
||||||
BTN_TEXT_SIZE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TOP_TITLE_X1 0
|
|
||||||
#define TOP_TITLE_X2 240
|
|
||||||
#define TOP_TITLE_Y1 0
|
|
||||||
#define TOP_TITLE_Y2 35
|
|
||||||
#define TOP_TITLE_BG_COLOR BLACK // <20><><EFBFBD><EFBFBD>ɫ
|
|
||||||
#define TOP_TITLE_TEXT_COLOR WHITE // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
||||||
#define TOP_TITLE_FONT_SIZE 13 // 标题字号
|
|
||||||
#define TOP_TITLE_ALIGN LCD_ALIGN_CENTER // <20><><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
// ==============================
|
|
||||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD>̨
|
|
||||||
// ==============================
|
|
||||||
void UI_DrawTop_Restore(void)
|
|
||||||
{
|
|
||||||
//const uint16_t btn_color = /*DARKLGRAY*/0x2988; // 深灰<E6B7B1>?????
|
|
||||||
|
|
||||||
// <20><>ˢ<EFBFBD><CBA2>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
|
||||||
//LCD_FillByColor(TOP_TITLE_X1, TOP_TITLE_Y1, TOP_TITLE_X2, TOP_TITLE_Y2, TOP_TITLE_BG_COLOR);
|
|
||||||
LCD_FillByColor(0, 0, 240, 320, TOP_TITLE_BG_COLOR);
|
|
||||||
//LCD_DrawLine(0, 30, 240, 30, btn_color);
|
|
||||||
|
|
||||||
LCD_WR_PIC(10,0 ,40,31,gImage_Return);
|
|
||||||
|
|
||||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>16<31><36><EFBFBD>֣<EFBFBD>
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
|
||||||
TOP_TITLE_X1, TOP_TITLE_X2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOP_TITLE_Y1 + (TOP_TITLE_Y2 - TOP_TITLE_Y1 - TOP_TITLE_FONT_SIZE)/2, // <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
|
||||||
(uint8_t*)"\xBB\xD6\xB8\xB4\xB3\xF6\xB3\xA7\xC9\xE8\xD6\xC3", // <20><><EFBFBD><EFBFBD>̨
|
|
||||||
TOP_TITLE_ALIGN,
|
|
||||||
TOP_TITLE_TEXT_COLOR,
|
|
||||||
TOP_TITLE_BG_COLOR,
|
|
||||||
0,
|
|
||||||
TOP_TITLE_FONT_SIZE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UI_Restore_Select_Init(void)
|
void UI_Restore_Select_Init(void)
|
||||||
{
|
{
|
||||||
// LCD_WR_REG(0x28); // Display OFF
|
UI_ClearFocus();
|
||||||
UI_DrawTop_Restore();
|
LCD_FillByColor(0, 0, 240, 320, UI0902_BG_COLOR);
|
||||||
UI_Draw_Buttons();
|
LCD_ShowChinese_AutoAlign(0, 240, 8, (uint8_t*)"\xBB\xD6\xB8\xB4\xB3\xF6\xB3\xA7\xC9\xE8\xD6\xC3", LCD_ALIGN_CENTER, WHITE, UI0902_BG_COLOR, 0, 16);
|
||||||
|
LCD_ShowChinese_AutoAlign(0, 240, 118, (uint8_t*)"\xC8\xB7\xC8\xCF\xBB\xD6\xB8\xB4\xB3\xF6\xB3\xA7\xC9\xE8\xD6\xC3\xA3\xAC\xBB\xD6\xB8\xB4\xBA\xF3\xCB\xF9\xD3\xD0\xC9\xE8\xD6\xC3\xBD\xAB", LCD_ALIGN_CENTER, WHITE, UI0902_BG_COLOR, 0, 12);
|
||||||
|
LCD_ShowChinese_AutoAlign(0, 240, 140, (uint8_t*)"\xC7\xE5\xB3\xFD\xB2\xA2\xD6\xD8\xC6\xF4\xA1\xA3", LCD_ALIGN_CENTER, WHITE, UI0902_BG_COLOR, 0, 12);
|
||||||
|
LCD_WR_PIC_FROM_FLASH_Trans(13, 185, 106, 56, UI0902_BTN_CONFIRM_BIG_ADDR);
|
||||||
|
LCD_WR_PIC_FROM_FLASH_Trans(121, 185, 106, 56, UI0902_BTN_CANCEL_BIG_ADDR);
|
||||||
|
Draw_Bottom_Bar(UI0902_NAV_SETTING, 0);
|
||||||
pCurrentTouch_Area = Touch_Restore_Areas;
|
pCurrentTouch_Area = Touch_Restore_Areas;
|
||||||
// LCD_WR_REG(0x29); // Display ON
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_Restore_Select_Process(DisplayTaskMessage_Type msg)
|
void UI_Restore_Select_Process(DisplayTaskMessage_Type msg)
|
||||||
|
|
@ -121,27 +36,38 @@ void UI_Restore_Select_Process(DisplayTaskMessage_Type msg)
|
||||||
switch(msg.MessageType)
|
switch(msg.MessageType)
|
||||||
{
|
{
|
||||||
case MSG_ID_TOUCH :
|
case MSG_ID_TOUCH :
|
||||||
for(uint8_t k=0; k<TOUCH_AREA_SYSTEMSETTING_NUM; k++)
|
for(uint8_t k=0; k<TOUCH_AREA_RESTORE_NUM; k++)
|
||||||
{
|
{
|
||||||
if( msg.HiByte >= pCurrentTouch_Area[k].x_min &&
|
if( msg.HiByte >= pCurrentTouch_Area[k].x_min &&
|
||||||
msg.HiByte <= pCurrentTouch_Area[k].x_max &&
|
msg.HiByte <= pCurrentTouch_Area[k].x_max &&
|
||||||
msg.LoByte >= pCurrentTouch_Area[k].y_min &&
|
msg.LoByte >= pCurrentTouch_Area[k].y_min &&
|
||||||
msg.LoByte <= pCurrentTouch_Area[k].y_max )
|
msg.LoByte <= pCurrentTouch_Area[k].y_max )
|
||||||
{
|
{
|
||||||
switch(pCurrentTouch_Area[k].ID)
|
if (pCurrentTouch_Area[k].ID == GUI_NAV_BAR)
|
||||||
{
|
{
|
||||||
case 0:
|
if (pCurrentTouch_Area[k].Value == UI0902_NAV_SETTING)
|
||||||
MenuPage_Setting_Proc();
|
MenuPage_Setting_Proc();
|
||||||
break;
|
else
|
||||||
case 1:
|
UI_NavBar_Action(pCurrentTouch_Area[k].Value);
|
||||||
RestoreSetting();
|
}
|
||||||
MenuPage_Setting_Proc();
|
else
|
||||||
break;
|
{
|
||||||
case 2:
|
switch(pCurrentTouch_Area[k].ID)
|
||||||
MenuPage_Setting_Proc();
|
{
|
||||||
break;
|
case 0:
|
||||||
|
MenuPage_Setting_Proc();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
RestoreSetting();
|
||||||
|
MenuPage_Setting_Proc();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
MenuPage_Setting_Proc();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ResetAutoPowerCount();
|
ResetAutoPowerCount();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
214
UI/UI_Setting.c
|
|
@ -1,41 +1,35 @@
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
|
|
||||||
// ==============================
|
/* ==============================
|
||||||
// <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
|
* 0902 ????????????? / ???????? / ?????? / ???????
|
||||||
// ==============================
|
* ?? 214x40????????? 50???????????? / ????? / ?????
|
||||||
#define BTN_Y_START 275 // <20><>ť<EFBFBD><C5A5>ʼY
|
* ============================== */
|
||||||
#define BTN_HEIGHT 40 // <20><>ť<EFBFBD>߶<EFBFBD>
|
#define SET_ROW_X 13
|
||||||
#define BTN_WIDTH 105 // <20><>ť<EFBFBD><C5A5><EFBFBD>
|
#define SET_ROW_W 214
|
||||||
#define BTN_GAP 5 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD>м<EFBFBD><D0BC><EFBFBD>
|
#define SET_ROW_H 40
|
||||||
#define BTN_RADIUS 6 // Բ<><D4B2>
|
#define SET_ROW_Y0 42
|
||||||
|
#define SET_ROW_PITCH 50
|
||||||
// <20><>ɫ
|
|
||||||
#define BTN_COLOR_CANCEL 0x4A4A // <20><>ɫȡ<C9AB><C8A1>
|
|
||||||
#define BTN_COLOR_CONFIRM 0x03B7 // <20><>ɫȷ<C9AB><C8B7>
|
|
||||||
#define BTN_TEXT_COLOR 0xFFFF // <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
|
||||||
#define BTN_TEXT_SIZE 16
|
|
||||||
|
|
||||||
|
|
||||||
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
|
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
|
||||||
|
|
||||||
const Touch_AreaTypeDef Touch_SystemSetting_Areas[] =
|
const Touch_AreaTypeDef Touch_SystemSetting_Areas[] =
|
||||||
{
|
{
|
||||||
// Xmin, Xmax, Ymin, Ymax, flag, Value, ID, action
|
/* ??? / ????????????????? Flag -1/+1???????? */
|
||||||
{ 115, 170, 110, 170, -1, 0, GUI_BLUETOOTH_SW, NULL },
|
{ 13, 119, SET_ROW_Y0 + SET_ROW_PITCH, SET_ROW_Y0 + SET_ROW_PITCH + SET_ROW_H - 1, -1, 0, GUI_BLUETOOTH_SW, NULL },
|
||||||
{ 170, 225, 110, 170, 1, 0, GUI_BLUETOOTH_SW, NULL },
|
{ 120, 227, SET_ROW_Y0 + SET_ROW_PITCH, SET_ROW_Y0 + SET_ROW_PITCH + SET_ROW_H - 1, 1, 0, GUI_BLUETOOTH_SW, NULL },
|
||||||
{ 115, 170, 175, 235, -1, 0, GUI_AUTOCLOSE, NULL },
|
{ 13, 119, SET_ROW_Y0 + SET_ROW_PITCH * 2, SET_ROW_Y0 + SET_ROW_PITCH * 2 + SET_ROW_H - 1, -1, 0, GUI_AUTOCLOSE, NULL },
|
||||||
{ 170, 225, 175, 235, 1, 0, GUI_AUTOCLOSE, NULL },
|
{ 120, 227, SET_ROW_Y0 + SET_ROW_PITCH * 2, SET_ROW_Y0 + SET_ROW_PITCH * 2 + SET_ROW_H - 1, 1, 0, GUI_AUTOCLOSE, NULL },
|
||||||
{ 115, 170, 240, 300, -1, 0, GUI_RESTORE, NULL },
|
{ 13, 227, SET_ROW_Y0 + SET_ROW_PITCH * 3, SET_ROW_Y0 + SET_ROW_PITCH * 3 + SET_ROW_H - 1, 0, 0, GUI_RESTORE, NULL },
|
||||||
{ 170, 225, 240, 300, 1, 0, GUI_RESTORE, NULL },
|
{ 0, 59, 280, 319, 0, UI0902_NAV_UNIVERSAL, GUI_NAV_BAR, NULL },
|
||||||
// { 15, 15+BTN_WIDTH, BTN_Y_START, BTN_Y_START+BTN_HEIGHT, 0, 0, GUI_CANCEL, NULL },
|
{ 60, 119, 280, 319, 0, UI0902_NAV_NORMAL, GUI_NAV_BAR, NULL },
|
||||||
// { 15+BTN_WIDTH+BTN_GAP, 15+BTN_WIDTH*2+BTN_GAP, BTN_Y_START, BTN_Y_START+BTN_HEIGHT, 0, 1, GUI_CONFIRM, NULL },
|
{ 120, 179, 280, 319, 0, UI0902_NAV_EXPERT, GUI_NAV_BAR, NULL },
|
||||||
{ 0, 50, 0, 50, 0, 0, 0, NULL },
|
{ 180, 239, 280, 319, 0, UI0902_NAV_SETTING, GUI_NAV_BAR, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TOUCH_AREA_SYSTEMSETTING_NUM (sizeof(Touch_SystemSetting_Areas)/sizeof(Touch_AreaTypeDef))
|
#define TOUCH_AREA_SYSTEMSETTING_NUM (sizeof(Touch_SystemSetting_Areas)/sizeof(Touch_AreaTypeDef))
|
||||||
|
|
||||||
GUI_SWITCH mGuiData_SystemSETTING[] = {
|
GUI_SWITCH mGuiData_SystemSETTING[] = {
|
||||||
{ 0, 0, 2, GUI_VERSION}, // 0
|
{ 0, 0, 2, GUI_VERSION},
|
||||||
{ 0, 0, 1, GUI_BLUETOOTH_SW},
|
{ 0, 0, 1, GUI_BLUETOOTH_SW},
|
||||||
{ 0, 1, 3, GUI_AUTOCLOSE},
|
{ 0, 1, 3, GUI_AUTOCLOSE},
|
||||||
{ 0, 0, 1, GUI_RESTORE},
|
{ 0, 0, 1, GUI_RESTORE},
|
||||||
|
|
@ -43,118 +37,14 @@ GUI_SWITCH mGuiData_SystemSETTING[] = {
|
||||||
|
|
||||||
LEBEL_UI SystemSetting[] =
|
LEBEL_UI SystemSetting[] =
|
||||||
{
|
{
|
||||||
{15, 230,35+10,60, (const uint8_t*)"\xB9\xCC\xBC\xFE\xB0\xE6\xB1\xBE", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_VERSION},
|
/* ?????? */
|
||||||
{15, 230,95+10+5,60, (const uint8_t*)"\xC0\xB6\xD1\xC0\xC1\xB4\xBD\xD3", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_BLUETOOTH_SW},
|
{SET_ROW_X, SET_ROW_W, SET_ROW_Y0, SET_ROW_H, (const uint8_t*)"\xB9\xCC\xBC\xFE\xB0\xE6\xB1\xBE", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_VERSION},
|
||||||
{15, 230,160+10+5,60,(const uint8_t*)"\xD7\xD4\xB6\xAF\xB9\xD8\xBB\xFA", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_AUTOCLOSE},
|
/* ????????????????????????????????????????????????????????????? */
|
||||||
{15, 230,225+10+5,60,(const uint8_t*)"\xBB\xD6\xB8\xB4\xB3\xF6\xB3\xA7\xC9\xE8\xD6\xC3", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_RESTORE},
|
{SET_ROW_X, SET_ROW_W, SET_ROW_Y0 + SET_ROW_PITCH, SET_ROW_H, (const uint8_t*)"\xC0\xB6\xD1\xC0\xC1\xAC\xBD\xD3", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_BLUETOOTH_SW},
|
||||||
|
{SET_ROW_X, SET_ROW_W, SET_ROW_Y0 + SET_ROW_PITCH*2, SET_ROW_H, (const uint8_t*)"\xD7\xD4\xB6\xAF\xB9\xD8\xBB\xFA", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_AUTOCLOSE},
|
||||||
|
{SET_ROW_X, SET_ROW_W, SET_ROW_Y0 + SET_ROW_PITCH*3, SET_ROW_H, (const uint8_t*)"\xBB\xD6\xB8\xB4\xB3\xF6\xB3\xA7\xC9\xE8\xD6\xC3", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_RESTORE},
|
||||||
};
|
};
|
||||||
|
|
||||||
// ==============================
|
|
||||||
// <20><><EFBFBD>Ƶײ<C6B5><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť
|
|
||||||
// ==============================
|
|
||||||
void UI_Draw_Bottom_Buttons(void)
|
|
||||||
{
|
|
||||||
LCD_FillByColor(0, 270, 240, 320, BLACK);
|
|
||||||
// ȡ<><C8A1><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
|
|
||||||
LCD_FillRoundRect(
|
|
||||||
15,
|
|
||||||
BTN_Y_START,
|
|
||||||
BTN_WIDTH,
|
|
||||||
BTN_HEIGHT,
|
|
||||||
BTN_RADIUS,
|
|
||||||
BTN_COLOR_CANCEL
|
|
||||||
);
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
|
||||||
15, 15 + BTN_WIDTH,
|
|
||||||
BTN_Y_START + (BTN_HEIGHT - BTN_TEXT_SIZE)/2,
|
|
||||||
(uint8_t*)"\xC8\xB1\xCF\xF8\x00",
|
|
||||||
LCD_ALIGN_CENTER,
|
|
||||||
BTN_TEXT_COLOR,
|
|
||||||
BTN_COLOR_CANCEL,
|
|
||||||
0,
|
|
||||||
BTN_TEXT_SIZE
|
|
||||||
);
|
|
||||||
|
|
||||||
// ȷ<><C8B7><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD>ң<EFBFBD>
|
|
||||||
LCD_FillRoundRect(
|
|
||||||
15 + BTN_WIDTH + BTN_GAP,
|
|
||||||
BTN_Y_START,
|
|
||||||
BTN_WIDTH,
|
|
||||||
BTN_HEIGHT,
|
|
||||||
BTN_RADIUS,
|
|
||||||
BTN_COLOR_CONFIRM
|
|
||||||
);
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
|
||||||
15 + BTN_WIDTH + BTN_GAP,
|
|
||||||
15 + BTN_WIDTH*2 + BTN_GAP,
|
|
||||||
BTN_Y_START + (BTN_HEIGHT - BTN_TEXT_SIZE)/2,
|
|
||||||
(uint8_t*)"\xC8\xB7\xB6\xA8\x00",
|
|
||||||
LCD_ALIGN_CENTER,
|
|
||||||
BTN_TEXT_COLOR,
|
|
||||||
BTN_COLOR_CONFIRM,
|
|
||||||
0,
|
|
||||||
BTN_TEXT_SIZE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ==============================
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<F2A3A8B9><CCB6><EFBFBD>Χ<EFBFBD><CEA7>
|
|
||||||
// ==============================
|
|
||||||
#define TOP_TITLE_X1 0
|
|
||||||
#define TOP_TITLE_X2 240
|
|
||||||
#define TOP_TITLE_Y1 0
|
|
||||||
#define TOP_TITLE_Y2 35
|
|
||||||
#define TOP_TITLE_BG_COLOR BLACK // <20><><EFBFBD><EFBFBD>ɫ
|
|
||||||
#define TOP_TITLE_TEXT_COLOR WHITE // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
||||||
#define TOP_TITLE_FONT_SIZE 16 // <20><><EFBFBD><EFBFBD><EFBFBD>С
|
|
||||||
#define TOP_TITLE_ALIGN LCD_ALIGN_CENTER // <20><><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
// ==============================
|
|
||||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD>̨
|
|
||||||
// ==============================
|
|
||||||
void UI_DrawTop_TiaoYinTai(void)
|
|
||||||
{
|
|
||||||
LCD_FillByColor(0, 0, 240, 320, TOP_TITLE_BG_COLOR);
|
|
||||||
|
|
||||||
LCD_WR_PIC(10,0 ,40,31,gImage_Return);
|
|
||||||
|
|
||||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>16<31><36><EFBFBD>֣<EFBFBD>
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
|
||||||
TOP_TITLE_X1, TOP_TITLE_X2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
TOP_TITLE_Y1 + (TOP_TITLE_Y2 - TOP_TITLE_Y1 - TOP_TITLE_FONT_SIZE)/2, // <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
|
||||||
(uint8_t*)"\xB5\xF7\xD2\xF4\xCC\xA8", // <20><><EFBFBD><EFBFBD>̨
|
|
||||||
TOP_TITLE_ALIGN,
|
|
||||||
TOP_TITLE_TEXT_COLOR,
|
|
||||||
TOP_TITLE_BG_COLOR,
|
|
||||||
0,
|
|
||||||
TOP_TITLE_FONT_SIZE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ==============================
|
|
||||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣺ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
|
||||||
// ==============================
|
|
||||||
void UI_DrawTop_SystemSetting(void)
|
|
||||||
{
|
|
||||||
LCD_FillByColor(0, 0, 240, 320, TOP_TITLE_BG_COLOR);
|
|
||||||
|
|
||||||
|
|
||||||
LCD_WR_PIC(10,0 ,40,31,gImage_Return);
|
|
||||||
// <20><>ʾ<EFBFBD><CABE>ϵͳ<CFB5><CDB3><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>С<EFBFBD>16<31><36><EFBFBD>֣<EFBFBD>
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
|
||||||
TOP_TITLE_X1, TOP_TITLE_X2,
|
|
||||||
TOP_TITLE_Y1 + (TOP_TITLE_Y2 - TOP_TITLE_Y1 - TOP_TITLE_FONT_SIZE)/2,
|
|
||||||
(uint8_t*)"\xCF\xB5\xCD\xB3\xC9\xE8\xD6\xC3", // ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
|
||||||
TOP_TITLE_ALIGN,
|
|
||||||
TOP_TITLE_TEXT_COLOR,
|
|
||||||
TOP_TITLE_BG_COLOR,
|
|
||||||
0,
|
|
||||||
TOP_TITLE_FONT_SIZE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void DrawSystemSetting(void)
|
void DrawSystemSetting(void)
|
||||||
{
|
{
|
||||||
Draw_System_Item_List(&SystemSetting[GUI_VERSION],&mGuiData_SystemSETTING[GUI_VERSION]);
|
Draw_System_Item_List(&SystemSetting[GUI_VERSION],&mGuiData_SystemSETTING[GUI_VERSION]);
|
||||||
|
|
@ -163,53 +53,54 @@ void DrawSystemSetting(void)
|
||||||
Draw_System_Item_List(&SystemSetting[GUI_RESTORE],&mGuiData_SystemSETTING[GUI_RESTORE]);
|
Draw_System_Item_List(&SystemSetting[GUI_RESTORE],&mGuiData_SystemSETTING[GUI_RESTORE]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==============================
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
// ==============================
|
|
||||||
void Touch_SystemSettingAction(int8_t FLAG, uint8_t ID, uint8_t areaIndex, uint8_t value)
|
void Touch_SystemSettingAction(int8_t FLAG, uint8_t ID, uint8_t areaIndex, uint8_t value)
|
||||||
{
|
{
|
||||||
uint16_t last_value;
|
uint16_t last_value;
|
||||||
|
(void)areaIndex;
|
||||||
|
|
||||||
|
if (ID == GUI_NAV_BAR)
|
||||||
if(ID == 0)
|
|
||||||
{
|
{
|
||||||
MenuPage_SystemSetting_Proc();
|
/* ???????????¨¢????????????????????§Ö?????? */
|
||||||
|
if (value == UI0902_NAV_SETTING)
|
||||||
|
UI_GotoCurrentModePage();
|
||||||
|
else
|
||||||
|
UI_NavBar_Action(value);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|
||||||
// --------------------------
|
|
||||||
last_value = mGuiData_SystemSETTING[ID].Current;
|
last_value = mGuiData_SystemSETTING[ID].Current;
|
||||||
switch(ID)
|
switch(ID)
|
||||||
{
|
{
|
||||||
case GUI_BLUETOOTH_SW:
|
case GUI_BLUETOOTH_SW:
|
||||||
GUI_Item_AjustValue(&mGuiData_SystemSETTING[ID], FLAG);
|
mGuiData_SystemSETTING[ID].Current = !mGuiData_SystemSETTING[ID].Current;
|
||||||
if (!UI_SetFocus(ID))
|
if (!UI_SetFocus(ID))
|
||||||
RefreshSystemSetting(last_value, &SystemSetting[ID], &mGuiData_SystemSETTING[ID]);
|
RefreshSystemSetting(last_value, &SystemSetting[ID], &mGuiData_SystemSETTING[ID]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GUI_AUTOCLOSE:
|
case GUI_AUTOCLOSE:
|
||||||
GUI_Item_AjustLoopValue(&mGuiData_SystemSETTING[ID], FLAG);
|
GUI_Item_AjustLoopValue(&mGuiData_SystemSETTING[ID], FLAG >= 0 ? 1 : -1);
|
||||||
if (!UI_SetFocus(ID))
|
if (!UI_SetFocus(ID))
|
||||||
RefreshSystemSetting(last_value, &SystemSetting[ID], &mGuiData_SystemSETTING[ID]);
|
RefreshSystemSetting(last_value, &SystemSetting[ID], &mGuiData_SystemSETTING[ID]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GUI_RESTORE:
|
case GUI_RESTORE:
|
||||||
// GUI_Item_AjustValue(&mGuiData_SystemSETTING[ID], FLAG);
|
|
||||||
// RefreshSystemSetting(last_value, &SystemSetting[ID], &mGuiData_SystemSETTING[ID]);
|
|
||||||
MenuPage_Restore_Proc();
|
MenuPage_Restore_Proc();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_Setting_Init(void)
|
void UI_Setting_Init(void)
|
||||||
{
|
{
|
||||||
UI_ClearFocus();
|
UI_ClearFocus();
|
||||||
// LCD_WR_REG(0x28); // Display OFF
|
LCD_FillByColor(0, 0, 240, 320, UI0902_BG_COLOR);
|
||||||
UI_DrawTop_SystemSetting();
|
/* ?????? */
|
||||||
|
LCD_ShowChinese_AutoAlign(0, 240, 8, (const uint8_t*)"\xCF\xB5\xCD\xB3\xC9\xE8\xD6\xC3", LCD_ALIGN_CENTER, WHITE, UI0902_BG_COLOR, 0, 16);
|
||||||
DrawSystemSetting();
|
DrawSystemSetting();
|
||||||
|
Draw_Bottom_Bar(UI0902_NAV_SETTING, 0);
|
||||||
pCurrentTouch_Area = Touch_SystemSetting_Areas;
|
pCurrentTouch_Area = Touch_SystemSetting_Areas;
|
||||||
// LCD_WR_REG(0x29); // Display ON
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_Setting_Process(DisplayTaskMessage_Type msg)
|
void UI_Setting_Process(DisplayTaskMessage_Type msg)
|
||||||
|
|
@ -222,28 +113,13 @@ void UI_Setting_Process(DisplayTaskMessage_Type msg)
|
||||||
if( msg.HiByte >= pCurrentTouch_Area[k].x_min && msg.HiByte <= pCurrentTouch_Area[k].x_max &&
|
if( msg.HiByte >= pCurrentTouch_Area[k].x_min && msg.HiByte <= pCurrentTouch_Area[k].x_max &&
|
||||||
msg.LoByte >= pCurrentTouch_Area[k].y_min && msg.LoByte <= pCurrentTouch_Area[k].y_max )
|
msg.LoByte >= pCurrentTouch_Area[k].y_min && msg.LoByte <= pCurrentTouch_Area[k].y_max )
|
||||||
{
|
{
|
||||||
Touch_SystemSettingAction(pCurrentTouch_Area[k].Flag,pCurrentTouch_Area[k].ID,k,0);
|
Touch_SystemSettingAction(pCurrentTouch_Area[k].Flag,pCurrentTouch_Area[k].ID,k,pCurrentTouch_Area[k].Value);
|
||||||
ResetAutoPowerCount();
|
ResetAutoPowerCount();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSG_ID_EC_VOL:
|
case MSG_ID_EC_VOL:
|
||||||
// //LCD_ShowString(200, 0, Num_To_String(msg.DataU16[1],buff,3), RED, WHITE, 16, 0);
|
|
||||||
// uint8_t vol = msg.DataU16[1];
|
|
||||||
// uint8_t level;
|
|
||||||
// if (vol <= 5) level = 0;
|
|
||||||
// else if (vol <= 35) level = 1;
|
|
||||||
// else if (vol <= 65) level = 2;
|
|
||||||
// else if (vol <= 95) level = 3;
|
|
||||||
// else if (vol <= 115) level = 4;
|
|
||||||
// else level = 5;
|
|
||||||
// //Draw_Volume_Bar(5, 5, level, 1, WHITE, GRAY);
|
|
||||||
// uint8_t mMasterSysExVolume[12] = { 0xF0, 0x41, 0x00, 0x42, 0x12, 0x40, 0x00, 0x04, 0x64, 0x00, 0x00,0xF7};
|
|
||||||
// memset(mMasterSysExVolume+8,msg.DataU16[1],1);
|
|
||||||
// SendMidiDataToDreamDSP(mMasterSysExVolume,12);
|
|
||||||
//
|
|
||||||
// ResetAutoPowerCount();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,10 @@
|
||||||
#ifndef __UI_SETTING_H__
|
#ifndef __UI_SETTING_H__
|
||||||
#define __UI_SETTING_H__
|
#define __UI_SETTING_H__
|
||||||
|
|
||||||
|
|
||||||
extern GUI_SWITCH mGuiData_SystemSETTING[];
|
extern GUI_SWITCH mGuiData_SystemSETTING[];
|
||||||
extern LEBEL_UI SystemSetting[];
|
extern LEBEL_UI SystemSetting[];
|
||||||
|
|
||||||
|
|
||||||
void UI_DrawTop_TiaoYinTai(void);
|
|
||||||
void UI_Setting_Init(void);
|
void UI_Setting_Init(void);
|
||||||
void UI_Setting_Process(DisplayTaskMessage_Type msg);
|
void UI_Setting_Process(DisplayTaskMessage_Type msg);
|
||||||
|
|
||||||
extern void UI_Draw_Bottom_Buttons(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
116
UI/UI_SongMode.c
|
|
@ -7,105 +7,56 @@ static uint8_t Speed[6] = {0xF0, 0x51, 0x03, 0x00, 0x00, 0xF7};
|
||||||
|
|
||||||
void Draw_Tab_Mode_Menu(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
void Draw_Tab_Mode_Menu(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||||||
{
|
{
|
||||||
// ===================== TAB 閰嶇疆鍙傛暟 =====================
|
/* 0819:TAB 字号 11;0902:紧凑圆角条,选中常亮蓝,文字垂直居中 */
|
||||||
const uint16_t tab_w = 80; // TAB瀹藉<E780B9>????
|
const uint16_t tab_w = UI0902_TAB_W;
|
||||||
const uint16_t tab_h = 20; // TAB楂樺<E6A582>????
|
const uint16_t tab_h = UI0902_TAB_H;
|
||||||
const uint8_t tab_r = 5; // 鍦嗚<E98DA6>????
|
const uint8_t tab_r = UI0902_RADIUS_TAB;
|
||||||
//const uint8_t space = 3; // 闂<>?<3F>窛
|
const uint8_t tab_font = UI0902_FONT_LABEL;
|
||||||
const uint16_t start_x = UI->x; // 璧峰X
|
const uint16_t start_x = UI0902_MARGIN_X;
|
||||||
const uint16_t start_y = UI->y; // 璧峰Y
|
const uint16_t start_y = UI->y;
|
||||||
const uint16_t text_y = UI->y + 2; // 鏂囧<E98F82>????Y
|
const uint16_t gap = UI0902_TAB_GAP;
|
||||||
|
const uint16_t text_y = start_y + (tab_h - tab_font) / 2;
|
||||||
|
const uint16_t inset = 3;
|
||||||
|
uint16_t color_sel_bg = COLOR_GRAD_MID;
|
||||||
|
uint16_t color_unsel_bg = UI0902_ROW_BG;
|
||||||
|
uint16_t color_text = UI->Text_fc;
|
||||||
|
uint16_t x1 = start_x;
|
||||||
|
uint16_t x2 = start_x + tab_w + gap;
|
||||||
|
|
||||||
// ===================== 棰滆壊瀹氫<E780B9>???? =====================
|
|
||||||
uint16_t color_sel_bg = UI_IsFocused(GUI_MODE_PARAM) ? COLOR_PRIMARY : COLOR_NORMAL_BG;
|
|
||||||
uint16_t color_unsel_bg = COLOR_NORMAL_BG;
|
|
||||||
uint16_t color_text = UI->Text_fc; // 鏂囧瓧棰滆<E6A3B0>??
|
|
||||||
|
|
||||||
// 鏄剧ず锛氳嚜鍔ㄤ即濂忓紑 / <20>?????
|
|
||||||
if(Group->Current == 1)
|
if(Group->Current == 1)
|
||||||
{
|
{
|
||||||
LCD_FillRoundRect(start_x,
|
LCD_FillRoundRect(x1, start_y, tab_w, tab_h, tab_r, color_unsel_bg);
|
||||||
start_y,
|
LCD_FillRoundRect(x2, start_y, tab_w, tab_h, tab_r, color_sel_bg);
|
||||||
tab_w,
|
|
||||||
tab_h,
|
|
||||||
tab_r,
|
|
||||||
color_unsel_bg);
|
|
||||||
|
|
||||||
LCD_FillRoundRect(start_x+tab_w +10,
|
|
||||||
start_y,
|
|
||||||
tab_w,
|
|
||||||
tab_h,
|
|
||||||
tab_r,
|
|
||||||
color_sel_bg);
|
|
||||||
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
LCD_ShowChinese_AutoAlign(
|
||||||
start_x,
|
x1 + inset, x1 + tab_w - inset, text_y,
|
||||||
start_x + tab_w,
|
|
||||||
text_y,
|
|
||||||
(const uint8_t*)"\xBD\xDA\xD7\xE0\xC0\xE0\xD0\xCD",
|
(const uint8_t*)"\xBD\xDA\xD7\xE0\xC0\xE0\xD0\xCD",
|
||||||
UI->Text_Align,
|
LCD_ALIGN_CENTER, color_text, color_unsel_bg, 0, tab_font);
|
||||||
color_text,
|
|
||||||
color_unsel_bg,
|
|
||||||
0,
|
|
||||||
16
|
|
||||||
);
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
LCD_ShowChinese_AutoAlign(
|
||||||
start_x + tab_w + 15,
|
x2 + inset, x2 + tab_w - inset, text_y,
|
||||||
start_x + tab_w + tab_w,
|
|
||||||
text_y,
|
|
||||||
(const uint8_t *)"\xB1\xBE\xB5\xD8\xC7\xFA\xC4\xBF",
|
(const uint8_t *)"\xB1\xBE\xB5\xD8\xC7\xFA\xC4\xBF",
|
||||||
UI->Text_Align,
|
LCD_ALIGN_CENTER, color_text, color_sel_bg, 0, tab_font);
|
||||||
color_text,
|
|
||||||
color_sel_bg,
|
|
||||||
0,
|
|
||||||
16
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LCD_FillRoundRect(start_x,
|
LCD_FillRoundRect(x1, start_y, tab_w, tab_h, tab_r, color_sel_bg);
|
||||||
start_y,
|
LCD_FillRoundRect(x2, start_y, tab_w, tab_h, tab_r, color_unsel_bg);
|
||||||
tab_w,
|
|
||||||
tab_h,
|
|
||||||
tab_r,
|
|
||||||
color_sel_bg);
|
|
||||||
|
|
||||||
LCD_FillRoundRect(start_x+tab_w +10,
|
|
||||||
start_y,
|
|
||||||
tab_w,
|
|
||||||
tab_h,
|
|
||||||
tab_r,
|
|
||||||
color_unsel_bg);
|
|
||||||
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
LCD_ShowChinese_AutoAlign(
|
||||||
start_x,
|
x1 + inset, x1 + tab_w - inset, text_y,
|
||||||
start_x + tab_w,
|
(const uint8_t*)"\xBD\xDA\xD7\xE0\xC0\xE0\xD0\xCD",
|
||||||
text_y,
|
LCD_ALIGN_CENTER, color_text, color_sel_bg, 0, tab_font);
|
||||||
(const uint8_t*)"\xBD\xDA\xD7\xE0\xC0\xE0\xD0\xCD", //节<>?<3F>类<EFBFBD>?
|
|
||||||
UI->Text_Align,
|
|
||||||
color_text,
|
|
||||||
color_sel_bg,
|
|
||||||
0,
|
|
||||||
16
|
|
||||||
);
|
|
||||||
LCD_ShowChinese_AutoAlign(
|
LCD_ShowChinese_AutoAlign(
|
||||||
start_x + tab_w + 15,
|
x2 + inset, x2 + tab_w - inset, text_y,
|
||||||
start_x + tab_w + tab_w,
|
(const uint8_t *)"\xB1\xBE\xB5\xD8\xC7\xFA\xC4\xBF",
|
||||||
text_y,
|
LCD_ALIGN_CENTER, color_text, color_unsel_bg, 0, tab_font);
|
||||||
(const uint8_t *)"\xB1\xBE\xB5\xD8\xC7\xFA\xC4\xBF", //<2F>?地曲<E59CB0>?
|
|
||||||
UI->Text_Align,
|
|
||||||
color_text,
|
|
||||||
color_unsel_bg,
|
|
||||||
0,
|
|
||||||
16
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Show_home_UI(void)
|
void Show_home_UI(void)
|
||||||
{
|
{
|
||||||
UI_ClearFocus();
|
UI_ClearFocus();
|
||||||
LCD_FillByColor(0,0,240,320,BLACK);
|
LCD_FillByColor(0,0,240,320,UI0902_BG_COLOR);
|
||||||
label_top();
|
label_top();
|
||||||
label_Tranzpose_ui(&UI_Label[GUI_TRANSPOSE], &mGuiData[GUI_TRANSPOSE]);
|
label_Tranzpose_ui(&UI_Label[GUI_TRANSPOSE], &mGuiData[GUI_TRANSPOSE]);
|
||||||
label_Speed_ui(&UI_Label[GUI_SPEED], &mGuiData[GUI_SPEED]);
|
label_Speed_ui(&UI_Label[GUI_SPEED], &mGuiData[GUI_SPEED]);
|
||||||
|
|
@ -298,6 +249,11 @@ void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex,uint8_t value)
|
||||||
Refresh_SectionSelect(last_value, &UI_Label[ID], &mGuiData[ID]);
|
Refresh_SectionSelect(last_value, &UI_Label[ID], &mGuiData[ID]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if(ID == GUI_NAV_BAR)
|
||||||
|
{
|
||||||
|
UI_NavBar_Action(value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
else if(ID==GUI_TAB_INDEX)
|
else if(ID==GUI_TAB_INDEX)
|
||||||
{
|
{
|
||||||
if(mGuiData[ID].Current != value)
|
if(mGuiData[ID].Current != value)
|
||||||
|
|
@ -407,7 +363,7 @@ void UI_SongMode_Process(DisplayTaskMessage_Type msg)
|
||||||
|
|
||||||
case MSG_ID_EC_VOL:
|
case MSG_ID_EC_VOL:
|
||||||
Send_volume(msg.ID);
|
Send_volume(msg.ID);
|
||||||
Draw_Volume_Bar(5, 5, msg.HiByte, 1, WHITE, GRAY);
|
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, msg.HiByte, 1, WHITE, GRAY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSG_ID_TAP_SPEED:
|
case MSG_ID_TAP_SPEED:
|
||||||
|
|
|
||||||
408
UI/UI_global.c
|
|
@ -147,16 +147,10 @@ uint8_t UI_IsFocused(uint8_t widget_id)
|
||||||
|
|
||||||
void UI_GetFocusGrad(uint8_t widget_id, uint16_t *c_top, uint16_t *c_bot)
|
void UI_GetFocusGrad(uint8_t widget_id, uint16_t *c_top, uint16_t *c_bot)
|
||||||
{
|
{
|
||||||
if (UI_IsFocused(widget_id))
|
/* 0902:行背景保持深色;选中态由 TAB/段落按钮自身高亮,避免整行变蓝 */
|
||||||
{
|
(void)widget_id;
|
||||||
*c_top = START_COLOR;
|
*c_top = UI0902_ROW_BG;
|
||||||
*c_bot = END_COLOR;
|
*c_bot = UI0902_ROW_BG;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*c_top = COLOR_NORMAL_BG;
|
|
||||||
*c_bot = COLOR_NORMAL_BG;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t UI_SetFocus(uint8_t widget_id)
|
uint8_t UI_SetFocus(uint8_t widget_id)
|
||||||
|
|
@ -175,10 +169,10 @@ uint8_t UI_SetFocus(uint8_t widget_id)
|
||||||
|
|
||||||
void label_top()
|
void label_top()
|
||||||
{
|
{
|
||||||
const uint16_t btn_color = /*DARKLGRAY*/0x2988; // 深灰<E6B7B1>?????
|
const uint16_t btn_color = /*DARKLGRAY*/0x2988;
|
||||||
//LCD_FillByColor(0,0,240,25,BLACK);
|
LCD_FillByColor(0, 0, 240, UI_STATUS_BAR_H, UI0902_BG_COLOR);
|
||||||
//LCD_WR_PIC(5,0,12,20,gImage_bar);
|
/* 仅一组动态音量条(音量图标素材本身也是竖条,不再叠绘以免双图标) */
|
||||||
Draw_Volume_Bar(8, 5, level, 1, WHITE, GRAY);
|
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, level, 1, WHITE, GRAY);
|
||||||
LCD_DrawLine(0, 26, 240, 26, btn_color);
|
LCD_DrawLine(0, 26, 240, 26, btn_color);
|
||||||
Show_BL_Icon(mGuiData[GUI_BL_SW].Current);
|
Show_BL_Icon(mGuiData[GUI_BL_SW].Current);
|
||||||
Show_Battery_Icon(usb_charging_state);
|
Show_Battery_Icon(usb_charging_state);
|
||||||
|
|
@ -221,25 +215,72 @@ void Refresh_TabSelect_ui(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 蓝牙图标显示(占位) */
|
/* 返回当前 TAB 对应的模式页(设置/调音台页的“返回”用) */
|
||||||
|
void UI_GotoCurrentModePage(void)
|
||||||
|
{
|
||||||
|
switch (mGuiData[GUI_TAB_INDEX].Current)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
ADDRESS = mGuiData[GUI_AUTOBAND_SW].Current ? 0x0009EB5F : 0x0001B8F0;
|
||||||
|
MenuPage_SongMode_Proc();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ADDRESS = mGuiData[GUI_AUTOBAND_SW].Current ? 0x0009EB5F : 0x00000000;
|
||||||
|
MenuPage_ExpertMode_Proc();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ADDRESS = 0x0009598F;
|
||||||
|
MenuPage_FreeMode_Proc();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
MenuPage_SongMode_Proc();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 蓝牙图标:设计稿居中 */
|
||||||
void Show_BL_Icon(uint8_t value)
|
void Show_BL_Icon(uint8_t value)
|
||||||
{
|
{
|
||||||
if(value)
|
LCD_FillByColor(UI0902_BT_X, UI0902_BT_Y,
|
||||||
|
UI0902_BT_X + UI0902_BT_W - 1,
|
||||||
|
UI0902_BT_Y + UI0902_BT_H - 1, UI0902_BG_COLOR);
|
||||||
|
if (value)
|
||||||
{
|
{
|
||||||
LCD_WR_PIC(110,5,12,20,gImage_bl);
|
LCD_WR_PIC_Trans(UI0902_BT_X, UI0902_BT_Y, UI0902_BT_W, UI0902_BT_H,
|
||||||
|
gImage_UI0902_Bluetooth_11x17, BLACK);
|
||||||
}
|
}
|
||||||
else
|
BSP_BlueToothPowerEnable(value);
|
||||||
{
|
|
||||||
LCD_WR_PIC(110,5,12,18,gImage_bl0);
|
|
||||||
}
|
|
||||||
BSP_BlueToothPowerEnable (value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw_Status_Battery_Icon(uint8_t battery_percent)
|
void Draw_Status_Battery_Icon(uint8_t battery_percent)
|
||||||
{
|
{
|
||||||
/* 需求图:状态栏电池始终为白色(含 USB 充电连接时) */
|
uint8_t Info[8];
|
||||||
Draw_Battery_Icon(UI_STATUS_BATTERY_X, UI_STATUS_BATTERY_Y,
|
uint16_t fill_w;
|
||||||
battery_percent, 1, WHITE, BLACK, WHITE);
|
uint16_t text_w;
|
||||||
|
uint16_t bat_x;
|
||||||
|
uint16_t text_x;
|
||||||
|
uint16_t text_y;
|
||||||
|
|
||||||
|
if (battery_percent > 100)
|
||||||
|
battery_percent = 100;
|
||||||
|
|
||||||
|
sprintf((char *)Info, "%d%%", battery_percent);
|
||||||
|
text_w = (uint16_t)(strlen((char *)Info) * (UI0902_BATTERY_TEXT_SIZE / 2));
|
||||||
|
bat_x = (uint16_t)(240 - UI0902_BATTERY_RIGHT_MARGIN - text_w
|
||||||
|
- UI0902_BATTERY_TEXT_GAP - UI0902_BATTERY_W);
|
||||||
|
text_x = (uint16_t)(bat_x + UI0902_BATTERY_W + UI0902_BATTERY_TEXT_GAP);
|
||||||
|
text_y = (uint16_t)((UI_STATUS_BAR_H - UI0902_BATTERY_TEXT_SIZE) / 2);
|
||||||
|
|
||||||
|
LCD_FillByColor(bat_x > 2 ? (uint16_t)(bat_x - 2) : 0, 0, 240, UI_STATUS_BAR_H,
|
||||||
|
UI0902_BG_COLOR);
|
||||||
|
|
||||||
|
fill_w = (uint16_t)((22UL * battery_percent) / 100);
|
||||||
|
LCD_WR_PIC_ClipX(bat_x + 3, UI0902_BATTERY_Y + 2, 22, 9, fill_w,
|
||||||
|
gImage_UI0902_BatteryFill_22x9);
|
||||||
|
LCD_WR_PIC_Trans(bat_x, UI0902_BATTERY_Y, UI0902_BATTERY_W, UI0902_BATTERY_H,
|
||||||
|
gImage_UI0902_BatteryOutline_29x12, BLACK);
|
||||||
|
LCD_ShowString(text_x, text_y, Info, WHITE, UI0902_BG_COLOR,
|
||||||
|
UI0902_BATTERY_TEXT_SIZE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Show_Battery_Icon(uint8_t flag)
|
void Show_Battery_Icon(uint8_t flag)
|
||||||
|
|
@ -253,16 +294,19 @@ void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||||||
{
|
{
|
||||||
char Textstr_new[40] = {0};
|
char Textstr_new[40] = {0};
|
||||||
char NumBuf[8] = {0};
|
char NumBuf[8] = {0};
|
||||||
uint16_t text_y = UI->y + 25+5+5;
|
/* 0902 比例:TAB 行高 18 在区块顶,曲目行在其下,正文在行内垂直居中 */
|
||||||
|
const uint16_t row_y = UI->y + UI0902_TAB_H + 4; /* 曲目行顶 = 130 */
|
||||||
|
const uint16_t row_h = UI->h - UI0902_TAB_H - 4; /* 31 */
|
||||||
|
const uint16_t text_y = row_y + (row_h - UI->Text_size) / 2 + 1;
|
||||||
uint8_t idx = Group->Current + 1;
|
uint8_t idx = Group->Current + 1;
|
||||||
uint16_t c_top, c_bot;
|
uint16_t c_top, c_bot;
|
||||||
|
|
||||||
UI_GetFocusGrad(GUI_MODE_PARAM, &c_top, &c_bot);
|
UI_GetFocusGrad(GUI_MODE_PARAM, &c_top, &c_bot);
|
||||||
|
|
||||||
LCD_FillRoundRectGradient(
|
LCD_FillRoundRectGradient(
|
||||||
UI->x+25, UI->y+20+5,
|
UI->x+25, row_y,
|
||||||
UI->x + UI->w-40-(UI->x+25),
|
UI->x + UI->w-40-(UI->x+25),
|
||||||
UI->h-20,
|
row_h,
|
||||||
0,
|
0,
|
||||||
c_top, c_bot
|
c_top, c_bot
|
||||||
);
|
);
|
||||||
|
|
@ -435,6 +479,7 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
{
|
{
|
||||||
uint8_t Textstr[20] = {0};
|
uint8_t Textstr[20] = {0};
|
||||||
uint16_t c_top, c_bot;
|
uint16_t c_top, c_bot;
|
||||||
|
uint16_t chev_cy = UI->y + UI->h - 13; /* < > 纵向中心 */
|
||||||
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
||||||
|
|
||||||
LCD_FillRoundRectGradient(
|
LCD_FillRoundRectGradient(
|
||||||
|
|
@ -442,7 +487,7 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
UI->y,
|
UI->y,
|
||||||
UI->w,
|
UI->w,
|
||||||
UI->h,
|
UI->h,
|
||||||
10,
|
UI0902_RADIUS_CARD,
|
||||||
c_top,
|
c_top,
|
||||||
c_bot
|
c_bot
|
||||||
);
|
);
|
||||||
|
|
@ -457,13 +502,13 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
c_bot,
|
c_bot,
|
||||||
UI->Tab_size
|
UI->Tab_size
|
||||||
);
|
);
|
||||||
LCD_DrawArrow_Left(UI->x+10+5+5, UI->y+UI->h-20, 12, WHITE, c_top);
|
LCD_DrawChevron_Left(UI->x + 16, chev_cy, 7, 2, WHITE);
|
||||||
LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-20, 12, WHITE, c_top);
|
LCD_DrawChevron_Right(UI->x + UI->w - 16, chev_cy, 7, 2, WHITE);
|
||||||
GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id);
|
GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id);
|
||||||
LCD_ShowString_AutoAlign_Gradient(
|
LCD_ShowString_AutoAlign_Gradient(
|
||||||
UI->x,
|
UI->x,
|
||||||
UI->x+UI->w,
|
UI->x+UI->w,
|
||||||
UI->y + 17,
|
UI->y + 18,
|
||||||
Textstr,
|
Textstr,
|
||||||
UI->Text_Align,
|
UI->Text_Align,
|
||||||
UI->Text_fc,
|
UI->Text_fc,
|
||||||
|
|
@ -471,16 +516,17 @@ void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
c_bot,
|
c_bot,
|
||||||
UI->Text_size
|
UI->Text_size
|
||||||
);
|
);
|
||||||
|
/* KEY 副标:y+18+16+2 = y+36,11px 到 y+46 < 卡底 y+55,不再被切 */
|
||||||
LCD_ShowString_AutoAlign_Gradient(
|
LCD_ShowString_AutoAlign_Gradient(
|
||||||
UI->x,
|
UI->x,
|
||||||
UI->x+UI->w,
|
UI->x+UI->w,
|
||||||
UI->y + 17+25,
|
UI->y + 18 + UI->Text_size + 2,
|
||||||
(const uint8_t*)"KEY",
|
(const uint8_t*)"KEY",
|
||||||
UI->Text_Align,
|
UI->Text_Align,
|
||||||
UI->Text_fc,
|
UI->Text_fc,
|
||||||
c_top,
|
c_top,
|
||||||
c_bot,
|
c_bot,
|
||||||
12
|
UI0902_FONT_SUB
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
|
|
@ -493,7 +539,7 @@ void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
UI->y,
|
UI->y,
|
||||||
UI->w,
|
UI->w,
|
||||||
UI->h,
|
UI->h,
|
||||||
10,
|
UI0902_RADIUS_CARD,
|
||||||
c_top, c_bot
|
c_top, c_bot
|
||||||
);
|
);
|
||||||
LCD_ShowChinese_AutoAlign_Gradient(
|
LCD_ShowChinese_AutoAlign_Gradient(
|
||||||
|
|
@ -507,13 +553,19 @@ void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
c_bot,
|
c_bot,
|
||||||
UI->Tab_size
|
UI->Tab_size
|
||||||
);
|
);
|
||||||
LCD_DrawMinus_RoundBox(UI->x+10+5+5, UI->y+UI->h-20, 30,5, WHITE, c_top);
|
/* 0903:速度 −/+ 素材 */
|
||||||
LCD_DrawPlus_RoundBox(UI->x+UI->w+10-25-5, UI->y+UI->h-20, 30,5, WHITE, c_top);
|
LCD_WR_PIC_Trans(UI->x + 5, UI->y + UI->h - 6 - UI0902_BTN_MINUS_H,
|
||||||
|
UI0902_BTN_MINUS_W, UI0902_BTN_MINUS_H,
|
||||||
|
gImage_UI0902_BtnMinus_23x22, BLACK);
|
||||||
|
LCD_WR_PIC_Trans(UI->x + UI->w - 5 - UI0902_BTN_PLUS_W,
|
||||||
|
UI->y + UI->h - 6 - UI0902_BTN_PLUS_H,
|
||||||
|
UI0902_BTN_PLUS_W, UI0902_BTN_PLUS_H,
|
||||||
|
gImage_UI0902_BtnPlus_23x22, BLACK);
|
||||||
GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id);
|
GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id);
|
||||||
LCD_ShowString_AutoAlign_Gradient(
|
LCD_ShowString_AutoAlign_Gradient(
|
||||||
UI->x,
|
UI->x,
|
||||||
UI->x+UI->w,
|
UI->x+UI->w,
|
||||||
UI->y + 17,
|
UI->y + 18,
|
||||||
Textstr,
|
Textstr,
|
||||||
UI->Text_Align,
|
UI->Text_Align,
|
||||||
UI->Text_fc,
|
UI->Text_fc,
|
||||||
|
|
@ -524,13 +576,13 @@ void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
LCD_ShowString_AutoAlign_Gradient(
|
LCD_ShowString_AutoAlign_Gradient(
|
||||||
UI->x,
|
UI->x,
|
||||||
UI->x+UI->w,
|
UI->x+UI->w,
|
||||||
UI->y + 17+25,
|
UI->y + 18 + UI->Text_size + 2,
|
||||||
(const uint8_t*)"BPM",
|
(const uint8_t*)"BPM",
|
||||||
UI->Text_Align,
|
UI->Text_Align,
|
||||||
UI->Text_fc,
|
UI->Text_fc,
|
||||||
c_top,
|
c_top,
|
||||||
c_bot,
|
c_bot,
|
||||||
12
|
UI0902_FONT_SUB
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// <20><EFBFBD><DEB8>棺ȥ<E6A3BA><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>autobandֵ<64><D6B5>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʾ
|
// <20><EFBFBD><DEB8>棺ȥ<E6A3BA><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>autobandֵ<64><D6B5>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||||
|
|
@ -546,7 +598,7 @@ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
case 1: paramCurData = &ParamGuiData[EXPRESS_MODE_PARAM]; break;
|
case 1: paramCurData = &ParamGuiData[EXPRESS_MODE_PARAM]; break;
|
||||||
case 2: paramCurData = &ParamGuiData[ALL_MODE_PARAM]; break;
|
case 2: paramCurData = &ParamGuiData[ALL_MODE_PARAM]; break;
|
||||||
}
|
}
|
||||||
LCD_FillRoundRectGradient(UI->x, UI->y+20+5, UI->w, UI->h-20, 10, c_top, c_bot);
|
LCD_FillRoundRectGradient(UI->x, UI->y+UI0902_TAB_H+4, UI->w, UI->h-UI0902_TAB_H-4, UI0902_RADIUS_CARD, c_top, c_bot);
|
||||||
switch(mGuiData[GUI_TAB_INDEX].Current) {
|
switch(mGuiData[GUI_TAB_INDEX].Current) {
|
||||||
case 0:case 1:
|
case 0:case 1:
|
||||||
Draw_Tab_Mode_Menu(UI, &mGuiData[GUI_AUTOBAND_SW]);
|
Draw_Tab_Mode_Menu(UI, &mGuiData[GUI_AUTOBAND_SW]);
|
||||||
|
|
@ -554,7 +606,7 @@ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
case 2:
|
case 2:
|
||||||
str = (char*)"\xBA\xCD\xCF\xD2\xD7\xDF\xCF\xF2";
|
str = (char*)"\xBA\xCD\xCF\xD2\xD7\xDF\xCF\xF2";
|
||||||
LCD_ShowChinese_AutoAlign(
|
LCD_ShowChinese_AutoAlign(
|
||||||
UI->x, UI->x+UI->w, UI->y+5+5,
|
UI->x, UI->x+UI->w, UI->y+3,
|
||||||
(uint8_t *)str, UI->Tab_Align, UI->Tab_fc, BLACK, 0, UI->Tab_size
|
(uint8_t *)str, UI->Tab_Align, UI->Tab_fc, BLACK, 0, UI->Tab_size
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
@ -573,44 +625,50 @@ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
case 2: paramCurData = &ParamGuiData[ALL_MODE_PARAM]; break;
|
case 2: paramCurData = &ParamGuiData[ALL_MODE_PARAM]; break;
|
||||||
}
|
}
|
||||||
show_Param(&UI_Label[GUI_MODE_PARAM], paramCurData);
|
show_Param(&UI_Label[GUI_MODE_PARAM], paramCurData);
|
||||||
LCD_DrawArrow_Left(UI->x+10+5+5, UI->y+UI->h-15-2+5, 12, WHITE, c_top);
|
{
|
||||||
LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-15-2+5, 12, WHITE, c_top);
|
/* 箭头与曲目行垂直中心对齐 */
|
||||||
|
uint16_t row_cy = UI->y + UI0902_TAB_H + 4 + (UI->h - UI0902_TAB_H - 4) / 2;
|
||||||
|
LCD_DrawChevron_Left(UI->x + 15, row_cy, 7, 2, WHITE);
|
||||||
|
LCD_DrawChevron_Right(UI->x + UI->w - 15, row_cy, 7, 2, WHITE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||||||
{
|
{
|
||||||
uint8_t Textstr[20] = {0};
|
uint8_t Textstr[20] = {0};
|
||||||
char NumBuf[8] = {0};
|
char NumBuf[8] = {0};
|
||||||
uint16_t text_y = UI->y + 25;
|
/* 0902 比例:音色行高 30,正文在行内垂直居中 */
|
||||||
|
uint16_t text_y = UI->y + (UI->h - UI->Text_size) / 2 + 1;
|
||||||
uint8_t idx = mGuiData[UI->Id].Current + 1;
|
uint8_t idx = mGuiData[UI->Id].Current + 1;
|
||||||
uint16_t c_top, c_bot;
|
uint16_t c_top, c_bot;
|
||||||
|
uint16_t chev_cy = UI->y + UI->h / 2;
|
||||||
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
||||||
LCD_FillRoundRectGradient(
|
LCD_FillRoundRectGradient(
|
||||||
UI->x,
|
UI->x,
|
||||||
UI->y+20,
|
UI->y,
|
||||||
UI->w,
|
UI->w,
|
||||||
UI->h-20,
|
UI->h,
|
||||||
10,
|
UI0902_RADIUS_CARD,
|
||||||
c_top, c_bot
|
c_top, c_bot
|
||||||
);
|
);
|
||||||
LCD_ShowChinese_AutoAlign(
|
LCD_ShowChinese_AutoAlign(
|
||||||
UI->x,
|
UI->x,
|
||||||
UI->x+UI->w,
|
UI->x+UI->w,
|
||||||
UI->y+5,
|
UI->y - 15,
|
||||||
UI->p,
|
UI->p,
|
||||||
UI->Tab_Align,
|
UI->Tab_Align,
|
||||||
UI->Tab_fc,
|
UI->Tab_fc,
|
||||||
BLACK,
|
UI0902_BG_COLOR,
|
||||||
0,
|
1,
|
||||||
UI->Tab_size
|
UI->Tab_size
|
||||||
);
|
);
|
||||||
LCD_DrawArrow_Left(UI->x+10+5+5, UI->y+UI->h-20+3, 12, WHITE, c_top);
|
LCD_DrawChevron_Left(UI->x + 15, chev_cy, 7, 2, WHITE);
|
||||||
LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-20+3, 12, WHITE, c_top);
|
LCD_DrawChevron_Right(UI->x + UI->w - 15, chev_cy, 7, 2, WHITE);
|
||||||
LCD_FillRoundRectGradient(
|
LCD_FillRoundRectGradient(
|
||||||
UI->x + 40,
|
UI->x + 40,
|
||||||
UI->y+20,
|
UI->y,
|
||||||
UI->x + UI->w - 40 - UI->x - 40 ,
|
UI->x + UI->w - 40 - UI->x - 40 ,
|
||||||
UI->h-20,
|
UI->h,
|
||||||
0,
|
0,
|
||||||
c_top, c_bot
|
c_top, c_bot
|
||||||
);
|
);
|
||||||
|
|
@ -620,7 +678,7 @@ void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||||||
uint32_t chinese_start_x = LCD_ShowChinese_AutoAlign_Gradient(
|
uint32_t chinese_start_x = LCD_ShowChinese_AutoAlign_Gradient(
|
||||||
UI->x + num_w,
|
UI->x + num_w,
|
||||||
UI->x + UI->w,
|
UI->x + UI->w,
|
||||||
text_y+3,
|
text_y,
|
||||||
(const uint8_t*)Textstr,
|
(const uint8_t*)Textstr,
|
||||||
UI->Text_Align,
|
UI->Text_Align,
|
||||||
UI->Text_fc,
|
UI->Text_fc,
|
||||||
|
|
@ -628,7 +686,7 @@ void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||||||
UI->Text_size
|
UI->Text_size
|
||||||
);
|
);
|
||||||
uint16_t num_x = chinese_start_x - num_w - 5;
|
uint16_t num_x = chinese_start_x - num_w - 5;
|
||||||
LCD_ShowString_AutoAlign_Gradient(num_x, num_x + num_w, text_y+3,
|
LCD_ShowString_AutoAlign_Gradient(num_x, num_x + num_w, text_y,
|
||||||
(const uint8_t *)NumBuf, LCD_ALIGN_LEFT, UI->Text_fc,
|
(const uint8_t *)NumBuf, LCD_ALIGN_LEFT, UI->Text_fc,
|
||||||
c_top, c_bot, UI->Text_size);
|
c_top, c_bot, UI->Text_size);
|
||||||
switch(Group->Id)
|
switch(Group->Id)
|
||||||
|
|
@ -642,105 +700,109 @@ void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||||||
}
|
}
|
||||||
void label_PlaySection_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
void label_PlaySection_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
{
|
{
|
||||||
// 显示<E698BE>?<3F>?
|
/* 0902 比例:标签在按钮上方 15px,先画按钮再补标签底,避免色块盖住 */
|
||||||
|
Draw_Tab_Section_Menu(UI,(TAB_SECTION_INDEX)Group->Current);
|
||||||
|
LCD_FillByColor(UI->x, UI->y - 15, UI->x + UI->w, UI->y - 1, UI0902_BG_COLOR);
|
||||||
LCD_ShowChinese_AutoAlign(
|
LCD_ShowChinese_AutoAlign(
|
||||||
UI->x, // 坐标<E59D90>?
|
UI->x,
|
||||||
UI->x+UI->w,
|
UI->x+UI->w,
|
||||||
UI->y+5,
|
UI->y - 14,
|
||||||
UI->p,
|
UI->p,
|
||||||
UI->Tab_Align,
|
UI->Tab_Align,
|
||||||
UI->Tab_fc,
|
UI->Tab_fc,
|
||||||
UI->Tab_bc,
|
UI0902_BG_COLOR,
|
||||||
0,
|
1,
|
||||||
UI->Tab_size
|
UI->Tab_size
|
||||||
);
|
);
|
||||||
Draw_Tab_Section_Menu(UI,(TAB_SECTION_INDEX)Group->Current);
|
}
|
||||||
|
|
||||||
|
void Draw_Bottom_Bar(uint8_t sel, uint8_t first_back)
|
||||||
|
{
|
||||||
|
/* 需求稿四键:万能 | 普通 | 专业 | 设置;first_back 时设置位仍高亮(返回用触控逻辑) */
|
||||||
|
const uint8_t *icons[4];
|
||||||
|
uint8_t ws[4], hs[4];
|
||||||
|
const uint16_t cx[4] = { 30, 90, 150, 210 };
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
(void)first_back;
|
||||||
|
LCD_FillByColor(0, 275, 240, 320, UI0902_BG_COLOR);
|
||||||
|
|
||||||
|
if (sel == UI0902_NAV_UNIVERSAL) { icons[0] = gImage_Nav_Universal_Sel; ws[0] = 36; hs[0] = 28; }
|
||||||
|
else { icons[0] = gImage_Nav_Universal_Not; ws[0] = 36; hs[0] = 28; }
|
||||||
|
|
||||||
|
if (sel == UI0902_NAV_NORMAL) { icons[1] = gImage_Nav_Normal_Sel; ws[1] = 35; hs[1] = 29; }
|
||||||
|
else { icons[1] = gImage_Nav_Normal_Not; ws[1] = 35; hs[1] = 28; }
|
||||||
|
|
||||||
|
if (sel == UI0902_NAV_EXPERT) { icons[2] = gImage_Nav_Expert_Sel; ws[2] = 35; hs[2] = 27; }
|
||||||
|
else { icons[2] = gImage_Nav_Expert_Not; ws[2] = 35; hs[2] = 27; }
|
||||||
|
|
||||||
|
if (sel == UI0902_NAV_SETTING) { icons[3] = gImage_Nav_Setting_Sel; ws[3] = 18; hs[3] = 28; }
|
||||||
|
else { icons[3] = gImage_Nav_Setting_Not; ws[3] = 18; hs[3] = 28; }
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
LCD_WR_PIC_Trans(cx[i] - ws[i] / 2, 283, ws[i], hs[i], icons[i], BLACK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UI_NavBar_Action(uint8_t value)
|
||||||
|
{
|
||||||
|
switch (value)
|
||||||
|
{
|
||||||
|
case UI0902_NAV_UNIVERSAL:
|
||||||
|
ADDRESS = mGuiData[GUI_AUTOBAND_SW].Current ? 0x0009EB5F : 0x0001B8F0;
|
||||||
|
MenuPage_SongMode_Proc();
|
||||||
|
break;
|
||||||
|
case UI0902_NAV_NORMAL:
|
||||||
|
ADDRESS = 0x0009598F;
|
||||||
|
MenuPage_FreeMode_Proc();
|
||||||
|
break;
|
||||||
|
case UI0902_NAV_EXPERT:
|
||||||
|
ADDRESS = mGuiData[GUI_AUTOBAND_SW].Current ? 0x0009EB5F : 0x00000000;
|
||||||
|
MenuPage_ExpertMode_Proc();
|
||||||
|
break;
|
||||||
|
case UI0902_NAV_SETTING:
|
||||||
|
MenuPage_Setting_Proc();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void label_Tab_Select_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
void label_Tab_Select_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||||||
{
|
{
|
||||||
LCD_FillRoundRect(0,275,240,75,15,BLACK);
|
uint8_t sel = UI0902_NAV_NONE;
|
||||||
// 统一坐标(严格居中)
|
(void)UI;
|
||||||
uint16_t x1 = 10;
|
(void)Group;
|
||||||
uint16_t x2 = 10+40+20;
|
/* GUI_TAB_INDEX:0万能 1专业 2普通 */
|
||||||
uint16_t x3 = 10+40+20+40+20;
|
switch (mGuiData[GUI_TAB_INDEX].Current)
|
||||||
uint16_t x4 = 10+40+20+40+20+40+20;
|
|
||||||
uint8_t TextSize = 8;
|
|
||||||
char *str1 = "\xCD\xF2\xC4\xDC\xC4\xA3\xCA\xBD\x00"; //FreeMode
|
|
||||||
char *str2 = "\xC6\xD5\xCD\xA8\xC4\xA3\xCA\xBD\x00"; //NormalMode
|
|
||||||
char *str3 = "\xD7\xA8\xD2\xB5\xC4\xA3\xCA\xBD\x00"; //ExpressMode
|
|
||||||
char *str4 = "\xC9\xE8\xD6\xC3\x00"; //Setting
|
|
||||||
uint16_t Icon_Y = 268+5;
|
|
||||||
uint16_t Text_Y = 270+30;
|
|
||||||
switch(Group->Current)
|
|
||||||
{
|
{
|
||||||
case 0: // 歌曲选中
|
case 0: sel = UI0902_NAV_UNIVERSAL; break;
|
||||||
//LCD_WR_PIC(x1, 268+5,30,22,gImage_NormalMode_notSelect);
|
case 1: sel = UI0902_NAV_EXPERT; break;
|
||||||
|
case 2: sel = UI0902_NAV_NORMAL; break;
|
||||||
LCD_WR_PIC(x1, Icon_Y,30,22,gImage_FreeMode_notSelect);
|
default: break;
|
||||||
LCD_WR_PIC(x2, Icon_Y,30,22,gImage_NomalMode_Select);
|
|
||||||
LCD_WR_PIC(x3, Icon_Y,30,22,gImage_ExpressMode_notSelect);
|
|
||||||
LCD_WR_PIC(x4, Icon_Y,30,24,gImage_Setting_notSelect);
|
|
||||||
|
|
||||||
// 文字:选中=蓝色,未选中=白色
|
|
||||||
LCD_ShowChinese_AutoAlign(x1, x1+30-1, Text_Y, (const uint8_t *)str1,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x2, x2+30-1, Text_Y, (const uint8_t *)str2,LCD_ALIGN_CENTER, COLOR_PRIMARY, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x3, x3+30-1, Text_Y, (const uint8_t *)str3,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x4, x4+30-1, Text_Y, (const uint8_t *)str4,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1: // 专家选中
|
|
||||||
LCD_WR_PIC(x1, Icon_Y,30,22,gImage_FreeMode_notSelect);
|
|
||||||
LCD_WR_PIC(x2, Icon_Y,30,22,gImage_NormalMode_notSelect);
|
|
||||||
LCD_WR_PIC(x3, Icon_Y,30,22,gImage_ExpressMode_Select);
|
|
||||||
LCD_WR_PIC(x4, Icon_Y,30,24,gImage_Setting_notSelect);
|
|
||||||
LCD_ShowChinese_AutoAlign(x1, x1+30-1, Text_Y, (const uint8_t *)str1,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x2, x2+30-1, Text_Y, (const uint8_t *)str2,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x3, x3+30-1, Text_Y, (const uint8_t *)str3,LCD_ALIGN_CENTER, COLOR_PRIMARY, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x4, x4+30-1, Text_Y, (const uint8_t *)str4,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
break;
|
|
||||||
case 2: // 万能选中
|
|
||||||
LCD_WR_PIC(x1, Icon_Y,30,22,gImage_FreeMode_Select);
|
|
||||||
LCD_WR_PIC(x2, Icon_Y,30,22,gImage_NormalMode_notSelect);
|
|
||||||
LCD_WR_PIC(x3, Icon_Y,30,22,gImage_ExpressMode_notSelect);
|
|
||||||
LCD_WR_PIC(x4, Icon_Y,30,24,gImage_Setting_notSelect);
|
|
||||||
LCD_ShowChinese_AutoAlign(x1, x1+30-1, Text_Y, (const uint8_t *)str1,LCD_ALIGN_CENTER, COLOR_PRIMARY, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x2, x2+30-1, Text_Y, (const uint8_t *)str2,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x3, x3+30-1, Text_Y, (const uint8_t *)str3,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x4, x4+30-1, Text_Y, (const uint8_t *)str4,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
break;
|
|
||||||
case 3: // 设置选中
|
|
||||||
LCD_WR_PIC(x1, Icon_Y,30,22,gImage_FreeMode_notSelect);
|
|
||||||
LCD_WR_PIC(x2, Icon_Y,30,22,gImage_NormalMode_notSelect);
|
|
||||||
LCD_WR_PIC(x3, Icon_Y,30,22,gImage_ExpressMode_notSelect);
|
|
||||||
LCD_WR_PIC(x4, Icon_Y,30,24,gImage_Setting_Select);
|
|
||||||
|
|
||||||
LCD_ShowChinese_AutoAlign(x1, x1+30-1, Text_Y, (const uint8_t *)str1,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x2, x2+30-1, Text_Y, (const uint8_t *)str2,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x3, x3+30-1, Text_Y, (const uint8_t *)str3,LCD_ALIGN_CENTER, WHITE, BLACK,0,TextSize);
|
|
||||||
LCD_ShowChinese_AutoAlign(x4, x4+30-1, Text_Y, (const uint8_t *)str4,LCD_ALIGN_CENTER, COLOR_PRIMARY, BLACK,0,TextSize);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
Draw_Bottom_Bar(sel, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab)
|
void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab)
|
||||||
{
|
{
|
||||||
const uint16_t tab_w = 50;
|
const uint16_t tab_w = UI0902_SECTION_BTN_W;
|
||||||
const uint16_t tab_h = 24 + 11;
|
const uint16_t tab_h = UI0902_SECTION_BTN_H;
|
||||||
const uint8_t tab_r = 5;
|
const uint8_t tab_r = UI0902_RADIUS_BTN;
|
||||||
const uint8_t space = 3;
|
const uint8_t pitch = UI0902_SECTION_PITCH;
|
||||||
const uint16_t start_x = UI->x + 10;
|
const uint16_t start_x = UI0902_MARGIN_X;
|
||||||
const uint16_t start_y = UI->y + 28 - 6;
|
const uint16_t start_y = UI->y;
|
||||||
const uint16_t text_y = UI->y + 28 - 3;
|
/* 0819:演奏段落数字与标题同为 13,按钮内垂直居中(视觉重心 +1) */
|
||||||
|
const uint16_t text_y = start_y + (tab_h - UI0902_FONT_BODY) / 2 + 1;
|
||||||
const char *nums[4] = {"1", "2", "3", "4"};
|
const char *nums[4] = {"1", "2", "3", "4"};
|
||||||
uint8_t focused = UI_IsFocused(GUI_PLAY_SECTION);
|
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
uint16_t x = start_x + i * (tab_w + space);
|
uint16_t x = start_x + i * pitch;
|
||||||
uint16_t bg = (focused && (select_tab == i)) ? COLOR_PRIMARY : COLOR_NORMAL_BG;
|
uint16_t bg = (select_tab == i) ? COLOR_GRAD_MID : UI0902_ROW_BG;
|
||||||
LCD_FillRoundRect(x, start_y, tab_w, tab_h, tab_r, bg);
|
LCD_FillRoundRect(x, start_y, tab_w, tab_h, tab_r, bg);
|
||||||
LCD_ShowString_AutoAlign(
|
LCD_ShowString_AutoAlign(
|
||||||
x, x + tab_w, text_y,
|
x, x + tab_w, text_y,
|
||||||
|
|
@ -749,7 +811,7 @@ void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab)
|
||||||
WHITE,
|
WHITE,
|
||||||
bg,
|
bg,
|
||||||
0,
|
0,
|
||||||
24
|
UI0902_FONT_BODY
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -939,37 +1001,50 @@ void Draw_System_Item_List(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||||||
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
||||||
char Info[40];
|
char Info[40];
|
||||||
uint16_t c_top, c_bot;
|
uint16_t c_top, c_bot;
|
||||||
UI_GetFocusGrad(Group->Id, &c_top, &c_bot);
|
uint16_t text_y = UI->y + (UI->h > 33 ? 14 : 10);
|
||||||
LCD_FillRoundRectGradient(
|
uint16_t val_x1 = UI->x + 118;
|
||||||
UI->x, UI->y, 220, UI->h, 5,
|
uint16_t val_x2 = UI->x + 196;
|
||||||
c_top, c_bot
|
uint16_t chev_cy = UI->y + UI->h / 2;
|
||||||
);
|
|
||||||
LCD_ShowChinese_AutoAlign_Gradient(UI->x+35,UI->x+UI->w,UI->y+UI->h/2-8,UI->p,UI->Tab_Align,UI->Tab_fc,c_top, c_bot,UI->Tab_size);
|
if (UI_IsFocused(Group->Id))
|
||||||
|
{
|
||||||
|
c_top = START_COLOR;
|
||||||
|
c_bot = END_COLOR;
|
||||||
|
LCD_FillRoundRectGradient(UI->x, UI->y, 214, UI->h, 8, c_top, c_bot);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c_top = c_bot = UI0902_ROW_BG;
|
||||||
|
LCD_FillRoundRect(UI->x, UI->y, 214, UI->h, 8, UI0902_ROW_BG);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 行标签(MiSans 13) */
|
||||||
|
LCD_ShowChinese_AutoAlign_Gradient(UI->x+49, UI->x+214, text_y, UI->p, LCD_ALIGN_LEFT, WHITE, c_top, c_bot, 13);
|
||||||
|
|
||||||
switch(Group->Id)
|
switch(Group->Id)
|
||||||
{
|
{
|
||||||
case GUI_VERSION:
|
case GUI_VERSION:
|
||||||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_FimewareVection);
|
LCD_WR_PIC_FROM_FLASH_Trans(UI->x+12, UI->y + (UI->h - 18) / 2, 19, 18, UI0902_ICON_SYS_VERSION_ADDR);
|
||||||
sprintf (Info, "%d.%d.%d", Version[0], Version[1],Version[2]);
|
sprintf (Info, "%d.%d.%d", Version[0], Version[1],Version[2]);
|
||||||
LCD_ShowString_AutoAlign_Gradient(UI->x+100,UI->x+100+110, UI->y+UI->h/2-8-5,(const uint8_t*)Info,LCD_ALIGN_CENTER, UI->Text_fc,c_top, c_bot,11);
|
/* 0902:右侧凹槽版本框 */
|
||||||
|
LCD_FillRoundRect(UI->x + 148, UI->y + (UI->h - 22) / 2, 54, 22, 4, UI0902_BG_COLOR);
|
||||||
|
LCD_ShowString_AutoAlign(UI->x + 148, UI->x + 202,
|
||||||
|
UI->y + (UI->h - 11) / 2,
|
||||||
|
(const uint8_t*)Info, LCD_ALIGN_CENTER, WHITE, UI0902_BG_COLOR, 0, 11);
|
||||||
break;
|
break;
|
||||||
case GUI_BLUETOOTH_SW:
|
case GUI_BLUETOOTH_SW:
|
||||||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_BlueTooth);
|
LCD_WR_PIC_FROM_FLASH_Trans(UI->x+7, UI->y + (UI->h - 33) / 2, 34, 33, UI0902_ICON_SET_BLUETOOTH_ADDR);
|
||||||
LCD_DrawArrow_Left(UI->x+100+10+5, UI->y+UI->h/2-8+12-5, 12, WHITE, c_top);
|
LCD_DrawChevron_Left(val_x1 + 8, chev_cy, 5, 2, WHITE);
|
||||||
LCD_DrawArrow_Right(UI->x+100+95, UI->y+UI->h/2-8+12-5, 12, WHITE, c_top);
|
|
||||||
if(Group->Current)
|
if(Group->Current)
|
||||||
{
|
LCD_ShowChinese_AutoAlign_Gradient(val_x1 + 14, val_x2 - 14, text_y,(const uint8_t*)"\xCA\xC7",LCD_ALIGN_CENTER, WHITE,c_top, c_bot,11);
|
||||||
LCD_ShowChinese_AutoAlign_Gradient(UI->x+100,UI->x+100+110, UI->y+UI->h/2-8-5,(const uint8_t*)"\xBF\xAA",LCD_ALIGN_CENTER, UI->Text_fc,c_top, c_bot,11);
|
else
|
||||||
}else
|
LCD_ShowChinese_AutoAlign_Gradient(val_x1 + 14, val_x2 - 14, text_y,(const uint8_t*)"\xB9\xD8",LCD_ALIGN_CENTER, WHITE,c_top, c_bot,11);
|
||||||
{
|
LCD_DrawChevron_Right(val_x2 - 8, chev_cy, 5, 2, WHITE);
|
||||||
LCD_ShowChinese_AutoAlign_Gradient(UI->x+100,UI->x+100+110, UI->y+UI->h/2-8-5,(const uint8_t*)"\xB9\xD8",LCD_ALIGN_CENTER, UI->Text_fc,c_top, c_bot,11);
|
|
||||||
}
|
|
||||||
BSP_BlueToothPowerEnable (Group->Current);
|
BSP_BlueToothPowerEnable (Group->Current);
|
||||||
mGuiData[GUI_BL_SW].Current = Group->Current;
|
mGuiData[GUI_BL_SW].Current = Group->Current;
|
||||||
break;
|
break;
|
||||||
case GUI_AUTOCLOSE:
|
case GUI_AUTOCLOSE:
|
||||||
LCD_DrawArrow_Left(UI->x+100+10+5, UI->y+UI->h/2-8+12-5, 12, WHITE, c_top);
|
LCD_WR_PIC_FROM_FLASH_Trans(UI->x+7, UI->y + (UI->h - 34) / 2, 33, 34, UI0902_ICON_SET_GEAR_ADDR);
|
||||||
LCD_DrawArrow_Right(UI->x+100+95, UI->y+UI->h/2-8+12-5, 12, WHITE, c_top);
|
|
||||||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_AutoClose);
|
|
||||||
switch(Group->Current)
|
switch(Group->Current)
|
||||||
{
|
{
|
||||||
case 0:AutoCloseTime = 5;mAutoPowerOffCount = AutoCloseTime * 60;break;
|
case 0:AutoCloseTime = 5;mAutoPowerOffCount = AutoCloseTime * 60;break;
|
||||||
|
|
@ -977,29 +1052,24 @@ void Draw_System_Item_List(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||||||
case 2:AutoCloseTime = 30;mAutoPowerOffCount = AutoCloseTime * 60;break;
|
case 2:AutoCloseTime = 30;mAutoPowerOffCount = AutoCloseTime * 60;break;
|
||||||
case 3:AutoCloseTime = 0;AutoCloseFlag = 0;break; //never
|
case 3:AutoCloseTime = 0;AutoCloseFlag = 0;break; //never
|
||||||
}
|
}
|
||||||
|
LCD_DrawChevron_Left(val_x1 + 4, chev_cy, 5, 2, WHITE);
|
||||||
if(Group->Current != 3)
|
if(Group->Current != 3)
|
||||||
{
|
{
|
||||||
sprintf (Info, "%d",AutoCloseTime);
|
sprintf (Info, "%d",AutoCloseTime);
|
||||||
// uint16_t x = LCD_ShowChinese_AutoAlign(UI->x+100,UI->x+100+110, UI->y+UI->h/2-8-5,(const uint8_t*)"\xB7\xD6\xD6\xD3",LCD_ALIGN_CENTER, UI->Text_fc,UI->Text_bc,0,24);
|
LCD_ShowString_AutoAlign_Gradient(val_x1 + 12, val_x2 - 36, text_y, (const uint8_t*)Info, LCD_ALIGN_RIGHT, WHITE, c_top, c_bot, 11);
|
||||||
// LCD_ShowString_AutoAlign(UI->x+100,UI->x+100+110, UI->y+UI->h/2-8-5,(const uint8_t*)Info,LCD_ALIGN_CENTER, UI->Text_fc,UI->Text_bc,0,24);
|
LCD_ShowChinese_AutoAlign_Gradient(val_x2 - 34, val_x2 - 12, text_y, (const uint8_t*)"\xB7\xD6\xD6\xD3", LCD_ALIGN_LEFT, WHITE, c_top, c_bot, 11);
|
||||||
LCD_ShowString(UI->x+100+20,UI->y+UI->h/2-8-5, (uint8_t *)Info, UI->Text_fc, UI->Text_bc, 11, 1);
|
|
||||||
LCD_ShowChineseString(UI->x+100+20+25, UI->y+UI->h/2-8-5,(uint8_t*)"\xB7\xD6\xD6\xD3", UI->Text_fc,UI->Text_bc,11,1);
|
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
LCD_ShowChinese_AutoAlign(UI->x+100,UI->x+100+110, UI->y+UI->h/2-8-5,(uint8_t*)"\xB9\xD8",LCD_ALIGN_CENTER, UI->Text_fc,UI->Text_bc,1,11);
|
LCD_ShowChinese_AutoAlign_Gradient(val_x1 + 12, val_x2 - 12, text_y,(uint8_t*)"\xB9\xD8",LCD_ALIGN_CENTER, WHITE, c_top, c_bot, 11);
|
||||||
}
|
|
||||||
|
|
||||||
if(nvm->param.AutoCloseTime != Group->Current)
|
|
||||||
{
|
|
||||||
nvm->param.AutoCloseTime = Group->Current;
|
|
||||||
}
|
}
|
||||||
|
LCD_DrawChevron_Right(val_x2 - 8, chev_cy, 5, 2, WHITE);
|
||||||
|
nvm->param.AutoCloseTime = Group->Current;
|
||||||
|
drv_nvm_save_to_flash();
|
||||||
break;
|
break;
|
||||||
case GUI_RESTORE:
|
case GUI_RESTORE:
|
||||||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_Restore);
|
LCD_WR_PIC_FROM_FLASH_Trans(UI->x+13, UI->y + (UI->h - 21) / 2, 13, 21, UI0902_ICON_SYS_RESTORE_ADDR);
|
||||||
LCD_DrawChevron_Right(UI->x+100+95, UI->y+30, 15, 3, WHITE);
|
LCD_WR_PIC_FROM_FLASH_Trans(UI->x+197, UI->y + (UI->h - 18) / 2, 10, 18, UI0902_ICON_CHEVRON_ADDR);
|
||||||
break;
|
break;
|
||||||
default:
|
default: break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,79 @@ void CallUI_RestoreSelect(void);
|
||||||
|
|
||||||
|
|
||||||
#define UI_STATUS_BAR_H 26
|
#define UI_STATUS_BAR_H 26
|
||||||
/* 电量组在 Draw_Battery_Icon 内按右对齐重算;此值为允许的最左起点 */
|
/* 0902 设计稿配色与底栏导航 */
|
||||||
|
#define UI0902_BG_COLOR 0x0042 /* #000813 页面背景 */
|
||||||
|
#define UI0902_ROW_BG 0x2147 /* #242B3A 列表行背景 */
|
||||||
|
|
||||||
|
/* 0902 / 0819:240×320 模式页网格(按 0902 参考图 03/04/05 实测比例换算)
|
||||||
|
* 状态栏 26;双卡 y48 h55;TAB y108 h18;曲目行 y130 h31;音色行 y180 h30;段落钮 y229 h34 */
|
||||||
|
#define UI0902_MARGIN_X 12
|
||||||
|
#define UI0902_CONTENT_W 216
|
||||||
|
#define UI0902_CARD_GAP_TOP 22
|
||||||
|
#define UI0902_CARD_Y (UI_STATUS_BAR_H + UI0902_CARD_GAP_TOP) /* 48 */
|
||||||
|
#define UI0902_CARD_H 55
|
||||||
|
#define UI0902_CARD_W 103
|
||||||
|
#define UI0902_CARD_GAP 10
|
||||||
|
#define UI0902_MODE_Y (UI0902_CARD_Y + UI0902_CARD_H + 5) /* 108 */
|
||||||
|
#define UI0902_MODE_H 53
|
||||||
|
#define UI0902_TIMBRE_Y (UI0902_MODE_Y + UI0902_MODE_H + 19) /* 180 */
|
||||||
|
#define UI0902_TIMBRE_H 30
|
||||||
|
#define UI0902_SECTION_Y (UI0902_TIMBRE_Y + UI0902_TIMBRE_H + 19) /* 229 */
|
||||||
|
#define UI0902_SECTION_H 34
|
||||||
|
#define UI0902_FONT_LABEL 11 /* 0819:移调/速度/弦音色选择/TAB 等标题 */
|
||||||
|
#define UI0902_FONT_BODY 13 /* 0819:曲目/音色正文、演奏段落 */
|
||||||
|
#define UI0902_FONT_HERO 16 /* 0819:移调/速度主数值 */
|
||||||
|
#define UI0902_FONT_SUB 11 /* KEY / BPM 副标 */
|
||||||
|
#define UI0902_FONT_NAV 9 /* 0819:底栏文案(位图内已含) */
|
||||||
|
#define UI0902_TAB_H 18
|
||||||
|
#define UI0902_TAB_W 55
|
||||||
|
#define UI0902_TAB_GAP 6
|
||||||
|
#define UI0902_ROW_H 31
|
||||||
|
#define UI0902_SECTION_BTN_H 34
|
||||||
|
#define UI0902_SECTION_BTN_W 47
|
||||||
|
#define UI0902_SECTION_PITCH 57
|
||||||
|
#define UI0902_RADIUS_CARD 10
|
||||||
|
#define UI0902_RADIUS_TAB 6
|
||||||
|
#define UI0902_RADIUS_BTN 6
|
||||||
|
#define UI0902_BTN_MINUS_W 23
|
||||||
|
#define UI0902_BTN_MINUS_H 22
|
||||||
|
#define UI0902_BTN_PLUS_W 23
|
||||||
|
#define UI0902_BTN_PLUS_H 22
|
||||||
|
#define UI0902_TAB_BACK_W 30
|
||||||
|
#define UI0902_TAB_BACK_H 24
|
||||||
|
|
||||||
|
/* 0902 状态栏:左音量条 / 中蓝牙 / 右电池+百分比(对齐屏幕参考 0902-01) */
|
||||||
|
#define UI0902_VOL_X 8
|
||||||
|
#define UI0902_VOL_Y 3
|
||||||
|
#define UI0902_BT_W 11
|
||||||
|
#define UI0902_BT_H 17
|
||||||
|
#define UI0902_BT_X ((240 - UI0902_BT_W) / 2) /* 居中 */
|
||||||
|
#define UI0902_BT_Y 5
|
||||||
|
#define UI0902_BATTERY_W 29
|
||||||
|
#define UI0902_BATTERY_H 12
|
||||||
|
#define UI0902_BATTERY_Y 7
|
||||||
|
#define UI0902_BATTERY_RIGHT_MARGIN 8
|
||||||
|
#define UI0902_BATTERY_TEXT_GAP 4
|
||||||
|
#define UI0902_BATTERY_TEXT_SIZE 12
|
||||||
|
#define UI0902_NAV_UNIVERSAL 0 /* 底栏:万能模式 */
|
||||||
|
#define UI0902_NAV_NORMAL 1 /* 底栏:普通模式 */
|
||||||
|
#define UI0902_NAV_EXPERT 2 /* 底栏:专业模式 */
|
||||||
|
#define UI0902_NAV_SETTING 3 /* 底栏:设置 */
|
||||||
|
#define UI0902_NAV_NONE 0xFF
|
||||||
|
/* 兼容旧名(已废弃三键:设置|调音台|模式) */
|
||||||
|
#define UI0902_NAV_MIXER UI0902_NAV_NORMAL
|
||||||
|
#define UI0902_NAV_MODE UI0902_NAV_EXPERT
|
||||||
|
|
||||||
|
/* 底部图标实际内容(生成脚本曾把 万能/普通/专业/设置 误命名为 Setting/Mixer/Mode) */
|
||||||
|
#define gImage_Nav_Universal_Not gImage_UI0902_TabSetting_Sel_36x28 /* 底部-10 白 */
|
||||||
|
#define gImage_Nav_Universal_Sel gImage_UI0902_TabMode_Sel_36x28 /* 底部-14 蓝 */
|
||||||
|
#define gImage_Nav_Normal_Not gImage_UI0902_TabSetting_Not_35x28 /* 底部-11 白 */
|
||||||
|
#define gImage_Nav_Normal_Sel gImage_UI0902_TabMode_Not_35x29 /* 底部-15 蓝 */
|
||||||
|
#define gImage_Nav_Expert_Not gImage_UI0902_TabMixer_Sel_35x27 /* 底部-12 白 */
|
||||||
|
#define gImage_Nav_Expert_Sel gImage_UI0902_TabBack_Sel_35x27 /* 底部-16 蓝 */
|
||||||
|
#define gImage_Nav_Setting_Not gImage_UI0902_TabMixer_Not_18x28 /* 底部-13 白 */
|
||||||
|
#define gImage_Nav_Setting_Sel gImage_UI0902_TabBack_Not_18x28 /* 底部-17 蓝 */
|
||||||
|
/* 旧几何电池(Draw_Battery_Icon)最左起点;0902 图电池用 Draw_Status_Battery_Icon */
|
||||||
#define UI_STATUS_BATTERY_X 150
|
#define UI_STATUS_BATTERY_X 150
|
||||||
#define UI_STATUS_BATTERY_H 11
|
#define UI_STATUS_BATTERY_H 11
|
||||||
#define UI_STATUS_BATTERY_Y ((UI_STATUS_BAR_H - UI_STATUS_BATTERY_H) / 2)
|
#define UI_STATUS_BATTERY_Y ((UI_STATUS_BAR_H - UI_STATUS_BATTERY_H) / 2)
|
||||||
|
|
@ -45,6 +117,9 @@ void Show_Battery_Icon(uint8_t flag);
|
||||||
|
|
||||||
void Show_BL_Icon(uint8_t value);
|
void Show_BL_Icon(uint8_t value);
|
||||||
void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab);
|
void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab);
|
||||||
|
void UI_NavBar_Action(uint8_t value);
|
||||||
|
void Draw_Bottom_Bar(uint8_t sel, uint8_t first_back);
|
||||||
|
void UI_GotoCurrentModePage(void);
|
||||||
void GET_Num_Str(int16_t NUM, uint8_t ValidLen, char* Str, uint8_t hasSign);
|
void GET_Num_Str(int16_t NUM, uint8_t ValidLen, char* Str, uint8_t hasSign);
|
||||||
void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group);
|
void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ static uint8_t LCD_CnFontMetrics(uint8_t sizey, uint8_t *sizex, uint16_t *typefa
|
||||||
switch (sizey)
|
switch (sizey)
|
||||||
{
|
{
|
||||||
case 8: *sizex = 8; *typeface_num = 8; return 1;
|
case 8: *sizex = 8; *typeface_num = 8; return 1;
|
||||||
|
case 9: *sizex = 9; *typeface_num = 18; return 1;
|
||||||
case 11: *sizex = 11; *typeface_num = 22; return 1;
|
case 11: *sizex = 11; *typeface_num = 22; return 1;
|
||||||
case 12: *sizex = 12; *typeface_num = 24; return 1;
|
case 12: *sizex = 12; *typeface_num = 24; return 1;
|
||||||
case 13: *sizex = 13; *typeface_num = 26; return 1;
|
case 13: *sizex = 13; *typeface_num = 26; return 1;
|
||||||
|
|
@ -25,6 +26,7 @@ static uint8_t LCD_GetCnFontByte(uint8_t sizey, uint8_t index, uint16_t i)
|
||||||
switch (sizey)
|
switch (sizey)
|
||||||
{
|
{
|
||||||
case 8: return Chinese_font_8[index][i];
|
case 8: return Chinese_font_8[index][i];
|
||||||
|
case 9: return Chinese_font_9[index][i];
|
||||||
case 11: return Chinese_font_11[index][i];
|
case 11: return Chinese_font_11[index][i];
|
||||||
case 12: return Chinese_font_12[index][i];
|
case 12: return Chinese_font_12[index][i];
|
||||||
case 13: return Chinese_font_13[index][i];
|
case 13: return Chinese_font_13[index][i];
|
||||||
|
|
@ -41,6 +43,7 @@ static uint8_t LCD_GetAsciiFontByte(uint8_t sizey, uint8_t num, uint16_t i)
|
||||||
switch (sizey)
|
switch (sizey)
|
||||||
{
|
{
|
||||||
case 8: return ascii_84[num][i];
|
case 8: return ascii_84[num][i];
|
||||||
|
case 9: return ascii_94[num][i];
|
||||||
case 11: return ascii_115[num][i];
|
case 11: return ascii_115[num][i];
|
||||||
case 12: return ascii_126[num][i];
|
case 12: return ascii_126[num][i];
|
||||||
case 13: return ascii_1306[num][i];
|
case 13: return ascii_1306[num][i];
|
||||||
|
|
@ -57,6 +60,7 @@ static const char (*LCD_GetChsTable(uint8_t sizey))[2]
|
||||||
switch (sizey)
|
switch (sizey)
|
||||||
{
|
{
|
||||||
case 8: return CHS8Table;
|
case 8: return CHS8Table;
|
||||||
|
case 9: return CHS9Table;
|
||||||
case 11: return CHS11Table;
|
case 11: return CHS11Table;
|
||||||
case 12: return CHS12Table;
|
case 12: return CHS12Table;
|
||||||
case 13: return CHS13Table;
|
case 13: return CHS13Table;
|
||||||
|
|
@ -73,6 +77,7 @@ static uint16_t LCD_GetChsTableSize(uint8_t sizey)
|
||||||
switch (sizey)
|
switch (sizey)
|
||||||
{
|
{
|
||||||
case 8: return (uint16_t)(sizeof(CHS8Table) / 2);
|
case 8: return (uint16_t)(sizeof(CHS8Table) / 2);
|
||||||
|
case 9: return (uint16_t)(sizeof(CHS9Table) / 2);
|
||||||
case 11: return (uint16_t)(sizeof(CHS11Table) / 2);
|
case 11: return (uint16_t)(sizeof(CHS11Table) / 2);
|
||||||
case 12: return (uint16_t)(sizeof(CHS12Table) / 2);
|
case 12: return (uint16_t)(sizeof(CHS12Table) / 2);
|
||||||
case 13: return (uint16_t)(sizeof(CHS13Table) / 2);
|
case 13: return (uint16_t)(sizeof(CHS13Table) / 2);
|
||||||
|
|
@ -90,6 +95,7 @@ static uint8_t LCD_GetAsciiMetrics(uint8_t size, uint8_t *char_width, uint8_t *c
|
||||||
switch (size)
|
switch (size)
|
||||||
{
|
{
|
||||||
case 8: *char_width = 4; return 1;
|
case 8: *char_width = 4; return 1;
|
||||||
|
case 9: *char_width = 4; return 1;
|
||||||
case 11: *char_width = 5; return 1;
|
case 11: *char_width = 5; return 1;
|
||||||
case 12: *char_width = 6; return 1;
|
case 12: *char_width = 6; return 1;
|
||||||
case 13: *char_width = 6; return 1;
|
case 13: *char_width = 6; return 1;
|
||||||
|
|
@ -221,6 +227,44 @@ void LCD_WR_PIC_FROM_FLASH(uint16_t x, uint16_t y, uint16_t length, uint16_t wid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 只绘制图片左侧 clip_w 列(电池电量按百分比裁剪) */
|
||||||
|
void LCD_WR_PIC_ClipX(uint16_t x, uint16_t y, uint16_t full_w, uint16_t h,
|
||||||
|
uint16_t clip_w, const uint8_t data[])
|
||||||
|
{
|
||||||
|
uint16_t row;
|
||||||
|
if (clip_w == 0 || full_w == 0 || h == 0) return;
|
||||||
|
if (clip_w > full_w) clip_w = full_w;
|
||||||
|
LCD_SetWindow(x, y, x + clip_w - 1, y + h - 1);
|
||||||
|
LCD_DC_Set();
|
||||||
|
for (row = 0; row < h; row++)
|
||||||
|
{
|
||||||
|
LCD_SPI_Write(data + (uint32_t)row * full_w * 2, (uint32_t)clip_w * 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 从 W25Q128 按行读取并透明显示(跳过近黑像素),复用 pic_batch_buf,无大块静态 RAM */
|
||||||
|
void LCD_WR_PIC_FROM_FLASH_Trans(uint16_t x, uint16_t y, uint16_t length, uint16_t width, uint32_t flash_addr)
|
||||||
|
{
|
||||||
|
uint16_t row, col;
|
||||||
|
uint32_t row_bytes = (uint32_t)length * 2U;
|
||||||
|
if (length == 0 || width == 0 || row_bytes > PIC_BATCH_SIZE) return;
|
||||||
|
|
||||||
|
for (row = 0; row < width; row++)
|
||||||
|
{
|
||||||
|
W25Q128_Read(pic_batch_buf, flash_addr + row * row_bytes, (uint16_t)row_bytes);
|
||||||
|
for (col = 0; col < length; col++)
|
||||||
|
{
|
||||||
|
uint16_t c = (uint16_t)((pic_batch_buf[col * 2U] << 8) | pic_batch_buf[col * 2U + 1U]);
|
||||||
|
uint8_t r5 = (uint8_t)((c >> 11) & 0x1F);
|
||||||
|
uint8_t g6 = (uint8_t)((c >> 5) & 0x3F);
|
||||||
|
uint8_t b5 = (uint8_t)(c & 0x1F);
|
||||||
|
if (r5 <= 1 && g6 <= 2 && b5 <= 2)
|
||||||
|
continue;
|
||||||
|
LCD_DrawPoint((uint16_t)(x + col), (uint16_t)(y + row), c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
函数说明:在指定区域填充颜色
|
函数说明:在指定区域填充颜色
|
||||||
入口数据:xsta,ysta 起始坐标
|
入口数据:xsta,ysta 起始坐标
|
||||||
|
|
@ -1593,6 +1637,17 @@ void LCD_DrawChevron_Right(uint16_t x, uint16_t y, uint8_t size, uint8_t thick,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* LCD_DrawChevron_Right 的左向镜像:x,y 为尖角处坐标 */
|
||||||
|
void LCD_DrawChevron_Left(uint16_t x, uint16_t y, uint8_t size, uint8_t thick, uint16_t color)
|
||||||
|
{
|
||||||
|
for (uint8_t i = 0; i < thick; i++) {
|
||||||
|
LCD_DrawLine(x, y - size + i, x - size + i, y, color);
|
||||||
|
}
|
||||||
|
for (uint8_t i = 0; i < thick; i++) {
|
||||||
|
LCD_DrawLine(x, y + size - i, x - size + i, y, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
函数说明:画【圆角框 + 居中加号 +】
|
函数说明:画【圆角框 + 居中加号 +】
|
||||||
|
|
@ -1742,7 +1797,7 @@ void Draw_Volume_Bar(uint16_t x, uint16_t y, uint8_t volume_level,uint8_t scale,
|
||||||
}
|
}
|
||||||
|
|
||||||
clear_w = (uint16_t)(w + gap) * bar_count - gap;
|
clear_w = (uint16_t)(w + gap) * bar_count - gap;
|
||||||
LCD_FillByColor(x, y, x + clear_w, y + max_h * scale, BLACK);
|
LCD_FillByColor(x, y, x + clear_w, y + max_h * scale, UI0902_BG_COLOR);
|
||||||
|
|
||||||
if(volume_level == 0)
|
if(volume_level == 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,12 @@ extern void LCD_WR_PIC(uint16_t x, uint16_t y, uint16_t length, uint16_t width,
|
||||||
extern void LCD_WR_PIC_Trans(uint16_t x, uint16_t y, uint16_t length, uint16_t width,
|
extern void LCD_WR_PIC_Trans(uint16_t x, uint16_t y, uint16_t length, uint16_t width,
|
||||||
const uint8_t data[], uint16_t key_color);
|
const uint8_t data[], uint16_t key_color);
|
||||||
extern void LCD_WR_PIC_FROM_FLASH(uint16_t x, uint16_t y, uint16_t length, uint16_t width, uint32_t flash_addr);
|
extern void LCD_WR_PIC_FROM_FLASH(uint16_t x, uint16_t y, uint16_t length, uint16_t width, uint32_t flash_addr);
|
||||||
|
extern void LCD_WR_PIC_ClipX(uint16_t x, uint16_t y, uint16_t full_w, uint16_t h,
|
||||||
|
uint16_t clip_w, const uint8_t data[]);
|
||||||
|
extern void LCD_WR_PIC_FROM_FLASH_Trans(uint16_t x, uint16_t y, uint16_t length, uint16_t width, uint32_t flash_addr);
|
||||||
|
extern void LCD_WR_PIC_ClipX(uint16_t x, uint16_t y, uint16_t full_w, uint16_t h,
|
||||||
|
uint16_t clip_w, const uint8_t data[]);
|
||||||
|
extern void LCD_WR_PIC_FROM_FLASH_Trans(uint16_t x, uint16_t y, uint16_t length, uint16_t width, uint32_t flash_addr);
|
||||||
extern void LCD_DrawPoint(uint16_t x, uint16_t y, uint16_t color); //在指定位置画一个点
|
extern void LCD_DrawPoint(uint16_t x, uint16_t y, uint16_t color); //在指定位置画一个点
|
||||||
extern void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); //在指定位置画一条线
|
extern void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); //在指定位置画一条线
|
||||||
extern void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); //在指定位置画一个矩形
|
extern void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); //在指定位置画一个矩形
|
||||||
|
|
|
||||||
|
|
@ -190,6 +190,11 @@ static uint8_t LCD_Dump_CommandPending(void)
|
||||||
unsigned read_len;
|
unsigned read_len;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
|
/* 烧录外部 UI 资源时占用 RTT0 down,禁止此处吞字节 */
|
||||||
|
if (app_log_flash_busy()) {
|
||||||
|
return 0U;
|
||||||
|
}
|
||||||
|
|
||||||
read_len = SEGGER_RTT_Read(LCD_DUMP_RTT_DOWN_CH, rx, sizeof(rx));
|
read_len = SEGGER_RTT_Read(LCD_DUMP_RTT_DOWN_CH, rx, sizeof(rx));
|
||||||
if (read_len == 0U) {
|
if (read_len == 0U) {
|
||||||
return 0U;
|
return 0U;
|
||||||
|
|
@ -206,6 +211,38 @@ static uint8_t LCD_Dump_CommandPending(void)
|
||||||
s_cmd_buf[0] = '\0';
|
s_cmd_buf[0] = '\0';
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
/* TAP [x y]:缺省 120,80;换行后解析,避免坐标未收齐就触发 */
|
||||||
|
if (strncmp(s_cmd_buf, LCD_DUMP_TAP_CMD, 3) == 0) {
|
||||||
|
unsigned tx = 120U;
|
||||||
|
unsigned ty = 80U;
|
||||||
|
if (s_cmd_buf[3] == ' ' || s_cmd_buf[3] == '\t') {
|
||||||
|
char *p1 = s_cmd_buf + 4;
|
||||||
|
char *p2;
|
||||||
|
tx = (unsigned)strtoul(p1, &p2, 10);
|
||||||
|
if (p2 != p1) {
|
||||||
|
while (*p2 == ' ' || *p2 == '\t') p2++;
|
||||||
|
ty = (unsigned)strtoul(p2, NULL, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tx > 239U) tx = 239U;
|
||||||
|
if (ty > 319U) ty = 319U;
|
||||||
|
MainTask_Sendmsg(MSG_ID_TOUCH, 1, (uint16_t)tx, (uint16_t)ty);
|
||||||
|
SEGGER_RTT_WriteString(0, "TAP inject\n");
|
||||||
|
s_cmd_len = 0U;
|
||||||
|
s_cmd_buf[0] = '\0';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strcmp(s_cmd_buf, LCD_DUMP_RESET_CMD) == 0) {
|
||||||
|
(void)app_log_try_command(LCD_DUMP_RESET_CMD);
|
||||||
|
s_cmd_len = 0U;
|
||||||
|
s_cmd_buf[0] = '\0';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strcmp(s_cmd_buf, LCD_DUMP_CMD) == 0) {
|
||||||
|
s_cmd_len = 0U;
|
||||||
|
s_cmd_buf[0] = '\0';
|
||||||
|
return 1U;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
s_cmd_len = 0U;
|
s_cmd_len = 0U;
|
||||||
s_cmd_buf[0] = '\0';
|
s_cmd_buf[0] = '\0';
|
||||||
|
|
@ -218,23 +255,7 @@ static uint8_t LCD_Dump_CommandPending(void)
|
||||||
s_cmd_buf[s_cmd_len++] = c;
|
s_cmd_buf[s_cmd_len++] = c;
|
||||||
s_cmd_buf[s_cmd_len] = '\0';
|
s_cmd_buf[s_cmd_len] = '\0';
|
||||||
|
|
||||||
/* 合成点击:验证 UI 命中路径(点万能按钮中心) */
|
if (c == 0x01) {
|
||||||
if (strstr(s_cmd_buf, LCD_DUMP_TAP_CMD) != NULL) {
|
|
||||||
s_cmd_len = 0U;
|
|
||||||
s_cmd_buf[0] = '\0';
|
|
||||||
MainTask_Sendmsg(MSG_ID_TOUCH, 1, 120, 80);
|
|
||||||
SEGGER_RTT_WriteString(0, "TAP inject 120,80\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strstr(s_cmd_buf, LCD_DUMP_RESET_CMD) != NULL) {
|
|
||||||
s_cmd_len = 0U;
|
|
||||||
s_cmd_buf[0] = '\0';
|
|
||||||
(void)app_log_try_command(LCD_DUMP_RESET_CMD);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c == 0x01 || strstr(s_cmd_buf, LCD_DUMP_CMD) != NULL) {
|
|
||||||
s_cmd_len = 0U;
|
s_cmd_len = 0U;
|
||||||
s_cmd_buf[0] = '\0';
|
s_cmd_buf[0] = '\0';
|
||||||
return 1U;
|
return 1U;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef __DRV_ILI9341_LCD_IMAGE_UI0902_H
|
||||||
|
#define __DRV_ILI9341_LCD_IMAGE_UI0902_H
|
||||||
|
|
||||||
|
#include "stdint.h"
|
||||||
|
|
||||||
|
extern const unsigned char gImage_UI0902_BatteryOutline_29x12[];
|
||||||
|
extern const unsigned char gImage_UI0902_Volume_20x15[600];
|
||||||
|
extern const unsigned char gImage_UI0902_Bluetooth_11x17[374];
|
||||||
|
extern const unsigned char gImage_UI0902_BatteryFill_22x9[396];
|
||||||
|
extern const unsigned char gImage_UI0902_TabSetting_Sel_36x28[2016];
|
||||||
|
extern const unsigned char gImage_UI0902_TabSetting_Not_35x28[1960];
|
||||||
|
extern const unsigned char gImage_UI0902_TabMixer_Sel_35x27[1890];
|
||||||
|
extern const unsigned char gImage_UI0902_TabMixer_Not_18x28[1008];
|
||||||
|
extern const unsigned char gImage_UI0902_TabMixer_Not_35x28[1960];
|
||||||
|
extern const unsigned char gImage_UI0902_TabMode_Sel_36x28[2016];
|
||||||
|
extern const unsigned char gImage_UI0902_TabMode_Not_35x29[2030];
|
||||||
|
extern const unsigned char gImage_UI0902_TabBack_Sel_35x27[1890];
|
||||||
|
extern const unsigned char gImage_UI0902_TabBack_Not_18x28[1008];
|
||||||
|
|
||||||
|
extern const unsigned char gImage_UI0902_BtnMinus_23x22[1012];
|
||||||
|
extern const unsigned char gImage_UI0902_BtnPlus_23x22[1012];
|
||||||
|
extern const unsigned char gImage_UI0902_TabBack_30x24[1440];
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -101,6 +101,7 @@ extern void LCD_SetWindow(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
|
||||||
extern void LCD_Init(void); //LCD初始化
|
extern void LCD_Init(void); //LCD初始化
|
||||||
extern void LCD_SPI_DMA_Send(const uint8_t *data, uint32_t len); //SPI2 DMA批量发送
|
extern void LCD_SPI_DMA_Send(const uint8_t *data, uint32_t len); //SPI2 DMA批量发送
|
||||||
extern void LCD_DrawChevron_Right(uint16_t x, uint16_t y, uint8_t size, uint8_t thick, uint16_t color); //向右空心尖括号
|
extern void LCD_DrawChevron_Right(uint16_t x, uint16_t y, uint8_t size, uint8_t thick, uint16_t color); //向右空心尖括号
|
||||||
|
extern void LCD_DrawChevron_Left(uint16_t x, uint16_t y, uint8_t size, uint8_t thick, uint16_t color); //向左空心尖括号
|
||||||
|
|
||||||
// 渐变背景文字显示(先画垂直渐变底,再叠加文字笔画)
|
// 渐变背景文字显示(先画垂直渐变底,再叠加文字笔画)
|
||||||
extern uint32_t LCD_ShowChinese_AutoAlign_Gradient(uint16_t x1, uint16_t x2, uint16_t y,
|
extern uint32_t LCD_ShowChinese_AutoAlign_Gradient(uint16_t x1, uint16_t x2, uint16_t y,
|
||||||
|
|
|
||||||
|
|
@ -192,12 +192,13 @@ static uint8_t TP_AdcCoordValid(uint16_t x, uint16_t y)
|
||||||
#define CALIB_Y_MAX 3950
|
#define CALIB_Y_MAX 3950
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 竖屏线性映射(与 BOOT/量产一致):raw.x→屏幕X,raw.y→屏幕Y,不做镜像。
|
* 竖屏线性映射:raw.x→屏幕X,raw.y→屏幕Y。
|
||||||
|
* 本机 X 轴左右对调(点右触发左),开 TP_MIRROR_X。
|
||||||
* 若 TP_MIRROR_Y=1 会导致 Y 轴反转(点「专业」误中「万能」)。
|
* 若 TP_MIRROR_Y=1 会导致 Y 轴反转(点「专业」误中「万能」)。
|
||||||
* DOUT(PA15) 浮空输入;空闲 raw.y 噪声禁止走 ADC 回退。
|
* DOUT(PA15) 浮空输入;空闲 raw.y 噪声禁止走 ADC 回退。
|
||||||
*/
|
*/
|
||||||
#define TP_SWAP_XY 0
|
#define TP_SWAP_XY 0
|
||||||
#define TP_MIRROR_X 0
|
#define TP_MIRROR_X 1
|
||||||
#define TP_MIRROR_Y 0
|
#define TP_MIRROR_Y 0
|
||||||
|
|
||||||
static uint16_t TP_MapAxis(uint16_t adc, uint16_t adc_min, uint16_t adc_max, uint16_t px_max)
|
static uint16_t TP_MapAxis(uint16_t adc, uint16_t adc_min, uint16_t adc_max, uint16_t px_max)
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFED
|
||||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||||
|
|
||||||
initialize by copy { readwrite };
|
initialize by copy with packing = none { readwrite };
|
||||||
do not initialize { section .noinit };
|
do not initialize { section .noinit };
|
||||||
|
|
||||||
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
||||||
|
|
|
||||||
|
|
@ -2085,10 +2085,10 @@
|
||||||
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image.c</name>
|
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image_ModeSelect0831.c</name>
|
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image_UI0902.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image_ModeSelect0831.h</name>
|
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image_UI0902.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image.h</name>
|
<name>$PROJ_DIR$\..\..\device\LCD_ILI9341\Drv_ILI9341_Lcd_Image.h</name>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,287 @@
|
||||||
|
#ifndef __UI0902_RES_ADDR_H
|
||||||
|
#define __UI0902_RES_ADDR_H
|
||||||
|
|
||||||
|
/* Auto-generated by tools/gen_ui0902_assets.py. W25Q128 resource map. */
|
||||||
|
#define UI0902_RES_BASE 0x00100000UL
|
||||||
|
|
||||||
|
#define UI0902_ROW_UNIVERSAL_NOT_ADDR (UI0902_RES_BASE + 0x000000UL) /* 39072 bytes */
|
||||||
|
#define UI0902_ROW_UNIVERSAL_NOT_W 222
|
||||||
|
#define UI0902_ROW_UNIVERSAL_NOT_H 88
|
||||||
|
|
||||||
|
#define UI0902_ROW_UNIVERSAL_SEL_ADDR (UI0902_RES_BASE + 0x00A000UL) /* 39072 bytes */
|
||||||
|
#define UI0902_ROW_UNIVERSAL_SEL_W 222
|
||||||
|
#define UI0902_ROW_UNIVERSAL_SEL_H 88
|
||||||
|
|
||||||
|
#define UI0902_ROW_NORMAL_NOT_ADDR (UI0902_RES_BASE + 0x014000UL) /* 39072 bytes */
|
||||||
|
#define UI0902_ROW_NORMAL_NOT_W 222
|
||||||
|
#define UI0902_ROW_NORMAL_NOT_H 88
|
||||||
|
|
||||||
|
#define UI0902_ROW_NORMAL_SEL_ADDR (UI0902_RES_BASE + 0x01E000UL) /* 39072 bytes */
|
||||||
|
#define UI0902_ROW_NORMAL_SEL_W 222
|
||||||
|
#define UI0902_ROW_NORMAL_SEL_H 88
|
||||||
|
|
||||||
|
#define UI0902_ROW_EXPERT_NOT_ADDR (UI0902_RES_BASE + 0x028000UL) /* 39072 bytes */
|
||||||
|
#define UI0902_ROW_EXPERT_NOT_W 222
|
||||||
|
#define UI0902_ROW_EXPERT_NOT_H 88
|
||||||
|
|
||||||
|
#define UI0902_ROW_EXPERT_SEL_ADDR (UI0902_RES_BASE + 0x032000UL) /* 39072 bytes */
|
||||||
|
#define UI0902_ROW_EXPERT_SEL_W 222
|
||||||
|
#define UI0902_ROW_EXPERT_SEL_H 88
|
||||||
|
|
||||||
|
#define UI0902_ICON_UNIVERSAL_SEL_ADDR (UI0902_RES_BASE + 0x03C000UL) /* 2730 bytes */
|
||||||
|
#define UI0902_ICON_UNIVERSAL_SEL_W 39
|
||||||
|
#define UI0902_ICON_UNIVERSAL_SEL_H 35
|
||||||
|
|
||||||
|
#define UI0902_ICON_UNIVERSAL_NOT_ADDR (UI0902_RES_BASE + 0x03D000UL) /* 2736 bytes */
|
||||||
|
#define UI0902_ICON_UNIVERSAL_NOT_W 38
|
||||||
|
#define UI0902_ICON_UNIVERSAL_NOT_H 36
|
||||||
|
|
||||||
|
#define UI0902_ICON_NORMAL_SEL_ADDR (UI0902_RES_BASE + 0x03E000UL) /* 3200 bytes */
|
||||||
|
#define UI0902_ICON_NORMAL_SEL_W 40
|
||||||
|
#define UI0902_ICON_NORMAL_SEL_H 40
|
||||||
|
|
||||||
|
#define UI0902_ICON_NORMAL_NOT_ADDR (UI0902_RES_BASE + 0x03F000UL) /* 3280 bytes */
|
||||||
|
#define UI0902_ICON_NORMAL_NOT_W 41
|
||||||
|
#define UI0902_ICON_NORMAL_NOT_H 40
|
||||||
|
|
||||||
|
#define UI0902_ICON_EXPERT_SEL_ADDR (UI0902_RES_BASE + 0x040000UL) /* 2760 bytes */
|
||||||
|
#define UI0902_ICON_EXPERT_SEL_W 46
|
||||||
|
#define UI0902_ICON_EXPERT_SEL_H 30
|
||||||
|
|
||||||
|
#define UI0902_ICON_EXPERT_NOT_ADDR (UI0902_RES_BASE + 0x041000UL) /* 2760 bytes */
|
||||||
|
#define UI0902_ICON_EXPERT_NOT_W 46
|
||||||
|
#define UI0902_ICON_EXPERT_NOT_H 30
|
||||||
|
|
||||||
|
#define UI0902_TXT_MODE_UNIVERSAL_NOT_ADDR (UI0902_RES_BASE + 0x042000UL) /* 3360 bytes */
|
||||||
|
#define UI0902_TXT_MODE_UNIVERSAL_NOT_W 80
|
||||||
|
#define UI0902_TXT_MODE_UNIVERSAL_NOT_H 21
|
||||||
|
|
||||||
|
#define UI0902_TXT_MODE_UNIVERSAL_SEL_ADDR (UI0902_RES_BASE + 0x043000UL) /* 3318 bytes */
|
||||||
|
#define UI0902_TXT_MODE_UNIVERSAL_SEL_W 79
|
||||||
|
#define UI0902_TXT_MODE_UNIVERSAL_SEL_H 21
|
||||||
|
|
||||||
|
#define UI0902_TXT_MODE_NORMAL_NOT_ADDR (UI0902_RES_BASE + 0x044000UL) /* 3318 bytes */
|
||||||
|
#define UI0902_TXT_MODE_NORMAL_NOT_W 79
|
||||||
|
#define UI0902_TXT_MODE_NORMAL_NOT_H 21
|
||||||
|
|
||||||
|
#define UI0902_TXT_MODE_NORMAL_SEL_ADDR (UI0902_RES_BASE + 0x045000UL) /* 3360 bytes */
|
||||||
|
#define UI0902_TXT_MODE_NORMAL_SEL_W 80
|
||||||
|
#define UI0902_TXT_MODE_NORMAL_SEL_H 21
|
||||||
|
|
||||||
|
#define UI0902_TXT_MODE_EXPERT_NOT_ADDR (UI0902_RES_BASE + 0x046000UL) /* 3360 bytes */
|
||||||
|
#define UI0902_TXT_MODE_EXPERT_NOT_W 80
|
||||||
|
#define UI0902_TXT_MODE_EXPERT_NOT_H 21
|
||||||
|
|
||||||
|
#define UI0902_TXT_MODE_EXPERT_SEL_ADDR (UI0902_RES_BASE + 0x047000UL) /* 3360 bytes */
|
||||||
|
#define UI0902_TXT_MODE_EXPERT_SEL_W 80
|
||||||
|
#define UI0902_TXT_MODE_EXPERT_SEL_H 21
|
||||||
|
|
||||||
|
#define UI0902_ICON_SET_BLUETOOTH_ADDR (UI0902_RES_BASE + 0x048000UL) /* 2244 bytes */
|
||||||
|
#define UI0902_ICON_SET_BLUETOOTH_W 34
|
||||||
|
#define UI0902_ICON_SET_BLUETOOTH_H 33
|
||||||
|
|
||||||
|
#define UI0902_ICON_SET_GEAR_ADDR (UI0902_RES_BASE + 0x049000UL) /* 2244 bytes */
|
||||||
|
#define UI0902_ICON_SET_GEAR_W 33
|
||||||
|
#define UI0902_ICON_SET_GEAR_H 34
|
||||||
|
|
||||||
|
#define UI0902_ICON_CHEVRON_ADDR (UI0902_RES_BASE + 0x04A000UL) /* 360 bytes */
|
||||||
|
#define UI0902_ICON_CHEVRON_W 10
|
||||||
|
#define UI0902_ICON_CHEVRON_H 18
|
||||||
|
|
||||||
|
#define UI0902_ROW_SET_BLUETOOTH_ADDR (UI0902_RES_BASE + 0x04B000UL) /* 11484 bytes */
|
||||||
|
#define UI0902_ROW_SET_BLUETOOTH_W 174
|
||||||
|
#define UI0902_ROW_SET_BLUETOOTH_H 33
|
||||||
|
|
||||||
|
#define UI0902_ROW_SET_SYSTEM_ADDR (UI0902_RES_BASE + 0x04E000UL) /* 11484 bytes */
|
||||||
|
#define UI0902_ROW_SET_SYSTEM_W 174
|
||||||
|
#define UI0902_ROW_SET_SYSTEM_H 33
|
||||||
|
|
||||||
|
#define UI0902_ICON_SYS_LANG_ADDR (UI0902_RES_BASE + 0x051000UL) /* 760 bytes */
|
||||||
|
#define UI0902_ICON_SYS_LANG_W 20
|
||||||
|
#define UI0902_ICON_SYS_LANG_H 19
|
||||||
|
|
||||||
|
#define UI0902_ICON_SYS_RESTORE_ADDR (UI0902_RES_BASE + 0x052000UL) /* 546 bytes */
|
||||||
|
#define UI0902_ICON_SYS_RESTORE_W 13
|
||||||
|
#define UI0902_ICON_SYS_RESTORE_H 21
|
||||||
|
|
||||||
|
#define UI0902_ICON_SYS_ABOUT_ADDR (UI0902_RES_BASE + 0x053000UL) /* 756 bytes */
|
||||||
|
#define UI0902_ICON_SYS_ABOUT_W 18
|
||||||
|
#define UI0902_ICON_SYS_ABOUT_H 21
|
||||||
|
|
||||||
|
#define UI0902_ICON_SYS_VERSION_ADDR (UI0902_RES_BASE + 0x054000UL) /* 684 bytes */
|
||||||
|
#define UI0902_ICON_SYS_VERSION_W 19
|
||||||
|
#define UI0902_ICON_SYS_VERSION_H 18
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET_LANG_ADDR (UI0902_RES_BASE + 0x055000UL) /* 1326 bytes */
|
||||||
|
#define UI0902_TXT_SET_LANG_W 51
|
||||||
|
#define UI0902_TXT_SET_LANG_H 13
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET_RESTORE_ADDR (UI0902_RES_BASE + 0x056000UL) /* 1326 bytes */
|
||||||
|
#define UI0902_TXT_SET_RESTORE_W 51
|
||||||
|
#define UI0902_TXT_SET_RESTORE_H 13
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET_ABOUT_ADDR (UI0902_RES_BASE + 0x057000UL) /* 1300 bytes */
|
||||||
|
#define UI0902_TXT_SET_ABOUT_W 50
|
||||||
|
#define UI0902_TXT_SET_ABOUT_H 13
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET_VERSION_ADDR (UI0902_RES_BASE + 0x058000UL) /* 2156 bytes */
|
||||||
|
#define UI0902_TXT_SET_VERSION_W 77
|
||||||
|
#define UI0902_TXT_SET_VERSION_H 14
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET2_A_ADDR (UI0902_RES_BASE + 0x059000UL) /* 3822 bytes */
|
||||||
|
#define UI0902_TXT_SET2_A_W 91
|
||||||
|
#define UI0902_TXT_SET2_A_H 21
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET2_B_ADDR (UI0902_RES_BASE + 0x05A000UL) /* 440 bytes */
|
||||||
|
#define UI0902_TXT_SET2_B_W 22
|
||||||
|
#define UI0902_TXT_SET2_B_H 10
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET2_C_ADDR (UI0902_RES_BASE + 0x05B000UL) /* 220 bytes */
|
||||||
|
#define UI0902_TXT_SET2_C_W 11
|
||||||
|
#define UI0902_TXT_SET2_C_H 10
|
||||||
|
|
||||||
|
#define UI0902_TXT_SET2_D_ADDR (UI0902_RES_BASE + 0x05C000UL) /* 768 bytes */
|
||||||
|
#define UI0902_TXT_SET2_D_W 32
|
||||||
|
#define UI0902_TXT_SET2_D_H 12
|
||||||
|
|
||||||
|
#define UI0902_BTN_TYPE_ACOUSTIC_SEL_ADDR (UI0902_RES_BASE + 0x05D000UL) /* 2166 bytes */
|
||||||
|
#define UI0902_BTN_TYPE_ACOUSTIC_SEL_W 57
|
||||||
|
#define UI0902_BTN_TYPE_ACOUSTIC_SEL_H 19
|
||||||
|
|
||||||
|
#define UI0902_BTN_TYPE_SING_NOT_ADDR (UI0902_RES_BASE + 0x05E000UL) /* 2166 bytes */
|
||||||
|
#define UI0902_BTN_TYPE_SING_NOT_W 57
|
||||||
|
#define UI0902_BTN_TYPE_SING_NOT_H 19
|
||||||
|
|
||||||
|
#define UI0902_BTN_TYPE_FINGER_NOT_ADDR (UI0902_RES_BASE + 0x05F000UL) /* 2166 bytes */
|
||||||
|
#define UI0902_BTN_TYPE_FINGER_NOT_W 57
|
||||||
|
#define UI0902_BTN_TYPE_FINGER_NOT_H 19
|
||||||
|
|
||||||
|
#define UI0902_BTN_TYPE_STRUM_NOT_ADDR (UI0902_RES_BASE + 0x060000UL) /* 2166 bytes */
|
||||||
|
#define UI0902_BTN_TYPE_STRUM_NOT_W 57
|
||||||
|
#define UI0902_BTN_TYPE_STRUM_NOT_H 19
|
||||||
|
|
||||||
|
#define UI0902_BTN_MINUS_BLUE_ADDR (UI0902_RES_BASE + 0x061000UL) /* 968 bytes */
|
||||||
|
#define UI0902_BTN_MINUS_BLUE_W 22
|
||||||
|
#define UI0902_BTN_MINUS_BLUE_H 22
|
||||||
|
|
||||||
|
#define UI0902_BTN_PLUS_BLUE_ADDR (UI0902_RES_BASE + 0x062000UL) /* 1012 bytes */
|
||||||
|
#define UI0902_BTN_PLUS_BLUE_W 23
|
||||||
|
#define UI0902_BTN_PLUS_BLUE_H 22
|
||||||
|
|
||||||
|
#define UI0902_BTN_MINUS_GRAY_ADDR (UI0902_RES_BASE + 0x063000UL) /* 968 bytes */
|
||||||
|
#define UI0902_BTN_MINUS_GRAY_W 22
|
||||||
|
#define UI0902_BTN_MINUS_GRAY_H 22
|
||||||
|
|
||||||
|
#define UI0902_BTN_PLUS_GRAY_ADDR (UI0902_RES_BASE + 0x064000UL) /* 968 bytes */
|
||||||
|
#define UI0902_BTN_PLUS_GRAY_W 22
|
||||||
|
#define UI0902_BTN_PLUS_GRAY_H 22
|
||||||
|
|
||||||
|
#define UI0902_SLIDER_WIDGET_ADDR (UI0902_RES_BASE + 0x065000UL) /* 14016 bytes */
|
||||||
|
#define UI0902_SLIDER_WIDGET_W 219
|
||||||
|
#define UI0902_SLIDER_WIDGET_H 32
|
||||||
|
|
||||||
|
#define UI0902_BTN_LANG_SEL_ADDR (UI0902_RES_BASE + 0x069000UL) /* 3332 bytes */
|
||||||
|
#define UI0902_BTN_LANG_SEL_W 49
|
||||||
|
#define UI0902_BTN_LANG_SEL_H 34
|
||||||
|
|
||||||
|
#define UI0902_BTN_LANG_CN1_ADDR (UI0902_RES_BASE + 0x06A000UL) /* 3264 bytes */
|
||||||
|
#define UI0902_BTN_LANG_CN1_W 48
|
||||||
|
#define UI0902_BTN_LANG_CN1_H 34
|
||||||
|
|
||||||
|
#define UI0902_BTN_LANG_CN2_ADDR (UI0902_RES_BASE + 0x06B000UL) /* 3332 bytes */
|
||||||
|
#define UI0902_BTN_LANG_CN2_W 49
|
||||||
|
#define UI0902_BTN_LANG_CN2_H 34
|
||||||
|
|
||||||
|
#define UI0902_BTN_LANG_EN_ADDR (UI0902_RES_BASE + 0x06C000UL) /* 3332 bytes */
|
||||||
|
#define UI0902_BTN_LANG_EN_W 49
|
||||||
|
#define UI0902_BTN_LANG_EN_H 34
|
||||||
|
|
||||||
|
#define UI0902_BTN_CANCEL_SM_ADDR (UI0902_RES_BASE + 0x06D000UL) /* 3430 bytes */
|
||||||
|
#define UI0902_BTN_CANCEL_SM_W 49
|
||||||
|
#define UI0902_BTN_CANCEL_SM_H 35
|
||||||
|
|
||||||
|
#define UI0902_BTN_CONFIRM_SM_ADDR (UI0902_RES_BASE + 0x06E000UL) /* 3360 bytes */
|
||||||
|
#define UI0902_BTN_CONFIRM_SM_W 48
|
||||||
|
#define UI0902_BTN_CONFIRM_SM_H 35
|
||||||
|
|
||||||
|
#define UI0902_BTN_CANCEL_SM2_ADDR (UI0902_RES_BASE + 0x06F000UL) /* 3430 bytes */
|
||||||
|
#define UI0902_BTN_CANCEL_SM2_W 49
|
||||||
|
#define UI0902_BTN_CANCEL_SM2_H 35
|
||||||
|
|
||||||
|
#define UI0902_BTN_CONFIRM_SM2_ADDR (UI0902_RES_BASE + 0x070000UL) /* 3430 bytes */
|
||||||
|
#define UI0902_BTN_CONFIRM_SM2_W 49
|
||||||
|
#define UI0902_BTN_CONFIRM_SM2_H 35
|
||||||
|
|
||||||
|
#define UI0902_BTN_CONFIRM_BIG_ADDR (UI0902_RES_BASE + 0x071000UL) /* 11872 bytes */
|
||||||
|
#define UI0902_BTN_CONFIRM_BIG_W 106
|
||||||
|
#define UI0902_BTN_CONFIRM_BIG_H 56
|
||||||
|
|
||||||
|
#define UI0902_MIXER_KNOB_ADDR (UI0902_RES_BASE + 0x074000UL) /* 1440 bytes */
|
||||||
|
#define UI0902_MIXER_KNOB_W 30
|
||||||
|
#define UI0902_MIXER_KNOB_H 24
|
||||||
|
|
||||||
|
#define UI0902_MIXER_KNOB2_ADDR (UI0902_RES_BASE + 0x075000UL) /* 1104 bytes */
|
||||||
|
#define UI0902_MIXER_KNOB2_W 24
|
||||||
|
#define UI0902_MIXER_KNOB2_H 23
|
||||||
|
|
||||||
|
#define UI0902_MIXER_TRACK_ADDR (UI0902_RES_BASE + 0x076000UL) /* 13330 bytes */
|
||||||
|
#define UI0902_MIXER_TRACK_W 31
|
||||||
|
#define UI0902_MIXER_TRACK_H 215
|
||||||
|
|
||||||
|
#define UI0902_TXT_MIXER_MIC_ADDR (UI0902_RES_BASE + 0x07A000UL) /* 700 bytes */
|
||||||
|
#define UI0902_TXT_MIXER_MIC_W 25
|
||||||
|
#define UI0902_TXT_MIXER_MIC_H 14
|
||||||
|
|
||||||
|
#define UI0902_TXT_MIXER_GUITAR_ADDR (UI0902_RES_BASE + 0x07B000UL) /* 336 bytes */
|
||||||
|
#define UI0902_TXT_MIXER_GUITAR_W 12
|
||||||
|
#define UI0902_TXT_MIXER_GUITAR_H 14
|
||||||
|
|
||||||
|
#define UI0902_TXT_MIXER_BAND_ADDR (UI0902_RES_BASE + 0x07C000UL) /* 338 bytes */
|
||||||
|
#define UI0902_TXT_MIXER_BAND_W 13
|
||||||
|
#define UI0902_TXT_MIXER_BAND_H 13
|
||||||
|
|
||||||
|
#define UI0902_TXT_MIXER_VOCALFX_ADDR (UI0902_RES_BASE + 0x07D000UL) /* 1036 bytes */
|
||||||
|
#define UI0902_TXT_MIXER_VOCALFX_W 37
|
||||||
|
#define UI0902_TXT_MIXER_VOCALFX_H 14
|
||||||
|
|
||||||
|
#define UI0902_TXT_MIXER_GUITARFX_ADDR (UI0902_RES_BASE + 0x07E000UL) /* 962 bytes */
|
||||||
|
#define UI0902_TXT_MIXER_GUITARFX_W 37
|
||||||
|
#define UI0902_TXT_MIXER_GUITARFX_H 13
|
||||||
|
|
||||||
|
#define UI0902_TXT_EFFECT_AMOUNT_ADDR (UI0902_RES_BASE + 0x07F000UL) /* 576 bytes */
|
||||||
|
#define UI0902_TXT_EFFECT_AMOUNT_W 32
|
||||||
|
#define UI0902_TXT_EFFECT_AMOUNT_H 9
|
||||||
|
|
||||||
|
#define UI0902_TXT_BAND_VOLUME_ADDR (UI0902_RES_BASE + 0x080000UL) /* 702 bytes */
|
||||||
|
#define UI0902_TXT_BAND_VOLUME_W 39
|
||||||
|
#define UI0902_TXT_BAND_VOLUME_H 9
|
||||||
|
|
||||||
|
#define UI0902_TXT_MIC_VOLUME_ADDR (UI0902_RES_BASE + 0x081000UL) /* 576 bytes */
|
||||||
|
#define UI0902_TXT_MIC_VOLUME_W 32
|
||||||
|
#define UI0902_TXT_MIC_VOLUME_H 9
|
||||||
|
|
||||||
|
#define UI0902_TXT_RESTORE_V1_ADDR (UI0902_RES_BASE + 0x082000UL) /* 1680 bytes */
|
||||||
|
#define UI0902_TXT_RESTORE_V1_W 21
|
||||||
|
#define UI0902_TXT_RESTORE_V1_H 40
|
||||||
|
|
||||||
|
#define UI0902_TXT_RESTORE_V2_ADDR (UI0902_RES_BASE + 0x083000UL) /* 1680 bytes */
|
||||||
|
#define UI0902_TXT_RESTORE_V2_W 21
|
||||||
|
#define UI0902_TXT_RESTORE_V2_H 40
|
||||||
|
|
||||||
|
#define UI0902_TXT_RESTORE_H_ADDR (UI0902_RES_BASE + 0x084000UL) /* 1128 bytes */
|
||||||
|
#define UI0902_TXT_RESTORE_H_W 47
|
||||||
|
#define UI0902_TXT_RESTORE_H_H 12
|
||||||
|
|
||||||
|
#define UI0902_TXT_RESTORE_CONFIRM_ADDR (UI0902_RES_BASE + 0x085000UL) /* 1988 bytes */
|
||||||
|
#define UI0902_TXT_RESTORE_CONFIRM_W 71
|
||||||
|
#define UI0902_TXT_RESTORE_CONFIRM_H 14
|
||||||
|
|
||||||
|
#define UI0902_BOOT_LOGO_ADDR (UI0902_RES_BASE + 0x086000UL) /* 153600 bytes */
|
||||||
|
#define UI0902_BOOT_LOGO_W 240
|
||||||
|
#define UI0902_BOOT_LOGO_H 320
|
||||||
|
|
||||||
|
#define UI0902_BTN_CANCEL_BIG_ADDR (UI0902_RES_BASE + 0x0AC000UL) /* 11872 bytes */
|
||||||
|
#define UI0902_BTN_CANCEL_BIG_W 106
|
||||||
|
#define UI0902_BTN_CANCEL_BIG_H 56
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -35,7 +35,8 @@
|
||||||
#include "Drv_ILI9341_Lcd_Init.h"
|
#include "Drv_ILI9341_Lcd_Init.h"
|
||||||
#include "Drv_ILI9341_Lcd_App.h"
|
#include "Drv_ILI9341_Lcd_App.h"
|
||||||
#include "Drv_ILI9341_Lcd_Image.h"
|
#include "Drv_ILI9341_Lcd_Image.h"
|
||||||
#include "Drv_ILI9341_Lcd_Image_ModeSelect0831.h"
|
#include "Drv_ILI9341_Lcd_Image_UI0902.h"
|
||||||
|
#include "UI0902_Res_Addr.h"
|
||||||
#include "Drv_ILI9341_Lcd_Dump.h"
|
#include "Drv_ILI9341_Lcd_Dump.h"
|
||||||
#include "Drv_XPT2046_Touch.h"
|
#include "Drv_XPT2046_Touch.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 357 B |
|
After Width: | Height: | Size: 520 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 416 B |
|
After Width: | Height: | Size: 365 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 902 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 982 B |
|
After Width: | Height: | Size: 607 B |
|
After Width: | Height: | Size: 648 B |
|
After Width: | Height: | Size: 516 B |
|
After Width: | Height: | Size: 746 B |
|
After Width: | Height: | Size: 496 B |
|
After Width: | Height: | Size: 557 B |
|
After Width: | Height: | Size: 445 B |
|
After Width: | Height: | Size: 644 B |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 915 B |
|
After Width: | Height: | Size: 893 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 588 B |
|
After Width: | Height: | Size: 585 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 573 B |
|
After Width: | Height: | Size: 882 B |
|
After Width: | Height: | Size: 453 B |
|
After Width: | Height: | Size: 388 B |
|
After Width: | Height: | Size: 535 B |
|
After Width: | Height: | Size: 563 B |
|
After Width: | Height: | Size: 517 B |
|
After Width: | Height: | Size: 936 B |
|
After Width: | Height: | Size: 842 B |
|
After Width: | Height: | Size: 948 B |
|
After Width: | Height: | Size: 867 B |
|
After Width: | Height: | Size: 409 B |
|
After Width: | Height: | Size: 407 B |
|
After Width: | Height: | Size: 400 B |
|
After Width: | Height: | Size: 291 B |
|
After Width: | Height: | Size: 340 B |
|
After Width: | Height: | Size: 992 B |
|
After Width: | Height: | Size: 399 B |
|
After Width: | Height: | Size: 561 B |
|
After Width: | Height: | Size: 622 B |