/********************************* (C) РОТЕК ***********************************
 * @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 "led.h"
#include "megatec.h"

#include "FreeRTOS.h"
#include "task.h"


uint16_t statusLedFreq = 1000; // Определяет частоту мигания STATUS LED


LED_STATE_t sLedInt = {GREEN, TOGGLE_OFF};
LED_STATE_t ledIntTemporary = {GREEN, TOGGLE_OFF};


/**
  * @brief  
  * @retval 
  */
void LED_Init(void)
{
  LED_Off(LED_INIT_R);
  LED_Off(LED_INIT_G);
  LED_Off(LED_MAJOR_R);
  LED_Off(LED_MINOR_G);
  LED_Off(LED_MINOR_R);
}

/**
  * @brief  Задача простой мигалки
  */
void vTaskLedBlink(void *arg)
{
	uint8_t start_status = 0;
	uint8_t start_status_old = 0;
	start_status = (UPS.Status >> 7) & 0x01;
  for (;;) 
  {
	  start_status = (UPS.Status >> 7) & 0x01;
	/* Просто отражает состояние контроллера - "живой" */
	  if((UPS.Status >> 7) & 0x01){
		  if(start_status_old != start_status)
			  LED_Off(LED_INIT_G);
		  LED_Toggle(LED_INIT_G);
		  LED_Toggle(LED_INIT_R);
	  }
	  else{
		  if(start_status_old != start_status)
		  	LED_Off(LED_INIT_R);
		  LED_Toggle(LED_INIT_G);
	  }
	  start_status_old = start_status;

    vTaskDelay(statusLedFreq);
  }
}

/**
  * @brief  
  */
void LED_AddStateInt(COLOR_t color, TOGGLE_t toggle)
{
  
  //sLedInt.toggle = toggle;
  
  if ((sLedInt.color == GREEN) && (toggle == TOGGLE_ON))
	sLedInt.toggle = toggle;
  
  switch (color)
  {
	/* Зеленый не перебивает никакой цвет */
    case GREEN :
	  
	break;
	
	/* Красный перебивает все цвета и останавливет мигание*/
	case RED :
	  sLedInt.color = RED;
	  sLedInt.toggle = TOGGLE_OFF;
	break;
	
	/* Желтый перебивает только зеленый и останавливает мигание*/
	case YELLOW :
	  if (sLedInt.color != RED)
	  {	
		sLedInt.color = YELLOW;
		sLedInt.toggle = TOGGLE_OFF;
	  }
	break;
	
    default :
	break;
  }
  
}

/**
  * @brief  
  */
void LED_On(gpio_t pin)
{
	gpio_set(pin, 1);
}

/**
  * @brief  
  */
void LED_Off(gpio_t pin)
{
	gpio_set(pin, 0);
}

/**
  * @brief  Изменить состояние LED 
  */
void LED_Toggle(gpio_t pin)
{
	gpio_invert_output(pin);
}

/**
  * @brief  
  */
void LED_SetStatusLedFreq(uint16_t freq)
{
  statusLedFreq = freq;
}

/********************************* (C) РОТЕК **********************************/
