led.c 2.7 KB

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