init_task.c 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /********************************* (C) РОТЕК ***********************************
  2. * @module init_task
  3. * @file init_task.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief Инициализация всех задач.
  7. *******************************************************************************
  8. * @history Version Author Comment
  9. * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
  10. *******************************************************************************
  11. */
  12. #include "init_task.h"
  13. #include "common_config.h"
  14. #include "wdg.h"
  15. #include "usart.h"
  16. //#include "port_microrl.h"
  17. #include "led.h"
  18. #include "rng.h"
  19. #include "buttons.h"
  20. #include "jumper.h"
  21. #include "rtc.h"
  22. #include "log.h"
  23. #include "stm32f4x7_eth_bsp.h"
  24. #include "netconf.h"
  25. #include "udp_netsetting.h"
  26. #include "snmp_api.h"
  27. #include "http_server.h"
  28. #include "sntp.h"
  29. #include "settings_api.h"
  30. #include "main.h"
  31. #include "trap_api.h"
  32. #include "megatec.h"
  33. #include "testing.h"
  34. #include "ups_monitor.h"
  35. //#include "ups_params.h"
  36. //#include "ups_monitor.h"
  37. //#include <lwip/stats.h>
  38. #ifdef PRINTF_STDLIB
  39. #include <stdio.h>
  40. #endif
  41. #ifdef PRINTF_CUSTOM
  42. #include "tinystdio.h"
  43. #endif
  44. #include "FreeRTOS.h"
  45. #include "task.h"
  46. extern bool dhcp;
  47. /**
  48. * @brief Общая структура настроек
  49. */
  50. extern SETTINGS_t sSettings;
  51. /**
  52. * @brief Хендл для задачи vTaskLedBlink
  53. */
  54. TaskHandle_t xTaskToKill;
  55. static void vTaskDebug(void *pvParameters);
  56. /**
  57. * @brief Разовая синхронизация времени при старте контроллера
  58. */
  59. TaskHandle_t xHandleSntpOnceSinhro = NULL;
  60. /**
  61. * @brief Задача инициализации. Запускает основные задачи девайса и умирает.
  62. * @retval
  63. */
  64. void InitTask(void *params)
  65. {
  66. // -----------------------------------------------------------------------------
  67. // xTaskCreate(vTaskWdt, "WDT", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  68. // -----------------------------------------------------------------------------
  69. InitUSART();
  70. ups_megatec_init();
  71. // -----------------------------------------------------------------------------
  72. // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);
  73. //SETTINGS_SetDefaultDebug();
  74. //SETTINGS_Save();
  75. SETTINGS_Load();
  76. if(set_mode_jumper()){
  77. SETTINGS_SetServiceDef();
  78. SETTINGS_Save();
  79. log_event_data(LOG_PSW_CHANGE, "Сброс к заводскому");
  80. }
  81. // -----------------------------------------------------------------------------
  82. // -----------------------------------------------------------------------------
  83. #ifdef USART_DEBUG_ENABLE
  84. InitUSART();
  85. // MICRORL_Init();
  86. #endif
  87. // -----------------------------------------------------------------------------
  88. // -----------------------------------------------------------------------------
  89. #ifdef LED_ENABLE
  90. LED_Init();
  91. /* Простая мигалка для подтверждения живучести контроллера */
  92. xTaskCreate(vTaskLedBlink, "LED_Blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);//&xTaskToKill
  93. #endif
  94. // -----------------------------------------------------------------------------
  95. // -----------------------------------------------------------------------------
  96. #ifdef BUTTON_ENABLE
  97. BUTTON_Init();
  98. xTaskCreate(vTaskButtons, "Buttons", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  99. #endif
  100. // -----------------------------------------------------------------------------
  101. //xTaskCreate( d_inouts_task, "inouts_task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  102. // xTaskCreate( d_inouts_test, "d_inouts_test", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  103. // -----------------------------------------------------------------------------
  104. #ifdef RTC_ENABLE
  105. TM_RTC_Init(TM_RTC_ClockSource_External); // Так было
  106. // TM_RTC_Init(TM_RTC_ClockSource_Internal); // TODO Уточнить источинк тактирования
  107. #endif
  108. // -----------------------------------------------------------------------------
  109. // -----------------------------------------------------------------------------
  110. #ifdef UPS_ENABLE
  111. xTaskCreate(UPS_Monitor, "UPS_Monitor", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  112. #endif
  113. // -----------------------------------------------------------------------------
  114. /* Random number generator */
  115. RNG_Init();
  116. // -----------------------------------------------------------------------------
  117. #ifdef NET_ENABLE
  118. ETH_BSP_Config();
  119. LwIP_Init();
  120. #ifdef WEB_SERVER_ENABLE
  121. //HTTP_Init();
  122. HTTPS_Init();
  123. #define SSL_TASK_PRIO ( configMAX_PRIORITIES - 3 )
  124. xTaskCreate(ssl_server, "SSL", 10*configMINIMAL_STACK_SIZE, NULL, SSL_TASK_PRIO, NULL);
  125. #endif
  126. #ifdef SNMP_ENABLE
  127. SNMP_Init();
  128. xTaskCreate(SNMP_SysUpTimeTask, "snmpSysUpTime", configMINIMAL_STACK_SIZE,
  129. NULL, tskIDLE_PRIORITY, NULL);
  130. xTaskCreate(snmp_trap_tread, "snmpTrapTest", 3*configMINIMAL_STACK_SIZE,
  131. NULL, tskIDLE_PRIORITY, NULL);
  132. #endif
  133. #endif
  134. // -----------------------------------------------------------------------------
  135. /* SNTP */
  136. SNTP_Init();
  137. xTaskCreate(vTaskOnceSynchro, "sntpOnceSinhro", 2*configMINIMAL_STACK_SIZE,
  138. NULL, tskIDLE_PRIORITY, &xHandleSntpOnceSinhro);
  139. xTaskCreate(vTaskPeriodicSynchro, "sntpPeriodicSinhro", 2*configMINIMAL_STACK_SIZE,
  140. NULL, tskIDLE_PRIORITY, NULL);
  141. // -----------------------------------------------------------------------------
  142. /* UDP for net settings */
  143. UDP_netsetting_init();
  144. // Тестирование
  145. // Тест таблицы трапов
  146. //xTaskCreate(vTestTrap, "Trap_test", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  147. // -----------------------------------------------------------------------------
  148. // -----------------------------------------------------------------------------
  149. #ifdef DEBUG_FREERTOS
  150. xTaskCreate(vTaskDebug, "Debug", 800, NULL, tskIDLE_PRIORITY, NULL);
  151. #endif
  152. // -----------------------------------------------------------------------------
  153. /* if(strncmp(sSettings.sFlags.testState, "T2OK", 4)){
  154. xTaskCreate(vTaskTesting, "Testing", configMINIMAL_STACK_SIZE,
  155. NULL, tskIDLE_PRIORITY, NULL);
  156. }*/
  157. //TEST_InitRS485();
  158. //TEST_IO();
  159. log_event_data(LOG_TURN_ON, " ");
  160. /* Контроль успешной загрузки. Сброс флага bootry */
  161. /* Сброс флага и сохранение нового значения во флеш памяти происходт после
  162. некоторой задержки для запуска всех задач */
  163. vTaskDelay(4000);
  164. SETTINGS_ResetBootTry();
  165. // Отправка трапа о перезагрузке в случае статического IP
  166. /* if (!dhcp)
  167. SNMP_SendUserTrap(DEVICE_REBOOTED);
  168. printf("Hello world\r\n");*/
  169. vTaskDelete(NULL);
  170. taskYIELD();
  171. }
  172. static void vTaskDebug(void *pvParameters)
  173. {
  174. char msg[700];
  175. for(;;)
  176. {
  177. vTaskList(msg);
  178. DBG printf(msg);
  179. DBG printf("\n\r\r\n");
  180. #if LWIP_STATS
  181. stats_display();
  182. DBG printf("\r\n\r\n");
  183. #endif
  184. vTaskDelay(5000);
  185. }
  186. }
  187. /********************************* (C) РОТЕК **********************************/