feat: 完成弹力魔盒初版固件
This commit is contained in:
+23
-19
@@ -24,6 +24,7 @@
|
||||
#include "app_main.h"
|
||||
#include "usr_le_api.h"
|
||||
#include "led_manager.h"
|
||||
#include "asm/charge.h"
|
||||
#include "asm/power/power_api.h"
|
||||
#include "asm/power/power_reset.h"
|
||||
|
||||
@@ -34,6 +35,7 @@
|
||||
|
||||
extern void clr_wdt(void);
|
||||
extern u32 timer_get_ms(void);
|
||||
extern u8 is_ldo5v_wakeup(void);
|
||||
|
||||
/**
|
||||
* @brief 忙等若干毫秒,并喂狗
|
||||
@@ -116,9 +118,17 @@ static uint8_t boot_skip_key_wait(void)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
/* LDO5V wake is latched by P33 and remains reliable while the live
|
||||
* voltage/CHG detectors are still settling after a soft-poweroff reset. */
|
||||
if (is_ldo5v_wakeup()) {
|
||||
log_info("boot ldo5v wake, skip key wait\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* USB 在位(充电口有电):说明是插着电源,不是用户凭空按键开机 */
|
||||
for (i = 0; i < 10; i++) {
|
||||
if (bsp_chg_is_low() || bsp_vpwr_is_online()) {
|
||||
if (bsp_chg_is_low() || bsp_vpwr_is_online()
|
||||
|| get_ldo5v_online_hw()) {
|
||||
log_info("boot usb, skip key wait\n");
|
||||
return 1;
|
||||
}
|
||||
@@ -141,10 +151,7 @@ static uint8_t boot_skip_key_wait(void)
|
||||
|
||||
/**
|
||||
* @brief 等待并判定开机按键
|
||||
* @note 配对(5s)不再一到点就立即提交:需要继续按住观察是否会按到 12s
|
||||
* 触发 OTA,真正的配对提交放在松手那一刻做。按满 5s 绿灯先切到配对
|
||||
* 快闪提示,行为上仍是“按满 5s 再松手即进配对”,只是多给了继续按到
|
||||
* 12s 改道 OTA 的机会。
|
||||
* @note 按满 5s 立即进入配对;继续按住到 12s 时直接转入 OTA。
|
||||
* 3s 常亮 / 5s 快闪直接复用 led_manager 的 LED_EVENT_STANDBY /
|
||||
* LED_EVENT_PAIRING 事件(和正常运行时配对灯效完全一致的节奏),
|
||||
* 不再手写一份闪烁定时。LED 事件库由调用方(usr_jb_init)在本函数
|
||||
@@ -155,7 +162,7 @@ void app_boot_wait_key(void)
|
||||
{
|
||||
uint32_t t0;
|
||||
uint32_t elapsed;
|
||||
uint8_t pair_armed = 0;
|
||||
uint8_t pair_started = 0;
|
||||
|
||||
usr_var.usr_goto_pair = 0;
|
||||
|
||||
@@ -190,15 +197,17 @@ void app_boot_wait_key(void)
|
||||
return;
|
||||
}
|
||||
|
||||
/* 5s 只武装配对并切到快闪,真正提交放到松手那一刻,给继续按到 12s 改道 OTA 的机会 */
|
||||
if (!pair_armed && (elapsed >= BOARD_KEY_PAIR_MS)) {
|
||||
pair_armed = 1;
|
||||
/* 5s 立即进入配对;继续按住时仍检测 12s OTA。 */
|
||||
if (!pair_started && (elapsed >= BOARD_KEY_PAIR_MS)) {
|
||||
pair_started = 1;
|
||||
usr_var.usr_goto_pair = 1;
|
||||
usr_clear_pair_info_noreset();
|
||||
app_pair_start();
|
||||
LED_EventDelete(LED_EVENT_STANDBY);
|
||||
LED_EventAdd(LED_EVENT_PAIRING);
|
||||
log_info("boot hold %ums, pair hint blink (release now for pair, "
|
||||
"keep holding to %ums for ota)\n",
|
||||
log_info("boot hold %ums, power on + pair (keep holding to %ums for ota)\n",
|
||||
(unsigned)elapsed, (unsigned)BOARD_KEY_OTA_MS);
|
||||
} else if (!pair_armed && !LED_IsEventExist(LED_EVENT_STANDBY)
|
||||
} else if (!pair_started && !LED_IsEventExist(LED_EVENT_STANDBY)
|
||||
&& (elapsed >= BOARD_KEY_POWER_MS)) {
|
||||
LED_EventAdd(LED_EVENT_STANDBY);
|
||||
log_info("boot hold 3s, will power on\n");
|
||||
@@ -213,13 +222,8 @@ void app_boot_wait_key(void)
|
||||
boot_sleep();
|
||||
}
|
||||
|
||||
/* 松手时已过 5s(且没按到 12s):提交配对;否则只是正常开机 */
|
||||
if (pair_armed) {
|
||||
usr_var.usr_goto_pair = 1;
|
||||
usr_clear_pair_info_noreset();
|
||||
app_pair_start();
|
||||
log_info("boot hold %ums, power on + pair\n", (unsigned)elapsed);
|
||||
} else {
|
||||
/* 配对已在 5s 阈值提交;松手这里只记录普通开机。 */
|
||||
if (!pair_started) {
|
||||
log_info("boot hold %ums, power on\n", (unsigned)elapsed);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user