#include "includes.h" extern uint8_t level; // ============================================== // ����ָ�붨�� // ============================================== 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); // ============================================== // ��ʼ���˵�UI // ============================================== void InitMenuUI(void) { MenuPage_Idle_Proc = CallUI_Idle; // ���������� MenuPage_SongMode_Proc = CallUI_SongMode; // ����ģʽ MenuPage_ExpertMode_Proc = CallUI_ExpertMode; // ר��ģʽ MenuPage_FreeMode_Proc = CallUI_FreeMode; // ����ģʽ MenuPage_Setting_Proc = CallUI_Setting; // ���� MenuPage_SystemSetting_Proc = CallUI_SystemSetting; // ϵͳ���� MenuPage_Mixer_Proc = CallUI_Mixer; //����̨ MenuPage_Restore_Proc = CallUI_RestoreSelect; } // ============================================== // ���� UI ���ú��� // ============================================== void CallUI_Idle(void) { CurrUIProcress = IdleProcess; } void CallUI_SongMode(void) { UI_SongMode_Init(); CurrUIProcress = UI_SongMode_Process; } void CallUI_ExpertMode(void) { UI_ExpertMode_Init(); // CurrUIProcress = UI_ExpertMode_Process; CurrUIProcress = UI_SongMode_Process; } void CallUI_FreeMode(void) { UI_FreeMode_Init(); // CurrUIProcress = UI_FreeMode_Process; CurrUIProcress = UI_SongMode_Process; } void CallUI_Setting(void) { CurrUIProcress = UI_Setting_Process; UI_Setting_Init(); } void CallUI_Mixer(void) { CurrUIProcress = UI_Mixer_Process; UI_Mixer_Init(); } void CallUI_SystemSetting(void) { CurrUIProcress = UI_SystemSet_Process; UI_SystemSet_Init(); } void CallUI_RestoreSelect(void) { CurrUIProcress = UI_Restore_Select_Process; UI_Restore_Select_Init(); } void label_top() { const uint16_t btn_color = /*DARKLGRAY*/0x2988; // 深灰�????? //LCD_FillByColor(0,0,240,25,BLACK); //LCD_WR_PIC(5,0,12,20,gImage_bar); Draw_Volume_Bar(5, 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 Show_Battery_Icon(uint8_t flag) { if(flag) { Draw_Battery_Icon(180, 5, percentage, 1, GREEN, BLACK, GREEN); }else { Draw_Battery_Icon(180, 5, percentage, 1, WHITE, BLACK, WHITE); } } 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; LCD_FillRoundRectGradient( UI->x+25, UI->y+20+5, UI->x + UI->w-40-(UI->x+25), UI->h-20, 0, START_COLOR, END_COLOR ); // 拼接序号 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,间�?像素 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, // 坐标�? // 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) { 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, // 坐标�? 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_StringTimbre(uint8_t last_data,const LEBEL_UI *UI, GUI_SWITCH * Group) { 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, START_COLOR, END_COLOR ); 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); // 计算数字总像素宽�? 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,向左偏�?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; // 重点:根�?当前选中的模式(2/3/4)找到�?�应数据结构�? 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 ); // 显示当前选中模式的真实数�? 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}; LCD_FillRoundRectGradient( UI->x, UI->y, UI->w, // 小写 w UI->h, 10, START_COLOR, END_COLOR ); // 显示�?�? LCD_ShowChinese_AutoAlign_Gradient( UI->x, // 坐标�? UI->x+UI->w, UI->y+5, UI->p, UI->Tab_Align, UI->Tab_fc, START_COLOR, END_COLOR, // UI->Tab_size 12 ); LCD_DrawArrow_Left(UI->x+10+5+5, UI->y+UI->h-20, 12, WHITE, BUTTON_COLOR); LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-20, 12, WHITE, BUTTON_COLOR); // 获取数字字�?�串 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, START_COLOR, END_COLOR, 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, START_COLOR, END_COLOR, 16 ); } void label_Speed_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) { uint8_t Textstr[20] = {0}; LCD_FillRoundRectGradient( UI->x, UI->y, UI->w, // 小写 w UI->h, 10, START_COLOR, END_COLOR ); // 显示�?�? LCD_ShowChinese_AutoAlign_Gradient( UI->x, // 坐标�? UI->x+UI->w, UI->y+5, UI->p, UI->Tab_Align, UI->Tab_fc, START_COLOR, END_COLOR, UI->Tab_size ); LCD_DrawMinus_RoundBox(UI->x+10+5+5, UI->y+UI->h-20, 30,5, WHITE, BLACK); LCD_DrawPlus_RoundBox(UI->x+UI->w+10-25-5, UI->y+UI->h-20, 30,5, WHITE, BLACK); // 获取数字字�?�串 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, START_COLOR, END_COLOR, 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, START_COLOR, END_COLOR, 16 ); } // �޸��棺ȥ������д���autobandֵ��ֻ������ȷ�IJ�����ʾ void label_ModeSelece_ui(const LEBEL_UI *UI,GUI_SWITCH * Group) { char *str; GUI_SWITCH *paramCurData = NULL; 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,START_COLOR, END_COLOR); 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_Gradient( UI->x, UI->x+UI->w, UI->y+5+5, (uint8_t *)str, UI->Tab_Align, UI->Tab_fc, UI->Tab_bc, 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; } // ��ʾ��ǰģʽ����ֵ����һ�Σ����ᱻautobandֵ���ǣ� 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, BUTTON_COLOR); LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-15-2+5, 12, WHITE, BUTTON_COLOR); } 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; LCD_FillRoundRectGradient( UI->x, UI->y+20, UI->w, UI->h-20, 10, START_COLOR, END_COLOR ); LCD_ShowChinese_AutoAlign_Gradient( UI->x, UI->x+UI->w, UI->y+5, UI->p, UI->Tab_Align, UI->Tab_fc, START_COLOR, END_COLOR, UI->Tab_size ); LCD_DrawArrow_Left(UI->x+10+5+5, UI->y+UI->h-20+3, 12, WHITE, BUTTON_COLOR); LCD_DrawArrow_Right(UI->x+UI->w+10-25-5, UI->y+UI->h-20+3, 12, WHITE, BUTTON_COLOR); LCD_FillRoundRectGradient( UI->x + 40, UI->y+20, UI->x + UI->w - 40 - UI->x - 40 , UI->h-20, 0, START_COLOR, END_COLOR ); // 拼接序号 1. 2. 3. 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); // 先渲染中文,拿到中文起始X坐标 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, START_COLOR, END_COLOR, UI->Text_size ); // 序号X 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, START_COLOR, END_COLOR, 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) { // 显示�?�? LCD_ShowChinese_AutoAlign( UI->x, // 坐标�? 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 = 12; 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, BLUE, 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, BLUE, 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, BLUE, 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, BLUE, BLACK,0,TextSize); break; } } void Draw_Tab_Section_Menu(const LEBEL_UI *UI, TAB_SECTION_INDEX select_tab) { // ===================== TAB 配置参数 ===================== const uint16_t tab_w = 50; // TAB宽度 const uint16_t tab_h = 24 + 11; // TAB高度 const uint8_t tab_r = 5; // 圆�?? const uint8_t space = 3; // 间距 const uint16_t start_x = UI->x + 10; // 起�?�X const uint16_t start_y = UI->y + 28 - 6; // 起�?�Y const uint16_t text_y = UI->y + 28 - 3; // 文字Y // ===================== 颜色定义 ===================== uint16_t color_sel_bg = BLUE; // 选中背景 // uint16_t color_unsel_bg = BLACK; // �?选中背景 uint16_t color_text = UI->Text_fc; // 文字颜色 if(select_tab == TAB_A) { LCD_FillRoundRect(start_x, start_y, tab_w, tab_h, tab_r, color_sel_bg); LCD_ShowString_AutoAlign_Gradient( start_x, start_x + tab_w, text_y, (const uint8_t*)"1", UI->Text_Align, color_text, color_sel_bg, color_sel_bg, 24 ); }else { LCD_FillRoundRectGradient( start_x, start_y, tab_w, tab_h, tab_r, START_COLOR, END_COLOR ); LCD_ShowString_AutoAlign_Gradient( start_x, start_x + tab_w, text_y, (const uint8_t*)"1", UI->Text_Align, color_text, START_COLOR, END_COLOR, 24 ); } if(select_tab == TAB_B) { LCD_FillRoundRect(start_x + tab_w + space, start_y, tab_w, tab_h, tab_r, color_sel_bg); LCD_ShowString_AutoAlign_Gradient( start_x + tab_w + space, start_x + tab_w + space + tab_w, text_y, (const uint8_t*)"2", UI->Text_Align, color_text, color_sel_bg, color_sel_bg, 24 ); }else { LCD_FillRoundRectGradient( start_x + tab_w + space, start_y, tab_w, tab_h, tab_r, START_COLOR, END_COLOR ); LCD_ShowString_AutoAlign_Gradient( start_x + tab_w + space, start_x + tab_w + space + tab_w, text_y, (const uint8_t*)"2", UI->Text_Align, color_text, START_COLOR, END_COLOR, 24 ); } if(select_tab == TAB_C) { LCD_FillRoundRect(start_x + tab_w + space + tab_w + space, start_y, tab_w, tab_h, tab_r, color_sel_bg); LCD_ShowString_AutoAlign_Gradient( start_x + tab_w + space + tab_w + space, start_x + tab_w + space + tab_w + space + tab_w, text_y, (const uint8_t*)"3", UI->Text_Align, color_text, color_sel_bg, color_sel_bg, 24 ); }else { LCD_FillRoundRectGradient( start_x + tab_w + space + tab_w + space, start_y, tab_w, tab_h, tab_r, START_COLOR, END_COLOR ); LCD_ShowString_AutoAlign_Gradient( start_x + tab_w + space + tab_w + space, start_x + tab_w + space + tab_w + space + tab_w, text_y, (const uint8_t*)"3", UI->Text_Align, color_text, START_COLOR, END_COLOR, 24 ); } if(select_tab == TAB_D) { LCD_FillRoundRect(start_x + tab_w + space + tab_w + space+ tab_w + space, start_y, tab_w, tab_h, tab_r, color_sel_bg); LCD_ShowString_AutoAlign_Gradient( start_x + tab_w + space + tab_w + space+ tab_w + space, start_x + tab_w + space + tab_w + space + tab_w+ tab_w + space, text_y, (const uint8_t*)"4", UI->Text_Align, color_text, color_sel_bg, color_sel_bg, 24 ); }else { LCD_FillRoundRectGradient( start_x + tab_w + space + tab_w + space+ tab_w + space, start_y, tab_w, tab_h, tab_r, START_COLOR, END_COLOR ); LCD_ShowString_AutoAlign_Gradient( start_x + tab_w + space + tab_w + space+ tab_w + space, start_x + tab_w + space + tab_w + space + tab_w+ tab_w + space, text_y, (const uint8_t*)"4", UI->Text_Align, color_text, START_COLOR, END_COLOR, 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 ��������ֽ�4-4 case 1: strcpy(Str,"\xBC\xAA\xCB\xFB\xBE\xAD\xB5\xE4\xC9\xA8\xCF\xD2 4-4\0"); break; // 01 ��������ɨ��4-4 case 2: strcpy(Str,"\xB8\xB4\xB9\xC5\xBC\xAA\xCB\xFB\xC1\xF7\xD0\xD0 4-4\0"); break; // 02 ���ż�������4-4 case 3: strcpy(Str,"\xC1\xF7\xD0\xD0\xD2\xA1\xB9\xF6 4-4\0"); break; // 03 ����ҡ��4-4 case 4: strcpy(Str,"\xBE\xAD\xB5\xE4\xC7\xE9\xB8\xE8 4-4\0"); break; // 04 �������4-4 case 5: strcpy(Str,"\xC1\xB5\xC8\xCB\xC7\xE9\xB8\xE8 2-4\0"); break; // 05 �������2-4 case 6: strcpy(Str,"\xCC\xF0\xC3\xDB\xC7\xE9\xB8\xE8 4-4\0"); break; // 06 �������4-4 case 7: strcpy(Str,"\xCE\xC2\xC7\xE9 8 \xC5\xC4 4-4\0"); break; // 07 ����8��4-4 case 8: strcpy(Str,"\xCE\xC2\xC8\xE1 8 \xC5\xC4 4-4\0"); break; // 08 ����8��4-4 case 9: strcpy(Str,"\xCF\xA6\xD1\xF4\xC1\xF7\xD0\xD0 4-4\0"); break; // 09 Ϧ������4-4 case 10: strcpy(Str,"\xCE\xF7\xB7\xBD\xCA\xEF\xB9\xE2 4-4\0"); break; // 10 �������4-4 case 11: strcpy(Str,"\xCE\xC2\xDC\xB0\xC3\xF1\xD2\xA5 4-4\0"); break; // 11 ��ܰ��ҥ4-4 case 12: strcpy(Str,"\xD6\xD0\xCB\xD9\xD2\xA1\xB9\xF6 4-4\0"); break; // 12 ����ҡ��4-4 case 13: strcpy(Str,"\xD6\xD0\xCB\xD9\xC7\xE9\xB8\xE8 4-4\0"); break; // 13 �������4-4 case 14: strcpy(Str,"\xCC\xF0\xC3\xC0 8 \xC5\xC4 4-4\0"); break; // 14 ����8��4-4 case 15: strcpy(Str,"\xC0\xD6\xB6\xD3 8 \xC5\xC4 4-4\0"); break; // 15 �ֶ�8��4-4 case 16: strcpy(Str,"8 \xC5\xC4\xBB\xB3\xBE\xC9 4-4\0"); break; // 16 8�Ļ���4-4 case 17: strcpy(Str,"\xCF\xC4\xC8\xD5\xB2\xA8\xC8\xF8 4-4\0"); break; // 17 ���ղ���4-4 case 18: strcpy(Str,"\xB7\xC5\xBF\xCB\xC2\xC9\xB6\xAF 4-4\0"); break; // 18 �ſ��ɶ�4-4 case 19: strcpy(Str,"\xB4\xF2\xB0\xF1\xD2\xA1\xB9\xF6\xC0\xD6 4-4\0"); break; // 19 ���ҡ����4-4 case 20: strcpy(Str,"\xC1\xF7\xD0\xD0\xD6\xD0\xCB\xD9\xB5\xAF\xB3\xAA 4-4\0"); break; // 20 �������ٵ���4-4 case 21: strcpy(Str,"\xC8\xF8\xBF\xCB\xCB\xB9 8 \xC5\xC4 4-4\0"); break; // 21 ����˹8��4-4 case 22: strcpy(Str,"\xB8\xD6\xC7\xD9\xC2\xC9\xB6\xAF 4-4\0"); break; // 22 �����ɶ�4-4 case 23: strcpy(Str,"\xBF\xE1\xEC\xC5\xD0\xF0\xCA\xC2\xC7\xFA 4-4\0"); break; // 23 ����������4-4 case 24: strcpy(Str,"\xBF\xEC\xC0\xD6\xC7\xA1\xC7\xA1 4-4\0"); break; // 24 ����ǡǡ4-4 case 25: strcpy(Str,"16 \xC5\xC4\xC7\xE9\xB8\xE8 4-4\0"); break; // 25 16�����4-4 case 26: strcpy(Str,"\xB1\xEA\xD7\xBC\xD0\xF0\xCA\xC2\xC7\xFA 6-8\0"); break; // 26 ��׼������6-8 case 27: strcpy(Str,"\xCC\xA8\xCD\xE5\xC1\xF7\xD0\xD0\xC0\xD6 4-4\0"); break; // 27 ̨��������4-4 case 28: strcpy(Str,"\xB5\xE7\xD3\xB0\xD0\xF0\xCA\xC2 6-8\0"); break; // 28 ��Ӱ����6-8 case 29: strcpy(Str,"\xCA\xA5\xB5\xAE\xD6\xAE\xD2\xB9 3-4\0"); break; // 29 ʥ��֮ҹ3-4 case 30: strcpy(Str,"\xBC\xAA\xCB\xFB\xB3\xAA\xD7\xF7\xD5\xDF 4-4\0"); break; // 30 ����������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 音乐会钢弦吉�? 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 复古失真电吉�? case 4: memcpy(Str,"\xB5\xE7\xB1\xB4\xCB\xBE\x00", 7); break; // 05 电贝�? } 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]; LCD_FillRoundRectGradient( UI->x, UI->y, 220, UI->h, 5, START_COLOR, END_COLOR ); 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,START_COLOR, END_COLOR,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,START_COLOR, END_COLOR,24); 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, GRAY); LCD_DrawArrow_Right(UI->x+100+95, UI->y+UI->h/2-8+12-5, 12, WHITE, GRAY); 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,START_COLOR, END_COLOR,24); }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,START_COLOR, END_COLOR,24); } 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, GRAY); LCD_DrawArrow_Right(UI->x+100+95, UI->y+UI->h/2-8+12-5, 12, WHITE, GRAY); 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, 24, 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,24,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,24); } 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; } }