/******************************* (C) LiteMesh **********************************
 * @module  led
 * @file    led.c
 * @version 1.0.0
 * @date    XX.XX.XXXX
 * $brief   Template
 *******************************************************************************
 * @history     Version  Author         Comment
 * XX.XX.XXXX   1.0.0    Telenkov D.A.  First release.
 *******************************************************************************
 */
   
#include "stm32f4xx.h"
#include "led.h"

LED_t LED_GreenInt;
LED_t LED_RedInt;

LED_t LEDS[2];

/**
  * @brief  
  * @retval 
  */
void LED_Init(void)
{
	 GPIO_InitTypeDef GPIO_InitStructure;

	  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE);

	  LEDS[GREEN_STATUS].GPIOx = GPIOA;
	  LEDS[GREEN_STATUS].GPIO_Pin = GPIO_Pin_3;
	  LEDS[GREEN_STATUS].revers = 1;

	  LEDS[RED_STATUS].GPIOx = GPIOA;
	  LEDS[RED_STATUS].GPIO_Pin = GPIO_Pin_4;
	  LEDS[RED_STATUS].revers = 1;

	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;

	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	  GPIO_Init(GPIOA, &GPIO_InitStructure);

	  LED_Off(GREEN_STATUS);
	  LED_Off(RED_STATUS);
}

/**
* @brief  Мигает красным, индикация ошибки
  */
void LED_Blinky_Red(void)
{
  LED_Toggle(RED_STATUS);
}

/**
  * @brief  Мигает желтым, индикация режима IAPviaSD
  */
void LED_Blinky_Yellow(void)
{
  LED_Toggle(GREEN_STATUS);
  LED_Toggle(RED_STATUS);
}

/**
  * @brief  Мигает зеленым, индикация режима IAPviaETH
  */
void LED_Blinky_Green(void)
{
  LED_Toggle(GREEN_STATUS);
}

/**
  * @brief  
  */
void LED_On(LED_NAMES_t led)
{
  API_LED_On(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers);
}

/**
  * @brief  
  */
void LED_Off(LED_NAMES_t led)
{
  API_LED_Off(LEDS[led].GPIOx, LEDS[led].GPIO_Pin, LEDS[led].revers);
}

/**
  * @brief  Изменить состояние LED 
  */
void LED_Toggle(LED_NAMES_t led)
{
  LEDS[led].GPIOx->ODR ^= LEDS[led].GPIO_Pin;
}

/**
  * @brief  Включить LED 
  * @param  port
  * @param  pin
  * @param  revers: 0 - для включения LED нужно установить уровень
  *                 1 - для включения LED нужно сбросить уровень
  * @retval 
  */
void API_LED_On(GPIO_TypeDef* port, uint16_t pin, uint8_t revers)
{
  if (revers == 0)
    port->BSRRL = pin;
  else
    port->BSRRH = pin;
}

/**
  * @brief  Выключить LED 
  * @param  port
  * @param  pin
  * @param  revers: 0 - для выключения LED нужно снять уровень
  *                 1 - для выключения LED нужно установить уровень
  * @retval 
  */
void API_LED_Off(GPIO_TypeDef* port, uint16_t pin, uint8_t revers)
{
  if (revers == 0)
    port->BSRRH = pin;
  else
    port->BSRRL = pin;

}




 /******************************* (C) LiteMesh *********************************/