Compare commits
2
Commits
c141c7e0aa
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6c2c6dd52 | ||
|
|
c7adda3711 |
@@ -3,7 +3,7 @@
|
|||||||
* @brief 设备功能开关 + 自动玩法 + 手动点动 + 按键动作实现
|
* @brief 设备功能开关 + 自动玩法 + 手动点动 + 按键动作实现
|
||||||
* @author cyWu <1917507415@qq.com>
|
* @author cyWu <1917507415@qq.com>
|
||||||
* @date 2026.09.10
|
* @date 2026.09.10
|
||||||
* @version V1.2.0
|
* @version V1.3.0
|
||||||
* @history
|
* @history
|
||||||
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现 DP0 开关、自动玩法、手动点动与按键动作
|
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现 DP0 开关、自动玩法、手动点动与按键动作
|
||||||
* - V1.1.0, 2026.08.26, cyWu, 切模式闪灯改到 function_play_mode_apply 统一
|
* - V1.1.0, 2026.08.26, cyWu, 切模式闪灯改到 function_play_mode_apply 统一
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
* 自动模式新增单次最长运行时长,到点回待机
|
* 自动模式新增单次最长运行时长,到点回待机
|
||||||
* - V1.2.0, 2026.09.10, cyWu, 软关后 APP 下发其它控制指令也可唤醒,
|
* - V1.2.0, 2026.09.10, cyWu, 软关后 APP 下发其它控制指令也可唤醒,
|
||||||
* 唤醒后本拍继续执行该指令(玩法/点动)
|
* 唤醒后本拍继续执行该指令(玩法/点动)
|
||||||
|
* - V1.3.0, 2026.09.10, cyWu, 短按循环改为 0→4→2→6→1→3→5,App DP1 编号不变
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "app_function.h"
|
#include "app_function.h"
|
||||||
@@ -54,6 +55,28 @@ static void function_play_mode_timeout(uint16_t dt);
|
|||||||
static void function_hand_poll(void);
|
static void function_hand_poll(void);
|
||||||
static void function_on_click(void);
|
static void function_on_click(void);
|
||||||
|
|
||||||
|
/* 短按循环顺序(协议玩法号):停 → s_mode4 → s_mode2 → s_mode6 → s_mode1 → s_mode3 → s_mode5 → 停 */
|
||||||
|
static const uint8_t s_key_play_seq[7] = {
|
||||||
|
0, 4, 2, 6, 1, 3, 5
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 按短按顺序取下一档玩法
|
||||||
|
* @param cur 当前 DP1 玩法号 0~6
|
||||||
|
* @return 下一档玩法号
|
||||||
|
*/
|
||||||
|
static uint8_t function_key_play_next(uint8_t cur)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < 7; i++) {
|
||||||
|
if (s_key_play_seq[i] == cur) {
|
||||||
|
return s_key_play_seq[(i + 1) % 7];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 初始化功能模块状态
|
* @brief 初始化功能模块状态
|
||||||
* @return 无
|
* @return 无
|
||||||
@@ -366,7 +389,7 @@ static void function_hand_poll(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 短按:自动模式 0→1→…→6→0(闪灯提示交给 function_play_mode_apply)
|
* @brief 短按:按 s_key_play_seq 切自动模式(闪灯提示交给 function_play_mode_apply)
|
||||||
* @return 无
|
* @return 无
|
||||||
*/
|
*/
|
||||||
static void function_on_click(void)
|
static void function_on_click(void)
|
||||||
@@ -375,7 +398,7 @@ static void function_on_click(void)
|
|||||||
log_info("key click ignored, hand busy\n");
|
log_info("key click ignored, hand busy\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
function_play_mode_apply((uint8_t)((s_func.play_mode + 1) % 7));
|
function_play_mode_apply(function_key_play_next(s_func.play_mode));
|
||||||
log_info("key click play_mode=%d\n", s_func.play_mode);
|
log_info("key click play_mode=%d\n", s_func.play_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+23
-15
@@ -2,8 +2,8 @@
|
|||||||
* @file app_led.c
|
* @file app_led.c
|
||||||
* @brief CBC2 灯效适配:充电红与待机绿可同时亮,不再 if-else 互斥
|
* @brief CBC2 灯效适配:充电红与待机绿可同时亮,不再 if-else 互斥
|
||||||
* @author cyWu <1917507415@qq.com>
|
* @author cyWu <1917507415@qq.com>
|
||||||
* @date 2026.08.25
|
* @date 2026.09.10
|
||||||
* @version V2.0.0
|
* @version V2.5.0
|
||||||
* @history
|
* @history
|
||||||
* - V1.0.0, 2026.08.21, cyWu, 首次发布
|
* - V1.0.0, 2026.08.21, cyWu, 首次发布
|
||||||
* - V1.1.0, 2026.08.25, cyWu, 开机绿灯只提示几秒
|
* - V1.1.0, 2026.08.25, cyWu, 开机绿灯只提示几秒
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
* - V2.2.0, 2026.08.25, cyWu, 重启/清场逻辑各提一个小函数,把意图写进注释
|
* - V2.2.0, 2026.08.25, cyWu, 重启/清场逻辑各提一个小函数,把意图写进注释
|
||||||
* - V2.3.0, 2026.08.27, cyWu, 新增 OTA 红绿交替灯效
|
* - V2.3.0, 2026.08.27, cyWu, 新增 OTA 红绿交替灯效
|
||||||
* - V2.4.0, 2026.08.27, cyWu, 新增空电关机红闪 5 下灯效
|
* - V2.4.0, 2026.08.27, cyWu, 新增空电关机红闪 5 下灯效
|
||||||
|
* - V2.5.0, 2026.09.10, cyWu, 切模式时保留待机绿,闪完不再多一闪
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "app_led.h"
|
#include "app_led.h"
|
||||||
@@ -53,15 +54,6 @@ static uint8_t green_pattern_busy(void)
|
|||||||
|| LED_IsEventExist(LED_EVENT_PAIR_FAIL));
|
|| LED_IsEventExist(LED_EVENT_PAIR_FAIL));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief 绿灯正被配对/切模式/结果占用时,不要再挂待机绿
|
|
||||||
* @return 1=绿灯忙
|
|
||||||
*/
|
|
||||||
static uint8_t green_busy(void)
|
|
||||||
{
|
|
||||||
return (uint8_t)(LED_IsEventExist(LED_EVENT_PAIRING) || green_pattern_busy());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 灯效初始化
|
* @brief 灯效初始化
|
||||||
* @return APP_LED_OK=成功
|
* @return APP_LED_OK=成功
|
||||||
@@ -157,6 +149,20 @@ uint8_t app_led_is_empty_off(void)
|
|||||||
return s_empty_off;
|
return s_empty_off;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 短灯效还在播时不要进休眠
|
||||||
|
* @return 1=应禁睡,0=可以睡
|
||||||
|
*/
|
||||||
|
uint8_t app_led_need_nosleep(void)
|
||||||
|
{
|
||||||
|
if (s_ota || s_empty_off) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return (uint8_t)(LED_IsEventExist(LED_EVENT_PAIR_FAIL)
|
||||||
|
|| LED_IsEventExist(LED_EVENT_PAIR_OK)
|
||||||
|
|| LED_IsEventExist(LED_EVENT_MODE));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 播放一次性配对结果灯
|
* @brief 播放一次性配对结果灯
|
||||||
* @param ok 1=成功常绿,0=失败红绿交替
|
* @param ok 1=成功常绿,0=失败红绿交替
|
||||||
@@ -263,11 +269,13 @@ void app_led_run(uint16_t dt, uint8_t app_power)
|
|||||||
led_clear_function_events();
|
led_clear_function_events();
|
||||||
} else {
|
} else {
|
||||||
#if BOARD_LED_STANDBY_ON
|
#if BOARD_LED_STANDBY_ON
|
||||||
/* 正在充电(红)或已充满(绿)时都不叠加待机绿,只有完全没接电才显示待机 */
|
/* 配对/切模式/配对失败用 return 1 拦住待机,这里不用删。
|
||||||
if ((charge_led == 0) && !pairing && !green_busy()) {
|
* 充电红不占用绿灯:拦截只是不跑待机 handler,绿灯会停在上次的亮。
|
||||||
LED_EventAdd(LED_EVENT_STANDBY);
|
* 所以充电时要删待机,把绿灯掐灭。 */
|
||||||
} else {
|
if (charge_led == 1) {
|
||||||
LED_EventDelete(LED_EVENT_STANDBY);
|
LED_EventDelete(LED_EVENT_STANDBY);
|
||||||
|
} else {
|
||||||
|
LED_EventAdd(LED_EVENT_STANDBY);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,13 @@ void app_led_request_empty_off(void);
|
|||||||
*/
|
*/
|
||||||
uint8_t app_led_is_empty_off(void);
|
uint8_t app_led_is_empty_off(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 短灯效还在播时不要进休眠(配对失败/成功、切模式闪)
|
||||||
|
* @note 灯刷新跟业务定时器走;休眠后节拍被拉长,交替闪会又慢又少。
|
||||||
|
* @return 1=应禁睡,0=可以睡
|
||||||
|
*/
|
||||||
|
uint8_t app_led_need_nosleep(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 清空全部灯事件并灭灯(关机前调用)
|
* @brief 清空全部灯事件并灭灯(关机前调用)
|
||||||
* @return 无
|
* @return 无
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ static const AppModeStep_t s_mode6[] = { /* 闪电快闪:两下轻、两下重
|
|||||||
STEP_END
|
STEP_END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 下标 = 协议玩法编号 DP1:1~6 对应 s_mode1~s_mode6。短按循环顺序在 app_function.c */
|
||||||
static const AppModeStep_t *const s_tables[7] = {
|
static const AppModeStep_t *const s_tables[7] = {
|
||||||
0, s_mode1, s_mode2, s_mode3, s_mode4, s_mode5, s_mode6
|
0, s_mode1, s_mode2, s_mode3, s_mode4, s_mode5, s_mode6
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,12 +2,13 @@
|
|||||||
* @file led_manager.c
|
* @file led_manager.c
|
||||||
* @brief CBC2 灯事件:充电红与待机绿走不同通道,可同时亮
|
* @brief CBC2 灯事件:充电红与待机绿走不同通道,可同时亮
|
||||||
* @author cyWu <1917507415@qq.com>
|
* @author cyWu <1917507415@qq.com>
|
||||||
* @date 2026.08.27
|
* @date 2026.09.10
|
||||||
* @version V1.1.0
|
* @version V1.2.0
|
||||||
* @history
|
* @history
|
||||||
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现红绿独立通道灯事件表
|
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现红绿独立通道灯事件表
|
||||||
* - V1.1.0, 2026.08.27, cyWu, 新增 LED_EVENT_BOOT_REJECT:拒绝开机低电闪,
|
* - V1.1.0, 2026.08.27, cyWu, 新增 LED_EVENT_BOOT_REJECT:拒绝开机低电闪,
|
||||||
* 供 app_boot 在按键判定阶段直接复用事件库
|
* 供 app_boot 在按键判定阶段直接复用事件库
|
||||||
|
* - V1.2.0, 2026.09.10, cyWu, 切模式闪时待机绿不写灯,闪完同一拍衔上常亮
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "led_manager.h"
|
#include "led_manager.h"
|
||||||
@@ -67,26 +68,29 @@ static uint8_t led_standby_handler(LED_Config_t *led_config)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 配对绿快闪(无限)
|
* @brief 配对绿快闪(无限)
|
||||||
|
* @note 返回 1 拦住待机绿,否则待机会把快闪盖成常亮
|
||||||
* @param led_config 配置
|
* @param led_config 配置
|
||||||
* @return 0
|
* @return 1
|
||||||
*/
|
*/
|
||||||
static uint8_t led_pairing_handler(LED_Config_t *led_config)
|
static uint8_t led_pairing_handler(LED_Config_t *led_config)
|
||||||
{
|
{
|
||||||
(void)LED_Update(led_config);
|
(void)LED_Update(led_config);
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 切模式闪完两下后删事件
|
* @brief 切模式闪完两下后删事件
|
||||||
|
* @note 还在闪时返回 1,拦住待机绿,避免把闪烁盖成常亮
|
||||||
* @param led_config 配置
|
* @param led_config 配置
|
||||||
* @return 0
|
* @return 1=还在闪,0=闪完已删
|
||||||
*/
|
*/
|
||||||
static uint8_t led_mode_handler(LED_Config_t *led_config)
|
static uint8_t led_mode_handler(LED_Config_t *led_config)
|
||||||
{
|
{
|
||||||
if (LED_Update(led_config) == 0) {
|
if (LED_Update(led_config) == 0) {
|
||||||
LED_EventDelete(LED_EVENT_MODE); /* 闪完两下后删,绿灯还给待机/配对 */
|
LED_EventDelete(LED_EVENT_MODE); /* 闪完两下后删,绿灯还给待机/配对 */
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -248,8 +252,7 @@ void user_led_init(void)
|
|||||||
.config.alternatingBlinkParams.Group[0] = LED_CHANNEL(LED_CH_RED),
|
.config.alternatingBlinkParams.Group[0] = LED_CHANNEL(LED_CH_RED),
|
||||||
.config.alternatingBlinkParams.Group[1] = LED_CHANNEL(LED_CH_GREEN),
|
.config.alternatingBlinkParams.Group[1] = LED_CHANNEL(LED_CH_GREEN),
|
||||||
.config.alternatingBlinkParams.Cycle = (uint32_t)(BOARD_LED_ALT_MS * 2u),
|
.config.alternatingBlinkParams.Cycle = (uint32_t)(BOARD_LED_ALT_MS * 2u),
|
||||||
.config.runNum = (uint16_t)((BOARD_LED_PAIR_FAIL_MS + (BOARD_LED_ALT_MS * 2u) - 1u)
|
.config.runNum = (uint16_t)((BOARD_LED_PAIR_FAIL_MS + (BOARD_LED_ALT_MS * 2u) - 1u)/ (BOARD_LED_ALT_MS * 2u)),
|
||||||
/ (BOARD_LED_ALT_MS * 2u)),
|
|
||||||
.ledEventHandler = led_pair_fail_handler,
|
.ledEventHandler = led_pair_fail_handler,
|
||||||
},
|
},
|
||||||
[LED_EVENT_OTA] = {
|
[LED_EVENT_OTA] = {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
/* MCU software version: Vmajor.minor.patch */
|
/* MCU software version: Vmajor.minor.patch */
|
||||||
#define JB_MCU_SW_VERSION_MAJOR 1
|
#define JB_MCU_SW_VERSION_MAJOR 1
|
||||||
#define JB_MCU_SW_VERSION_MINOR 0
|
#define JB_MCU_SW_VERSION_MINOR 0
|
||||||
#define JB_MCU_SW_VERSION_PATCH 0
|
#define JB_MCU_SW_VERSION_PATCH 1
|
||||||
|
|
||||||
/* MCU hardware version: Vmajor.minor.patch */
|
/* MCU hardware version: Vmajor.minor.patch */
|
||||||
#define JB_MCU_HW_VERSION_MAJOR 1
|
#define JB_MCU_HW_VERSION_MAJOR 1
|
||||||
|
|||||||
@@ -159,8 +159,9 @@ static void usr_poweroff_finalize_hook(void)
|
|||||||
* @brief 按当前业务状态判断能不能休眠
|
* @brief 按当前业务状态判断能不能休眠
|
||||||
* @note 换向死区(bsp_motor_is_busy 已把它算进"忙")、点动、玩法、按键按住、
|
* @note 换向死区(bsp_motor_is_busy 已把它算进"忙")、点动、玩法、按键按住、
|
||||||
* 关机等待、配网窗口,统一都是"不能睡",节拍周期都一样用 USR_TIMER_IDLE_MS。
|
* 关机等待、配网窗口,统一都是"不能睡",节拍周期都一样用 USR_TIMER_IDLE_MS。
|
||||||
* 配网只跟 120s 配对窗口(app_pair_is_active):窗口内禁睡,保证广播
|
* 配网只跟 120s 配对窗口(app_pair_is_active):窗口内禁睡。
|
||||||
* 节拍不被低功耗拉长;成功或超时后恢复可休眠。
|
* 超时后配对失败灯还要再闪约 3s,这段也禁睡,否则节拍被拉长,
|
||||||
|
* 红绿交替会又慢又少。
|
||||||
* @return 本次应使用的档位
|
* @return 本次应使用的档位
|
||||||
*/
|
*/
|
||||||
static UsrTickMode_t usr_timer_pick_mode(void)
|
static UsrTickMode_t usr_timer_pick_mode(void)
|
||||||
@@ -168,7 +169,8 @@ static UsrTickMode_t usr_timer_pick_mode(void)
|
|||||||
if (bsp_key_is_pressed() || app_power_poweroff_pending()
|
if (bsp_key_is_pressed() || app_power_poweroff_pending()
|
||||||
|| app_mode_get_active() || bsp_motor_is_busy()
|
|| app_mode_get_active() || bsp_motor_is_busy()
|
||||||
|| app_function_is_hand_busy()
|
|| app_function_is_hand_busy()
|
||||||
|| app_pair_is_active()) {
|
|| app_pair_is_active()
|
||||||
|
|| app_led_need_nosleep()) {
|
||||||
return USR_TICK_BLOCK_SLEEP;
|
return USR_TICK_BLOCK_SLEEP;
|
||||||
}
|
}
|
||||||
return USR_TICK_IDLE;
|
return USR_TICK_IDLE;
|
||||||
|
|||||||
+1
-1
@@ -80,7 +80,7 @@
|
|||||||
|
|
||||||
| 操作 | 条件 | 行为 |
|
| 操作 | 条件 | 行为 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 短按(松开且未到 3 秒) | 功能开、空闲 | 切换玩法:停 → 玩法1 → … → 玩法6 → 停,循环;绿灯闪两下 |
|
| 短按(松开且未到 3 秒) | 功能开、空闲 | 切换玩法:停 → 起伏攻防战 → 飞鸟俯冲 → 闪电快闪 → 弹力伪装 → 云阶小陀螺 → 微风拂动 → 停,循环;绿灯闪两下。App 仍按 DP1 原编号选玩法 |
|
||||||
| 短按 | 功能已关(App 软关 / 拔充电线后) | 只唤醒功能,不切玩法;挂待机绿灯 |
|
| 短按 | 功能已关(App 软关 / 拔充电线后) | 只唤醒功能,不切玩法;挂待机绿灯 |
|
||||||
| 短按 | 手动点动进行中 | 无效 |
|
| 短按 | 手动点动进行中 | 无效 |
|
||||||
| 长按 3 秒 | 功能开 | 关机进深睡 |
|
| 长按 3 秒 | 功能开 | 关机进深睡 |
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param(
|
param(
|
||||||
[string]$ProjectName = "PICBC2",
|
[string]$ProjectName = "JBao_Door_Clamp",
|
||||||
[string]$SdkRoot = ""
|
[string]$SdkRoot = ""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user