fix(power): skip boot lights and sound-board init below 6.8V
A protected pack only trickle-charges, so Dream, the 12V rail, and the amp stay off until the pack is above 6.8V. Firmware is 0.2.51. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
6ce5d7a453
commit
a8bf9a3a91
|
|
@ -359,6 +359,7 @@ static uint16_t s_vbat_raw = 0;
|
||||||
static uint8_t s_vbat_valid = 0;
|
static uint8_t s_vbat_valid = 0;
|
||||||
static uint8_t s_charge_ui_allowed = 0;
|
static uint8_t s_charge_ui_allowed = 0;
|
||||||
static uint8_t s_pct_shown_valid = 0;
|
static uint8_t s_pct_shown_valid = 0;
|
||||||
|
static uint8_t s_heavy_boot_msg = 0;
|
||||||
|
|
||||||
/* 高于 6.8V 才允许点亮关机充电页;未采样视为不允许 */
|
/* 高于 6.8V 才允许点亮关机充电页;未采样视为不允许 */
|
||||||
uint8_t app_adc_charge_ui_allowed(void)
|
uint8_t app_adc_charge_ui_allowed(void)
|
||||||
|
|
@ -462,6 +463,19 @@ static void app_adc_battery_report(void)
|
||||||
s_vbat_raw = filtered;
|
s_vbat_raw = filtered;
|
||||||
s_vbat_valid = 1u;
|
s_vbat_valid = 1u;
|
||||||
|
|
||||||
|
/* 高于 6.8V 才允许开机灯和音源板。电压未知或仍低时不发,避免保护态涓流被 Dream/12V 吃掉 */
|
||||||
|
if (!powon || allow == 0u)
|
||||||
|
{
|
||||||
|
s_heavy_boot_msg = 0;
|
||||||
|
if (powon && allow == 0u)
|
||||||
|
Audio_AbortIfNotReady();
|
||||||
|
}
|
||||||
|
else if (!Audio_IsReady() && !Audio_BringupStarted() && !s_heavy_boot_msg)
|
||||||
|
{
|
||||||
|
s_heavy_boot_msg = 1;
|
||||||
|
MainTask_Sendmsg(MSG_ID_HEAVY_BOOT, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* 开机使用中包电压低于等于 6.8V:提示页停留 10s 后关机。插着 Type-C 同样停负载 */
|
/* 开机使用中包电压低于等于 6.8V:提示页停留 10s 后关机。插着 Type-C 同样停负载 */
|
||||||
if (powon && !System_LowBat_IsActive() && allow == 0u)
|
if (powon && !System_LowBat_IsActive() && allow == 0u)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ int16_t MIC_VOL_MAP[11]= {-9000,-7000,-5000,-3000,-1000,1000,3000,5000,7000,9000
|
||||||
|
|
||||||
uint8_t TOUCH_AREA_NUM = (sizeof(Touch_Areas)/sizeof(Touch_AreaTypeDef));
|
uint8_t TOUCH_AREA_NUM = (sizeof(Touch_Areas)/sizeof(Touch_AreaTypeDef));
|
||||||
|
|
||||||
const uint8_t Version[3] = {0,2,50}; /* major.minor.patch — 0.2.50: 音源板未就绪前不进模式起奏 */
|
const uint8_t Version[3] = {0,2,51}; /* major.minor.patch — 0.2.51: 低于 6.8V 不亮开机灯、不初始化音源 */
|
||||||
uint8_t Led = 8;
|
uint8_t Led = 8;
|
||||||
bool PressFlag = 0;
|
bool PressFlag = 0;
|
||||||
|
|
||||||
|
|
@ -232,6 +232,7 @@ static void PowerOff_EmergencyReset(void)
|
||||||
|
|
||||||
/* 音源板初始化完成前为 0。彩灯与上电并行,模式键在置 1 之前忽略 */
|
/* 音源板初始化完成前为 0。彩灯与上电并行,模式键在置 1 之前忽略 */
|
||||||
static volatile uint8_t s_audio_bringup_req = 0;
|
static volatile uint8_t s_audio_bringup_req = 0;
|
||||||
|
static volatile uint8_t s_audio_bringup_started = 0;
|
||||||
static volatile uint8_t s_audio_ready = 0;
|
static volatile uint8_t s_audio_ready = 0;
|
||||||
|
|
||||||
void System_PowerOn(void)
|
void System_PowerOn(void)
|
||||||
|
|
@ -241,6 +242,8 @@ void System_PowerOn(void)
|
||||||
StartFlag = 0;
|
StartFlag = 0;
|
||||||
InModeFlag = false; /* 停在模式选择,禁止拨片/侧面键起奏 */
|
InModeFlag = false; /* 停在模式选择,禁止拨片/侧面键起奏 */
|
||||||
s_audio_ready = 0;
|
s_audio_ready = 0;
|
||||||
|
s_audio_bringup_started = 0;
|
||||||
|
s_audio_bringup_req = 0;
|
||||||
/* 弦音色、移调跨开关机保留。节奏/曲目/走向/段落/蓝牙/BPM 每次开机回默认 */
|
/* 弦音色、移调跨开关机保留。节奏/曲目/走向/段落/蓝牙/BPM 每次开机回默认 */
|
||||||
Session_ApplyPowerOnDefaults();
|
Session_ApplyPowerOnDefaults();
|
||||||
Accomp_ApplyDefaultIChord();
|
Accomp_ApplyDefaultIChord();
|
||||||
|
|
@ -295,6 +298,12 @@ static void Power_QuiesceForCharge(const char *where)
|
||||||
* 彩灯约 1.1s 与音源板上电重叠。s_audio_ready 置位前不进演奏模式。 */
|
* 彩灯约 1.1s 与音源板上电重叠。s_audio_ready 置位前不进演奏模式。 */
|
||||||
void System_RequestAudioBringUp(void)
|
void System_RequestAudioBringUp(void)
|
||||||
{
|
{
|
||||||
|
/* 保护/低电时充电电流很小,Dream+12V+功放会把包电压按住,充不上去 */
|
||||||
|
if (s_audio_bringup_started || s_audio_ready)
|
||||||
|
return;
|
||||||
|
if (!app_adc_charge_ui_allowed())
|
||||||
|
return;
|
||||||
|
s_audio_bringup_started = 1;
|
||||||
s_audio_ready = 0;
|
s_audio_ready = 0;
|
||||||
s_audio_bringup_req = 1;
|
s_audio_bringup_req = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -304,6 +313,19 @@ uint8_t Audio_IsReady(void)
|
||||||
return s_audio_ready;
|
return s_audio_ready;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t Audio_BringupStarted(void)
|
||||||
|
{
|
||||||
|
return s_audio_bringup_started;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Audio_AbortIfNotReady(void)
|
||||||
|
{
|
||||||
|
if (s_audio_ready)
|
||||||
|
return;
|
||||||
|
s_audio_bringup_req = 0;
|
||||||
|
s_audio_bringup_started = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* 低于等于 6.8V:充电画面亮 10s 后关屏,充电继续 */
|
/* 低于等于 6.8V:充电画面亮 10s 后关屏,充电继续 */
|
||||||
#define CHARGE_BL_LOW_MS 10000u
|
#define CHARGE_BL_LOW_MS 10000u
|
||||||
static uint32_t s_charge_bl_off_at = 0;
|
static uint32_t s_charge_bl_off_at = 0;
|
||||||
|
|
@ -367,6 +389,11 @@ void System_AudioBringUp_Poll(void)
|
||||||
{
|
{
|
||||||
if (!s_audio_bringup_req || !powon)
|
if (!s_audio_bringup_req || !powon)
|
||||||
return;
|
return;
|
||||||
|
if (!app_adc_charge_ui_allowed())
|
||||||
|
{
|
||||||
|
Audio_AbortIfNotReady();
|
||||||
|
return;
|
||||||
|
}
|
||||||
s_audio_bringup_req = 0;
|
s_audio_bringup_req = 0;
|
||||||
LOG_I("PWR", "bring up audio rails");
|
LOG_I("PWR", "bring up audio rails");
|
||||||
/* LOGO 和彩灯期间不要求发音,电源在彩灯结束后才开。
|
/* LOGO 和彩灯期间不要求发音,电源在彩灯结束后才开。
|
||||||
|
|
@ -397,8 +424,14 @@ void System_AudioBringUp_Poll(void)
|
||||||
return;
|
return;
|
||||||
MasterVolume_Reapply();
|
MasterVolume_Reapply();
|
||||||
LoadConfig();
|
LoadConfig();
|
||||||
if (!powon)
|
if (!powon || !app_adc_charge_ui_allowed())
|
||||||
|
{
|
||||||
|
Audio_AbortIfNotReady();
|
||||||
|
BSP_DreamCorePowerEnable(0);
|
||||||
|
BSP_HT7178PowerEnable(0);
|
||||||
|
BSP_BlueToothPowerEnable(0);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
s_audio_ready = 1;
|
s_audio_ready = 1;
|
||||||
MainTask_Sendmsg(MSG_ID_EC_VOL, app_adc_get_volume(), level, 0);
|
MainTask_Sendmsg(MSG_ID_EC_VOL, app_adc_get_volume(), level, 0);
|
||||||
LOG_I("PWR", "periph ready + BT UART recv started");
|
LOG_I("PWR", "periph ready + BT UART recv started");
|
||||||
|
|
@ -416,6 +449,8 @@ static void PowerOff(void)
|
||||||
LOG_I("PWR", "power_off begin");
|
LOG_I("PWR", "power_off begin");
|
||||||
powon = false; /* 更新关机标志 */
|
powon = false; /* 更新关机标志 */
|
||||||
s_audio_ready = 0;
|
s_audio_ready = 0;
|
||||||
|
s_audio_bringup_started = 0;
|
||||||
|
s_audio_bringup_req = 0;
|
||||||
InModeFlag = false; /* 软关机后勿残留进模式,避免再开机模式选择页拨片起奏 */
|
InModeFlag = false; /* 软关机后勿残留进模式,避免再开机模式选择页拨片起奏 */
|
||||||
s_pwr_off_grace_ms = 0u; /* 主路径已接管,取消紧急倒计时 */
|
s_pwr_off_grace_ms = 0u; /* 主路径已接管,取消紧急倒计时 */
|
||||||
StopFullTask();
|
StopFullTask();
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#define MSG_ID_LOW_BAT_TIP 30
|
#define MSG_ID_LOW_BAT_TIP 30
|
||||||
#define MSG_ID_STOP_BAND 31 /* 停止键/收束:MainTask 串行硬停 */
|
#define MSG_ID_STOP_BAND 31 /* 停止键/收束:MainTask 串行硬停 */
|
||||||
#define MSG_ID_START_FOLLOWUP 32 /* 保留:软停补发已撤销,不再使用 */
|
#define MSG_ID_START_FOLLOWUP 32 /* 保留:软停补发已撤销,不再使用 */
|
||||||
|
#define MSG_ID_HEAVY_BOOT 33 /* 包电压高于 6.8V 后才点开机灯并初始化音源 */
|
||||||
|
|
||||||
#define GPIO_PIN_RESET false
|
#define GPIO_PIN_RESET false
|
||||||
#define GPIO_PIN_SET true
|
#define GPIO_PIN_SET true
|
||||||
|
|
@ -184,6 +185,8 @@ void System_PowerOn(void);
|
||||||
void System_RequestAudioBringUp(void);
|
void System_RequestAudioBringUp(void);
|
||||||
void System_AudioBringUp_Poll(void);
|
void System_AudioBringUp_Poll(void);
|
||||||
uint8_t Audio_IsReady(void);
|
uint8_t Audio_IsReady(void);
|
||||||
|
uint8_t Audio_BringupStarted(void);
|
||||||
|
void Audio_AbortIfNotReady(void);
|
||||||
void Power_ChargeIdle_LogPoll(void);
|
void Power_ChargeIdle_LogPoll(void);
|
||||||
/* 高于 6.8V:充电页背光保持;低于等于 6.8V:亮 10s 后关屏。拔电时复位倒计时。 */
|
/* 高于 6.8V:充电页背光保持;低于等于 6.8V:亮 10s 后关屏。拔电时复位倒计时。 */
|
||||||
void Power_ChargeBacklightSteady(void);
|
void Power_ChargeBacklightSteady(void);
|
||||||
|
|
|
||||||
24
UI/UI_Idle.c
24
UI/UI_Idle.c
|
|
@ -177,6 +177,20 @@ void Touch_Mode_Select_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex)
|
||||||
extern uint8_t bat_init_done;
|
extern uint8_t bat_init_done;
|
||||||
/* 关机充电页已绘制标志:POWER_ON 需清除,以便再次软关机充电时重绘 */
|
/* 关机充电页已绘制标志:POWER_ON 需清除,以便再次软关机充电时重绘 */
|
||||||
static bool s_charge_ui_drawn = false;
|
static bool s_charge_ui_drawn = false;
|
||||||
|
static uint8_t s_boot_led_done = 0;
|
||||||
|
|
||||||
|
/* 包电压已高于 6.8V 才点侧灯并给音源板上电。电压未知或仍低电时直接返回。 */
|
||||||
|
static void UI_BeginPerformancePower(void)
|
||||||
|
{
|
||||||
|
if (!powon || !app_adc_charge_ui_allowed())
|
||||||
|
return;
|
||||||
|
if (!s_boot_led_done)
|
||||||
|
{
|
||||||
|
s_boot_led_done = 1;
|
||||||
|
UI_BootLedShow();
|
||||||
|
}
|
||||||
|
System_RequestAudioBringUp();
|
||||||
|
}
|
||||||
void IdleProcess(DisplayTaskMessage_Type msg)
|
void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
{
|
{
|
||||||
switch (msg.MessageType)
|
switch (msg.MessageType)
|
||||||
|
|
@ -187,11 +201,11 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
LCD_WR_REG(0x29); /* Display ON */
|
LCD_WR_REG(0x29); /* Display ON */
|
||||||
s_charge_ui_drawn = false;
|
s_charge_ui_drawn = false;
|
||||||
LCD_BLK_Set();
|
LCD_BLK_Set();
|
||||||
/* 彩灯与音源板上电并行。主循环初始化期间模式键先忽略 */
|
s_boot_led_done = 0;
|
||||||
System_RequestAudioBringUp();
|
/* 高于 6.8V 才与彩灯并行给音源板上电;否则只留屏幕,等电压起来再补 */
|
||||||
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_BOOT_LOGO_W, UI0902_BOOT_LOGO_H,
|
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_BOOT_LOGO_W, UI0902_BOOT_LOGO_H,
|
||||||
UI0902_BOOT_LOGO_ADDR);
|
UI0902_BOOT_LOGO_ADDR);
|
||||||
UI_BootLedShow();
|
UI_BeginPerformancePower();
|
||||||
|
|
||||||
UI_DrawModeSelectScreen();
|
UI_DrawModeSelectScreen();
|
||||||
/* 先启动触摸再返回,功放初始化改到主循环,避免 UI 堵在 I2C 里点击无响应 */
|
/* 先启动触摸再返回,功放初始化改到主循环,避免 UI 堵在 I2C 里点击无响应 */
|
||||||
|
|
@ -200,6 +214,10 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, level, 1, WHITE, GRAY);
|
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, level, 1, WHITE, GRAY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MSG_ID_HEAVY_BOOT:
|
||||||
|
UI_BeginPerformancePower();
|
||||||
|
break;
|
||||||
|
|
||||||
case MSG_ID_POWER_OFF:
|
case MSG_ID_POWER_OFF:
|
||||||
/* 无 Type-C:整机关机熄屏;有 Type-C 时随后 POWOFF_CHARG 会再亮充电图 */
|
/* 无 Type-C:整机关机熄屏;有 Type-C 时随后 POWOFF_CHARG 会再亮充电图 */
|
||||||
LCD_BLK_Clr();
|
LCD_BLK_Clr();
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ void TaskMainThread_entry(void* parameter)
|
||||||
switch(xEvent.MessageType)
|
switch(xEvent.MessageType)
|
||||||
{
|
{
|
||||||
case MSG_ID_POWER_ON : UITask_Sendmsg(MSG_ID_POWER_ON, xEvent.ID, xEvent.HiByte, xEvent.LoByte); break;
|
case MSG_ID_POWER_ON : UITask_Sendmsg(MSG_ID_POWER_ON, xEvent.ID, xEvent.HiByte, xEvent.LoByte); break;
|
||||||
|
case MSG_ID_HEAVY_BOOT : UITask_Sendmsg(MSG_ID_HEAVY_BOOT, xEvent.ID, xEvent.HiByte, xEvent.LoByte); break;
|
||||||
case MSG_ID_POWER_OFF : break;
|
case MSG_ID_POWER_OFF : break;
|
||||||
//case MSG_ID_ADCIN1KEY : ADC_IN1_KEY_Handle(xEvent.ID);break;
|
//case MSG_ID_ADCIN1KEY : ADC_IN1_KEY_Handle(xEvent.ID);break;
|
||||||
case MSG_ID_BP_KEY:
|
case MSG_ID_BP_KEY:
|
||||||
|
|
@ -147,6 +148,7 @@ void TaskMainThread_entry(void* parameter)
|
||||||
/* 立即停声并切掉音源/12V/蓝牙,避免提示的 10s 里继续把电池拉过保护电压 */
|
/* 立即停声并切掉音源/12V/蓝牙,避免提示的 10s 里继续把电池拉过保护电压 */
|
||||||
Stop_AutoBand();
|
Stop_AutoBand();
|
||||||
Send_volume(0);
|
Send_volume(0);
|
||||||
|
Audio_AbortIfNotReady();
|
||||||
BSP_DreamCorePowerEnable(0);
|
BSP_DreamCorePowerEnable(0);
|
||||||
BSP_HT7178PowerEnable(0);
|
BSP_HT7178PowerEnable(0);
|
||||||
BSP_BlueToothPowerEnable(0);
|
BSP_BlueToothPowerEnable(0);
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ TONE_HDR = PROJ / "project" / "inc" / "ExtFlash_Tone_Addr.h"
|
||||||
IAP_DIR = REPO / "升级" / "MCU主控升级"
|
IAP_DIR = REPO / "升级" / "MCU主控升级"
|
||||||
OUT_ROOT = REPO / "tools" / "out"
|
OUT_ROOT = REPO / "tools" / "out"
|
||||||
|
|
||||||
FW_VER = "0.2.48"
|
FW_VER = "0.2.51"
|
||||||
UI0902_RES_BASE = 0x00100000
|
UI0902_RES_BASE = 0x00100000
|
||||||
BOOT_FLASH_ADDR = 0x08000000
|
BOOT_FLASH_ADDR = 0x08000000
|
||||||
APP_FLASH_ADDR = 0x08008000
|
APP_FLASH_ADDR = 0x08008000
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue