一、编写目的
让开发者参考灯效模块化的设计原理,简化灯效的控制方式。
二、设计要求
1. 采用模块化设计,提升代码复用性。
2. 做到灯效功能可配置化。
3. 支持多个LED灯、RGB灯的同时控制。
4. 支持开、关、闪烁等灯效切换。
5. 支持灯效切换优先级控制。
三、总体设计流程
应用初始化一个LED之后,会得到组件返回的一个控制句柄,该句柄可通过外部接口手动控制LED的开、关、闪烁状态。组件内部也可按照初始化配置的运行参数,自动完成灯效的控制。高优先级的灯效覆盖低优先级,等高优先级的灯效显示完成后可恢复低优先级灯效的继续显示。
四、功能设计
LED_ON与LED_OFF的逻辑类似,这里以LED_OFF为例:
- 当LED_OFF的持续时间设置不为0xFFFF且大于0时,LED关闭,等持续时间结束后,LED打开;
- 当LED_OFF的持续时间设置为0xFFFF时,LED关闭,并且保持当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后会恢复成当前灯效);
- 当LED_OFF的持续时间设置为0时,LED关闭,并且结束当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后不会恢复成当前灯效)。
LED_FLASH_ON与LED_FLASH_OFF的逻辑类似,这里以LED_FLASH_OFF为例:
- 闪烁开始执行时,LED会根据当前的状态自适应:当前LED开时,先执行LED关;当前LED关时,先执行LED开;
- 当LED_FLASH_OFF的持续时间设置不为0xFFFF且大于0时,LED闪烁,等持续时间结束后,LED关闭;
- 当LED_FLASH_OFF的持续时间设置为0xFFFF时,LED持续闪烁,并且保持当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后会恢复成当前灯效);
- 当LED_FLASH_OFF的持续时间设置为0时,LED闪烁,并且结束当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后不会恢复成当前灯效)。
五、接口设计
- 灯效功能初始化
tuya_gw_led_init - 创建LED控制句柄
tuya_gw_create_led_handle - 灯效外部控制接口
tuya_gw_set_led_light_handle
tuya_gw_set_led_light_hsv_handle
六、应用举例
其中初始化配置参数依次定义如下:
event:灯效事件类型,见LED_EVENT_TYPE_E
prio:优先级类型,见LED_PRIO_E
cb_type:回调方式,可选用组件原有实现或用户自定义实现
type:灯效显示状态:开、关、闪烁
bright:夜灯亮度,用于RGB灯
rgb:夜灯颜色,用于RGB灯
flash_cycle:闪烁的翻转时间, 单位ms
flh_sum_time:闪烁持续时间, 单位ms (0xFFFF表示常亮、常灭或一直闪烁)
flh_time_type:闪烁持续时间类型 (用于低优先级灯效事件恢复运行时)
通过外部控制接口设置的参数会覆盖初始化时的灯效配置。