feat: 完成弹力魔盒初版固件

This commit is contained in:
2026-08-31 20:15:19 +08:00
parent 026d6d5da7
commit b63a928b92
34 changed files with 1320 additions and 781 deletions
+23 -19
View File
@@ -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);
}
}