| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | /********************************* (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 LEDLED_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) РОТЕК **********************************/
 |