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 LED
- LED_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) РОТЕК **********************************/
|