bt_6701_commands.c 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  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 INOUTS_ENABLE
  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. LED_Off(LED_INIT_R);
  163. LED_Off(LED_MAJOR_R);
  164. LED_Off(LED_MINOR_R);
  165. printf("DEF FAIL\r\n");
  166. TEST_SetTest(TEST_WAIT);
  167. ifTest_DEF = false;
  168. vTaskDelete(NULL);
  169. }
  170. BUTTON_NoFixHandler(&defButton);
  171. if (DefCounter == 3)
  172. {
  173. timeout = 0;
  174. DefCounter = 0;
  175. printf("DEF OK\r\n");
  176. /* Завершение теста T0 */
  177. /* Устанавливаем статус T0READY, сохраняем статус во флеш */
  178. COM_SetTestState(T0READY);
  179. TEST_SetTest(TEST_WAIT);
  180. ifTest_DEF = false;
  181. vTaskDelete(NULL);
  182. }
  183. vTaskDelay(10);
  184. }
  185. }
  186. /**
  187. * @brief
  188. */
  189. void vTest_SET(void *params)
  190. {
  191. static uint32_t timeout_set = 0;
  192. for (;;)
  193. {
  194. if (timeout_set++ > BUTTON_TIMEOUT) {
  195. timeout_set = 0;
  196. SetCounter = 0;
  197. LED_Off(LED_INIT_G);
  198. LED_Off(LED_MINOR_G);
  199. printf("SET FAIL\r\n");
  200. TEST_SetTest(TEST_WAIT);
  201. ifTest_SET = false;
  202. vTaskDelete(NULL);
  203. }
  204. BUTTON_NoFixHandler(&setButton);
  205. if (SetCounter == 3)
  206. {
  207. timeout_set = 0;
  208. SetCounter = 0;
  209. printf("SET OK\r\n");
  210. /* Завершение теста T0 */
  211. /* Устанавливаем статус T0READY, сохраняем статус во флеш */
  212. COM_SetTestState(T0READY);
  213. TEST_SetTest(TEST_WAIT);
  214. ifTest_SET = false;
  215. vTaskDelete(NULL);
  216. }
  217. vTaskDelay(10);
  218. }
  219. }
  220. /**
  221. * @brief Тестирование RTC
  222. */
  223. void COM_TestRtc(void)
  224. {
  225. /* Пытаемся синхронизироваться с NTP сервером */
  226. SNTP_Enable(true);
  227. SNTP_Poll();
  228. vTaskDelay(1000);
  229. /* Синхронизация удалась */
  230. if (ntpResult) {
  231. printf("RTC OK\r\n");
  232. }
  233. else
  234. printf("RTC FAIL SYNC\r\n");
  235. TEST_SetTest(TEST_WAIT);
  236. }
  237. /**
  238. * @brief Тестирование SPIFLASH
  239. */
  240. void COM_TestSPIflash(void)
  241. {
  242. if (spi_flash_test()) {
  243. printf("SPIFLASH OK\r\n");
  244. }
  245. else
  246. printf("SPIFLASH FAIL SYNC\r\n");
  247. TEST_SetTest(TEST_WAIT);
  248. }
  249. /**
  250. * @brief
  251. */
  252. void Test_Ethernet(void)
  253. {
  254. static bool ethernetInit = false;
  255. int timeout = 100; /* 10 sec timeout */
  256. // if (ethernetInit == false)
  257. {
  258. if (eth_ready_flag == 0) {
  259. if(!ethernetInit){
  260. ethernetInit = true;
  261. ETH_BSP_Config();
  262. LwIP_Init();
  263. }
  264. else{
  265. init_get_ip_address_controller();
  266. }
  267. }
  268. /* Waiting ETH init */
  269. while ((eth_ready_flag == 0) && (timeout-- > 0)) {
  270. vTaskDelay(100);
  271. }
  272. if (eth_ready_flag == 0) {
  273. printf("ETH FAIL\r\n");
  274. }
  275. else {
  276. sys_thread_new("HTTP", vTaskTcpServer, NULL, 4*configMINIMAL_STACK_SIZE, tskIDLE_PRIORITY);
  277. ethernetInit = true;
  278. }
  279. }
  280. /* else {
  281. printf("ETH OK\r\n");
  282. }*/
  283. TEST_SetTest(TEST_WAIT);
  284. }
  285. /**
  286. * @brief
  287. */
  288. void Test_Serno(void)
  289. {
  290. macWaiting = true;
  291. macIsInstalled = false;
  292. // Устанавливаем статус тестирования "T1OK"
  293. COM_SetTestState(T0OK);
  294. // Отправляем udp пакет с информацией
  295. //COM_TestSerno();
  296. // Пауза. В это время должен прийти GET запрос с MAC адресом.
  297. //vTaskDelay(8000);
  298. //macWaiting = false;
  299. //if (!macIsInstalled)
  300. // printf("SERNO FAIL\r\n");
  301. for (uint8_t i = 0; i < 4; i++)
  302. {
  303. // Отправляем udp пакет с информацией
  304. COM_TestSerno();
  305. // Пауза. В это время должен прийти GET запрос с MAC адресом.
  306. vTaskDelay(8000);
  307. if (macIsInstalled)
  308. break;
  309. }
  310. if (!macIsInstalled)
  311. printf("SERNO FAIL\r\n");
  312. TEST_SetTest(TEST_WAIT);
  313. }
  314. // -------------------------------------------------------------------------- //
  315. /********************************* (C) РОТЕК **********************************/