led.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /********************************* (C) РОТЕК ***********************************
  2. * @module led
  3. * @file led.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief Template
  7. *******************************************************************************
  8. * @history Version Author Comment
  9. * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
  10. *******************************************************************************
  11. */
  12. #include "common_config.h"
  13. #include "led.h"
  14. #include "FreeRTOS.h"
  15. #include "task.h"
  16. #define LEDS_EXPAND_OFF(id, ...) \
  17. LED_Off(id);
  18. #define LED_ALL_OFF() \
  19. LEDS(LEDS_EXPAND_OFF) \
  20. uint16_t statusLedFreq = 1000; // Определяет частоту мигания STATUS LED
  21. LED_STATE_t sLedInt = {GREEN, TOGGLE_OFF};
  22. LED_STATE_t ledIntTemporary = {GREEN, TOGGLE_OFF};
  23. /**
  24. * @brief
  25. * @retval
  26. */
  27. void LED_Init(void)
  28. {
  29. LED_ALL_OFF();
  30. }
  31. void vTaskServiceLedBlink(void *arg)
  32. {
  33. for (;;)
  34. {
  35. /* Просто отражает состояние контроллера - "живой" */
  36. #ifdef LED_INIT_OK
  37. LED_Toggle(LED_INIT_OK);
  38. #endif
  39. #ifdef LED_INIT_ERR
  40. LED_Toggle(LED_INIT_ERR);
  41. #endif
  42. vTaskDelay(statusLedFreq / 4);
  43. }
  44. }
  45. void vTaskServiceLedBlinkErr(void *arg)
  46. {
  47. for (;;)
  48. {
  49. /* Просто отражает состояние контроллера - "живой" */
  50. #ifdef LED_INIT_ERR
  51. LED_Toggle(LED_INIT_ERR);
  52. #endif
  53. vTaskDelay(statusLedFreq);
  54. }
  55. }
  56. /**
  57. * @brief
  58. */
  59. void LED_AddStateInt(COLOR_t color, TOGGLE_t toggle)
  60. {
  61. //sLedInt.toggle = toggle;
  62. if ((sLedInt.color == GREEN) && (toggle == TOGGLE_ON))
  63. sLedInt.toggle = toggle;
  64. switch (color)
  65. {
  66. /* Зеленый не перебивает никакой цвет */
  67. case GREEN :
  68. break;
  69. /* Красный перебивает все цвета и останавливет мигание*/
  70. case RED :
  71. sLedInt.color = RED;
  72. sLedInt.toggle = TOGGLE_OFF;
  73. break;
  74. /* Желтый перебивает только зеленый и останавливает мигание*/
  75. case YELLOW :
  76. if (sLedInt.color != RED)
  77. {
  78. sLedInt.color = YELLOW;
  79. sLedInt.toggle = TOGGLE_OFF;
  80. }
  81. break;
  82. default :
  83. break;
  84. }
  85. }
  86. /**
  87. * @brief
  88. */
  89. void LED_On(gpio_t pin)
  90. {
  91. gpio_set(pin, 1);
  92. }
  93. /**
  94. * @brief
  95. */
  96. void LED_Off(gpio_t pin)
  97. {
  98. gpio_set(pin, 0);
  99. }
  100. /**
  101. * @brief Изменить состояние LED
  102. */
  103. void LED_Toggle(gpio_t pin)
  104. {
  105. gpio_invert_output(pin);
  106. }
  107. /**
  108. * @brief
  109. */
  110. void LED_SetStatusLedFreq(uint16_t freq)
  111. {
  112. statusLedFreq = freq;
  113. }
  114. /********************************* (C) РОТЕК **********************************/