Reskin UI with 0902 design assets and 3-icon bottom navigation.

- Mode select page draws 222x84 row bitmaps from external flash
- Mixer page uses flash track/knob images with picture labels
- Settings and restore pages re-laid out with 0902 row style
- New status bar icons and battery outline+clip fill rendering
- Add LCD_WR_PIC_ClipX and LCD_WR_PIC_FROM_FLASH_Trans draw APIs
- Replace 4-tab bar with GUI_NAV_BAR 3-icon bottom navigation
- Swap 0831 assets for UI0902 in the IAR project file

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-02 13:37:25 +08:00
parent 9b3d457da6
commit f8675e3529
122 changed files with 2062 additions and 627 deletions

View File

@ -43,10 +43,10 @@ const LEBEL_UI UI_Label[] = {
// 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 */
}; };
@ -75,10 +75,9 @@ const Touch_AreaTypeDef Touch_Areas[] =
{ 165, 220, 220, 270, 0, 3, GUI_PLAY_SECTION, NULL }, { 165, 220, 220, 270, 0, 3, GUI_PLAY_SECTION, NULL },
/* 底栏 TAB万能/普通/专业/设置Value=目标 TAB */ /* 底栏 TAB万能/普通/专业/设置Value=目标 TAB */
{ 0, 60, 275, 319, 0, 0, GUI_TAB_INDEX, NULL }, { 0, 79, 280, 319, 0, 0, GUI_NAV_BAR, NULL },
{ 60, 120, 275, 319, 0, 2, GUI_TAB_INDEX, NULL }, { 80, 159, 280, 319, 0, 1, GUI_NAV_BAR, NULL },
{ 120, 180, 275, 319, 0, 1, GUI_TAB_INDEX, NULL }, { 160, 239, 280, 319, 0, 2, GUI_NAV_BAR, NULL },
{ 180, 239, 275, 319, 0, 3, GUI_TAB_INDEX, 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};

View File

@ -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=模式选择 */
}GUIID; }GUIID;

View File

@ -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 设计稿:整行位图(背景+图标+文字+箭头)存外部 Flash222x84 */
static void UI_ModeSelect_DrawButtons(void); #define UI0902_MODE_ROW_X 9
#define UI0902_MODE_ROW_W 222
#define UI0902_MODE_ROW_H 84
#define UI0902_MODE_ROW_Y0 30
#define UI0902_MODE_ROW_DY 86
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)
@ -106,16 +76,20 @@ 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();
Draw_Bottom_Bar(UI0902_NAV_MODE, 0);
} }
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, 30, 114, 0, 0, 0, NULL },
{ 0, 239, 128, 219, 1, 0, 2, NULL }, { 9, 231, 116, 200, 1, 0, 2, NULL },
{ 0, 239, 220, 311, 2, 0, 1, NULL }, { 9, 231, 202, 286, 2, 0, 1, NULL },
/* 底栏导航:设置 / 调音台(模式选择即本页) */
{ 0, 79, 287, 319, 0, UI0902_NAV_SETTING, GUI_NAV_BAR, NULL },
{ 80, 159, 287, 319, 0, UI0902_NAV_MIXER, GUI_NAV_BAR, 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))
@ -245,6 +219,13 @@ void IdleProcess(DisplayTaskMessage_Type msg)
msg.LoByte >= Touch_ModeSelect_Areas[k].y_min && msg.LoByte <= Touch_ModeSelect_Areas[k].y_max ) msg.LoByte >= Touch_ModeSelect_Areas[k].y_min && msg.LoByte <= Touch_ModeSelect_Areas[k].y_max )
{ {
hit = 1U; hit = 1U;
if (Touch_ModeSelect_Areas[k].ID == GUI_NAV_BAR) {
if (Touch_ModeSelect_Areas[k].Value == UI0902_NAV_SETTING)
MenuPage_Setting_Proc();
else if (Touch_ModeSelect_Areas[k].Value == UI0902_NAV_MIXER)
MenuPage_Mixer_Proc();
break;
}
uint8_t row = (uint8_t)Touch_ModeSelect_Areas[k].Flag; uint8_t row = (uint8_t)Touch_ModeSelect_Areas[k].Flag;
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,
@ -313,7 +294,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(55, 3, 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);

View File

@ -1,43 +1,37 @@
#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, 79, 280, 319, 0, UI0902_NAV_SETTING, GUI_NAV_BAR, NULL },
{ 80, 159, 280, 319, 0, UI0902_NAV_MIXER, GUI_NAV_BAR, NULL },
{ 160, 239, 280, 319, 0, UI0902_NAV_MODE, 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 +39,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]);
} }
@ -70,85 +62,31 @@ void DrawAllFaders(void)
} }
// ============================================================ // ============================================================
// 绘制推子槽背景局部区域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;
char buf[8]; char buf[8];
LCD_FillRoundRect(x+5, slider_y, w-10, slider_h, 5, bg); LCD_WR_PIC_FROM_FLASH_Trans(cx - 15, slider_y, 30, 24, UI0902_MIXER_KNOB_ADDR);
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(cx - 15, cx + 15, slider_y + 5, (uint8_t*)buf,
LCD_ALIGN_CENTER, 0x1905, WHITE, 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 +106,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 +120,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 +140,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 = 24;
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 +166,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 +178,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_MIXER, 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 +202,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 +210,18 @@ 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_SETTING: MenuPage_Setting_Proc(); break;
case UI0902_NAV_MIXER: break; /* 本页 */
case UI0902_NAV_MODE: UI_ReturnToModeSelect(); break;
default: break;
} }
break; break;
} }
@ -326,21 +230,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;
} }
} }

