Show full-screen charge UI when USB plugs in while soft-off.
Avoid auto Logo boot on USB reset; enter charge page instead of mode select. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
c16a13edc3
commit
d960d88147
|
|
@ -214,6 +214,16 @@ static void app_adc_key_process(uint8_t idx)
|
|||
}
|
||||
|
||||
/* ==================== ADC1 in4 ==================== */
|
||||
/* 快速探测 Type-C / USB 是否接入(关机开机路径共用) */
|
||||
bool app_adc_usb_is_plugged(void)
|
||||
{
|
||||
uint16_t val;
|
||||
BSP_SelectAdcChannel(4); /* E_ADC1_FUNCTION_USB_CHECK */
|
||||
Delay_us(20);
|
||||
val = ADC_ReadChannel(ADC_CHANNEL_1) >> 5;
|
||||
return (val > 80) ? true : false;
|
||||
}
|
||||
|
||||
static void app_adc_charge_process(void)
|
||||
{
|
||||
uint16_t val = ADC_ReadChannel(ADC_CHANNEL_1) >> 5;
|
||||
|
|
@ -224,11 +234,17 @@ static void app_adc_charge_process(void)
|
|||
if (usb_charging_state != 1)
|
||||
{
|
||||
usb_charging_state = 1;
|
||||
usb_charging_laststate = 1;
|
||||
if (powon)
|
||||
{
|
||||
MainTask_Sendmsg(MSG_ID_CHARG, usb_charging_state, usb_charging_laststate, 0);
|
||||
}
|
||||
usb_charging_laststate = 1;
|
||||
else
|
||||
{
|
||||
/* 关机态插电:立即进全屏充电页,勿走开机 Logo */
|
||||
LOG_I("CHG", "usb plug while soft-off → charge UI");
|
||||
MainTask_Sendmsg(MSG_ID_POWOFF_CHARG, percentage, usb_charging_state, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* 拔掉充电:阈值40,迟滞防抖,仅状态跳变时执行一次 */
|
||||
|
|
@ -237,19 +253,18 @@ static void app_adc_charge_process(void)
|
|||
if (usb_charging_state != 0)
|
||||
{
|
||||
usb_charging_state = 0;
|
||||
|
||||
// 开机场景:发送状态消息
|
||||
usb_charging_laststate = 0;
|
||||
|
||||
if (powon)
|
||||
{
|
||||
MainTask_Sendmsg(MSG_ID_CHARG, usb_charging_state, usb_charging_laststate, 0);
|
||||
MainTask_Sendmsg(MSG_ID_CHARG, usb_charging_state, 1, 0);
|
||||
}
|
||||
// 关机场景:直接切断主电源
|
||||
else
|
||||
{
|
||||
/* 通知 UI 熄灭充电页并关主电 */
|
||||
MainTask_Sendmsg(MSG_ID_POWOFF_CHARG, percentage, 0, 0);
|
||||
BSP_MainPowerEnable(0);
|
||||
}
|
||||
|
||||
usb_charging_laststate = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,4 +24,5 @@ extern bool usb_charging_laststate;
|
|||
extern uint8_t percentage;
|
||||
void app_adc_scan_all(void);
|
||||
void app_adc_in1_scan_part(uint8_t channel);
|
||||
bool app_adc_usb_is_plugged(void);
|
||||
#endif
|
||||
|
|
@ -228,6 +228,25 @@ static void PowerOff(void)
|
|||
CurrUIProcress = IdleProcess;
|
||||
MainTask_Sendmsg(MSG_ID_POWER_OFF, 0, 0, 0);
|
||||
LOG_I("PWR", "power_off done (soft-off, no reset)");
|
||||
|
||||
/* 关机时若已插着 Type-C,立刻进充电画面 */
|
||||
{
|
||||
uint8_t i;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
app_adc_in1_scan_part(4);
|
||||
if (usb_charging_state || app_adc_usb_is_plugged())
|
||||
break;
|
||||
rt_thread_mdelay(5);
|
||||
}
|
||||
if (usb_charging_state || app_adc_usb_is_plugged())
|
||||
{
|
||||
usb_charging_state = 1;
|
||||
usb_charging_laststate = 1;
|
||||
LOG_I("PWR", "soft-off with USB → charge UI");
|
||||
MainTask_Sendmsg(MSG_ID_POWOFF_CHARG, percentage, 1, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Power_Key_Scan()
|
||||
|
|
@ -236,13 +255,32 @@ void Power_Key_Scan()
|
|||
uint32_t now = rt_tick_get();
|
||||
uint32_t holdtick = 0;
|
||||
|
||||
/* 复位/烧录后自动开机一次,避免黑屏干等长按;正常关机后下电再上电仍走此路径 */
|
||||
/* 复位/烧录后:无 USB 则自动开机一次;有 Type-C 则进关机充电画面(勿进 Logo) */
|
||||
if (powon == false && pwr_key_state == KEY_STATE_IDLE && pwr_press_tick == 0)
|
||||
{
|
||||
static uint8_t s_auto_poweron_pending = 1;
|
||||
if (s_auto_poweron_pending)
|
||||
{
|
||||
uint8_t i;
|
||||
s_auto_poweron_pending = 0;
|
||||
/* 多采几次 USB 检测,避免上电瞬间误判 */
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
app_adc_in1_scan_part(4);
|
||||
if (usb_charging_state || app_adc_usb_is_plugged())
|
||||
break;
|
||||
rt_thread_mdelay(5);
|
||||
}
|
||||
if (usb_charging_state || app_adc_usb_is_plugged())
|
||||
{
|
||||
usb_charging_state = 1;
|
||||
usb_charging_laststate = 1;
|
||||
LOG_I("PWR", "boot with USB → charge UI (no logo)");
|
||||
CurrUIProcress = IdleProcess;
|
||||
MainTask_Sendmsg(MSG_ID_POWOFF_CHARG, percentage, 1, 0);
|
||||
pwr_key_state = KEY_STATE_NONE;
|
||||
return;
|
||||
}
|
||||
LOG_I("PWR", "auto power_on");
|
||||
PowerOn();
|
||||
pwr_key_state = KEY_STATE_NONE; /* 忽略开机瞬间可能残留的按键电平 */
|
||||
|
|
|
|||
16
UI/UI_Idle.c
16
UI/UI_Idle.c
|
|
@ -253,8 +253,8 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
|||
|
||||
case MSG_ID_POWOFF_CHARG:
|
||||
{
|
||||
static bool flag = 0;
|
||||
if(flag == 0)
|
||||
static bool s_charge_ui_drawn = false;
|
||||
if(!s_charge_ui_drawn)
|
||||
{
|
||||
BSP_MainPowerEnable(1);
|
||||
LCD_WR_REG(0x29); //Display on
|
||||
|
|
@ -263,7 +263,7 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
|||
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_CHARGE_SCREEN_W, UI0902_CHARGE_SCREEN_H,
|
||||
UI0902_CHARGE_SCREEN_ADDR);
|
||||
LCD_BLK_Set();
|
||||
flag = 1;
|
||||
s_charge_ui_drawn = true;
|
||||
}
|
||||
if(usb_charging_state)
|
||||
{
|
||||
|
|
@ -274,8 +274,14 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
|||
LCD_ShowString_AutoAlign(0, 240, 270, Info, LCD_ALIGN_CENTER,
|
||||
WHITE, UI0902_BG_COLOR, 0, 28);
|
||||
}
|
||||
//else
|
||||
//BSP_MainPowerEnable(0);
|
||||
else
|
||||
{
|
||||
/* 关机充电中拔掉:熄屏,允许下次再进充电页 */
|
||||
LCD_BLK_Clr();
|
||||
LCD_FillByColor(0, 0, 240, 320, BLACK);
|
||||
BSP_MainPowerEnable(0);
|
||||
s_charge_ui_drawn = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue