#include "includes.h" uint8_t CurrentMode = 0; void RGB_Y_TO_R() { app_tm1629_all_on(LED_COLOR_YELL); rt_thread_delay(1000); app_tm1629_all_on(LED_COLOR_R); } void RGB_Y_TO_G() { app_tm1629_all_on(LED_COLOR_YELL); rt_thread_delay(1000); app_tm1629_all_on(LED_COLOR_G); } #define UI_MODE_SCREEN_WIDTH 240 #define UI_MODE_SCREEN_HEIGHT 320 #define UI_MODE_BG_COLOR 0x1925 #define UI_MODE_LINE_COLOR DARKBLUE #define UI_MODE_TEXT_COLOR 0xFFFF #define UI_MODE_FONT_SIZE 24 void UI_DrawModeSelectScreen(void) { // 1. ���䱳������ҡ���ɫ????? // LCD_FillGradient(0, 0, 240, 320, 0x5AEB, 0x0000); LCD_FillByColor(0, 0, 240, 320, BLACK); label_top(); // 2. ��ť������???=220 ???????=87 Բ???=10 ���ɫ��??????? 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; // 10 //const uint16_t btn_color = /*DARKLGRAY*//*0x2988*/BLACK; // ���??????? // 3. ���� 3 ???????��ť��Y=40����??????? 5�����һ???????��ť�ײ���� 9px // ��ť Y: 40, 132, 224 //LCD_DrawLine(0, 30, 240, 30, btn_color); // ����ģʽ��Y=40??????? //LCD_FillRoundRect(btn_x, 40, btn_w, btn_h, btn_r, btn_color); // LCD_FillRoundRectGradient(btn_x, 40, btn_w, btn_h, btn_r, 0XC618,0x5AEB); LCD_FillRoundRectGradient(btn_x, 40, btn_w, btn_h, btn_r, START_COLOR, END_COLOR); uint16_t x1 = LCD_ShowChinese_AutoAlign_Gradient( btn_x, btn_x + btn_w, 40 + (btn_h - 24) / 2, (uint8_t*)"\xCD\xF2\xC4\xDC\xC4\xA3\xCA\xBD", //����ģʽ LCD_ALIGN_CENTER, UI_MODE_TEXT_COLOR, START_COLOR, END_COLOR, 24 ); LCD_WR_PIC(x1-45, 40 + (btn_h - 24) / 2-5,40,30,gImage_FreeMode_Icon_40_30); // ר???ģʽ��Y=132??????? // LCD_FillRoundRect(btn_x, 132, btn_w, btn_h, btn_r, btn_color); LCD_FillRoundRectGradient(btn_x, 132, btn_w, btn_h, btn_r, START_COLOR, END_COLOR); uint16_t x2 = LCD_ShowChinese_AutoAlign_Gradient( btn_x, btn_x + btn_w, 132 + (btn_h - 24) / 2, (uint8_t *)"\xC6\xD5\xCD\xA8\xC4\xA3\xCA\xBD", // ��ͨģʽ LCD_ALIGN_CENTER, UI_MODE_TEXT_COLOR, START_COLOR, END_COLOR, 24 ); LCD_WR_PIC(x2-45, 132 + (btn_h - 24) / 2-5,40,30,gImage_NormalMode_Icon_40_30); // ����ģʽ��Y=224??????? // LCD_FillRoundRect(btn_x, 224, btn_w, btn_h, btn_r, btn_color); LCD_FillRoundRectGradient(btn_x, 224, btn_w, btn_h, btn_r, START_COLOR, END_COLOR); uint16_t x3 = LCD_ShowChinese_AutoAlign_Gradient( btn_x, btn_x + btn_w, 224 + (btn_h - 24) / 2, (const uint8_t *)"\xD7\xA8\xD2\xB5\xC4\xA3\xCA\xBD", // רҵģʽ LCD_ALIGN_CENTER, UI_MODE_TEXT_COLOR, START_COLOR, END_COLOR, 24 ); LCD_WR_PIC(x3-45, 224 + (btn_h - 24) / 2-5,40,30,gImage_ExpressMode_Icon_40_30); } const Touch_AreaTypeDef Touch_ModeSelect_Areas[] = { // Xmin, Xmax, Ymin, Ymax, flag, ID, action { 10, 229, 40, 126, 0, 0, GUI_MODE_SELECT3, NULL }, //���� { 10, 229, 132, 218, 1, 0, GUI_MODE_SELECT1, NULL }, //????/���� { 10, 229, 224, 310, 2, 0, GUI_MODE_SELECT2, NULL }, //רҵ/ר??? }; #define TOUCH_AREA_MODE_SELECT_NUM (sizeof(Touch_ModeSelect_Areas)/sizeof(Touch_AreaTypeDef)) /* Timbre_index ���� midi_tables.h ������ */ extern uint8_t channel; extern uint8_t level; extern bool powon; extern bool InModeFlag; extern int16_t MIC_VOL_MAP[10]; extern int8_t delta; extern STRING_MIDI USE_MIDI; void LoadConfig() { SendProgramChangeMidiEvent(0,Timbre_index[mGuiData[GUI_TIMBRE_SELECT].Current]); uint8_t val_127 = (faders[0].val * 127) / 20; 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); SendVolumeChangeMidiEvent(0,faders[1].val); AW816_Set_Volume(MIC_VOL_MAP[faders[2].val]); AW816_Set_Reverb(faders[3].val * 10); } void Touch_Mode_Select_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex) { StartTask(); mGuiData[GUI_TAB_INDEX].Current = ID; InModeFlag = true; // �ٽ����ٽ��� switch(ID) { case 0: if(mGuiData[GUI_AUTOBAND_SW].Current) { ADDRESS = 0x0009EB5F; } else { ADDRESS = 0x0001B8F0; } MenuPage_SongMode_Proc(); break; case 1: if(mGuiData[GUI_AUTOBAND_SW].Current) { ADDRESS = 0x0009EB5F; } else { // ADDRESS = 0x0001B8F0; ADDRESS = 0x00000000; } MenuPage_ExpertMode_Proc(); break; case 2: ADDRESS = 0x0009598F; MenuPage_FreeMode_Proc(); break; } } extern uint8_t bat_init_done; void IdleProcess(DisplayTaskMessage_Type msg) { uint8_t vol; switch (msg.MessageType) { case MSG_ID_POWER_ON : LCD_BLK_Set(); LCD_FillByColor(0, 0, 240, 320, WHITE); LCD_WR_PIC_FROM_FLASH(40, 80, 168, 155, 0x00000000); BSP_SelectAdcChannel(6); wk_delay_ms(1000); LoadConfig(); vol = ADC_ReadChannel(ADC_CHANNEL_1)>>5; 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; Send_volume(vol); UI_DrawModeSelectScreen(); TM1629D_AllLedOn(LED_COLOR_G); TM1629D_UpdateDisplay(0); StartTouchTask(); StartScanTask(); break; case MSG_ID_POWER_OFF: /* 关机:熄屏 + 关背光 */ LCD_BLK_Clr(); LCD_FillByColor(0, 0, 240, 320, BLACK); break; case MSG_ID_CHARG: Show_Battery_Icon(msg.ID); break; case MSG_ID_TOUCH: for(uint8_t k=0; k= 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 ) { Touch_Mode_Select_Action(pCurrentTouch_Area[k].Flag,pCurrentTouch_Area[k].ID,k); break; } } break; case MSG_ID_BATTERY_VALUE: if(usb_charging_state) { Draw_Battery_Icon(180, 5, msg.ID, 1, GREEN, BLACK, GREEN); }else { Draw_Battery_Icon(180, 5, msg.ID, 1, WHITE, BLACK, WHITE); } break; case MSG_ID_POWOFF_CHARG: { static bool flag = 0; if(flag == 0) { BSP_MainPowerEnable(1); LCD_WR_REG(0x29); //Display on LCD_WR_PIC_FROM_FLASH(40, 50, 160, 190, 0x0000CB70); LCD_BLK_Set(); flag = 1; } if(usb_charging_state) { uint8_t Info[10] = {0,}; sprintf ((char*)Info, "%d%%", msg.ID); LCD_ShowString_AutoAlign(0,240,250,Info,LCD_ALIGN_CENTER,WHITE,BLACK,0,24); } //else //BSP_MainPowerEnable(0); } break; 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.ID; 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.ID,1); SendMidiDataToDreamDSP(mMasterSysExVolume,12); ResetAutoPowerCount(); } break; } }