1. 解决PWM 更新导致周期混乱继而亮度抖动的问题

2. 增加无论何种状态都能强制复位的机制
3. 添加设备注册检查机制,如果设备已经处于配网但是还是注册的状态,强制进行一次复位
4. 添加串口控制协议
This commit is contained in:
2025-10-26 17:18:59 +08:00
parent a16c05db7b
commit 21c6d05bad
18 changed files with 2378 additions and 81 deletions

View File

@@ -100,8 +100,14 @@ typedef struct __attribute__((packed, aligned(1))) {
#define BRIGHTNESS_MAX 100 // 最大亮度
#define BRIGHTNESS_LOCAL_MIN 0 // 最小亮度
#define BRIGHTNESS_LOCAL_MAX 10000 // 最大亮度
#define BRIGHTNESS_REMOTE2LOCAL(x) (x * 100) //变化范围0 -10000
#define BRIGHTNESS_LOCAL2REMOTE(x) (x / 100)
// 亮度映射函数仅对1-10%范围进行映射到2-10%11-100%保持不变
// 映射公式:
// - 1-10%: 实际亮度 = 2 + (APP亮度 - 1) * 8 / 9
// - 11-100%: 实际亮度 = APP亮度
// 当APP亮度为1%时实际亮度为2%当APP亮度为10%时实际亮度为10%11%及以上保持不变
#define BRIGHTNESS_REMOTE2LOCAL(x) (((x) <= 0) ? 0 : ((x) <= 10 ? (200 + (((x) - 1) * 800) / 9) : ((x) * 100)))
#define BRIGHTNESS_LOCAL2REMOTE(x) (((x) <= 0) ? 0 : ((x) <= 1000 ? (1 + (((x) - 200) * 9) / 800) : ((x) / 100)))
#define BRIGHTNESS_LITME_RANGE(x) do { \
if (x > BRIGHTNESS_LOCAL_MAX) x = BRIGHTNESS_LOCAL_MAX; \
@@ -113,9 +119,9 @@ typedef struct __attribute__((packed, aligned(1))) {
#define INIT_STA__BRIGHTNESS 50
#define INIT_STA__CCT 4000
#define INIT_NET_CFG_PWOER_ON_KEEP_TIME (5 * 1000) // 统计进入配网每次打开状态的保持时间
#define INIT_NET_CFG_PWOER_ON_KEEP_TIME (5 * 1000) // 上电保持超过该时间则清零计数(防误触)
#define NET_CFG_ENTRY_CNT 8 // 配网进入的上电次数
#define NET_CFG_ENTRY_CNT 8 // 快速上电计数阈值:达到即强制解绑并恢复出厂
#define NET_CFG_BREATH_DURATION 1*60*1000 // 配网呼吸灯持续时间(ms)
#define NET_CFG_TOTAL_TIMEOUT 10*60*1000 // 配网总超时时间(ms)
@@ -195,6 +201,10 @@ typedef enum {
#define CCT_PIN GPIO_00 // 暖白LED (WW)
#define SWITCH_PIN GPIO_13
// PWM 更新标志输出引脚(用于逻辑分析仪观察控制时序)
// 选取 GPIO10每次调用 update_pwm_output() 时翻转一次电平
#define PWM_UPDATE_FLAG_PIN GPIO_10
#define CONFIG_PWM_GROUP_ID 2
#define OPEN_LIGHT GPIO_LEVEL_HIGH
@@ -213,6 +223,7 @@ typedef enum {
.is_net_configured = false, \
.duty_cw = 0, \
.duty_ww = 0, \
.power_on_cnt = 0, \
};
int spotlight_main(void);
@@ -228,4 +239,3 @@ void stop_net_config(void);
extern int fast_report(const char* svc_id);
#endif