doubao_chat/include_lib/driver/cpu/wl82/asm/pwm_led.h

139 lines
6.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _PWM_LED_H_
#define _PWM_LED_H_
/*******************************************************************
* 本文件为LED灯配置的接口头文件
*
* 约定:
* 1)两盏灯为单IO双LED接法;
* 2)LED0: RLED, 蓝色, 低电平亮灯;
* 3)LED1: BLED, 红色, 高电平亮灯;
*********************************************************************/
// LED实现的效果有:
// 1.两盏LED全亮;
// 2.LED单独亮灭;
// 3.LED单独慢闪和快闪;
// 4.LED 5s内单独闪一次和两次;
// 5.LED交替快闪和慢闪;
// 6.LED单独呼吸;
// 7.LED交替呼吸
/*
* LED各个效果可供配置以下参数, 请按照参数后面的注释说明的范围进行配置
*/
/***************** LED0/LED1单独每隔5S双闪时, 可供调节参数 ********************/
#define LED0_DOUBLE_FLASH_5S_1ST_TIME_CONFIG 10 //第一次亮时间时长, 设置范围: 1~20, 值越大, 时间越长, 步调:20ms, 调节范围:20ms ~ 400ms
#define LED0_DOUBLE_FLASH_5S_TIME_GAP_CONFIG 10 //两个亮灯时间间隔, 设置范围: 1~20, 值越大, 熄灭越长, 步调:20ms, 调节范围:20ms ~ 400ms
#define LED0_DOUBLE_FLASH_5S_2ND_TIME_CONFIG 10 //第二次亮灯时长, 设置范围: 1~20, 值越大, 时间越长, 步调:20ms, 调节范围:20ms ~ 400ms
#define LED1_DOUBLE_FLASH_5S_1ST_TIME_CONFIG 10 //第一次亮时间时长, 设置范围: 1~20, 值越大, 时间越长, 步调:20ms, 调节范围:20ms ~ 400ms
#define LED1_DOUBLE_FLASH_5S_TIME_GAP_CONFIG 10 //两个亮灯时间间隔, 设置范围: 1~20, 值越大, 熄灭越长, 步调:20ms, 调节范围:20ms ~ 400ms
#define LED1_DOUBLE_FLASH_5S_2ND_TIME_CONFIG 10 //第二次亮灯时长, 设置范围: 1~20, 值越大, 时间越长, 步调:20ms, 调节范围:20ms ~ 400ms
/***************** LED0/LED1单独每隔5S单闪时, 可供调节参数 ********************/
#define LED0_ONE_FLASH_5S_LIGHT_TIME_CONFIG 10 //LED0亮时间时长, 设置范围: 1~20, 值越大, 亮灯时间越长, 步调:20ms, 调节范围:20ms ~ 400ms
#define LED1_ONE_FLASH_5S_LIGHT_TIME_CONFIG 10 //LED1亮时间时长, 设置范围: 1~20, 值越大, 亮灯时间越长, 步调:20ms, 调节范围:20ms ~ 400ms
/***************** LED0/LED1呼吸时, 可供调节参数 ********************/
#define LED_BREATHE_MAX_CLASS_CONFIG 250 //LED呼吸到极限亮度级数, 设置范围:1~255, 呼吸到这个极限亮度需要的时间 = MAX_CLASS * 12.5ms
#define LED0_BREATHE_HIGHTEST_BRIGHT_CONFIG 100 //LED0呼吸最高亮度(呼吸时间), 期望亮度 = (HIGHTEST_BRIGHT_CONFIG)/ MAX_CLASS), 设置范围:1~MAX_CLASS, 呼吸时间调节步调:12.5ms, 呼吸时间 = 12.5ms * HIGHTEST_BRIGHT_CONFIG
#define LED1_BREATHE_HIGHTEST_BRIGHT_CONFIG 100 //LED1呼吸最高亮度(呼吸时间), 期望亮度 = (HIGHTEST_BRIGHT_CONFIG)/ MAX_CLASS), 设置范围:1~MAX_CLASS, 呼吸时间调节步调:12.5ms, 呼吸时间 = 12.5ms * HIGHTEST_BRIGHT_CONFIG
#define LED_BREATHE_BLANK_DELAY_TIME_CONFIG 100 //呼吸灭灯时间延长, 设置范围:1~255, 值越大, 灭灯时间越长, 调节步调: 12.5ms, 调节范围: 12.5ms ~ 3.2s
//单独控制LED的最高亮度
#define LED0_BREATHE_LIGHT_DELAY_TIME_CONFIG 10 //LED0呼吸到最亮时间延长, 1~255, 值越大, 亮灯灯时间越长, 调节步调: 12.5ms, 调节范围: 12.5ms ~ 3.2s
#define LED1_BREATHE_LIGHT_DELAY_TIME_CONFIG 10 //LED1呼吸到最亮时间延长, 1~255, 值越大, 亮灯灯时间越长, 调节步调: 17ms, 调节范围: 12.5ms ~ 3.2s
/***************** LED0和LED1交替呼吸时, 可供调节参数 ********************/
#define LED0_LED1_BREATHE_TRIG_PEROID_CONFIG 0 //0: 全周期变色, 1:半周期变色, 注: 半周期为从灭到最亮; 而全周期是指灭->最亮->灭(一呼一吸)
enum pwm_led_clk_source {
PWM_LED_CLK_OSC32K, //no use
PWM_LED_CLK_RC32K, //use
PWM_LED_CLK_BTOSC_12M, //no use
PWM_LED_CLK_RCLK_250K, //no use
PWM_LED_CLK_BTOSC_24M, //use
};
enum pwm_led_mode {
PWM_LED_MODE_START,
PWM_LED_ALL_OFF, //mode1: 全灭
PWM_LED_ALL_ON, //mode2: 全亮
PWM_LED0_ON, //mode3: 蓝亮
PWM_LED0_OFF, //mode4: 蓝灭
PWM_LED0_SLOW_FLASH, //mode5: 蓝慢闪
PWM_LED0_FAST_FLASH, //mode6: 蓝快闪
PWM_LED0_DOUBLE_FLASH_5S, //mode7: 蓝灯5秒连闪两下
PWM_LED0_ONE_FLASH_5S, //mode8: 蓝灯5秒连闪1下
PWM_LED1_ON, //mode9: 红亮
PWM_LED1_OFF, //mode10: 红灭
PWM_LED1_SLOW_FLASH, //mode11: 红慢闪
PWM_LED1_FAST_FLASH, //mode12: 红快闪
PWM_LED1_DOUBLE_FLASH_5S, //mode13: 红灯5秒连闪两下
PWM_LED1_ONE_FLASH_5S, //mode14: 红灯5秒闪1下
PWM_LED0_LED1_FAST_FLASH, //mode15: 红蓝交替闪(快闪)
PWM_LED0_LED1_SLOW_FLASH, //mode16: 红蓝交替闪(慢闪)
PWM_LED0_BREATHE, //mode17: 蓝灯呼吸灯模式
PWM_LED1_BREATHE, //mode18: 红灯呼吸灯模式
PWM_LED0_LED1_BREATHE, //mode19: 红蓝交替呼吸灯模式
PWM_LED_MODE_END,
PWM_LED1_FLASH_THREE, //自定义状态,不能通过pmd_led_mode去设置
PWM_LED_NULL = 0xFF,
};
struct pwm_led_cfg {
u8 led0_bright; //1 ~ 4, 值越大, (蓝灯)亮度越高
u8 led1_bright; //1 ~ 4, 值越大,(红灯) 亮度越高
u8 single_led_slow_freq; //1 ~ 8, 值越大, LED单独慢闪速度越慢, value * 0.5s闪烁一次
u8 single_led_fast_freq; //1 ~ 4, 值越大, LED单独快速度越慢, value * 100ms闪烁一次
u8 double_led_slow_freq; //1 ~ 8, 值越大, LED交替慢闪速度越慢, value * 0.5s闪烁一次
u8 double_led_fast_freq; //1 ~ 4, 值越大, LED交替快速度越慢, value * 100ms闪烁一次
};
struct pwm_led_two_io_mode {
u8 two_io_mode_enable;
u8 led0_pin;
u8 led1_pin;
};
struct led_platform_data {
u8 led_pin;
u8 clk_src;
struct pwm_led_cfg led_cfg;
struct pwm_led_two_io_mode two_io;
};
#define LED_PLATFORM_DATA_BEGIN(data) \
static const struct led_platform_data data = {
#define LED_PLATFORM_DATA_END() \
};
extern const struct device_operations pwm_led_ops;
void pwm_led_mode_set(u8 fre_mode);
//LED时钟源切换, input: PWM_LED_CLK_RC32K or PWM_LED_CLK_BTOSC_24M
void pwm_led_clk_set(enum pwm_led_clk_source src);
//闪烁状态复位, 重新开始一个周期
void pwm_led_display_mode_reset(void);
//获取led当前的闪烁模式
enum pwm_led_mode pwm_led_display_mode_get(void);
#endif //_PWM_LED_H_