989 lines
33 KiB
C
989 lines
33 KiB
C
#include "includes.h"
|
||
|
||
extern uint8_t level;
|
||
|
||
// ==============================================
|
||
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD>붨<EFBFBD><EBB6A8>
|
||
// ==============================================
|
||
void (*MenuPage_Idle_Proc)(void);
|
||
void (*MenuPage_SongMode_Proc)(void);
|
||
void (*MenuPage_ExpertMode_Proc)(void);
|
||
void (*MenuPage_FreeMode_Proc)(void);
|
||
void (*MenuPage_Setting_Proc)(void);
|
||
void (*MenuPage_SystemSetting_Proc)(void);
|
||
void (*MenuPage_Mixer_Proc)(void);
|
||
void (*MenuPage_Restore_Proc)(void);
|
||
|
||
// ==============================================
|
||
// <20><>ʼ<EFBFBD><CABC><EFBFBD>˵<EFBFBD>UI
|
||
// ==============================================
|
||
void InitMenuUI(void) {
|
||
MenuPage_Idle_Proc = CallUI_Idle; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
MenuPage_SongMode_Proc = CallUI_SongMode; // <20><><EFBFBD><EFBFBD>ģʽ
|
||
MenuPage_ExpertMode_Proc = CallUI_ExpertMode; // ר<><D7A8>ģʽ
|
||
MenuPage_FreeMode_Proc = CallUI_FreeMode; // <20><><EFBFBD><EFBFBD>ģʽ
|
||
MenuPage_Setting_Proc = CallUI_Setting; // <20><><EFBFBD><EFBFBD>
|
||
MenuPage_SystemSetting_Proc = CallUI_SystemSetting; // ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
||
MenuPage_Mixer_Proc = CallUI_Mixer; //<2F><><EFBFBD><EFBFBD>̨
|
||
MenuPage_Restore_Proc = CallUI_RestoreSelect;
|
||
}
|
||
|
||
// ==============================================
|
||
// <20><><EFBFBD><EFBFBD> UI <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
||
// ==============================================
|
||
void CallUI_Idle(void) {
|
||
CurrUIProcress = IdleProcess;
|
||
app_log_set_ui_page("Idle");
|
||
LOG_I("UI", "page Idle");
|
||
}
|
||
|
||
void CallUI_SongMode(void) {
|
||
UI_SongMode_Init();
|
||
CurrUIProcress = UI_SongMode_Process;
|
||
app_log_set_ui_page("Song");
|
||
LOG_I("UI", "page SongMode tab=%u", (unsigned)mGuiData[GUI_TAB_INDEX].Current);
|
||
}
|
||
|
||
void CallUI_ExpertMode(void) {
|
||
UI_ExpertMode_Init();
|
||
// CurrUIProcress = UI_ExpertMode_Process;
|
||
CurrUIProcress = UI_SongMode_Process;
|
||
app_log_set_ui_page("Expert");
|
||
LOG_I("UI", "page ExpertMode");
|
||
}
|
||
|
||
void CallUI_FreeMode(void) {
|
||
UI_FreeMode_Init();
|
||
// CurrUIProcress = UI_FreeMode_Process;
|
||
CurrUIProcress = UI_SongMode_Process;
|
||
app_log_set_ui_page("Free");
|
||
LOG_I("UI", "page FreeMode");
|
||
}
|
||
|
||
void CallUI_Setting(void) {
|
||
CurrUIProcress = UI_Setting_Process;
|
||
UI_Setting_Init();
|
||
app_log_set_ui_page("Setting");
|
||
LOG_I("UI", "page Setting");
|
||
}
|
||
|
||
void CallUI_Mixer(void) {
|
||
CurrUIProcress = UI_Mixer_Process;
|
||
UI_Mixer_Init();
|
||
app_log_set_ui_page("Mixer");
|
||
LOG_I("UI", "page Mixer");
|
||
}
|
||
|
||
void CallUI_SystemSetting(void) {
|
||
CurrUIProcress = UI_SystemSet_Process;
|
||
UI_SystemSet_Init();
|
||
app_log_set_ui_page("SysSet");
|
||
LOG_I("UI", "page SystemSetting");
|
||
}
|
||
|
||
void CallUI_RestoreSelect(void) {
|
||
CurrUIProcress = UI_Restore_Select_Process;
|
||
UI_Restore_Select_Init();
|
||
app_log_set_ui_page("Restore");
|
||
LOG_I("UI", "page Restore");
|
||
}
|
||
|
||
static uint8_t s_ui_focus_id = UI_FOCUS_NONE;
|
||
|
||
static uint8_t UI_NormalizeFocusId(uint8_t widget_id)
|
||
{
|
||
if (widget_id == GUI_AUTOBAND_SW)
|
||
return GUI_MODE_PARAM;
|
||
return widget_id;
|
||
}
|
||
|
||
static void UI_RedrawWidget(uint8_t id)
|
||
{
|
||
if (CurrUIProcress == UI_SongMode_Process)
|
||
{
|
||
switch (id)
|
||
{
|
||
case GUI_TRANSPOSE:
|
||
label_Tranzpose_ui(&UI_Label[GUI_TRANSPOSE], &mGuiData[GUI_TRANSPOSE]);
|
||
break;
|
||
case GUI_SPEED:
|
||
label_Speed_ui(&UI_Label[GUI_SPEED], &mGuiData[GUI_SPEED]);
|
||
break;
|
||
case GUI_MODE_PARAM:
|
||
label_ModeSelece_ui(&UI_Label[GUI_MODE_PARAM], &mGuiData[GUI_MODE_PARAM]);
|
||
break;
|
||
case GUI_TIMBRE_SELECT:
|
||
label_TimbreSelece_ui(&UI_Label[GUI_TIMBRE_SELECT], &mGuiData[GUI_TIMBRE_SELECT]);
|
||
break;
|
||
case GUI_PLAY_SECTION:
|
||
label_PlaySection_ui(&UI_Label[GUI_PLAY_SECTION], &mGuiData[GUI_PLAY_SECTION]);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
else if (CurrUIProcress == UI_Setting_Process)
|
||
{
|
||
if (id <= GUI_RESTORE)
|
||
Draw_System_Item_List(&SystemSetting[id], &mGuiData_SystemSETTING[id]);
|
||
}
|
||
}
|
||
|
||
void UI_ClearFocus(void)
|
||
{
|
||
s_ui_focus_id = UI_FOCUS_NONE;
|
||
}
|
||
|
||
uint8_t UI_IsFocused(uint8_t widget_id)
|
||
{
|
||
return (s_ui_focus_id == UI_NormalizeFocusId(widget_id)) ? 1 : 0;
|
||
}
|
||
|
||
void UI_GetFocusGrad(uint8_t widget_id, uint16_t *c_top, uint16_t *c_bot)
|
||
{
|
||
if (UI_IsFocused(widget_id))
|
||
{
|
||
*c_top = START_COLOR;
|
||
*c_bot = END_COLOR;
|
||
}
|
||
else
|
||
{
|
||
*c_top = COLOR_NORMAL_BG;
|
||
*c_bot = COLOR_NORMAL_BG;
|
||
}
|
||
}
|
||
|
||
uint8_t UI_SetFocus(uint8_t widget_id)
|
||
{
|
||
uint8_t prev = s_ui_focus_id;
|
||
widget_id = UI_NormalizeFocusId(widget_id);
|
||
if (prev == widget_id)
|
||
return 0;
|
||
s_ui_focus_id = widget_id;
|
||
if (prev != UI_FOCUS_NONE)
|
||
UI_RedrawWidget(prev);
|
||
if (widget_id != UI_FOCUS_NONE)
|
||
UI_RedrawWidget(widget_id);
|
||
return 1;
|
||
}
|
||
|
||
void label_top()
|
||
{
|
||
const uint16_t btn_color = /*DARKLGRAY*/0x2988; // 深灰<E6B7B1>?????
|
||
//LCD_FillByColor(0,0,240,25,BLACK);
|
||
//LCD_WR_PIC(5,0,12,20,gImage_bar);
|
||
Draw_Volume_Bar(8, 5, level, 1, WHITE, GRAY);
|
||
LCD_DrawLine(0, 26, 240, 26, btn_color);
|
||
Show_BL_Icon(mGuiData[GUI_BL_SW].Current);
|
||
Show_Battery_Icon(usb_charging_state);
|
||
}
|
||
|
||
/* 小节选择刷新(占位,实际绘制在 UI_SongMode 内部) */
|
||
void Refresh_SectionSelect(uint16_t last_value, const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||
{
|
||
Draw_Tab_Section_Menu(UI,(TAB_SECTION_INDEX)Group->Current);
|
||
}
|
||
|
||
/* TAB 选择刷新(占位) */
|
||
void Refresh_TabSelect_ui(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||
{
|
||
switch(Group->Current)
|
||
{
|
||
case 0:
|
||
MenuPage_SongMode_Proc();
|
||
break;
|
||
case 1:
|
||
MenuPage_ExpertMode_Proc();
|
||
break;
|
||
case 2:
|
||
MenuPage_FreeMode_Proc();
|
||
break;
|
||
case 3:
|
||
MenuPage_SystemSetting_Proc();
|
||
break;
|
||
}
|
||
}
|
||
|
||
/* 蓝牙图标显示(占位) */
|
||
void Show_BL_Icon(uint8_t value)
|
||
{
|
||
if(value)
|
||
{
|
||
LCD_WR_PIC(110,5,12,20,gImage_bl);
|
||
}
|
||
else
|
||
{
|
||
LCD_WR_PIC(110,5,12,18,gImage_bl0);
|
||
}
|
||
BSP_BlueToothPowerEnable (value);
|
||
}
|
||
|
||
void Draw_Status_Battery_Icon(uint8_t battery_percent)
|
||
{
|
||
/* 需求图:状态栏电池始终为白色(含 USB 充电连接时) */
|
||
Draw_Battery_Icon(UI_STATUS_BATTERY_X, UI_STATUS_BATTERY_Y,
|
||
battery_percent, 1, WHITE, BLACK, WHITE);
|
||
}
|
||
|
||
void Show_Battery_Icon(uint8_t flag)
|
||
{
|
||
(void)flag;
|
||
Draw_Status_Battery_Icon(percentage);
|
||
}
|
||
|
||
|
||
void show_Param(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||
{
|
||
char Textstr_new[40] = {0};
|
||
char NumBuf[8] = {0};
|
||
uint16_t text_y = UI->y + 25+5+5;
|
||
uint8_t idx = Group->Current + 1;
|
||
uint16_t c_top, c_bot;
|
||
|
||
UI_GetFocusGrad(GUI_MODE_PARAM, &c_top, &c_bot);
|
||
|
||
LCD_FillRoundRectGradient(
|
||
UI->x+25, UI->y+20+5,
|
||
UI->x + UI->w-40-(UI->x+25),
|
||
UI->h-20,
|
||
0,
|
||
c_top, c_bot
|
||
);
|
||
|
||
// 拼接序号 1. 2. 3.
|
||
sprintf(NumBuf, "%d.", idx);
|
||
// 计算数字宽度
|
||
uint16_t num_w = (strlen(NumBuf)) * (UI->Text_size / 2);
|
||
// 获取音色中文
|
||
GET_ParamNum_Str(Group->Current, 0, Textstr_new, Group->Id);
|
||
uint32_t string_start_x = LCD_ShowMixedString(UI->x+10, UI->x + UI->w, text_y, (uint8_t *)Textstr_new , LCD_ALIGN_CENTER, WHITE, BLACK, UI->Text_size, 1);
|
||
//序号X = 中文起点 - 数字宽度 - 5,间<EFBC8C>?像素
|
||
uint16_t num_x = string_start_x - num_w;
|
||
// 绘制左侧数字序号
|
||
LCD_ShowString(num_x, text_y, (const uint8_t *)NumBuf, UI->Text_fc, UI->Text_bc, UI->Text_size, 1);
|
||
}
|
||
|
||
|
||
//void Refresh_Transpose(uint8_t last_data,const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||
//{
|
||
// LCD_FillRoundRectGradient(
|
||
// UI->x+30,
|
||
// UI->y + 20,
|
||
// 25 + 10+10+5,
|
||
// 20,
|
||
// 0,
|
||
// START_COLOR, END_COLOR
|
||
// );
|
||
// char Textstr1[20] = {0,};
|
||
// GET_Num_Str(Group->Current,0,Textstr1,Group->Id);
|
||
//
|
||
// LCD_ShowString_AutoAlign_Gradient(
|
||
// UI->x, // 坐标<E59D90>?
|
||
// UI->x+UI->w,
|
||
// UI->y + 17,
|
||
// (const uint8_t*)Textstr1,
|
||
// UI->Text_Align,
|
||
// UI->Text_fc,
|
||
// START_COLOR,
|
||
// END_COLOR,
|
||
// UI->Text_size
|
||
// );
|
||
//}
|
||
|
||
void Refresh_Transpose(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||
{
|
||
uint16_t c_top, c_bot;
|
||
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
||
LCD_FillRoundRectGradient(
|
||
UI->x+30,
|
||
UI->y + 20,
|
||
25 + 10+10+5,
|
||
20,
|
||
0,
|
||
c_top, c_bot
|
||
);
|
||
char Textstr1[20] = {0,};
|
||
GET_Num_Str(Group->Current,0,Textstr1,Group->Id);
|
||
|
||
LCD_ShowString_AutoAlign_Gradient(
|
||
UI->x, // 坐标
|
||
UI->x+UI->w,
|
||
UI->y + 17,
|
||
(const uint8_t*)Textstr1,
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
c_top,
|
||
c_bot,
|
||
UI->Text_size
|
||
);
|
||
}
|
||
|
||
|
||
void Refresh_StringTimbre(uint8_t last_data,const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||
{
|
||
uint16_t c_top, c_bot;
|
||
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
||
LCD_FillRoundRectGradient(
|
||
UI->x + 40,
|
||
UI->y + 25,
|
||
UI->x + UI->w - 40 - (UI->x + 40),
|
||
UI->y + 25 + UI->Text_size + 5 -(UI->y + 25),
|
||
0,
|
||
c_top, c_bot
|
||
);
|
||
char Textstr1[20] = {0,};
|
||
char NumBuf[8] = {0};
|
||
uint8_t idx = Group->Current + 1;
|
||
uint16_t text_y = UI->y + 25;
|
||
// 拼接ASCII序号字符串:1. 2. 3. ...
|
||
sprintf(NumBuf, "%d.", idx);
|
||
// 计算数字总像素宽<E7B4A0>?
|
||
uint16_t num_w = (strlen(NumBuf)) * (UI->Text_size / 2);
|
||
// 获取音色中文
|
||
GET_Num_Str(Group->Current,0,Textstr1,Group->Id);
|
||
// 先调用获取中文实际绘制起始X坐标
|
||
uint32_t chinese_start_x = LCD_ShowChinese_AutoAlign(
|
||
UI->x + num_w,
|
||
UI->x + UI->w,
|
||
text_y + 3,
|
||
(const uint8_t*)Textstr1,
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
UI->Text_bc,
|
||
1,
|
||
UI->Text_size
|
||
);
|
||
// 序号X = 中文起点 - 数字宽度 - 10,向左偏<E5B7A6>?0像素紧贴文字
|
||
uint16_t num_x = chinese_start_x - num_w - 5;
|
||
// 绘制序号
|
||
LCD_ShowString(num_x, text_y + 3 , (const uint8_t *)NumBuf, UI->Text_fc, UI->Text_bc, UI->Text_size, 1);
|
||
switch(Group->Id)
|
||
{
|
||
case GUI_TIMBRE_SELECT:
|
||
{
|
||
uint8_t AllNoteOff_buff[3] = {0xB0,0x7B,0x00};
|
||
SendMidiDataToDreamDSP(AllNoteOff_buff,sizeof(AllNoteOff_buff));
|
||
SendProgramChangeMidiEvent(0,Timbre_index[Group->Current]);
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void Refresh_ModeSelect(uint8_t last_data, const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||
{
|
||
Draw_Tab_Mode_Menu(UI,Group);
|
||
}
|
||
|
||
void Refresh_Mode1Select(uint8_t last_data, LEBEL_UI *UI, GUI_SWITCH *Group)
|
||
{
|
||
char Textstr1[20] = {0};
|
||
char Textstr2[20] = {0};
|
||
GUI_SWITCH *pCurData =NULL;
|
||
// 重点:根<EFBC9A>?当前选中的模式(2/3/4)找到<E689BE>?<3F>应数据结构<E7BB93>?
|
||
switch(mGuiData[GUI_TAB_INDEX].Current)
|
||
{
|
||
case 0: pCurData = &ParamGuiData[SONG_MODE_PARAM]; break; // 歌曲
|
||
case 1: pCurData = &ParamGuiData[EXPRESS_MODE_PARAM]; break; // 专家
|
||
case 2: pCurData = &ParamGuiData[ALL_MODE_PARAM]; break; // 万能
|
||
//default: pCurData = &mGuiData[GUI_MODE1_SELECT];
|
||
}
|
||
// 清除旧数字(清除的是旧值,不是当前值)
|
||
GET_ParamNum_Str(last_data, 0, Textstr1, pCurData->Id);
|
||
LCD_ClearString_AutoAlign(
|
||
UI->x, UI->x + UI->w,
|
||
UI->y + 25,
|
||
(const uint8_t*)Textstr1,
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
UI->Text_bc,
|
||
0, UI->Text_size
|
||
);
|
||
// 显示当前选中模式的真实数<E5AE9E>?
|
||
GET_ParamNum_Str(pCurData->Current, 0, Textstr2, pCurData->Id);
|
||
LCD_ShowString_AutoAlign(
|
||
UI->x, UI->x + UI->w,
|
||
UI->y + 25,
|
||
(const uint8_t*)Textstr2,
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
UI->Text_bc,
|
||
0, UI->Text_size
|
||
);
|
||
}
|
||
|
||
|
||
void label_Tranzpose_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||
{
|
||
uint8_t Textstr[20] = {0};
|
||
uint16_t c_top, c_bot;
|
||
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
||
|
||
LCD_FillRoundRectGradient(
|
||
UI->x,
|
||
UI->y,
|
||
UI->w,
|
||
UI->h,
|
||
10,
|
||
c_top,
|
||
c_bot
|
||
);
|
||
LCD_ShowChinese_AutoAlign_Gradient(
|
||
UI->x,
|
||
UI->x+UI->w,
|
||
UI->y+5,
|
||
UI->p,
|
||
UI->Tab_Align,
|
||
UI->Tab_fc,
|
||
c_top,
|
||
c_bot,
|
||
UI->Tab_size
|
||
);
|
||
LCD_DrawArrow_Left(UI->x+10+5+5, UI->y+UI->h-20, 12, WHITE, c_top);
|
||
LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-20, 12, WHITE, c_top);
|
||
GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id);
|
||
LCD_ShowString_AutoAlign_Gradient(
|
||
UI->x,
|
||
UI->x+UI->w,
|
||
UI->y + 17,
|
||
Textstr,
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
c_top,
|
||
c_bot,
|
||
UI->Text_size
|
||
);
|
||
LCD_ShowString_AutoAlign_Gradient(
|
||
UI->x,
|
||
UI->x+UI->w,
|
||
UI->y + 17+25,
|
||
(const uint8_t*)"KEY",
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
c_top,
|
||
c_bot,
|
||
12
|
||
);
|
||
}
|
||
void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||
{
|
||
uint8_t Textstr[20] = {0};
|
||
uint16_t c_top, c_bot;
|
||
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
||
LCD_FillRoundRectGradient(
|
||
UI->x,
|
||
UI->y,
|
||
UI->w,
|
||
UI->h,
|
||
10,
|
||
c_top, c_bot
|
||
);
|
||
LCD_ShowChinese_AutoAlign_Gradient(
|
||
UI->x,
|
||
UI->x+UI->w,
|
||
UI->y+5,
|
||
UI->p,
|
||
UI->Tab_Align,
|
||
UI->Tab_fc,
|
||
c_top,
|
||
c_bot,
|
||
UI->Tab_size
|
||
);
|
||
LCD_DrawMinus_RoundBox(UI->x+10+5+5, UI->y+UI->h-20, 30,5, WHITE, c_top);
|
||
LCD_DrawPlus_RoundBox(UI->x+UI->w+10-25-5, UI->y+UI->h-20, 30,5, WHITE, c_top);
|
||
GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id);
|
||
LCD_ShowString_AutoAlign_Gradient(
|
||
UI->x,
|
||
UI->x+UI->w,
|
||
UI->y + 17,
|
||
Textstr,
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
c_top,
|
||
c_bot,
|
||
UI->Text_size
|
||
);
|
||
LCD_ShowString_AutoAlign_Gradient(
|
||
UI->x,
|
||
UI->x+UI->w,
|
||
UI->y + 17+25,
|
||
(const uint8_t*)"BPM",
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
c_top,
|
||
c_bot,
|
||
12
|
||
);
|
||
}
|
||
// <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>ʾ
|
||
void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||
{
|
||
char *str;
|
||
GUI_SWITCH *paramCurData = NULL;
|
||
uint16_t c_top, c_bot;
|
||
UI_GetFocusGrad(GUI_MODE_PARAM, &c_top, &c_bot);
|
||
switch(mGuiData[GUI_TAB_INDEX].Current)
|
||
{
|
||
case 0: paramCurData = &ParamGuiData[SONG_MODE_PARAM]; break;
|
||
case 1: paramCurData = &ParamGuiData[EXPRESS_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);
|
||
switch(mGuiData[GUI_TAB_INDEX].Current) {
|
||
case 0:case 1:
|
||
Draw_Tab_Mode_Menu(UI, &mGuiData[GUI_AUTOBAND_SW]);
|
||
break;
|
||
case 2:
|
||
str = (char*)"\xBA\xCD\xCF\xD2\xD7\xDF\xCF\xF2";
|
||
LCD_ShowChinese_AutoAlign(
|
||
UI->x, UI->x+UI->w, UI->y+5+5,
|
||
(uint8_t *)str, UI->Tab_Align, UI->Tab_fc, BLACK, 0, UI->Tab_size
|
||
);
|
||
break;
|
||
}
|
||
switch(mGuiData[GUI_TAB_INDEX].Current)
|
||
{
|
||
case 0: case 1:
|
||
if(mGuiData[GUI_AUTOBAND_SW].Current)
|
||
{
|
||
paramCurData = &ParamGuiData[EXPRESS_MODE_PARAM];
|
||
}else
|
||
{
|
||
paramCurData = &ParamGuiData[SONG_MODE_PARAM];
|
||
}
|
||
break;
|
||
case 2: paramCurData = &ParamGuiData[ALL_MODE_PARAM]; break;
|
||
}
|
||
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);
|
||
}
|
||
|
||
void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
||
{
|
||
uint8_t Textstr[20] = {0};
|
||
char NumBuf[8] = {0};
|
||
uint16_t text_y = UI->y + 25;
|
||
uint8_t idx = mGuiData[UI->Id].Current + 1;
|
||
uint16_t c_top, c_bot;
|
||
UI_GetFocusGrad(UI->Id, &c_top, &c_bot);
|
||
LCD_FillRoundRectGradient(
|
||
UI->x,
|
||
UI->y+20,
|
||
UI->w,
|
||
UI->h-20,
|
||
10,
|
||
c_top, c_bot
|
||
);
|
||
LCD_ShowChinese_AutoAlign(
|
||
UI->x,
|
||
UI->x+UI->w,
|
||
UI->y+5,
|
||
UI->p,
|
||
UI->Tab_Align,
|
||
UI->Tab_fc,
|
||
BLACK,
|
||
0,
|
||
UI->Tab_size
|
||
);
|
||
LCD_DrawArrow_Left(UI->x+10+5+5, UI->y+UI->h-20+3, 12, WHITE, c_top);
|
||
LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-20+3, 12, WHITE, c_top);
|
||
LCD_FillRoundRectGradient(
|
||
UI->x + 40,
|
||
UI->y+20,
|
||
UI->x + UI->w - 40 - UI->x - 40 ,
|
||
UI->h-20,
|
||
0,
|
||
c_top, c_bot
|
||
);
|
||
sprintf(NumBuf, "%d.", idx);
|
||
uint16_t num_w = (strlen(NumBuf)) * (UI->Text_size / 2);
|
||
GET_Num_Str(mGuiData[UI->Id].Current, 0, (char*)Textstr, UI->Id);
|
||
uint32_t chinese_start_x = LCD_ShowChinese_AutoAlign_Gradient(
|
||
UI->x + num_w,
|
||
UI->x + UI->w,
|
||
text_y+3,
|
||
(const uint8_t*)Textstr,
|
||
UI->Text_Align,
|
||
UI->Text_fc,
|
||
c_top, c_bot,
|
||
UI->Text_size
|
||
);
|
||
uint16_t num_x = chinese_start_x - num_w - 5;
|
||
LCD_ShowString_AutoAlign_Gradient(num_x, num_x + num_w, text_y+3,
|
||
(const uint8_t *)NumBuf, LCD_ALIGN_LEFT, UI->Text_fc,
|
||
c_top, c_bot, UI->Text_size);
|
||
switch(Group->Id)
|
||
{
|
||
case GUI_TIMBRE_SELECT:
|
||
SendProgramChangeMidiEvent(0,Timbre_index[Group->Current]);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
void label_PlaySection_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||
{
|
||
// 显示<E698BE>?<3F>?
|
||
LCD_ShowChinese_AutoAlign(
|
||
UI->x, // 坐标<E59D90>?
|
||
UI->x+UI->w,
|
||
UI->y+5,
|
||
UI->p,
|
||
UI->Tab_Align,
|
||
UI->Tab_fc,
|
||
UI->Tab_bc,
|
||
0,
|
||
UI->Tab_size
|
||
);
|
||
Draw_Tab_Section_Menu(UI,(TAB_SECTION_INDEX)Group->Current);
|
||
}
|
||
|
||
void label_Tab_Select_ui(const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||
{
|
||
LCD_FillRoundRect(0,275,240,75,15,BLACK);
|
||
// 统一坐标(严格居中)
|
||
uint16_t x1 = 10;
|
||
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;
|
||
}
|
||
}
|
||
|
||
|
||
void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab)
|
||
{
|
||
const uint16_t tab_w = 50;
|
||
const uint16_t tab_h = 24 + 11;
|
||
const uint8_t tab_r = 5;
|
||
const uint8_t space = 3;
|
||
const uint16_t start_x = UI->x + 10;
|
||
const uint16_t start_y = UI->y + 28 - 6;
|
||
const uint16_t text_y = UI->y + 28 - 3;
|
||
const char *nums[4] = {"1", "2", "3", "4"};
|
||
uint8_t focused = UI_IsFocused(GUI_PLAY_SECTION);
|
||
uint8_t i;
|
||
|
||
for (i = 0; i < 4; i++)
|
||
{
|
||
uint16_t x = start_x + i * (tab_w + space);
|
||
uint16_t bg = (focused && (select_tab == i)) ? COLOR_PRIMARY : COLOR_NORMAL_BG;
|
||
LCD_FillRoundRect(x, start_y, tab_w, tab_h, tab_r, bg);
|
||
LCD_ShowString_AutoAlign(
|
||
x, x + tab_w, text_y,
|
||
(const uint8_t*)nums[i],
|
||
UI->Text_Align,
|
||
WHITE,
|
||
bg,
|
||
0,
|
||
24
|
||
);
|
||
}
|
||
}
|
||
|
||
|
||
void GET_ParamNum_Str(int16_t NUM, uint8_t ValidLen, char* Str, uint8_t hasSign)
|
||
{
|
||
// int16_t Value;
|
||
switch(hasSign)
|
||
{
|
||
case 0:
|
||
switch(NUM)
|
||
{
|
||
case 0: strcpy(Str,"\xBC\xAA\xCB\xFB\xBE\xAD\xB5\xE4\xB7\xD6\xBD\xE2 4-4\0"); break; // 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>4-4
|
||
case 1: strcpy(Str,"\xBC\xAA\xCB\xFB\xBE\xAD\xB5\xE4\xC9\xA8\xCF\xD2 4-4\0"); break; // 01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>4-4
|
||
case 2: strcpy(Str,"\xB8\xB4\xB9\xC5\xBC\xAA\xCB\xFB\xC1\xF7\xD0\xD0 4-4\0"); break; // 02 <20><><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 3: strcpy(Str,"\xC1\xF7\xD0\xD0\xD2\xA1\xB9\xF6 4-4\0"); break; // 03 <20><><EFBFBD><EFBFBD>ҡ<EFBFBD><D2A1>4-4
|
||
case 4: strcpy(Str,"\xBE\xAD\xB5\xE4\xC7\xE9\xB8\xE8 4-4\0"); break; // 04 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 5: strcpy(Str,"\xC1\xB5\xC8\xCB\xC7\xE9\xB8\xE8 2-4\0"); break; // 05 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2-4
|
||
case 6: strcpy(Str,"\xCC\xF0\xC3\xDB\xC7\xE9\xB8\xE8 4-4\0"); break; // 06 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 7: strcpy(Str,"\xCE\xC2\xC7\xE9 8 \xC5\xC4 4-4\0"); break; // 07 <20><><EFBFBD><EFBFBD>8<EFBFBD><38>4-4
|
||
case 8: strcpy(Str,"\xCE\xC2\xC8\xE1 8 \xC5\xC4 4-4\0"); break; // 08 <20><><EFBFBD><EFBFBD>8<EFBFBD><38>4-4
|
||
case 9: strcpy(Str,"\xCF\xA6\xD1\xF4\xC1\xF7\xD0\xD0 4-4\0"); break; // 09 Ϧ<><CFA6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 10: strcpy(Str,"\xCE\xF7\xB7\xBD\xCA\xEF\xB9\xE2 4-4\0"); break; // 10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 11: strcpy(Str,"\xCE\xC2\xDC\xB0\xC3\xF1\xD2\xA5 4-4\0"); break; // 11 <20><>ܰ<EFBFBD><DCB0>ҥ4-4
|
||
case 12: strcpy(Str,"\xD6\xD0\xCB\xD9\xD2\xA1\xB9\xF6 4-4\0"); break; // 12 <20><><EFBFBD><EFBFBD>ҡ<EFBFBD><D2A1>4-4
|
||
case 13: strcpy(Str,"\xD6\xD0\xCB\xD9\xC7\xE9\xB8\xE8 4-4\0"); break; // 13 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 14: strcpy(Str,"\xCC\xF0\xC3\xC0 8 \xC5\xC4 4-4\0"); break; // 14 <20><><EFBFBD><EFBFBD>8<EFBFBD><38>4-4
|
||
case 15: strcpy(Str,"\xC0\xD6\xB6\xD3 8 \xC5\xC4 4-4\0"); break; // 15 <20>ֶ<EFBFBD>8<EFBFBD><38>4-4
|
||
case 16: strcpy(Str,"8 \xC5\xC4\xBB\xB3\xBE\xC9 4-4\0"); break; // 16 8<>Ļ<EFBFBD><C4BB><EFBFBD>4-4
|
||
case 17: strcpy(Str,"\xCF\xC4\xC8\xD5\xB2\xA8\xC8\xF8 4-4\0"); break; // 17 <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>4-4
|
||
case 18: strcpy(Str,"\xB7\xC5\xBF\xCB\xC2\xC9\xB6\xAF 4-4\0"); break; // 18 <20>ſ<EFBFBD><C5BF>ɶ<EFBFBD>4-4
|
||
case 19: strcpy(Str,"\xB4\xF2\xB0\xF1\xD2\xA1\xB9\xF6\xC0\xD6 4-4\0"); break; // 19 <20><><EFBFBD>ҡ<EFBFBD><D2A1><EFBFBD><EFBFBD>4-4
|
||
case 20: strcpy(Str,"\xC1\xF7\xD0\xD0\xD6\xD0\xCB\xD9\xB5\xAF\xB3\xAA 4-4\0"); break; // 20 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD>4-4
|
||
case 21: strcpy(Str,"\xC8\xF8\xBF\xCB\xCB\xB9 8 \xC5\xC4 4-4\0"); break; // 21 <20><><EFBFBD><EFBFBD>˹8<CBB9><38>4-4
|
||
case 22: strcpy(Str,"\xB8\xD6\xC7\xD9\xC2\xC9\xB6\xAF 4-4\0"); break; // 22 <20><><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD>4-4
|
||
case 23: strcpy(Str,"\xBF\xE1\xEC\xC5\xD0\xF0\xCA\xC2\xC7\xFA 4-4\0"); break; // 23 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 24: strcpy(Str,"\xBF\xEC\xC0\xD6\xC7\xA1\xC7\xA1 4-4\0"); break; // 24 <20><><EFBFBD><EFBFBD>ǡǡ4-4
|
||
case 25: strcpy(Str,"16 \xC5\xC4\xC7\xE9\xB8\xE8 4-4\0"); break; // 25 16<31><36><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 26: strcpy(Str,"\xB1\xEA\xD7\xBC\xD0\xF0\xCA\xC2\xC7\xFA 6-8\0"); break; // 26 <20><><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6-8
|
||
case 27: strcpy(Str,"\xCC\xA8\xCD\xE5\xC1\xF7\xD0\xD0\xC0\xD6 4-4\0"); break; // 27 ̨<><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
case 28: strcpy(Str,"\xB5\xE7\xD3\xB0\xD0\xF0\xCA\xC2 6-8\0"); break; // 28 <20><>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD>6-8
|
||
case 29: strcpy(Str,"\xCA\xA5\xB5\xAE\xD6\xAE\xD2\xB9 3-4\0"); break; // 29 ʥ<><CAA5>֮ҹ3-4
|
||
case 30: strcpy(Str,"\xBC\xAA\xCB\xFB\xB3\xAA\xD7\xF7\xD5\xDF 4-4\0"); break; // 30 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4-4
|
||
}
|
||
return;
|
||
break;
|
||
case 1:
|
||
sprintf(Str, "%d", NUM);
|
||
return;
|
||
break;
|
||
case 2:
|
||
switch(NUM)
|
||
{
|
||
case 0: memcpy(Str,"1645", 4); break;
|
||
case 1: memcpy(Str,"1564", 4); break;
|
||
case 2: memcpy(Str,"1364", 4); break;
|
||
}
|
||
return;
|
||
break;
|
||
}
|
||
}
|
||
|
||
void GET_Num_Str(int16_t NUM, uint8_t ValidLen, char* Str, uint8_t hasSign)
|
||
{
|
||
switch(hasSign)
|
||
{
|
||
case 0:
|
||
switch(NUM)
|
||
{
|
||
case 0: memcpy(Str,"C\0", 2); break;
|
||
case 1: memcpy(Str,"Db\0",3); break;
|
||
case 2: memcpy(Str,"D\0", 2); break;
|
||
case 3: memcpy(Str,"Eb\0",3); break;
|
||
case 4: memcpy(Str,"E\0", 2); break;
|
||
case 5: memcpy(Str,"F\0", 2); break;
|
||
case 6: memcpy(Str,"Gb\0",3); break;
|
||
case 7: memcpy(Str,"G\0", 2); break;
|
||
case 8: memcpy(Str,"Ab\0",3); break;
|
||
case 9: memcpy(Str,"A\0", 2); break;
|
||
case 10: memcpy(Str,"Bb\0",3); break;
|
||
case 11: memcpy(Str,"B\0", 2); break;
|
||
}
|
||
return;
|
||
break;
|
||
case 1:
|
||
sprintf(Str, "%d", NUM);
|
||
return;
|
||
break;
|
||
case 3:
|
||
switch(NUM)
|
||
{
|
||
case 0: memcpy(Str,"\xD2\xF4\xC0\xD6\xBB\xE1\xB8\xD6\xCF\xD2\xBC\xAA\xCB\xFB\x00", 15); break; // 01 音乐会钢弦吉<E5BCA6>?
|
||
case 1: memcpy(Str,"\xBE\xAD\xB5\xE4\xB8\xD6\xCF\xD2\xBC\xAA\xCB\xFB\x00", 13); break; // 02 经典钢弦吉他
|
||
case 2: memcpy(Str,"\xBE\xAD\xB5\xE4\xC7\xE5\xD2\xF4\xBC\xAA\xCB\xFB\x00", 13); break; // 03 经典轻音吉他
|
||
case 3: memcpy(Str,"\xB8\xB4\xB9\xC5\xCA\xA7\xD5\xE6\xB5\xE7\xBC\xAA\xCB\xFB\x00",15); break; // 04 复古失真电吉<E794B5>?
|
||
case 4: memcpy(Str,"\xB5\xE7\xB1\xB4\xCB\xBE\x00", 7); break; // 05 电贝<E794B5>?
|
||
}
|
||
return;
|
||
break;
|
||
case 5:
|
||
sprintf(Str, "%d", NUM);
|
||
return;
|
||
break;
|
||
case 6:
|
||
sprintf(Str, "%d", NUM);
|
||
return;
|
||
break;
|
||
case 7:
|
||
sprintf(Str, "%d", NUM);
|
||
return;
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
void RefreshSystemSetting(uint8_t last_data,const LEBEL_UI *UI,GUI_SWITCH * Group)
|
||
{
|
||
Draw_System_Item_List(UI,Group);
|
||
}
|
||
void RestoreSetting()
|
||
{
|
||
uint8_t new_trans;
|
||
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
||
//last_value = mGuiData[GUI_TRANSPOSE].Current;
|
||
mGuiData[GUI_TRANSPOSE].Current = 0;
|
||
new_trans = mGuiData[GUI_TRANSPOSE].Current;
|
||
if(nvm->param.Transpose != mGuiData[GUI_TRANSPOSE].Current)
|
||
{
|
||
nvm->param.Transpose = mGuiData[GUI_TRANSPOSE].Current;
|
||
}
|
||
// delta = new_trans - last_value;
|
||
// USE_MIDI.Midi_1 += delta;
|
||
// USE_MIDI.Midi_2 += delta;
|
||
// USE_MIDI.Midi_3 += delta;
|
||
// USE_MIDI.Midi_4 += delta;
|
||
// USE_MIDI.Midi_5 += delta;
|
||
// USE_MIDI.Midi_6 += delta;
|
||
// mGuiData[GUI_SPEED].Current = 78;
|
||
// AutoBandTop1_ChangeBPM(mGuiData[GUI_SPEED].Current);
|
||
if(nvm->param.BPM != mGuiData[GUI_SPEED].Current)
|
||
{
|
||
nvm->param.BPM = mGuiData[GUI_SPEED].Current;
|
||
}
|
||
mGuiData[GUI_TIMBRE_SELECT].Current = 0;
|
||
SendProgramChangeMidiEvent(0,Timbre_index[mGuiData[GUI_TIMBRE_SELECT].Current]);
|
||
if(nvm->param.Timbre != mGuiData[GUI_TIMBRE_SELECT].Current)
|
||
{
|
||
nvm->param.Timbre = mGuiData[GUI_TIMBRE_SELECT].Current;
|
||
}
|
||
mGuiData[GUI_PLAY_SECTION].Current = 0;
|
||
//AutoBandTop1_SetRunVar(mGuiData[GUI_PLAY_SECTION].Current);
|
||
ParamGuiData[SONG_MODE_PARAM].Current = 0;
|
||
ParamGuiData[EXPRESS_MODE_PARAM].Current = 0;
|
||
ParamGuiData[ALL_MODE_PARAM].Current = 0;
|
||
faders[0].val = 7;
|
||
uint8_t val_127 = (faders[0].val * 127) / 10;
|
||
SendVolumeChangeMidiEvent(1,val_127);
|
||
SendVolumeChangeMidiEvent(2,val_127);
|
||
SendVolumeChangeMidiEvent(3,val_127);
|
||
SendVolumeChangeMidiEvent(4,val_127);
|
||
SendVolumeChangeMidiEvent(5,val_127);
|
||
SendVolumeChangeMidiEvent(6,val_127);
|
||
SendVolumeChangeMidiEvent(7,val_127);
|
||
SendVolumeChangeMidiEvent(8,val_127);
|
||
SendVolumeChangeMidiEvent(9,val_127);
|
||
SendVolumeChangeMidiEvent(10,val_127);
|
||
SendVolumeChangeMidiEvent(11,val_127);
|
||
SendVolumeChangeMidiEvent(12,val_127);
|
||
SendVolumeChangeMidiEvent(13,val_127);
|
||
SendVolumeChangeMidiEvent(14,val_127);
|
||
SendVolumeChangeMidiEvent(15,val_127);
|
||
faders[1].val = 7;
|
||
uint8_t Str_val_127 = (faders[1].val * 127) / 10;
|
||
SendVolumeChangeMidiEvent(0,Str_val_127);
|
||
faders[2].val = 7;
|
||
AW816_Set_Volume(MIC_VOL_MAP[faders[2].val]);
|
||
faders[3].val = 7;
|
||
AW816_Set_Reverb(faders[3].val * 10);
|
||
mGuiData_SystemSETTING[GUI_BLUETOOTH_SW].Current = 1;
|
||
mGuiData[GUI_BL_SW].Current = 1;
|
||
BSP_BlueToothPowerEnable (mGuiData_SystemSETTING[GUI_BLUETOOTH_SW].Current);
|
||
mGuiData_SystemSETTING[GUI_AUTOCLOSE].Current = 1;
|
||
}
|
||
void Draw_System_Item_List(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
||
{
|
||
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
||
char Info[40];
|
||
uint16_t c_top, c_bot;
|
||
UI_GetFocusGrad(Group->Id, &c_top, &c_bot);
|
||
LCD_FillRoundRectGradient(
|
||
UI->x, UI->y, 220, UI->h, 5,
|
||
c_top, c_bot
|
||
);
|
||
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);
|
||
switch(Group->Id)
|
||
{
|
||
case GUI_VERSION:
|
||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_FimewareVection);
|
||
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);
|
||
break;
|
||
case GUI_BLUETOOTH_SW:
|
||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_BlueTooth);
|
||
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)
|
||
{
|
||
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
|
||
{
|
||
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);
|
||
mGuiData[GUI_BL_SW].Current = Group->Current;
|
||
break;
|
||
case GUI_AUTOCLOSE:
|
||
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);
|
||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_AutoClose);
|
||
switch(Group->Current)
|
||
{
|
||
case 0:AutoCloseTime = 5;mAutoPowerOffCount = AutoCloseTime * 60;break;
|
||
case 1:AutoCloseTime = 15;mAutoPowerOffCount = AutoCloseTime * 60;break;
|
||
case 2:AutoCloseTime = 30;mAutoPowerOffCount = AutoCloseTime * 60;break;
|
||
case 3:AutoCloseTime = 0;AutoCloseFlag = 0;break; //never
|
||
}
|
||
if(Group->Current != 3)
|
||
{
|
||
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(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_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
|
||
{
|
||
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);
|
||
}
|
||
|
||
if(nvm->param.AutoCloseTime != Group->Current)
|
||
{
|
||
nvm->param.AutoCloseTime = Group->Current;
|
||
}
|
||
break;
|
||
case GUI_RESTORE:
|
||
LCD_WR_PIC(UI->x+10, UI->y+18,20,20,gImage_Restore);
|
||
LCD_DrawChevron_Right(UI->x+100+95, UI->y+30, 15, 3, WHITE);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|