/*
 * @Date: 2025-06-26 09:38:45
 * @LastEditors: 路怀帅
 * @LastEditTime: 2025-06-26 14:37:29
 * @FilePath: \Andon_Remote_Control\MDK_PROJECT\Drive\Led.h
 */
#ifndef __LED_H
#define __LED_H

#include "main.h"

typedef struct
{
	void (*Init)(void);
	void (*Set)(volatile uint8_t led_x);
	void (*GREEN_Toggle)(void);
	void (*RED_Toggle)(void);
	void (*BLUE_Toggle)(void);
	void (*YELLOW_Toggle)(void);

} LEDClassStruct;

#define RED_ON 	GPIO_ResetBits(GPIOA, GPIO_Pin_6)
#define RED_OFF GPIO_SetBits(GPIOA, GPIO_Pin_6)
#define RED_TOG GPIOA->BSRR = ((GPIOA->ODR & GPIO_Pin_6) << 16) | (~GPIOA->ODR & GPIO_Pin_6)
#define GREEN_ON GPIO_ResetBits(GPIOA, GPIO_Pin_7)
#define GREEN_OFF GPIO_SetBits(GPIOA, GPIO_Pin_7)
#define GREEN_TOG GPIOA->BSRR = ((GPIOA->ODR & GPIO_Pin_7) << 16) | (~GPIOA->ODR & GPIO_Pin_7)

#define BLUE_ON GPIO_ResetBits(GPIOB, GPIO_Pin_0)
#define BLUE_OFF GPIO_SetBits(GPIOB, GPIO_Pin_0)
#define BLUE_TOG GPIOA->BSRR = ((GPIOB->ODR & GPIO_Pin_0) << 16) | (~GPIOB->ODR & GPIO_Pin_0)

#define ASR_Power_ON GPIO_SetBits(GPIOB, GPIO_Pin_8)
#define ASR_Power_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_8)

#define BOARD_Power_ON GPIO_SetBits(GPIOA, GPIO_Pin_1)
#define BOARD_Power_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_1)

#define LED_ALL_ON RED_ON;GREEN_ON;BLUE_ON
#define LED_ALL_OFF RED_OFF;GREEN_OFF;BLUE_OFF

typedef enum
{
	None = 0,
	CHANGE_Ing, // 充电中
	CHANGE_Full,	// 充满
	UNLOCK_HighBat, // 解锁高电量
	UNLOCK_LowBat,	// 解锁低电量
	SEND_Success,	// 发送成功
	SEND_Fail,		// 发送失败
} LED_State_Enum;

typedef enum
{
	BLACK = 0,
	GREEN,
	RED,
	BLUE,
	YELLOW,
	WHITE
} LED_Color_Enum;

void ledBlinkTask(void); 
extern LEDClassStruct LEDClass;
void ASR_Power_Init(void);
void BOARD_Power_Init(void);

#endif
