【分享】灯效模块化设计

网关设备, 语音中控设备等
Post Reply
jm.yao
Posts: 3

一、编写目的
让开发者参考灯效模块化的设计原理,简化灯效的控制方式。

二、设计要求
1. 采用模块化设计,提升代码复用性。
2. 做到灯效功能可配置化。
3. 支持多个LED灯、RGB灯的同时控制。
4. 支持开、关、闪烁等灯效切换。
5. 支持灯效切换优先级控制。

三、总体设计流程
Image
应用初始化一个LED之后,会得到组件返回的一个控制句柄,该句柄可通过外部接口手动控制LED的开、关、闪烁状态。组件内部也可按照初始化配置的运行参数,自动完成灯效的控制。高优先级的灯效覆盖低优先级,等高优先级的灯效显示完成后可恢复低优先级灯效的继续显示。

四、功能设计
Image
LED_ON与LED_OFF的逻辑类似,这里以LED_OFF为例:

  1. 当LED_OFF的持续时间设置不为0xFFFF且大于0时,LED关闭,等持续时间结束后,LED打开;
  2. 当LED_OFF的持续时间设置为0xFFFF时,LED关闭,并且保持当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后会恢复成当前灯效);
  3. 当LED_OFF的持续时间设置为0时,LED关闭,并且结束当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后不会恢复成当前灯效)。

Image
LED_FLASH_ON与LED_FLASH_OFF的逻辑类似,这里以LED_FLASH_OFF为例:

  1. 闪烁开始执行时,LED会根据当前的状态自适应:当前LED开时,先执行LED关;当前LED关时,先执行LED开;
  2. 当LED_FLASH_OFF的持续时间设置不为0xFFFF且大于0时,LED闪烁,等持续时间结束后,LED关闭;
  3. 当LED_FLASH_OFF的持续时间设置为0xFFFF时,LED持续闪烁,并且保持当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后会恢复成当前灯效);
  4. 当LED_FLASH_OFF的持续时间设置为0时,LED闪烁,并且结束当前灯效优先级(会被更高优先级覆盖,等高优先级灯效执行结束后不会恢复成当前灯效)。

五、接口设计

  1. 灯效功能初始化
    tuya_gw_led_init
  2. 创建LED控制句柄
    tuya_gw_create_led_handle
  3. 灯效外部控制接口
    tuya_gw_set_led_light_handle
    tuya_gw_set_led_light_hsv_handle

六、应用举例
Image
其中初始化配置参数依次定义如下:
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:闪烁持续时间类型 (用于低优先级灯效事件恢复运行时)

Image
通过外部控制接口设置的参数会覆盖初始化时的灯效配置。

Post Reply