fix(pick): block accompaniment until a play mode is entered

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-24 18:42:32 +08:00
parent 3eba48ece1
commit 18394d0b9b
4 changed files with 16 additions and 2 deletions

View File

@ -229,6 +229,7 @@ void System_PowerOn(void)
LOG_I("PWR", "power_on begin");
/* 软关机不复位 MCU:清掉上次会话演奏状态,默认当前调一级大和弦(C 调=do mi sol) */
StartFlag = 0;
InModeFlag = false; /* 停在模式选择,禁止拨片/侧面键起奏 */
Accomp_ApplyDefaultIChord();
app_tm1629_reset_key_state();
s_pwr_rails_cut = 0u;
@ -272,6 +273,7 @@ static void PowerOff(void)
LOG_I("PWR", "power_off begin");
powon = false; /* 更新关机标志 */
InModeFlag = false; /* 软关机后勿残留进模式,避免再开机模式选择页拨片起奏 */
s_pwr_off_grace_ms = 0u; /* 主路径已接管,取消紧急倒计时 */
StopFullTask();
@ -901,6 +903,9 @@ void ADC_IN1_KEY_Handle(uint8_t key,bool on)
uint8_t was_playing;
(void)on;
/* 模式选择页:侧面键不得起奏 */
if (!InModeFlag)
return;
/* 万能:前奏/间奏/尾奏/断奏无响应(含 App 06 指令) */
if (mGuiData[GUI_TAB_INDEX].Current == 0)
return;
@ -1617,6 +1622,13 @@ void Pick_Handle()
uint8_t note_cnt = 0;
uint8_t chord_id = KEY_ID_1629;
/* 未进入演奏模式(开机模式选择页)禁止起奏 */
if (!InModeFlag)
{
LOG_I("pick", "abort: not in mode");
return;
}
/* 空库/加载失败时禁止起奏:否则 TMR6 ISR 内 AutoBand 可能 HardFault,
* LCD 卡死且主循环 Power_Key_Scan 不再跑 → 只能 RESET */
if (!App_Auto_IsPresetReady())

View File

@ -192,6 +192,7 @@ extern volatile uint32_t ADDRESS;
extern uint8_t key_toggle[4];
extern bool StartFlag;
extern bool InModeFlag; /* 已进入演奏模式;模式选择页必须为 false */
extern int16_t MIC_VOL_MAP[11];
extern const uint8_t Version[3];

View File

@ -64,6 +64,7 @@ void UI_ReturnToModeSelect(void)
void UI_DrawModeSelectScreen(void)
{
InModeFlag = false; /* 模式选择页:未进入演奏模式,禁止伴奏起奏 */
UI_ClearFocus();
pCurrentTouch_Area = Touch_ModeSelect_Areas;

View File

@ -107,7 +107,7 @@ void TaskMainThread_entry(void* parameter)
case MSG_ID_POWER_OFF : break;
//case MSG_ID_ADCIN1KEY : ADC_IN1_KEY_Handle(xEvent.ID);break;
case MSG_ID_BP_KEY:
if (!System_LowBat_IsActive())
if (!System_LowBat_IsActive() && InModeFlag)
Pick_Handle();
break;
case MSG_ID_STOP_BAND:
@ -121,7 +121,7 @@ void TaskMainThread_entry(void* parameter)
break;
case MSG_ID_START_FOLLOWUP:
/* 停后补发:强制再 Start,勿因 NotifyPlayActivity 误判「在播」只换和弦 */
if (!System_LowBat_IsActive() && Band_TakeStartFollowup())
if (!System_LowBat_IsActive() && InModeFlag && Band_TakeStartFollowup())
{
Band_BeginStartFollowup();
Pick_Handle();