View File

@ -1,16 +1,11 @@
#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);

View File

@ -1,119 +1,33 @@
#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, 79, 280, 319, 0, 0, 0, NULL }, /* 底栏:返回 */
{ 80, 159, 280, 319, 0, 1, GUI_NAV_BAR, NULL }, /* 调音台 */
{ 160, 239, 280, 319, 0, 2, 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_NONE, 1);
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,12 +35,21 @@ 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 )
{
if (pCurrentTouch_Area[k].ID == GUI_NAV_BAR)
{
if (pCurrentTouch_Area[k].Value == UI0902_NAV_MIXER)
MenuPage_Mixer_Proc();
else if (pCurrentTouch_Area[k].Value == UI0902_NAV_MODE)
UI_ReturnToModeSelect();
}
else
{ {
switch(pCurrentTouch_Area[k].ID) switch(pCurrentTouch_Area[k].ID)
{ {
@ -141,7 +64,9 @@ void UI_Restore_Select_Process(DisplayTaskMessage_Type msg)
MenuPage_Setting_Proc(); MenuPage_Setting_Proc();
break; break;
} }
}
ResetAutoPowerCount(); ResetAutoPowerCount();
break;
} }
} }
break; break;

View File

@ -1,35 +1,24 @@
#include "includes.h" #include "includes.h"
// ============================== /* ==============================
// <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD> * 0902 4 ///
// ============================== * 214x33 46 / /
#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 33
#define BTN_RADIUS 6 // Բ<><D4B2>
// <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 // Xmin, Xmax, Ymin, Ymax, flag, Value, ID, action
{ 115, 170, 110, 170, -1, 0, GUI_BLUETOOTH_SW, NULL }, { 13, 227, 42, 75, 1, 0, GUI_BLUETOOTH_SW, NULL },
{ 170, 225, 110, 170, 1, 0, GUI_BLUETOOTH_SW, NULL }, { 13, 227, 88, 121, 1, 0, GUI_AUTOCLOSE, NULL },
{ 115, 170, 175, 235, -1, 0, GUI_AUTOCLOSE, NULL }, { 13, 227, 134, 167, 0, 0, GUI_RESTORE, NULL },
{ 170, 225, 175, 235, 1, 0, GUI_AUTOCLOSE, NULL }, { 0, 79, 280, 319, 0, UI0902_NAV_SETTING, GUI_NAV_BAR, NULL }, /* 返回 */
{ 115, 170, 240, 300, -1, 0, GUI_RESTORE, NULL }, { 80, 159, 280, 319, 0, UI0902_NAV_MIXER, GUI_NAV_BAR, NULL },
{ 170, 225, 240, 300, 1, 0, GUI_RESTORE, NULL }, { 160, 239, 280, 319, 0, UI0902_NAV_MODE, GUI_NAV_BAR, NULL },
// { 15, 15+BTN_WIDTH, BTN_Y_START, BTN_Y_START+BTN_HEIGHT, 0, 0, GUI_CANCEL, 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 },
{ 0, 50, 0, 50, 0, 0, 0, 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))
@ -43,118 +32,12 @@ 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}, {SET_ROW_X, SET_ROW_W, 180, SET_ROW_H, (const uint8_t*)"\xB0\xE6\xB1\xBE\xD0\xC5\xCF\xA2", 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, 42, SET_ROW_H, (const uint8_t*)"\xC0\xB6\xD1\xC0\xC9\xE8\xD6\xC3", LCD_ALIGN_LEFT, WHITE, BLACK, 13, LCD_ALIGN_CENTER, WHITE, BLACK, 11, GUI_BLUETOOTH_SW},
{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}, {SET_ROW_X, SET_ROW_W, 88, 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},
{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, 134, 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]);
@ -164,52 +47,57 @@ void DrawSystemSetting(void)
} }
// ============================== // ==============================
// <EFBFBD><EFBFBD><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)FLAG; (void)areaIndex;
if (ID == GUI_NAV_BAR)
if(ID == 0)
{ {
MenuPage_SystemSetting_Proc(); switch (value)
{
case UI0902_NAV_SETTING: UI_GotoCurrentModePage(); break; /* 返回当前模式页 */
case UI0902_NAV_MIXER: MenuPage_Mixer_Proc(); break;
case UI0902_NAV_MODE: UI_ReturnToModeSelect(); break;
default: break;
}
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], 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*)"\xC9\xE8\xD6\xC3", LCD_ALIGN_CENTER, WHITE, UI0902_BG_COLOR, 0, 16);
DrawSystemSetting(); DrawSystemSetting();
Draw_Bottom_Bar(UI0902_NAV_NONE, 1);
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 +110,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;
} }
} }

