/********************************************************************************
  * @file           : led.c
  * @version        : Mowing Robot Team
  * @brief          : LED灯的相关初始化
	* @author         : zhanli.
 *******************************************************************************/
#include "led.h"

void LED_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_AFIO_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET); 

    GPIO_InitStruct.Pin = GPIO_PIN_8;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

void Led_Off(led_t led)
{
    switch (led)
    {
    case LED_PC6:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
        break;
    case LED_PC7:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
        break;
    case LED_PC8:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
        break;
    case LED_PC9:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
        break;
    case LED_ALL:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9, GPIO_PIN_RESET);
        break;
    default:
        break;
    }
}

void Led_On(led_t led)
{
    switch (led)
    {
    case LED_PC6:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
        break;
    case LED_PC7:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
        break;
    case LED_PC8:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
        break;
    case LED_PC9:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
        break;
    case LED_ALL:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9, GPIO_PIN_SET);
        break;
    default:
        break;
    }
}

void Led_Toggle(led_t led)
{
    switch (led)
    {
    case LED_PC6:
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
        break;
    case LED_PC7:
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
        break;
    case LED_PC8:
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
        break;
    case LED_PC9:
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
        break;
    case LED_ALL:
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9);
        break;
    default:
        break;
    }
}
