K1Guitar/UI/UI_Idle.c

289 lines
8.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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. <20><><EFBFBD><EFBFBD><E4B1B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><D2A1><EFBFBD>ɫ?????
// LCD_FillGradient(0, 0, 240, 320, 0x5AEB, 0x0000);
LCD_FillByColor(0, 0, 240, 320, BLACK);
label_top();
// 2. <20><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>???=220 ???????=87 Բ???=10 <20><><EFBFBD>ɫ<EFBFBD><C9AB>???????
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; // <20><><EFBFBD>???????
// 3. <20><><EFBFBD><EFBFBD> 3 ???????<3F><>ť<EFBFBD><C5A5>Y=40<34><30><EFBFBD><EFBFBD>??????? 5<><35><EFBFBD><EFBFBD><EFBFBD>һ???????<3F><>ť<EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD> 9px
// <20><>ť Y: 40, 132, 224
//LCD_DrawLine(0, 30, 240, 30, btn_color);
// <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>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", //<2F><><EFBFBD><EFBFBD>ģʽ
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);
// ר???ģʽ<C4A3><CABD>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", // <20><>ͨģʽ
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);
// <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>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 }, //<2F><><EFBFBD><EFBFBD>
{ 10, 229, 132, 218, 1, 0, GUI_MODE_SELECT1, NULL }, //????/<2F><><EFBFBD><EFBFBD>
{ 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 <20><><EFBFBD><EFBFBD> midi_tables.h <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
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;
// <20>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD>
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<TOUCH_AREA_MODE_SELECT_NUM; k++)
{
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 )
{
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;
}
}