View File

@ -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

View File

@ -105,7 +105,7 @@ void Draw_Tab_Mode_Menu(const LEBEL_UI *UI, GUI_SWITCH *Group)
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 +298,17 @@ 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)
{
switch(value)
{
case UI0902_NAV_SETTING: MenuPage_Setting_Proc(); break;
case UI0902_NAV_MIXER: MenuPage_Mixer_Proc(); break;
case UI0902_NAV_MODE: UI_ReturnToModeSelect(); break;
default: break;
}
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 +418,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(55, 3, msg.HiByte, 1, WHITE, GRAY);
break; break;
case MSG_ID_TAP_SPEED: case MSG_ID_TAP_SPEED:

View File

@ -177,8 +177,9 @@ void label_top()
{ {
const uint16_t btn_color = /*DARKLGRAY*/0x2988; // 深灰<E6B7B1>????? const uint16_t btn_color = /*DARKLGRAY*/0x2988; // 深灰<E6B7B1>?????
//LCD_FillByColor(0,0,240,25,BLACK); //LCD_FillByColor(0,0,240,25,BLACK);
//LCD_WR_PIC(5,0,12,20,gImage_bar); LCD_FillByColor(0, 0, 240, UI_STATUS_BAR_H, UI0902_BG_COLOR);
Draw_Volume_Bar(8, 5, level, 1, WHITE, GRAY); LCD_WR_PIC_Trans(8, 6, 20, 15, gImage_UI0902_Volume_20x15, BLACK);
Draw_Volume_Bar(55, 3, 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 +222,54 @@ 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) if(value)
{ {
LCD_WR_PIC(110,5,12,20,gImage_bl); LCD_WR_PIC_Trans(36, 5, 11, 17, gImage_UI0902_Bluetooth_11x17, BLACK);
} }
else else
{ {
LCD_WR_PIC(110,5,12,18,gImage_bl0); LCD_FillByColor(36, 5, 47, 22, UI0902_BG_COLOR);
} }
BSP_BlueToothPowerEnable (value); BSP_BlueToothPowerEnable (value);
} }
void Draw_Status_Battery_Icon(uint8_t battery_percent) void Draw_Status_Battery_Icon(uint8_t battery_percent)
{ {
/* 需求图:状态栏电池始终为白色(含 USB 充电连接时) */ uint16_t fill_w;
Draw_Battery_Icon(UI_STATUS_BATTERY_X, UI_STATUS_BATTERY_Y, if (battery_percent > 100) battery_percent = 100;
battery_percent, 1, WHITE, BLACK, WHITE); LCD_FillByColor(UI0902_BATTERY_X, UI0902_BATTERY_Y,
UI0902_BATTERY_X + 29, UI0902_BATTERY_Y + 12, UI0902_BG_COLOR);
fill_w = (uint16_t)((22UL * battery_percent) / 100);
LCD_WR_PIC_ClipX(UI0902_BATTERY_X + 3, UI0902_BATTERY_Y + 2, 22, 9, fill_w,
gImage_UI0902_BatteryFill_22x9);
LCD_WR_PIC_Trans(UI0902_BATTERY_X, UI0902_BATTERY_Y, 29, 12,
gImage_UI0902_BatteryOutline_29x12, BLACK);
} }
void Show_Battery_Icon(uint8_t flag) void Show_Battery_Icon(uint8_t flag)
@ -657,70 +687,35 @@ void label_PlaySection_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
Draw_Tab_Section_Menu(UI,(TAB_SECTION_INDEX)Group->Current); Draw_Tab_Section_Menu(UI,(TAB_SECTION_INDEX)Group->Current);
} }
void Draw_Bottom_Bar(uint8_t sel, uint8_t first_back)
{
const uint8_t *icon0;
const uint8_t *icon1;
const uint8_t *icon2;
uint8_t w0, w1, w2, h0, h1, h2;
LCD_FillByColor(0, 275, 240, 320, UI0902_BG_COLOR);
if (first_back) { icon0 = gImage_UI0902_TabBack_Not_18x28; w0 = 18; h0 = 28; }
else if (sel == 0) { icon0 = gImage_UI0902_TabSetting_Sel_36x28; w0 = 36; h0 = 28; }
else { icon0 = gImage_UI0902_TabSetting_Not_35x28; w0 = 35; h0 = 28; }
if (sel == 1) { icon1 = gImage_UI0902_TabMixer_Sel_35x27; w1 = 35; h1 = 27; }
else { icon1 = gImage_UI0902_TabMixer_Not_18x28; w1 = 18; h1 = 28; }
if (sel == 2) { icon2 = gImage_UI0902_TabMode_Sel_36x28; w2 = 36; h2 = 28; }
else { icon2 = gImage_UI0902_TabMode_Not_35x29; w2 = 35; h2 = 29; }
LCD_WR_PIC_Trans(40 - w0 / 2, 288, w0, h0, icon0, BLACK);
LCD_WR_PIC_Trans(120 - w1 / 2, 288, w1, h1, icon1, BLACK);
LCD_WR_PIC_Trans(200 - w2 / 2, 288, w2, h2, icon2, BLACK);
}
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); (void)UI;
// 统一坐标(严格居中) (void)Group;
uint16_t x1 = 10; Draw_Bottom_Bar(UI0902_NAV_NONE, 0);
uint16_t x2 = 10+40+20;
uint16_t x3 = 10+40+20+40+20;
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: // 歌曲选中
//LCD_WR_PIC(x1, 268+5,30,22,gImage_NormalMode_notSelect);
LCD_WR_PIC(x1, Icon_Y,30,22,gImage_FreeMode_notSelect);
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;
}
} }
@ -939,37 +934,46 @@ 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 + 10;
LCD_FillRoundRectGradient( uint16_t val_x1 = UI->x + 120;
UI->x, UI->y, 220, UI->h, 5, uint16_t val_x2 = UI->x + 190;
c_top, c_bot
); if (UI_IsFocused(Group->Id))
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); {
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+7, 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); LCD_ShowString_AutoAlign_Gradient(val_x1, val_x2, text_y+1,(const uint8_t*)Info,LCD_ALIGN_RIGHT, GRAY,c_top, c_bot,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, 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_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(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); LCD_ShowChinese_AutoAlign_Gradient(val_x1, val_x2, text_y+1,(const uint8_t*)"\xBF\xAA",LCD_ALIGN_RIGHT, GRAY,c_top, c_bot,11);
}else }else
{ {
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); LCD_ShowChinese_AutoAlign_Gradient(val_x1, val_x2, text_y+1,(const uint8_t*)"\xB9\xD8",LCD_ALIGN_RIGHT, GRAY,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, 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;
@ -980,26 +984,20 @@ void Draw_System_Item_List(const LEBEL_UI *UI, GUI_SWITCH *Group)
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, val_x2-28, text_y+1, (const uint8_t*)Info, LCD_ALIGN_RIGHT, GRAY, 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-26, val_x2, text_y+1, (const uint8_t*)"\xB7\xD6\xD6\xD3", LCD_ALIGN_RIGHT, GRAY, 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, val_x2, text_y+1,(uint8_t*)"\xB9\xD8",LCD_ALIGN_RIGHT, GRAY, c_top, c_bot, 11);
} }
if(nvm->param.AutoCloseTime != Group->Current)
{
nvm->param.AutoCloseTime = Group->Current; 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+6, 13, 21, UI0902_ICON_SYS_RESTORE_ADDR);
LCD_DrawChevron_Right(UI->x+100+95, UI->y+30, 15, 3, WHITE);
break;
default:
break; break;
default: break;
} }
/* 右侧箭头 */
LCD_WR_PIC_FROM_FLASH_Trans(UI->x+197, UI->y+8, 10, 18, UI0902_ICON_CHEVRON_ADDR);
} }

