init_task.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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. #ifdef CLI_ENABLE
  28. #include "cli.h"
  29. #endif
  30. #ifdef TELNET_ENABLE
  31. #include "telnet_server.h"
  32. #endif
  33. #ifdef SSH_ENABLE
  34. #include "server.h"
  35. #endif
  36. #ifdef HTTP_SERVER_ENABLE
  37. #include "http_server.h"
  38. #endif
  39. #ifdef SSL_SERVER_ENABLE
  40. #include "my_ssl_server.h"
  41. #endif
  42. #ifdef PORTGW_ENABLE
  43. #include "portgw.h"
  44. #endif
  45. #ifdef DALLAS_SENSOR_ENABLE
  46. #include "temper.h"
  47. #endif
  48. #ifdef AM2301_SENSOR_ENABLE
  49. #include "AM2301.h"
  50. #endif
  51. #include "sntp_api.h"
  52. #include "settings_api.h"
  53. #include "main.h"
  54. #include "trap_api.h"
  55. #include "megatec.h"
  56. #include "testing.h"
  57. #include "ups_monitor.h"
  58. //#include "ups_params.h"
  59. #include "lwip/stats.h"
  60. #ifdef PRINTF_STDLIB
  61. #include <stdio.h>
  62. #endif
  63. #ifdef PRINTF_CUSTOM
  64. #include "tinystdio.h"
  65. #endif
  66. #include "syslog.h"
  67. #include "FreeRTOS.h"
  68. #include "task.h"
  69. extern bool dhcp;
  70. #define DBG if (0)
  71. /**
  72. * @brief Общая структура настроек
  73. */
  74. extern SETTINGS_t sSettings;
  75. #ifdef DEBUG_FREERTOS
  76. static void vTaskDebug(void *pvParameters);
  77. #endif
  78. /**
  79. * @brief Разовая синхронизация времени при старте контроллера
  80. */
  81. TaskHandle_t xHandleSntpOnceSinhro = NULL;
  82. /**
  83. * @brief Задача инициализации. Запускает основные задачи девайса и умирает.
  84. * @retval
  85. */
  86. void InitTask(void *params)
  87. {
  88. // -----------------------------------------------------------------------------
  89. InitUSART();
  90. log_init(false);
  91. ups_megatec_init();
  92. // -----------------------------------------------------------------------------
  93. //SETTINGS_SetAllDefault();
  94. //SETTINGS_Save();
  95. SETTINGS_Load();
  96. if (set_mode_jumper()) {
  97. SETTINGS_SetServiceDef();
  98. SETTINGS_Save();
  99. log_event_data(LOG_PSW_CHANGE, "Сброс к заводскому");
  100. }
  101. // -----------------------------------------------------------------------------
  102. #ifdef HARDWARE_BT6703
  103. check_outputs_config();
  104. #endif
  105. // -----------------------------------------------------------------------------
  106. #ifdef USART_DEBUG_ENABLE
  107. //MICRORL_Init();
  108. #endif
  109. // -----------------------------------------------------------------------------
  110. // -----------------------------------------------------------------------------
  111. #ifdef LED_ENABLE
  112. LED_Init();
  113. /* Простая мигалка для подтверждения живучести контроллера */
  114. xTaskCreate(vTaskLedBlink, "LED_Blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  115. #endif
  116. // -----------------------------------------------------------------------------
  117. // -----------------------------------------------------------------------------
  118. #ifdef BUTTON_ENABLE
  119. BUTTON_Init();
  120. xTaskCreate(vTaskButtons, "Buttons", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  121. #endif
  122. // -----------------------------------------------------------------------------
  123. // -----------------------------------------------------------------------------
  124. #ifdef RTC_ENABLE
  125. TM_RTC_Init(TM_RTC_ClockSource_External);
  126. #endif
  127. // -----------------------------------------------------------------------------
  128. // -----------------------------------------------------------------------------
  129. #ifdef UPS_ENABLE
  130. xTaskCreate(UPS_Monitor, "UPS_Monitor", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  131. #endif
  132. // -----------------------------------------------------------------------------
  133. // -----------------------------------------------------------------------------
  134. #ifdef DALLAS_SENSOR_ENABLE
  135. OW_Init();
  136. #endif
  137. #ifdef AM2301_SENSOR_ENABLE
  138. DHT_Task_Init();
  139. #endif
  140. // -----------------------------------------------------------------------------
  141. // -----------------------------------------------------------------------------
  142. /* Random number generator */
  143. RNG_Init();
  144. // -----------------------------------------------------------------------------
  145. // -----------------------------------------------------------------------------
  146. #ifdef NET_ENABLE
  147. ETH_BSP_Config();
  148. LwIP_Init();
  149. #ifdef HTTP_SERVER_ENABLE
  150. HTTP_Init();
  151. #endif
  152. #ifdef SSL_SERVER_ENABLE
  153. HTTP_Init();
  154. HTTPS_Init();
  155. //#define SSL_TASK_PRIO ( configMAX_PRIORITIES - 3 )
  156. xTaskCreate(ssl_server, "SSL", 24 * configMINIMAL_STACK_SIZE, NULL, SSL_TASK_PRIO, NULL);
  157. #endif
  158. // UDP for net settings
  159. if (strncmp(sSettings.sFlags.testState, "T2OK", 4)) {
  160. xTaskCreate(vTaskTesting, "Testing", 2 * configMINIMAL_STACK_SIZE,
  161. NULL, tskIDLE_PRIORITY, NULL);
  162. } else {
  163. UDP_netsetting_init();
  164. }
  165. #ifdef CLI_ENABLE
  166. cli_init();
  167. #endif
  168. #if defined TELNET_ENABLE
  169. telnet_server_init();
  170. #ifdef SSH_ENABLE
  171. ssh_server_init();
  172. #endif
  173. openlog();
  174. #endif
  175. // -----------------------------------------------------------------------------
  176. /* SNTP */
  177. SNTP_Init();
  178. xTaskCreate(vTaskOnceSynchro, "sntpOnceSinhro", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY,
  179. &xHandleSntpOnceSinhro);
  180. xTaskCreate(vTaskPeriodicSynchro, "sntpPeriodicSinhro", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  181. // -----------------------------------------------------------------------------
  182. #ifdef SNMP_ENABLE
  183. SNMP_Init();
  184. xTaskCreate(snmp_trap_tread, "snmpTrapTest", 4 * configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  185. #endif
  186. #endif
  187. // -----------------------------------------------------------------------------
  188. // Прозрачный порт
  189. #ifdef PORTGW_ENABLE
  190. portgw_init();
  191. #endif
  192. // -----------------------------------------------------------------------------
  193. // Тестирование
  194. // Тест таблицы трапов
  195. //xTaskCreate(vTestTrap, "Trap_test", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  196. // -----------------------------------------------------------------------------
  197. // -----------------------------------------------------------------------------
  198. #ifdef DEBUG_FREERTOS
  199. xTaskCreate(vTaskDebug, "Debug", 800, NULL, tskIDLE_PRIORITY, NULL);
  200. #endif
  201. // -----------------------------------------------------------------------------
  202. log_event_data(LOG_TURN_ON, " ");
  203. /* Контроль успешной загрузки. Сброс флага bootry */
  204. /* Сброс флага и сохранение нового значения во флеш памяти происходт после
  205. некоторой задержки для запуска всех задач */
  206. vTaskDelay(4000);
  207. SETTINGS_ResetBootTry();
  208. // Отправка трапа о перезагрузке в случае статического IP
  209. /* if (!dhcp)
  210. SNMP_SendUserTrap(DEVICE_REBOOTED);
  211. printf("Hello world\r\n");*/
  212. vTaskDelete(NULL);
  213. taskYIELD();
  214. }
  215. #ifdef DEBUG_FREERTOS
  216. static void vTaskDebug(void *pvParameters)
  217. {
  218. char msg[700];
  219. for (;;) {
  220. DBG printf("Free memory %d\n\r\r\n", xPortGetFreeHeapSize());
  221. DBG vTaskList(msg);
  222. DBG printf(msg);
  223. DBG printf("\n\r\r\n");
  224. #if LWIP_STATS
  225. stats_display();
  226. DBG printf("\r\n\r\n");
  227. #endif
  228. vTaskDelay(5000);
  229. }
  230. }
  231. #endif
  232. /********************************* (C) РОТЕК **********************************/