2026-08-26 07:26:58 +08:00
|
|
|
|
#include "includes.h"
|
|
|
|
|
|
extern uint8_t CurrentMode;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static uint8_t transpose[5] = {0xF0, 0x51, 0x05, 0x0A, 0xF7};
|
|
|
|
|
|
static uint8_t Speed[6] = {0xF0, 0x51, 0x03, 0x00, 0x00, 0xF7};
|
|
|
|
|
|
|
|
|
|
|
|
void Draw_Tab_Mode_Menu(const LEBEL_UI *UI, GUI_SWITCH *Group)
|
|
|
|
|
|
{
|
|
|
|
|
|
// ===================== TAB 閰嶇疆鍙傛暟 =====================
|
|
|
|
|
|
const uint16_t tab_w = 80; // TAB瀹藉<E780B9>????
|
|
|
|
|
|
const uint16_t tab_h = 20; // TAB楂樺<E6A582>????
|
|
|
|
|
|
const uint8_t tab_r = 5; // 鍦嗚<E98DA6>????
|
|
|
|
|
|
//const uint8_t space = 3; // 闂<>?<3F>窛
|
|
|
|
|
|
const uint16_t start_x = UI->x; // 璧峰X
|
|
|
|
|
|
const uint16_t start_y = UI->y; // 璧峰Y
|
|
|
|
|
|
const uint16_t text_y = UI->y + 2; // 鏂囧<E98F82>????Y
|
|
|
|
|
|
|
|
|
|
|
|
// ===================== 棰滆壊瀹氫<E780B9>???? =====================
|
2026-08-31 06:10:13 +08:00
|
|
|
|
uint16_t color_sel_bg = UI_IsFocused(GUI_MODE_PARAM) ? COLOR_PRIMARY : COLOR_NORMAL_BG;
|
|
|
|
|
|
uint16_t color_unsel_bg = COLOR_NORMAL_BG;
|
2026-08-26 07:26:58 +08:00
|
|
|
|
uint16_t color_text = UI->Text_fc; // 鏂囧瓧棰滆<E6A3B0>??
|
|
|
|
|
|
|
|
|
|
|
|
// 鏄剧ず锛氳嚜鍔ㄤ即濂忓紑 / <20>?????
|
|
|
|
|
|
if(Group->Current == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
LCD_FillRoundRect(start_x,
|
|
|
|
|
|
start_y,
|
|
|
|
|
|
tab_w,
|
|
|
|
|
|
tab_h,
|
|
|
|
|
|
tab_r,
|
|
|
|
|
|
color_unsel_bg);
|
|
|
|
|
|
|
|
|
|
|
|
LCD_FillRoundRect(start_x+tab_w +10,
|
|
|
|
|
|
start_y,
|
|
|
|
|
|
tab_w,
|
|
|
|
|
|
tab_h,
|
|
|
|
|
|
tab_r,
|
|
|
|
|
|
color_sel_bg);
|
|
|
|
|
|
|
|
|
|
|
|
LCD_ShowChinese_AutoAlign(
|
|
|
|
|
|
start_x,
|
|
|
|
|
|
start_x + tab_w,
|
|
|
|
|
|
text_y,
|
|
|
|
|
|
(const uint8_t*)"\xBD\xDA\xD7\xE0\xC0\xE0\xD0\xCD",
|
|
|
|
|
|
UI->Text_Align,
|
|
|
|
|
|
color_text,
|
|
|
|
|
|
color_unsel_bg,
|
|
|
|
|
|
0,
|
|
|
|
|
|
16
|
|
|
|
|
|
);
|
|
|
|
|
|
LCD_ShowChinese_AutoAlign(
|
|
|
|
|
|
start_x + tab_w + 15,
|
|
|
|
|
|
start_x + tab_w + tab_w,
|
|
|
|
|
|
text_y,
|
|
|
|
|
|
(const uint8_t *)"\xB1\xBE\xB5\xD8\xC7\xFA\xC4\xBF",
|
|
|
|
|
|
UI->Text_Align,
|
|
|
|
|
|
color_text,
|
|
|
|
|
|
color_sel_bg,
|
|
|
|
|
|
0,
|
|
|
|
|
|
16
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
LCD_FillRoundRect(start_x,
|
|
|
|
|
|
start_y,
|
|
|
|
|
|
tab_w,
|
|
|
|
|
|
tab_h,
|
|
|
|
|
|
tab_r,
|
|
|
|
|
|
color_sel_bg);
|
|
|
|
|
|
|
|
|
|
|
|
LCD_FillRoundRect(start_x+tab_w +10,
|
|
|
|
|
|
start_y,
|
|
|
|
|
|
tab_w,
|
|
|
|
|
|
tab_h,
|
|
|
|
|
|
tab_r,
|
|
|
|
|
|
color_unsel_bg);
|
|
|
|
|
|
|
|
|
|
|
|
LCD_ShowChinese_AutoAlign(
|
|
|
|
|
|
start_x,
|
|
|
|
|
|
start_x + tab_w,
|
|
|
|
|
|
text_y,
|
|
|
|
|
|
(const uint8_t*)"\xBD\xDA\xD7\xE0\xC0\xE0\xD0\xCD", //节<>?<3F>类<EFBFBD>?
|
|
|
|
|
|
UI->Text_Align,
|
|
|
|
|
|
color_text,
|
|
|
|
|
|
color_sel_bg,
|
|
|
|
|
|
0,
|
|
|
|
|
|
16
|
|
|
|
|
|
);
|
|
|
|
|
|
LCD_ShowChinese_AutoAlign(
|
|
|
|
|
|
start_x + tab_w + 15,
|
|
|
|
|
|
start_x + tab_w + tab_w,
|
|
|
|
|
|
text_y,
|
|
|
|
|
|
(const uint8_t *)"\xB1\xBE\xB5\xD8\xC7\xFA\xC4\xBF", //<2F>?地曲<E59CB0>?
|
|
|
|
|
|
UI->Text_Align,
|
|
|
|
|
|
color_text,
|
|
|
|
|
|
color_unsel_bg,
|
|
|
|
|
|
0,
|
|
|
|
|
|
16
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Show_home_UI(void)
|
|
|
|
|
|
{
|
2026-08-31 06:10:13 +08:00
|
|
|
|
UI_ClearFocus();
|
|
|
|
|
|
LCD_FillByColor(0,0,240,320,BLACK);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
label_top();
|
|
|
|
|
|
label_Tranzpose_ui(&UI_Label[GUI_TRANSPOSE], &mGuiData[GUI_TRANSPOSE]);
|
|
|
|
|
|
label_Speed_ui(&UI_Label[GUI_SPEED], &mGuiData[GUI_SPEED]);
|
|
|
|
|
|
label_ModeSelece_ui(&UI_Label[GUI_MODE_PARAM],&mGuiData[GUI_MODE_PARAM]);
|
|
|
|
|
|
label_TimbreSelece_ui(&UI_Label[GUI_TIMBRE_SELECT], &mGuiData[GUI_TIMBRE_SELECT]);
|
|
|
|
|
|
label_PlaySection_ui(&UI_Label[GUI_PLAY_SECTION], &mGuiData[GUI_PLAY_SECTION]);
|
|
|
|
|
|
label_Tab_Select_ui(&UI_Label[GUI_PLAY_SECTION], &mGuiData[GUI_TAB_INDEX]);
|
|
|
|
|
|
//LCD_WR_REG(0x29); // Display ON:恢复扫描,整页<E695B4>?间呈<E997B4>?
|
|
|
|
|
|
//LCD_BLK_Set();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int8_t delta = 0;
|
|
|
|
|
|
void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex,uint8_t value)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t last_value;
|
|
|
|
|
|
uint8_t midi_note_buff[4] = {0,};
|
|
|
|
|
|
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
|
|
|
|
|
if(FLAG == 1 || FLAG == -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
case GUI_TRANSPOSE:
|
|
|
|
|
|
{
|
|
|
|
|
|
last_value = mGuiData[ID].Current;
|
|
|
|
|
|
GUI_Item_AjustLoopValue(&mGuiData[ID], FLAG);
|
|
|
|
|
|
|
2026-08-31 06:10:13 +08:00
|
|
|
|
if (!UI_SetFocus(GUI_TRANSPOSE))
|
|
|
|
|
|
Refresh_Transpose(&UI_Label[ID], &mGuiData[ID]);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
// label_Tranzpose_ui(&UI_Label[GUI_TRANSPOSE], &mGuiData[GUI_TRANSPOSE]);
|
|
|
|
|
|
if(nvm->param.Transpose != mGuiData[ID].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
nvm->param.Transpose = mGuiData[ID].Current;
|
|
|
|
|
|
}
|
|
|
|
|
|
transpose[3] = mGuiData[ID].Current;
|
|
|
|
|
|
USART4_SendData(transpose,sizeof(transpose));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int8_t new_trans = 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;
|
|
|
|
|
|
|
|
|
|
|
|
if(StartFlag)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(mGuiData[GUI_TAB_INDEX].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t midi = 0x3c;
|
|
|
|
|
|
midi += mGuiData[GUI_TRANSPOSE].Current;
|
|
|
|
|
|
AutoBandTop1_Note_On(midi,0x3c); // AutoBand 模块未加入工程
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
{
|
|
|
|
|
|
AutoBandTop1_SetPiecePlayMode(1,0,480); // AutoBand 模块未加入工程
|
|
|
|
|
|
AutoBandTop1_StartWithNotes(midi_note_buff,GetChordNotesByType(KEY_ID_1629,chord_type_index_map[KEY_ID_1629].type,midi_note_buff));
|
|
|
|
|
|
AutoBandTop1_SetLoopMode(0,1);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 0:
|
|
|
|
|
|
{
|
|
|
|
|
|
AutoBandTop1_SetPiecePlayMode(1,0,480); // AutoBand 模块未加入工程
|
|
|
|
|
|
AutoBandTop1_StartWithNotes(midi_note_buff,GetChordNotesByType(KEY_ID_1629,chord_type_index_map[KEY_ID_1629].type,midi_note_buff));
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GUI_SPEED:
|
|
|
|
|
|
{
|
|
|
|
|
|
last_value = mGuiData[ID].Current;
|
|
|
|
|
|
GUI_Item_AjustValue(&mGuiData[ID], FLAG);
|
|
|
|
|
|
|
2026-08-31 06:10:13 +08:00
|
|
|
|
if (!UI_SetFocus(GUI_SPEED))
|
|
|
|
|
|
Refresh_Transpose(&UI_Label[ID], &mGuiData[ID]);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
|
|
|
|
|
|
Speed[3] = mGuiData[ID].Current / 128;
|
|
|
|
|
|
Speed[4] = mGuiData[ID].Current % 128;
|
|
|
|
|
|
USART4_SendData(Speed,sizeof(Speed));
|
|
|
|
|
|
|
|
|
|
|
|
if(nvm->param.BPM != mGuiData[ID].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
nvm->param.BPM = mGuiData[ID].Current;
|
|
|
|
|
|
}
|
|
|
|
|
|
AutoBandTop1_ChangeBPM(mGuiData[ID].Current); // AutoBand 模块未加入工程
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GUI_MODE_PARAM:
|
|
|
|
|
|
{
|
|
|
|
|
|
GUI_SWITCH *pCurData =NULL;
|
|
|
|
|
|
|
|
|
|
|
|
switch(mGuiData[GUI_TAB_INDEX].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 0: case 1:
|
|
|
|
|
|
if(mGuiData[GUI_AUTOBAND_SW].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
pCurData = &ParamGuiData[EXPRESS_MODE_PARAM];
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
pCurData = &ParamGuiData[SONG_MODE_PARAM];
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2: pCurData = &ParamGuiData[ALL_MODE_PARAM]; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
last_value = pCurData->Current;
|
|
|
|
|
|
GUI_Item_AjustLoopValue(pCurData, FLAG);
|
2026-08-31 06:10:13 +08:00
|
|
|
|
if (!UI_SetFocus(GUI_MODE_PARAM))
|
|
|
|
|
|
show_Param(&UI_Label[GUI_MODE_PARAM], pCurData);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
switch(mGuiData[GUI_TAB_INDEX].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 0: case 1:
|
|
|
|
|
|
if(mGuiData[GUI_AUTOBAND_SW].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
AutoBandTop1_LoadPresetItemFromFlash(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
AutoBandTop1_LoadPresetItemFromFlash(ParamGuiData[SONG_MODE_PARAM].Current);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2: AutoBandTop1_LoadPresetItemFromFlash(ParamGuiData[ALL_MODE_PARAM].Current); break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
switch(mGuiData[GUI_TAB_INDEX].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 0: nvm->param.Param1 = ParamGuiData[SONG_MODE_PARAM].Current; break; // 姝屾<E5A79D>????
|
|
|
|
|
|
case 1: nvm->param.Param2 = ParamGuiData[EXPRESS_MODE_PARAM].Current;
|
|
|
|
|
|
break; // 涓撳<E6B693>????
|
|
|
|
|
|
case 2: nvm->param.Param3 = ParamGuiData[ALL_MODE_PARAM].Current; break; // 涓囪<E6B693>????
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case GUI_TIMBRE_SELECT:
|
|
|
|
|
|
last_value = mGuiData[ID].Current;
|
|
|
|
|
|
GUI_Item_AjustLoopValue(&mGuiData[ID], FLAG);
|
2026-08-31 06:10:13 +08:00
|
|
|
|
UI_SetFocus(GUI_TIMBRE_SELECT);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
Refresh_StringTimbre(last_value, &UI_Label[ID], &mGuiData[ID]);
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t ReturnTimbre[8] = {0xF0,0x60,0x03,0x05,0x00,0x00,0x00,0xF7};
|
|
|
|
|
|
ReturnTimbre[6] = mGuiData[GUI_TIMBRE_SELECT].Current;
|
|
|
|
|
|
USART4_SendData(ReturnTimbre,sizeof(ReturnTimbre));
|
|
|
|
|
|
|
|
|
|
|
|
if(nvm->param.Timbre != mGuiData[ID].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
nvm->param.Timbre = mGuiData[ID].Current;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(ID == GUI_AUTOBAND_SW)
|
|
|
|
|
|
{
|
|
|
|
|
|
mGuiData[ID].Current = value;
|
|
|
|
|
|
|
|
|
|
|
|
if(mGuiData[GUI_AUTOBAND_SW].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
ADDRESS = 0x0009EB5B;
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
ADDRESS = 0x00000000;
|
|
|
|
|
|
}
|
2026-08-31 06:10:13 +08:00
|
|
|
|
if (!UI_SetFocus(GUI_MODE_PARAM))
|
|
|
|
|
|
label_ModeSelece_ui(&UI_Label[GUI_MODE_PARAM],&mGuiData[GUI_MODE_PARAM]);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(ID==GUI_PLAY_SECTION)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(mGuiData[ID].Current != value)
|
|
|
|
|
|
{
|
|
|
|
|
|
mGuiData[ID].Current = value;
|
|
|
|
|
|
AutoBandTop1_SetRunVar(mGuiData[ID].Current);
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
AutoBandTop1_FillinWithIndex(value);
|
|
|
|
|
|
AutoBandTop1_Start();
|
|
|
|
|
|
}
|
2026-08-31 06:10:13 +08:00
|
|
|
|
if (!UI_SetFocus(GUI_PLAY_SECTION))
|
|
|
|
|
|
Refresh_SectionSelect(last_value, &UI_Label[ID], &mGuiData[ID]);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(ID==GUI_TAB_INDEX)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(mGuiData[ID].Current != value)
|
|
|
|
|
|
{
|
|
|
|
|
|
mGuiData[ID].Current = value;
|
|
|
|
|
|
|
|
|
|
|
|
app_tm1629_all_on(LED_COLOR_G);
|
|
|
|
|
|
switch(mGuiData[ID].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 0:
|
|
|
|
|
|
if(mGuiData[GUI_TAB_LAST_INDEX].Current == mGuiData[ID].Current)
|
|
|
|
|
|
break;
|
|
|
|
|
|
StartFlag = 0;
|
|
|
|
|
|
AutoBandTop1_Stop();
|
|
|
|
|
|
if(mGuiData[GUI_AUTOBAND_SW].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
ADDRESS = 0x0009EB5F;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ADDRESS = 0x00000000;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
if(mGuiData[GUI_TAB_LAST_INDEX].Current == mGuiData[ID].Current)
|
|
|
|
|
|
break;
|
|
|
|
|
|
StartFlag = 0;
|
|
|
|
|
|
AutoBandTop1_Stop();
|
|
|
|
|
|
if(mGuiData[GUI_AUTOBAND_SW].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
ADDRESS = 0x0009EB5F;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ADDRESS = 0x00000000;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
if(mGuiData[GUI_TAB_LAST_INDEX].Current == mGuiData[ID].Current)
|
|
|
|
|
|
break;
|
|
|
|
|
|
StartFlag = 0;
|
|
|
|
|
|
AutoBandTop1_Stop();
|
|
|
|
|
|
ADDRESS = 0x0009598F;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
Refresh_TabSelect_ui(&UI_Label[ID], &mGuiData[ID]);
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(ID==GUI_BL_SW)
|
|
|
|
|
|
{
|
|
|
|
|
|
mGuiData[ID].Current = !mGuiData[ID].Current;
|
|
|
|
|
|
Show_BL_Icon(mGuiData[GUI_BL_SW].Current);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void UI_SongMode_Init(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
CurrentMode = 0;
|
|
|
|
|
|
//mGuiData[GUI_AUTOBAND_SW].Current = 0;
|
|
|
|
|
|
mGuiData[GUI_TAB_INDEX].Current = 0;
|
|
|
|
|
|
mGuiData[GUI_TAB_LAST_INDEX].Current = mGuiData[GUI_TAB_INDEX].Current;
|
|
|
|
|
|
Show_home_UI();
|
|
|
|
|
|
pCurrentTouch_Area = Touch_Areas;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void UI_SongMode_Process(DisplayTaskMessage_Type msg)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t midi_note_buff[4] = {0,};
|
|
|
|
|
|
NvmParam_Type * nvm = drv_nvm_param_ptr();
|
|
|
|
|
|
|
|
|
|
|
|
switch(msg.MessageType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case MSG_ID_TOUCH:
|
2026-08-31 11:24:10 +08:00
|
|
|
|
{
|
|
|
|
|
|
uint8_t hit = 0U;
|
|
|
|
|
|
for(uint8_t k=0; k<TOUCH_AREA_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 )
|
|
|
|
|
|
{
|
|
|
|
|
|
hit = 1U;
|
2026-08-31 21:59:12 +08:00
|
|
|
|
LOG_I("UI", "song hit area=%u id=%u val=%u x=%u y=%u",
|
2026-08-31 11:24:10 +08:00
|
|
|
|
(unsigned)k, (unsigned)pCurrentTouch_Area[k].ID,
|
2026-08-31 21:59:12 +08:00
|
|
|
|
(unsigned)pCurrentTouch_Area[k].Value,
|
2026-08-31 11:24:10 +08:00
|
|
|
|
(unsigned)msg.HiByte, (unsigned)msg.LoByte);
|
|
|
|
|
|
Touch_Action(pCurrentTouch_Area[k].Flag,pCurrentTouch_Area[k].ID,k,pCurrentTouch_Area[k].Value);
|
|
|
|
|
|
ResetAutoPowerCount();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!hit) {
|
|
|
|
|
|
LOG_I("UI", "song miss x=%u y=%u",
|
|
|
|
|
|
(unsigned)msg.HiByte, (unsigned)msg.LoByte);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MSG_ID_BATTERY_VALUE:
|
2026-08-28 10:34:27 +08:00
|
|
|
|
Draw_Status_Battery_Icon(percentage);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MSG_ID_EC_VOL:
|
|
|
|
|
|
Send_volume(msg.ID);
|
|
|
|
|
|
Draw_Volume_Bar(5, 5, msg.HiByte, 1, WHITE, GRAY);
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MSG_ID_TAP_SPEED:
|
|
|
|
|
|
//last_value = mGuiData[GUI_SPEED].Current;
|
|
|
|
|
|
mGuiData[GUI_SPEED].Current = msg.ID;
|
2026-08-31 06:10:13 +08:00
|
|
|
|
if (!UI_SetFocus(GUI_SPEED))
|
|
|
|
|
|
Refresh_Transpose(&UI_Label[GUI_SPEED], &mGuiData[GUI_SPEED]);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
AutoBandTop1_ChangeBPM(mGuiData[GUI_SPEED].Current);
|
|
|
|
|
|
if(nvm->param.BPM != mGuiData[GUI_SPEED].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
nvm->param.BPM = mGuiData[GUI_SPEED].Current;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Speed[3] = mGuiData[GUI_SPEED].Current / 128;
|
|
|
|
|
|
Speed[4] = mGuiData[GUI_SPEED].Current % 128;
|
|
|
|
|
|
USART4_SendData(Speed,sizeof(Speed));
|
|
|
|
|
|
//
|
|
|
|
|
|
// ResetAutoPowerCount();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case MSG_ID_TOUCH_LONG_REPEAT:
|
|
|
|
|
|
{
|
2026-08-31 11:13:01 +08:00
|
|
|
|
/* 长按顶栏(y<28)返回三键模式选择页 */
|
|
|
|
|
|
if (msg.LoByte < 28)
|
|
|
|
|
|
{
|
|
|
|
|
|
UI_ReturnToModeSelect();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
2026-08-26 07:26:58 +08:00
|
|
|
|
for(uint8_t k=0; k<TOUCH_AREA_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 )
|
|
|
|
|
|
{
|
|
|
|
|
|
if(pCurrentTouch_Area[k].ID == GUI_SPEED)
|
|
|
|
|
|
{
|
|
|
|
|
|
int flag = pCurrentTouch_Area[k].Flag;
|
|
|
|
|
|
uint8_t last = mGuiData[GUI_SPEED].Current;
|
|
|
|
|
|
|
|
|
|
|
|
if(flag == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(mGuiData[GUI_SPEED].Current < 260)
|
|
|
|
|
|
{
|
|
|
|
|
|
mGuiData[GUI_SPEED].Current += 10;
|
|
|
|
|
|
if(mGuiData[GUI_SPEED].Current > 260)
|
|
|
|
|
|
mGuiData[GUI_SPEED].Current = 260;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(flag == -1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(mGuiData[GUI_SPEED].Current > 40)
|
|
|
|
|
|
{
|
|
|
|
|
|
mGuiData[GUI_SPEED].Current -= 10;
|
|
|
|
|
|
if(mGuiData[GUI_SPEED].Current < 40)
|
|
|
|
|
|
mGuiData[GUI_SPEED].Current = 40;
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>?有数值真正改变,才执行全套刷新、串口、伴奏更<E5A58F>?
|
|
|
|
|
|
if(last != mGuiData[GUI_SPEED].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
Refresh_Transpose(&UI_Label[GUI_SPEED], &mGuiData[GUI_SPEED]);
|
|
|
|
|
|
|
|
|
|
|
|
if(nvm->param.BPM != mGuiData[GUI_SPEED].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
nvm->param.BPM = mGuiData[GUI_SPEED].Current;
|
|
|
|
|
|
}
|
|
|
|
|
|
uint8_t Speed[6] = {0xF0, 0x51, 0x03, 0x00, 0x00, 0xF7};
|
|
|
|
|
|
Speed[3] = mGuiData[GUI_SPEED].Current / 128;
|
|
|
|
|
|
Speed[4] = mGuiData[GUI_SPEED].Current % 128;
|
|
|
|
|
|
USART4_SendData(Speed,sizeof(Speed));
|
|
|
|
|
|
AutoBandTop1_ChangeBPM(mGuiData[GUI_SPEED].Current);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 超时计数无<E695B0>?<3F>变不变都可以重<E4BBA5>?,看你需<E4BDA0>?
|
|
|
|
|
|
//ResetAutoPowerCount();
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case MSG_ID_BP_TRANSPOSE:
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t lastvalue = mGuiData[GUI_TRANSPOSE].Current;
|
|
|
|
|
|
if(mGuiData[GUI_TRANSPOSE].Current != msg.ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
mGuiData[GUI_TRANSPOSE].Current = msg.ID;
|
2026-08-31 06:10:13 +08:00
|
|
|
|
if (!UI_SetFocus(GUI_TRANSPOSE))
|
|
|
|
|
|
Refresh_Transpose(&UI_Label[GUI_TRANSPOSE], &mGuiData[GUI_TRANSPOSE]);
|
2026-08-26 07:26:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(nvm->param.Transpose != mGuiData[GUI_TRANSPOSE].Current)
|
|
|
|
|
|
{
|
|
|
|
|
|
nvm->param.Transpose = mGuiData[GUI_TRANSPOSE].Current;
|
|
|
|
|
|
}
|
|
|
|
|
|
transpose[3] = mGuiData[GUI_TRANSPOSE].Current;
|
|
|
|
|
|
USART4_SendData(transpose,5);
|
|
|
|
|
|
|
|
|
|
|
|
int8_t new_trans = mGuiData[GUI_TRANSPOSE].Current;
|
|
|
|
|
|
delta = new_trans - lastvalue; /* 使用正确<E6ADA3>???? lastvalue */
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
if(/*KEY_ID_1629 != 0 && */StartFlag && KEY_ID_1629 != 22 && KEY_ID_1629 != 23)
|
|
|
|
|
|
{
|
|
|
|
|
|
AutoBandTop1_SetPiecePlayMode(1,0,480);
|
|
|
|
|
|
AutoBandTop1_StartWithNotes(midi_note_buff,GetChordNotesByType(KEY_ID_1629,chord_type_index_map[KEY_ID_1629].type,midi_note_buff));
|
|
|
|
|
|
AutoBandTop1_SetLoopMode(0,1);
|
|
|
|
|
|
AutoBandTop1_StartWithNotes(midi_note_buff,GetChordNotesByType(KEY_ID_1629,chord_type_index_map[KEY_ID_1629].type,midi_note_buff));
|
|
|
|
|
|
}
|
|
|
|
|
|
ResetAutoPowerCount();
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case MSG_ID_CHARG:
|
|
|
|
|
|
Show_Battery_Icon(msg.ID);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
//drv_nvm_save_to_flash();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|