| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | /********************************* (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"#define LEDS_EXPAND_OFF(id, ...) 		\		LED_Off(id);#define LED_ALL_OFF() \	LEDS(LEDS_EXPAND_OFF) \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_ALL_OFF();}/**  * @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) {#ifdef LED_INIT_OK                LED_Off(LED_INIT_OK);#endif            }#ifdef LED_INIT_OK            LED_Toggle(LED_INIT_OK);#endif#ifdef LED_INIT_ERR            LED_Toggle(LED_INIT_ERR);#endif        } else {            if (start_status_old != start_status) {#ifdef LED_INIT_ERR                LED_Off(LED_INIT_ERR);#endif            }#ifdef LED_INIT_OK            LED_Toggle(LED_INIT_OK);#endif        }        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) РОТЕК **********************************/
 |