bt_6701_commands.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. /********************************* (C) РОТЕК ***********************************
  2. * @module bt_6701_commands
  3. * @file bt_6701_commands.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief bt_6701_commands
  7. *******************************************************************************
  8. * @history Version Author Comment
  9. * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
  10. *******************************************************************************
  11. */
  12. #include "stm32f4xx.h"
  13. #include "bt_6701_commands.h"
  14. #include "commands_api.h"
  15. #include "common_config.h"
  16. #include "gpio.h"
  17. #include "buttons.h"
  18. #include "led.h"
  19. #include "netconf.h"
  20. #include "stm32f4x7_eth_bsp.h"
  21. #include "http_server.h"
  22. #include "rtc.h"
  23. #include "sntp_api.h"
  24. #include "d_inouts.h"
  25. #include "config_service.h"
  26. #include "usart.h"
  27. #include "spi_flash.h"
  28. #include "FreeRTOS.h"
  29. #include "task.h"
  30. #include "lwip/opt.h"
  31. #include "lwip/api.h"
  32. #include "lwip/sys.h"
  33. #ifdef PRINTF_STDLIB
  34. #include <stdio.h>
  35. #endif
  36. #ifdef PRINTF_CUSTOM
  37. #include "tinystdio.h"
  38. #endif
  39. #include <string.h>
  40. bool ntpResult = false;
  41. uint32_t SNTP_Time;
  42. extern uint8_t DefCounter;
  43. extern BUTTON_NO_FIX_t defButton;
  44. extern uint8_t SetCounter;
  45. extern BUTTON_NO_FIX_t setButton;
  46. /**
  47. * @brief Флаг ининциализации Eth интерфейса
  48. */
  49. extern unsigned char eth_ready_flag;
  50. // -------------------------------------------------------------------------- //
  51. // __weak функции
  52. /**
  53. * @brief
  54. */
  55. void TestProcessing(void)
  56. {
  57. vTaskDelay(200);
  58. }
  59. /**
  60. * @brief
  61. */
  62. void Test_U232(void)
  63. {
  64. // Отправляем символы в RS232
  65. for (uint16_t i = 0; i < 1023; i++)
  66. ups_putchar('A');
  67. vTaskDelay(10);
  68. for (uint16_t i = 0; i < 1023; i++)
  69. {
  70. if (ups_getchar(500) != 'A') {
  71. printf("U232 FAIL\r\n");
  72. TEST_SetTest(TEST_WAIT);
  73. return;
  74. }
  75. }
  76. printf("U232 OK\r\n");
  77. TEST_SetTest(TEST_WAIT);
  78. }
  79. #ifdef HARDWARE_BT6703 || HARDWARE_BT6707
  80. /**
  81. * @brief
  82. */
  83. void Test_DRY(void)
  84. {
  85. uint8_t inputState;
  86. #if defined HARDWARE_BT6707
  87. uint8_t start_state = 0;
  88. uint8_t end_state = 1;
  89. set_state_douts(DOUT1, 1);
  90. set_state_douts(DOUT2, 1);
  91. set_state_douts(DOUT3, 1);
  92. #endif
  93. #ifdef HARDWARE_BT6703
  94. uint8_t start_state = 1;
  95. uint8_t end_state = 0;
  96. #endif
  97. vTaskDelay(10);
  98. inputState = get_state_din_outs(DIN1);
  99. set_state_douts(DOUT1, start_state);
  100. vTaskDelay(10);
  101. if (get_state_din_outs(DIN1) == inputState) {
  102. printf("DRY FAIL\r\n");
  103. TEST_SetTest(TEST_WAIT);
  104. return;
  105. }
  106. set_state_douts(DOUT1, end_state);
  107. vTaskDelay(10);
  108. if (get_state_din_outs(DIN1) != inputState) {
  109. printf("DRY FAIL\r\n");
  110. TEST_SetTest(TEST_WAIT);
  111. return;
  112. }
  113. inputState = get_state_din_outs(DIN1);
  114. set_state_douts(DOUT2, start_state);
  115. vTaskDelay(10);
  116. if (get_state_din_outs(DIN1) == inputState) {
  117. printf("DRY FAIL\r\n");
  118. TEST_SetTest(TEST_WAIT);
  119. return;
  120. }
  121. set_state_douts(DOUT2, end_state);
  122. vTaskDelay(10);
  123. if (get_state_din_outs(DIN1) != inputState) {
  124. printf("DRY FAIL\r\n");
  125. TEST_SetTest(TEST_WAIT);
  126. return;
  127. }
  128. vTaskDelay(10);
  129. #if defined HARDWARE_BT6707
  130. inputState = get_state_din_outs(DIN1);
  131. set_state_douts(DOUT3, start_state);
  132. vTaskDelay(10);
  133. if (get_state_din_outs(DIN1) == inputState) {
  134. printf("DRY FAIL\r\n");
  135. TEST_SetTest(TEST_WAIT);
  136. return;
  137. }
  138. set_state_douts(DOUT3, end_state);
  139. vTaskDelay(10);
  140. if (get_state_din_outs(DIN1) != inputState) {
  141. printf("DRY FAIL\r\n");
  142. TEST_SetTest(TEST_WAIT);
  143. return;
  144. }
  145. vTaskDelay(10);
  146. #endif
  147. printf("DRY OK\r\n");
  148. TEST_SetTest(TEST_WAIT);
  149. }
  150. #endif
  151. /**
  152. * @brief
  153. */
  154. void vTest_DEF(void *params)
  155. {
  156. static uint32_t timeout = 0;
  157. for (;;)
  158. {
  159. if (timeout++ > BUTTON_TIMEOUT) {
  160. timeout = 0;
  161. DefCounter = 0;
  162. #ifdef LED_INIT_ERR
  163. LED_Off(LED_INIT_ERR);
  164. #endif
  165. #ifdef LED_ALARM
  166. LED_Off(LED_ALARM);
  167. #endif
  168. #ifdef LED_RED_MINOR
  169. LED_Off(LED_RED_MINOR);
  170. #endif
  171. printf("DEF FAIL\r\n");
  172. TEST_SetTest(TEST_WAIT);
  173. ifTest_DEF = false;
  174. vTaskDelete(NULL);
  175. }
  176. BUTTON_NoFixHandler(&defButton);
  177. if (DefCounter == 3)
  178. {
  179. timeout = 0;
  180. DefCounter = 0;
  181. printf("DEF OK\r\n");
  182. /* Завершение теста T0 */
  183. /* Устанавливаем статус T0READY, сохраняем статус во флеш */
  184. COM_SetTestState(T0READY);
  185. TEST_SetTest(TEST_WAIT);
  186. ifTest_DEF = false;
  187. vTaskDelete(NULL);
  188. }
  189. vTaskDelay(10);
  190. }
  191. }
  192. /**
  193. * @brief
  194. */
  195. void vTest_SET(void *params)
  196. {
  197. static uint32_t timeout_set = 0;
  198. for (;;)
  199. {
  200. if (timeout_set++ > BUTTON_TIMEOUT) {
  201. timeout_set = 0;
  202. SetCounter = 0;
  203. #ifdef LED_INIT_OK
  204. LED_Off(LED_INIT_OK);
  205. #endif
  206. #ifdef LED_GREEN_MINOR
  207. LED_Off(LED_GREEN_MINOR);
  208. #endif
  209. printf("SET FAIL\r\n");
  210. TEST_SetTest(TEST_WAIT);
  211. ifTest_SET = false;
  212. vTaskDelete(NULL);
  213. }
  214. BUTTON_NoFixHandler(&setButton);
  215. if (SetCounter == 3)
  216. {
  217. timeout_set = 0;
  218. SetCounter = 0;
  219. printf("SET OK\r\n");
  220. /* Завершение теста T0 */
  221. /* Устанавливаем статус T0READY, сохраняем статус во флеш */
  222. COM_SetTestState(T0READY);
  223. TEST_SetTest(TEST_WAIT);
  224. ifTest_SET = false;
  225. vTaskDelete(NULL);
  226. }
  227. vTaskDelay(10);
  228. }
  229. }
  230. /**
  231. * @brief Тестирование RTC
  232. */
  233. void COM_TestRtc(void)
  234. {
  235. /* Пытаемся синхронизироваться с NTP сервером */
  236. SNTP_Enable(true);
  237. SNTP_Poll();
  238. vTaskDelay(1000);
  239. /* Синхронизация удалась */
  240. if (ntpResult) {
  241. printf("RTC OK\r\n");
  242. }
  243. else
  244. printf("RTC FAIL SYNC\r\n");
  245. TEST_SetTest(TEST_WAIT);
  246. }
  247. /**
  248. * @brief Тестирование SPIFLASH
  249. */
  250. void COM_TestSPIflash(void)
  251. {
  252. if (spi_flash_test()) {
  253. printf("SPIFLASH OK\r\n");
  254. }
  255. else
  256. printf("SPIFLASH FAIL SYNC\r\n");
  257. TEST_SetTest(TEST_WAIT);
  258. }
  259. /**
  260. * @brief
  261. */
  262. void Test_Ethernet(void)
  263. {
  264. static bool ethernetInit = false;
  265. int timeout = 100; /* 10 sec timeout */
  266. // if (ethernetInit == false)
  267. {
  268. if (eth_ready_flag == 0) {
  269. if(!ethernetInit){
  270. ethernetInit = true;
  271. ETH_BSP_Config();
  272. LwIP_Init();
  273. }
  274. else{
  275. init_get_ip_address_controller();
  276. }
  277. }
  278. /* Waiting ETH init */
  279. while ((eth_ready_flag == 0) && (timeout-- > 0)) {
  280. vTaskDelay(100);
  281. }
  282. if (eth_ready_flag == 0) {
  283. printf("ETH FAIL\r\n");
  284. }
  285. else {
  286. sys_thread_new("HTTP", vTaskTcpServer, NULL, 4*configMINIMAL_STACK_SIZE, tskIDLE_PRIORITY);
  287. ethernetInit = true;
  288. }
  289. }
  290. /* else {
  291. printf("ETH OK\r\n");
  292. }*/
  293. TEST_SetTest(TEST_WAIT);
  294. }
  295. /**
  296. * @brief
  297. */
  298. void Test_Serno(void)
  299. {
  300. macWaiting = true;
  301. macIsInstalled = false;
  302. // Устанавливаем статус тестирования "T1OK"
  303. COM_SetTestState(T0OK);
  304. // Отправляем udp пакет с информацией
  305. //COM_TestSerno();
  306. // Пауза. В это время должен прийти GET запрос с MAC адресом.
  307. //vTaskDelay(8000);
  308. //macWaiting = false;
  309. //if (!macIsInstalled)
  310. // printf("SERNO FAIL\r\n");
  311. for (uint8_t i = 0; i < 4; i++)
  312. {
  313. // Отправляем udp пакет с информацией
  314. COM_TestSerno();
  315. // Пауза. В это время должен прийти GET запрос с MAC адресом.
  316. vTaskDelay(8000);
  317. if (macIsInstalled)
  318. break;
  319. }
  320. if (!macIsInstalled)
  321. printf("SERNO FAIL\r\n");
  322. TEST_SetTest(TEST_WAIT);
  323. }
  324. // -------------------------------------------------------------------------- //
  325. /********************************* (C) РОТЕК **********************************/