View File

@ -28,6 +28,15 @@ void CallUI_RestoreSelect(void);
#define UI_STATUS_BAR_H 26 #define UI_STATUS_BAR_H 26
/* 0902 设计稿配色与底栏导航 */
#define UI0902_BG_COLOR 0x0042 /* #000813 页面背景 */
#define UI0902_ROW_BG 0x2147 /* #242B3A 列表行背景 */
#define UI0902_BATTERY_X 203
#define UI0902_BATTERY_Y 7
#define UI0902_NAV_SETTING 0 /* 底栏位0设置设置页内为返回 */
#define UI0902_NAV_MIXER 1 /* 底栏位1调音台 */
#define UI0902_NAV_MODE 2 /* 底栏位2模式选择 */
#define UI0902_NAV_NONE 0xFF
/* 电量组在 Draw_Battery_Icon 内按右对齐重算;此值为允许的最左起点 */ /* 电量组在 Draw_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
@ -45,6 +54,8 @@ 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 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);

View File

@ -221,6 +221,42 @@ 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读小图到RAM后透明显示跳过近黑像素仅用于 <=4KB 小图 */
#define PIC_TRANS_BUF_SIZE 4096
void LCD_WR_PIC_FROM_FLASH_Trans(uint16_t x, uint16_t y, uint16_t length, uint16_t width, uint32_t flash_addr)
{
static uint8_t s_trans_buf[PIC_TRANS_BUF_SIZE];
uint32_t total_bytes = (uint32_t)length * width * 2;
uint32_t i;
if (total_bytes == 0 || total_bytes > PIC_TRANS_BUF_SIZE) return;
W25Q128_Read(s_trans_buf, flash_addr, (uint16_t)total_bytes);
for (i = 0; i < total_bytes / 2; i++)
{
uint16_t c = (uint16_t)((s_trans_buf[i * 2] << 8) | s_trans_buf[i * 2 + 1]);
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 + (i % length)), (uint16_t)(y + (i / length)), c);
}
}
/****************************************************************************** /******************************************************************************
xsta,ysta xsta,ysta

View File

@ -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); //在指定位置画一个矩形

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
#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_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];
#endif

View File

@ -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>

View File

@ -0,0 +1,283 @@
#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) /* 37296 bytes */
#define UI0902_ROW_UNIVERSAL_NOT_W 222
#define UI0902_ROW_UNIVERSAL_NOT_H 84
#define UI0902_ROW_UNIVERSAL_SEL_ADDR (UI0902_RES_BASE + 0x00A000UL) /* 37296 bytes */
#define UI0902_ROW_UNIVERSAL_SEL_W 222
#define UI0902_ROW_UNIVERSAL_SEL_H 84
#define UI0902_ROW_NORMAL_NOT_ADDR (UI0902_RES_BASE + 0x014000UL) /* 37296 bytes */
#define UI0902_ROW_NORMAL_NOT_W 222
#define UI0902_ROW_NORMAL_NOT_H 84
#define UI0902_ROW_NORMAL_SEL_ADDR (UI0902_RES_BASE + 0x01E000UL) /* 37296 bytes */
#define UI0902_ROW_NORMAL_SEL_W 222
#define UI0902_ROW_NORMAL_SEL_H 84
#define UI0902_ROW_EXPERT_NOT_ADDR (UI0902_RES_BASE + 0x028000UL) /* 37296 bytes */
#define UI0902_ROW_EXPERT_NOT_W 222
#define UI0902_ROW_EXPERT_NOT_H 84
#define UI0902_ROW_EXPERT_SEL_ADDR (UI0902_RES_BASE + 0x032000UL) /* 37296 bytes */
#define UI0902_ROW_EXPERT_SEL_W 222
#define UI0902_ROW_EXPERT_SEL_H 84
#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_BTN_CANCEL_BIG_ADDR (UI0902_RES_BASE + 0x086000UL) /* 11872 bytes */
#define UI0902_BTN_CANCEL_BIG_W 106
#define UI0902_BTN_CANCEL_BIG_H 56
#endif

View File

@ -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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 915 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 893 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Some files were not shown because too many files have changed in this diff Show More