修复了配网时进入休眠导致配网时间变成的问题,同时增加配网时间到了之后停止广播

This commit is contained in:
2026-09-10 12:14:29 +08:00
parent 5875d2a339
commit c141c7e0aa
6 changed files with 73 additions and 27 deletions
+15 -8
View File
@@ -2,8 +2,8 @@
* @file usr_jb_main.c
* @brief CBC2 业务组合根:只做“先后调用谁、谁通知谁”,不含具体业务算法
* @author cyWu <1917507415@qq.com>
* @date 2026.08.27
* @version V2.2.0
* @date 2026.09.10
* @version V2.3.0
* @history
* - V1.0.0, 2026.08.21, cyWu, 首次发布
* - V1.1.0, 2026.08.24, cyWu, 收口未接线模块;DP2 仅第 1 字节点动 1s
@@ -21,6 +21,9 @@
* - V2.2.0, 2026.08.27, cyWu, app_led_init() 提前到 app_boot_wait_key() 之前,
* 开机 3s/5s/拒绝开机低电闪直接用灯效事件表,
* 不用再各自摸裸 GPIO 手搓一份闪烁定时
* - V2.3.0, 2026.09.10, cyWu, 配网期间禁睡:priority=0 时低功耗会把 20ms
* 节拍拉长,绑定广播和 AUTHSETUP 握手变慢,
* 实测配网可拖到数分钟
*
* @note 协议生成文件 jb_product.c 不要填业务。APP 下行写 gDevData。
* usr_timer_loop 由 BLE 回调,勿再注册第二份。
@@ -84,7 +87,7 @@ const uint8_t g_usr_le_pcode[USR_LE_PCODE_LEN] = {
*/
typedef enum {
USR_TICK_IDLE = 0, /**< 可休眠 */
USR_TICK_BLOCK_SLEEP /**< 禁止休眠(按键按住/玩法中/关机等待/电机运转,含换向死区)*/
USR_TICK_BLOCK_SLEEP /**< 禁止休眠(按键按住/玩法中/关机等待/电机运转/配网,含换向死区)*/
} UsrTickMode_t;
/** 调度器状态,替代原来 2 个散落的 static */
@@ -155,15 +158,17 @@ static void usr_poweroff_finalize_hook(void)
/**
* @brief 按当前业务状态判断能不能休眠
* @note 换向死区(bsp_motor_is_busy 已把它算进"忙")、点动、玩法、按键按住、
* 关机等待,统一都是"不能睡",节拍周期都一样用 USR_TIMER_IDLE_MS
* 不再区分要不要 1ms
* 关机等待、配网窗口,统一都是"不能睡",节拍周期都一样用 USR_TIMER_IDLE_MS
* 配网只跟 120s 配对窗口(app_pair_is_active):窗口内禁睡,保证广播
* 节拍不被低功耗拉长;成功或超时后恢复可休眠。
* @return 本次应使用的档位
*/
static UsrTickMode_t usr_timer_pick_mode(void)
{
if (bsp_key_is_pressed() || app_power_poweroff_pending()
|| app_mode_get_active() || bsp_motor_is_busy()
|| app_function_is_hand_busy()) {
|| app_function_is_hand_busy()
|| app_pair_is_active()) {
return USR_TICK_BLOCK_SLEEP;
}
return USR_TICK_IDLE;
@@ -292,8 +297,10 @@ void usr_jb_init(void)
user_key_lock_if_held();
app_function_power_on_silent();
usr_timer_rearm(USR_TICK_IDLE);
log_info("timer idle %ums, sleep ok\n", (unsigned)USR_TIMER_IDLE_MS);
/* 开机若已进配对,第一拍就禁睡,不要先挂可休眠档再等 20ms 才切 */
usr_timer_rearm(usr_timer_pick_mode());
log_info("timer %ums, mode=%d\n", (unsigned)USR_TIMER_IDLE_MS,
(int)s_sched.mode);
}
/**