KT24-1110_65E-HA-651B/apps/common/charge_box/chgbox_ui_drv_pwmled.c

271 lines
9.5 KiB
C
Raw Normal View History

2024-11-10 10:44:17 +00:00
#include "typedef.h"
#include "asm/pwm_led.h"
#include "system/includes.h"
#include "chgbox_ctrl.h"
#include "chargeIc_manage.h"
#include "chgbox_ui.h"
#include "app_config.h"
//使用PEMLED推灯,支持低功耗
#if (TCFG_CHARGE_BOX_ENABLE)
#define LOG_TAG_CONST APP_CHGBOX
#define LOG_TAG "[CHGBOXUI]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
#define LOG_DUMP_ENABLE
#define LOG_CLI_ENABLE
#include "debug.h"
#if (TCFG_CHARGE_BOX_UI_ENABLE && TCFG_CHGBOX_UI_PWMLED)
#define CFG_LED_LIGHT 200 //10 ~ 500, 值越大, 亮度越高
#define CFG_SINGLE_FAST_FLASH_FREQ 500 //LED单独快闪速度, ms闪烁一次(100 ~ 1000)
#define CFG_SINGLE_FAST_LIGHT_TIME 150 //单灯快闪灯亮持续时间, 单位ms
#define CFG_SINGLE_SLOW_FLASH_FREQ 1000 //LED单独慢闪速度, ms闪烁一次(1000 ~ 20000)
#define CFG_SINGLE_SLOW_LIGHT_TIME 300 //单灯慢闪灯亮持续时间, 单位ms
/***************** LED0/LED1单独每隔5S单闪时, 可供调节参数 ********************/
#define CFG_LED_5S_FLASH_LIGHT_TIME 100 //LED 5S 闪烁时灯亮持续时间, 单位ms
/***************** 呼吸模式配置参数, 可供调节参数 ********************/
#define CFG_LED_SLOW_BREATH_TIME 1000 //呼吸时间灭->亮->灭, 单位ms
#define CFG_LED_FAST_BREATH_TIME 500 //呼吸时间灭->亮->灭, 单位ms
#define CFG_LED_BREATH_BRIGHT 300 //呼吸亮度, 范围: 0 ~ 500
#define CFG_LED_BREATH_BLINK_TIME 100 //灭灯延时, 单位ms
const pwm_led_on_para pwm_led_on_para_table[] = {
/*
u16 led0_bright;//led0_bright, LED0亮度: 0 ~ 500
u16 led1_bright;//led1_bright, LED1亮度: 0 ~ 500
*/
{CFG_LED_LIGHT, CFG_LED_LIGHT},//PWM_LED_ON 亮
};
const pwm_led_one_flash_para pwm_led_one_flash_para_table[] = {
/*
u16 led0_bright;//led0_bright: led0亮度(0 ~ 500),
u16 led1_bright;//led1_bright: led1亮度(0 ~ 500),
u32 period;//period: 闪灯周期(ms), 多少ms闪一下(100 ~ 20000), 100ms - 20S,
u32 start_light_time;//start_light_time: 在周期中开始亮灯的时间, -1: 周期最后亮灯, 默认填-1即可,
u32 light_time;//light_time: 灯亮持续时间,
*/
{CFG_LED_LIGHT, CFG_LED_LIGHT, CFG_SINGLE_SLOW_FLASH_FREQ, -1, CFG_SINGLE_SLOW_LIGHT_TIME},//PWM_LED_SLOW_FLASH 慢闪
{CFG_LED_LIGHT, CFG_LED_LIGHT, CFG_SINGLE_FAST_FLASH_FREQ, -1, CFG_SINGLE_FAST_LIGHT_TIME},//PWM_LED_FAST_FLASH 快闪
{CFG_LED_LIGHT, CFG_LED_LIGHT, 5000, 10, CFG_LED_5S_FLASH_LIGHT_TIME},//PWM_LED_ONE_FLASH_5S 5秒连闪1下
};
const pwm_led_double_flash_para pwm_led_double_flash_para_table[] = {
/*
u16 led0_bright;//led0_bright: led0亮度,
u16 led1_bright;//led1_bright: led1亮度,
u32 period;//period: 闪灯周期(ms), 多少ms闪一下
u32 first_light_time;//first_light_time: 第一次亮灯持续时间,
u32 gap_time;//gap_time: 两次亮灯时间间隔,
u32 second_light_time;//second_light_time: 第二次亮灯持续时间,
*/
{CFG_LED_LIGHT, CFG_LED_LIGHT, 5000, 100, 200, 100}, //PWM_LED_DOUBLE_FLASH_5S 5秒连闪两下
};
const pwm_led_breathe_para pwm_led_breathe_para_table[] = {
/*
u16 breathe_time;//breathe_time: 呼吸周期(灭->最亮->灭), 设置范围: 500ms以上;
u16 led0_bright;//led0_bright: led0呼吸到最亮的亮度(0 ~ 500);
u16 led1_bright;//led1_bright: led1呼吸到最亮的亮度(0 ~ 500);
u32 led0_light_delay_time;//led0_light_delay_time: led0最高亮度延时(0 ~ 100ms);
u32 led1_light_delay_time;//led1_light_delay_time: led1最高亮度延时(0 ~ 100ms);
u32 led_blink_delay_time;//led_blink_delay_time: led0和led1灭灯延时(0 ~ 20000ms), 0 ~ 20S;
*/
{CFG_LED_SLOW_BREATH_TIME, CFG_LED_BREATH_BRIGHT, CFG_LED_BREATH_BRIGHT, 0, 0, CFG_LED_BREATH_BLINK_TIME},//PWM_LED_BREATHE 慢呼吸灯模式
{CFG_LED_FAST_BREATH_TIME, CFG_LED_BREATH_BRIGHT, CFG_LED_BREATH_BRIGHT, 0, 0, CFG_LED_BREATH_BLINK_TIME},//PWM_LED_BREATHE 快呼吸灯模式
};
static void chgbox_led_set_enable(u8 gpio)
{
gpio_set_pull_up(gpio, 1);
gpio_set_pull_down(gpio, 1);
gpio_set_die(gpio, 1);
gpio_set_output_value(gpio, 1);
gpio_set_direction(gpio, 0);
}
static void chgbox_led_set_disable(u8 gpio)
{
gpio_set_pull_down(gpio, 0);
gpio_set_pull_up(gpio, 0);
gpio_direction_input(gpio);
}
static void chgbox_ui_mode_set(u8 display, u8 sub)
{
pwm_led_para para = {0};
if (display == PWM_LED_NULL) {
return;
}
switch (display) {
//灯常灭
case PWM_LED0_OFF:
break;
//灯常亮
case PWM_LED0_ON:
para.on = pwm_led_on_para_table[0];
break;
//单灯单闪
case PWM_LED0_SLOW_FLASH:
para.one_flash = pwm_led_one_flash_para_table[0];
break;
case PWM_LED0_FAST_FLASH:
para.one_flash = pwm_led_one_flash_para_table[1];
break;
case PWM_LED0_ONE_FLASH_5S:
para.one_flash = pwm_led_one_flash_para_table[2];
break;
//单灯双闪
case PWM_LED0_DOUBLE_FLASH_5S:
para.double_flash = pwm_led_double_flash_para_table[0];
break;
//呼吸模式
case PWM_LED0_BREATHE:
para.breathe = pwm_led_breathe_para_table[sub];
break;
}
pwm_led_mode_set_with_para(display, para);
}
/*------------------------------------------------------------------------------------*/
/**@brief 设置灯为常亮、常暗模式
@param led_type:
on_off: 1--> 0-->
sp_flicker: 1-->-- --
fade: 1--> 0-->
@return
@note / ()
*/
/*------------------------------------------------------------------------------------*/
void chgbox_set_led_stu(u8 led_type, u8 on_off, u8 sp_flicker, u8 fade)
{
chgbox_led_set_disable(CHG_RED_LED_IO);
chgbox_led_set_disable(CHG_GREEN_LED_IO);
chgbox_led_set_disable(CHG_BLUE_LED_IO);
if (on_off) {
chgbox_ui_mode_set(PWM_LED0_ON, 0);
} else {
chgbox_ui_mode_set(PWM_LED0_OFF, 0);
}
switch (led_type) {
case CHG_LED_RED:
chgbox_led_set_enable(CHG_RED_LED_IO);
break;
case CHG_LED_GREEN:
chgbox_led_set_enable(CHG_GREEN_LED_IO);
break;
case CHG_LED_BLUE:
chgbox_led_set_enable(CHG_BLUE_LED_IO);
break;
}
}
/*------------------------------------------------------------------------------------*/
/**@brief 设置灯为呼吸模式
@param led_type:
speed_mode:
is_bre:
time:/
@return
@note ()
*/
/*------------------------------------------------------------------------------------*/
void chgbox_set_led_bre(u8 led_type, u8 speed_mode, u8 is_bre, u16 time)
{
chgbox_led_set_disable(CHG_RED_LED_IO);
chgbox_led_set_disable(CHG_GREEN_LED_IO);
chgbox_led_set_disable(CHG_BLUE_LED_IO);
if (is_bre) {
if (speed_mode == LED_FLASH_FAST) {
chgbox_ui_mode_set(PWM_LED0_BREATHE, 1);
} else {
chgbox_ui_mode_set(PWM_LED0_BREATHE, 0);
}
} else {
if (speed_mode == LED_FLASH_FAST) {
chgbox_ui_mode_set(PWM_LED0_FAST_FLASH, 0);
} else {
chgbox_ui_mode_set(PWM_LED0_SLOW_FLASH, 0);
}
}
switch (led_type) {
case CHG_LED_RED:
chgbox_led_set_enable(CHG_RED_LED_IO);
break;
case CHG_LED_GREEN:
chgbox_led_set_enable(CHG_GREEN_LED_IO);
break;
case CHG_LED_BLUE:
chgbox_led_set_enable(CHG_BLUE_LED_IO);
break;
}
}
/*------------------------------------------------------------------------------------*/
/**@brief 呼吸灯全暗
@param fade:
@return
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_set_led_all_off(u8 fade)
{
chgbox_led_set_disable(CHG_RED_LED_IO);
chgbox_led_set_disable(CHG_GREEN_LED_IO);
chgbox_led_set_disable(CHG_BLUE_LED_IO);
chgbox_ui_mode_set(PWM_LED0_OFF, 0);
}
/*------------------------------------------------------------------------------------*/
/**@brief 呼吸灯全亮
@param fade:
@return
@note
*/
/*------------------------------------------------------------------------------------*/
void chgbox_set_led_all_on(u8 fade)
{
chgbox_led_set_disable(CHG_RED_LED_IO);
chgbox_led_set_disable(CHG_GREEN_LED_IO);
chgbox_led_set_disable(CHG_BLUE_LED_IO);
chgbox_ui_mode_set(PWM_LED0_ON, 0);
chgbox_led_set_enable(CHG_RED_LED_IO);
chgbox_led_set_enable(CHG_GREEN_LED_IO);
chgbox_led_set_enable(CHG_BLUE_LED_IO);
}
/*------------------------------------------------------------------------------------*/
/**@brief led呼吸灯初始化
@param
@return
@note led:IO的初始化.mc_clk的初始化
pwm
*/
/*-----------------------------------------------------------------------------------*/
extern const struct led_platform_data chgbox_pwm_led_data;
void chgbox_led_init(void)
{
chgbox_led_set_disable(CHG_RED_LED_IO);
chgbox_led_set_disable(CHG_GREEN_LED_IO);
chgbox_led_set_disable(CHG_BLUE_LED_IO);
pwm_led_init(&chgbox_pwm_led_data);
}
#endif
#endif