灯光效果

优质
小牛编辑
171浏览
2023-12-01

1.1.1. lumenflinger

lumenflinger为灯光服务程序,源码路径:robot\services\lumenflinger 包括以下几个部分:

服务端:RKLumenFlinger.cpp IRKLumen.cpp

客户端:LumenClient.cpp LumenLight.cpp LumenEffects.cpp

其中 LumenLight.cpp、LumenEffects.cpp 为灯光 APP 提供调用接口,下面分别介绍

LumenLight

class LumenLight提供了控制灯光服务的基本接口

m_platform:用于区别不同设备,实现不同客制化效果

m_frameSize:灯光buffer大小 = m_ledCount * m_pixelFormat

m_ledCount: 灯个数

m_pixelFormat:目前支持的RGB格式,值为3

m_fps:服务端的刷新频率,目前最大30fps,过快刷新灯光数据可能会丢帧

接口定义:
  • unsigned char* lumen_get_data(unsigned char* buf, int len)

    功能:获取当前灯光效果的数据

  • void lumen_set_enable(bool cmd)

    开启:唤醒灯光服务,线程等待写入数据

    关闭:此客户端无法对灯光服务操作写入。当客户端所有灯光都关闭时,灯光服务立即进入睡眠

    注意:请在设置灯光数据前开启,在设置完数据后(延迟10-20ms)关闭

  • int lumen_draw(unsigned char* buf, int len)

    功能:可设置所有灯光。buf所有数据为0则关闭灯

  • int lumen_set_color(unsigned char* color, int pixelFormat)
  • int lumen_set_led(int led_num)

    一组调用,将led_num对应的灯设置为lumen_set_color的颜色,会关闭其他灯。

    led_num: 范围0 —— (m_ledCount-1)

  • int lumen_set_color(unsigned char* color, int pixelFormat)
  • int lumen_flinger(double angle)

    一组调用,可将与0号灯相差角度为angle最近的灯设置为lumen_set_color的颜色,会关闭其他灯。

lumeneffects

lumeneffects基于lumenflinger服务提供了一些简单的灯光效果接口。接口如下:(由LumenEffects.cpp、LumenEffects.h定义)。

提供的效果:
  • bool EffectFadeIn(bool dir,u8 poi,u8 len,u8* color,int speed)

    灯的渐入效果。

    dir:灯渐入方向;

    poi:灯渐入开始的灯(0-11);

    len:涉及效果的灯的数量;

    color:需要渐入的灯的颜色数组指针,如{100,99,98,10,9,8,3,2,1}代表:

      第一颗灯:R:100,G:99,B:98
      第二颗灯:R:10,G:9,B:8
      第三颗灯:R:3,G:2,B:1
    

    speed:灯的变化速度,每speed微秒变化一次,不建议过快否则会出现反应不及时的问题。

  • bool EffectFadeOut(bool dir,u8 poi,u8 len,u8* color,int speed)

    灯的渐出效果。

    dir:灯渐出方向;

    poi:灯渐出开始的灯(0-11);

    len:涉及效果的灯的数量;

    color:需要渐出的灯的颜色数组指针,如{100,99,98,10,9,8,3,2,1}代表:

      第一颗灯:R:100,G:99,B:98
      第二颗灯:R:10,G:9,B:8
      第三颗灯:R:3,G:2,B:1
    

    speed:灯的变化速度,每speed微秒变化一次,不建议过快否则会出现反应不及时的问题。

  • bool EffectPoint(int degree)

    寻向函数的重载,用于调用默认的寻向效果。

  • bool EffectPoint(int degree,u8 color_point,u8 len,u8 color_len,int speed)

    寻向函数的主函数。

    degree:寻向角度;

    color_point:寻向灯的颜色,为三位u8的数组的指针,分别保存RGB值;

    len:寻向运动光带涉及灯的数量;

    color_len:寻向运动光带颜色数组指针,如{100,99,98,10,9,8,3,2,1}代表:

      第一颗灯:R:100,G:99,B:98
      第二颗灯:R:10,G:9,B:8
      第三颗灯:R:3,G:2,B:1
    

    speed:寻向效果速度,以us为单位。

  • bool EffectStartRound(void)

    旋转等待的重载,用于调用默认旋转效果。

  • bool EffectStartRound(int start_degree,int end_degree,bool dir,u8 len,u8* color,int speed,int acc_spd,int max_spd)

    旋转等待的主函数。

    start_degree:开始角度;

    end_degree:停止角度,可用ENDDEGREE_WAIT占位表示一直旋转;

    dir:旋转方向;

    len:旋转灯效涉及灯的数量;

    color:寻向运动光带颜色数组指针,如{100,99,98,10,9,8,3,2,1}代表:

      第一颗灯:R:100,G:99,B:98
      第二颗灯:R:10,G:9,B:8
      第三颗灯:R:3,G:2,B:1
    

    speed:旋转速度,以us为单位。

    acc_spd:旋转加速度,以us为单位。

    max_spd:旋转最快速度,以us为单位。注意max_spd在数值上小于speed。

  • bool EffectEndRound(void)

    停止旋转函数的重载。在当前位置停止旋转。

  • bool EffectEndRound(int end_degree)

    停止旋转函数。

    end_degree:停止的角度,ENDDEGREE_NOW代表当前位置立即停止,否则输入角度会在指定角度对应的灯停止。

  • bool EffectStop(void)

    停止所有灯效并熄灭所有灯。

提供的可用的动画效果接口:

下述所有动画接口可参考上述动画函数的具体实现。

  • void InitLayers(int speed)

    初始图层信息,在目前版本中负责设定动画的延迟,自定义 LED 动画。

  • bool LayerAddBackground(u8* color)

    将灯光背景设置为color。
    color:颜色数组的指针,数组需为RGB三位。

  • bool LayerAddGroup(bool dir,u8 poi,u8 len,u8* color)

    增加一组灯效。

    dir:灯光方向;

    poi:灯光开始位置;

    len:灯光数量;

    color:颜色数组指针,如{100,99,98,10,9,8,3,2,1}代表:

      第一颗灯:R:100,G:99,B:98
      第二颗灯:R:10,G:9,B:8
      第三颗灯:R:3,G:2,B:1
    
  • bool LayerAddPoint(u8 led_num,u8* color)

    增加单点灯效。

    poi:灯光开始位置;

    color:颜色数组的指针,数组需为RGB三位。

  • void DelLayers(void)

    删除图层,目前仅在析构函数中调用。

  • bool LayersSetSpeed(int speed)

    重新设定速度。

    speed:us为单位。

  • bool LayersSetLight(u8 light)

    设定所有效果的最高亮度。

    light:(0-255)从最暗到最亮。

  • bool LayersShow(void)

    显示所有效果,效果实现完后,必须调用才能够显示。