led.c 2.9 KB

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