led.c 2.5 KB

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