/**
******************************************************************************************************************************************************************************************
*@file                       dm_button_gpio.h
*@author         
*@data                       
*@version                    v1.0
*@par Copyright(c):
*
*@par History:
*     version:author,date,desc
*     v1.0   :create this file
*
*******************************************************************************************************************************************************************************************
*/
#ifndef _RGB_GPIO_H_
#define _RGB_GPIO_H_
#include <stdint.h>
#include "app_config.h"
#include "app_trace.h"
#define PWM_SHOW_TIME	7		// 4秒一个周期
#define RGB_BLOCK_DEBUG(fmt,...) 		dbg_printf(fmt,##__VA_ARGS__)
#define RGB_DEBUG(fmt,...) 			dbg_block_printf(fmt,##__VA_ARGS__)

typedef enum _rgb_led_id{
	r_led,      	
	g_led,      		
	b_led,     		
}rgb_led_id;

typedef void (*rgb_cbk_t)(void);

typedef struct
{
//呼吸灯规则 上升20 保持10 下降20
    uint32_t     	scan_interval;     		// scan interval defaule 1ms (ms) 定时器周期
	uint8_t       	scan_period;        		// scan times		// 20ms 50Hz
	uint8_t      	scan_duty_start;        	// io row map		// 动态变化
	uint8_t	  		scan_duty_end;				// io row map		// 
	uint32_t	  	next_timer_cnt;			// 持续多久切换到下一个周期 3秒
	gpio_pin      	r_pin;        			// 
	gpio_pin	  	g_pin;					// 
	gpio_pin      	b_pin;      				//	
	rgb_cbk_t  	  	cbk;              			//  must not be NULL
}rgb_conf_t;

typedef struct
{
    rgb_conf_t         	  	rgb_param;
	rgb_cbk_t          		rgb_cbk;
    volatile uint8_t      	step;				//绿、蓝、红、青、黄、紫、白    
    volatile uint16_t      	duty_counter;		//周期内计数
    
    volatile uint16_t      	duty_cnt;			//
    
    volatile uint16_t      	duty_time;			//周期内计数
    volatile uint16_t      	pwm_counter;		//周期内计数

    volatile uint8_t     	run_counter;		//总数计数
} rgb_env_t;

void rgb_config(rgb_conf_t *p_conf);
void led_switch_type(uint8_t process);
void user_gpio_out(gpio_pin GPIO_Pin, functional_state_t enable);
void rgb_pwm_start(void);
void rgb_pwm_stop(void);

void user_soft_pwm_breath_example(void);

#endif

