ekko.bao
cb1ef39108
修复灯光渐变与状态保持逻辑
主要变更:
- set_light 默认目标值改为取设备当前状态(未指定字段保持不变),避免关灯后切换模式把亮度误写为0。
- 仅对明确修改的字段回写设备状态,防止无意覆盖。
- 关灯状态下的模式/属性变更:只更新目标,不推进渐变;开灯(关→开)从0平滑渐变到目标。
- 关灯渐变进行中不再取消渐变(不被属性/模式变更打断),避免停留在低亮不灭的情况。
- 增加若干调试日志(keep brightness/cct、开灯渐变设置、off-state 变更提示)。
影响范围:application/ws63/user_main/spotlight/spotlight_main.c 的 set_light 与渐变控制流程。
回归清单(详细):
1) 基础渐变与开关
- ON→OFF:观察3s(NORMAL_FADE_TIME)内亮度平滑降为0,最终PWM关断;日志含“start close light fade/Close light fade completed”。
- OFF→ON:从0平滑拉升至目标亮度(保持当前色温),日志含“开灯渐变设置: brightness=0->X”。
- 单色/双色两种 colourMode 下分别验证上述两条。
2) 关灯状态下属性/模式变更(不推进渐变)
- OFF 且非渐变中:修改亮度/色温/模式,仅更新目标,不改变当前亮度(保持0);再次开灯从0平滑到目标。
- OFF 且正在“关灯渐变”中:
a. 切换 单色→双色、双色→单色;
b. 修改色温(2700/中间值/最大6000);
c. 修改亮度(1%、10%、80%、100%);
期望:关灯渐变不中断直至0;日志出现“off-state mode/attr change … keep/preserve …”,无新的 cancel/stop;开灯后从0渐变到变更后的目标。
3) 渐变过程中的变更
- 开灯渐变过程中修改亮度/色温/场景:应重新计算步长并继续渐变到新目标,无闪断;日志有“start fade”“fade brightness:A->B”。
- 关灯渐变过程中(is_closing_fade=true)修改模式/属性:不取消当前渐变,继续降至0(本修复重点)。
4) 场景模式
- 亮灯状态切换各场景(自定义/休闲/观影/用餐/回家/冬天/夏天):亮度、色温按预设渐变到位。
- 离家模式:切到离家立即触发关灯渐变;开灯时恢复基础模式并从0渐变到目标。
- 关灯状态切换场景:仅更新目标,不推进渐变;开灯后生效。
5) 单色↔双色互转
- 亮灯:单色→双色、双色→单色均应平滑到新目标。
- 关灯:单色→双色、双色→单色只更新目标,关灯渐变不中断;开灯后从0渐变到新目标(复现用例修复验证)。
6) 持久化与上电
- 设定亮度/色温/模式后断电重启:读取到的持久化状态与上电行为正确(若on=true,上电从0渐变到目标;若on=false,保持熄灭)。
7) 上报一致性
- 每次变更后,APP数值与进度条一致,且与设备上报一致;避免出现“进度条位置旧、数值为0”的分离。
8) 边界值与映射
- 亮度:1%/10%/11%/100% 验证 BRIGHTNESS_REMOTE2LOCAL/LOCAL2REMOTE 映射正确,无跳变。
- 色温:2700/中间值/6000,双色下比例分配正确;单色下固定 SINGLE_COLOUR_CCT。
9) 竞态与稳定性
- 快速连点:关/开/改模式/改色温混合快速操作,确保无死锁、无抖动、无残留亮度;fade 定时器单实例运行(无重复自重启)。
10) 日志关键点(用于对齐期望)
- “[set_light] keep brightness/cct …”、“[set_light] 开灯渐变设置 …”、“off-state mode/attr change …”。
- “start close light fade / Fade completed”、“fade brightness: x->y … time:3s”。
- 上报触发:REPORT_SWITCH/BRIGHTNESS/CCT/LIGHT_MODE/COLOUR_MODE 顺序与次数合理。
2025-11-16 21:55:18 +08:00
..
2025-11-04 21:27:55 +08:00
2025-11-16 21:55:18 +08:00
2025-05-13 22:00:58 +08:00