web_params_api.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. /********************************* (C) ROTEK ***********************************
  2. * @module web_params_api
  3. * @file web_params_api.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief web_params_api
  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 "web_params_api.h"
  14. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  15. #include "http_server.h"
  16. #elif defined HARDWARE_BT6703
  17. #include "my_ssl_server.h"
  18. #endif
  19. #include "parameters.h"
  20. #include "trap_params.h"
  21. #include "snmp_api.h"
  22. #include "trap_api.h"
  23. #include "settings_api.h"
  24. #include "common_config.h"
  25. #include "snmp.h"
  26. #include "log.h"
  27. #include "hal.h"
  28. #include "FreeRTOS.h"
  29. #include "task.h"
  30. #ifdef PRINTF_STDLIB
  31. #include <stdio.h>
  32. #endif
  33. #ifdef PRINTF_CUSTOM
  34. #include "tinystdio.h"
  35. #endif
  36. #include <string.h>
  37. typedef void (*pFunction)(void);
  38. pFunction Jump_To_Application;
  39. uint32_t JumpAddress;
  40. /**
  41. * @brief Возвращяет строку с настройками на первой странице
  42. * @retval None
  43. */
  44. char *HTTP_GetParamsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
  45. {
  46. char str[40];
  47. uint8_t len;
  48. (void)bufIn;
  49. (void)lenBufIn;
  50. (void)reqNum;
  51. memset(bufOut, 0, SEND_BUF_MAX_LEN);
  52. // Headers для поддержки saffari
  53. strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  54. // Параметры UPS
  55. GetInputVoltageStr(str, &len);
  56. strcat(bufOut, "{\"AC\":\"");
  57. strncat(bufOut, str, len);
  58. GetOutputVoltageStr(str, &len);
  59. strcat(bufOut, "\",\"DC\":\"");
  60. strncat(bufOut, str, len);
  61. GetInputFreqStr(str, &len);
  62. strcat(bufOut, "\",\"in_freq\":\"");
  63. strncat(bufOut, str, len);
  64. GetOutputFreqStr(str, &len);
  65. strcat(bufOut, "\",\"out_freq\":\"");
  66. strncat(bufOut, str, len);
  67. GetPowerStr(str, &len);
  68. strcat(bufOut, "\",\"pwr\":\"");
  69. strncat(bufOut, str, len);
  70. GetBatCapacityStr(str, &len);
  71. strcat(bufOut, "\",\"bat_cap\":\"");
  72. strncat(bufOut, str, len);
  73. GetInternalTempStr(str, &len);
  74. strcat(bufOut, "\",\"inner_temp\":\"");
  75. strncat(bufOut, str, len);
  76. GetRuntimeStr(str, &len);
  77. strcat(bufOut, "\",\"bat_time_left\":\"");
  78. strncat(bufOut, str, len);
  79. #ifndef HARDWARE_BT6709
  80. GetDINStatusStr(str, &len, 0);
  81. strcat(bufOut, "\",\"di1\":\"");
  82. strncat(bufOut, str, len);
  83. GetDOUTStatusStr(str, &len, 0);
  84. strcat(bufOut, "\",\"ro1\":\"");
  85. strncat(bufOut, str, len);
  86. GetDOUTStatusStr(str, &len, 1);
  87. strcat(bufOut, "\",\"ro2\":\"");
  88. strncat(bufOut, str, len);
  89. #if defined HARDWARE_BT6707
  90. GetDOUTStatusStr(str, &len, 2);
  91. strcat(bufOut, "\",\"ro3\":\"");
  92. strncat(bufOut, str, len);
  93. #endif
  94. #endif
  95. // Дополнительные параметры
  96. // Мониторинг
  97. // load_monitor (нагрузка, 0 - норма, 1 - fail)
  98. // temp_monitor (внутренняя температура, 0 - норма, 1 - fail)
  99. // connect_monitor (связь с UPSом, 0 - норма, 1 - fail)
  100. GetAlarmMonitorStr(str, &len);
  101. strcat(bufOut, "\",\"m_alarm\":\"");
  102. strncat(bufOut, str, len);
  103. GetAlarmStr(str, &len);
  104. strcat(bufOut, "\",\"u_alarm\":\"");
  105. strncat(bufOut, str, len);
  106. // Признак изменения сетевых настроек
  107. GetWebReinitFlag(str, &len);
  108. strcat(bufOut, "\",\"netsettings_changed\":\"");
  109. strncat(bufOut, str, len);
  110. strncat(bufOut, "\"}", 2);
  111. *lenBufOut = strlen(bufOut);
  112. return bufOut;
  113. }
  114. /**
  115. * @brief Возвращяет строку с настройками на второй странице
  116. * @retval None
  117. */
  118. char *HTTP_GetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
  119. {
  120. char str[30];
  121. uint8_t len;
  122. memset(bufOut, 0, SEND_BUF_MAX_LEN);
  123. (void)bufIn;
  124. (void)lenBufIn;
  125. (void)reqNum;
  126. /* Headers для поддержки saffari */
  127. strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  128. /* SNMP */
  129. GetReadCommunity(str, &len);
  130. strcat(bufOut, "{\"read_community\":\"");
  131. strncat(bufOut, str, len);
  132. GetWriteCommunity(str, &len);
  133. strcat(bufOut, "\",\"write_community\":\"");
  134. strncat(bufOut, str, len);
  135. GetManagerIp(str, &len);
  136. strcat(bufOut, "\",\"managerIP\":\"");
  137. strncat(bufOut, str, len);
  138. GetManagerIp2(str, &len);
  139. strcat(bufOut, "\",\"managerIP2\":\"");
  140. strncat(bufOut, str, len);
  141. GetManagerIp3(str, &len);
  142. strcat(bufOut, "\",\"managerIP3\":\"");
  143. strncat(bufOut, str, len);
  144. GetManagerIp4(str, &len);
  145. strcat(bufOut, "\",\"managerIP4\":\"");
  146. strncat(bufOut, str, len);
  147. GetManagerIp5(str, &len);
  148. strcat(bufOut, "\",\"managerIP5\":\"");
  149. strncat(bufOut, str, len);
  150. #ifndef HARDWARE_BT6709
  151. /*Параметры реле и сухих контактов*/
  152. GetDINTypeActStr(str, &len, 0);
  153. strcat(bufOut, "\",\"di1\":\"");
  154. strncat(bufOut, str, len);
  155. GetROTypeActStr(str, &len, 0);
  156. strcat(bufOut, "\",\"ro1\":\"");
  157. strncat(bufOut, str, len);
  158. GetROTypeActStr(str, &len, 1);
  159. strcat(bufOut, "\",\"ro2\":\"");
  160. strncat(bufOut, str, len);
  161. #if defined HARDWARE_BT6707
  162. GetROTypeActStr(str, &len, 2);
  163. strcat(bufOut, "\",\"ro3\":\"");
  164. strncat(bufOut, str, len);
  165. #endif
  166. #endif
  167. /* WEB */
  168. GetIpStr(str, &len);
  169. strcat(bufOut, "\",\"ipaddr\":\"");
  170. strncat(bufOut, str, len);
  171. GetGatewayStr(str, &len);
  172. strcat(bufOut, "\",\"gw\":\"");
  173. strncat(bufOut, str, len);
  174. GetMaskStr(str, &len);
  175. strcat(bufOut, "\",\"mask\":\"");
  176. strncat(bufOut, str, len);
  177. GetDhcpStateStr(str, &len);
  178. strcat(bufOut, "\",\"dhcp\":");
  179. strncat(bufOut, str, len);
  180. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  181. GetTelnetPortStr(str, &len);
  182. strcat(bufOut, ",\"tn_port\":\"");
  183. strncat(bufOut, str, len);
  184. GetTelnetEnableStateStr(str, &len);
  185. strcat(bufOut, "\",\"tn_enabled\":");
  186. strncat(bufOut, str, len);
  187. #endif
  188. #ifdef HARDWARE_BT6703
  189. GetAuthEnableStateStr(str, &len);
  190. strcat(bufOut, ",\"swauth\":");
  191. strncat(bufOut, str, len);
  192. /* RADIUS */
  193. GetRDSIpStr(str, &len);
  194. strcat(bufOut, ",\"rs_server\":\"");
  195. strncat(bufOut, str, len);
  196. GetRDSPortStr(str, &len);
  197. strcat(bufOut, "\",\"rs_port\":\"");
  198. strncat(bufOut, str, len);
  199. GetRDSPasswordkStr(str, &len);
  200. strcat(bufOut, "\",\"rs_pwd\":\"");
  201. strncat(bufOut, str, len);
  202. GetRDSKeyAccesstStr(str, &len);
  203. strcat(bufOut, "\",\"rs_key\":\"");
  204. strncat(bufOut, str, len);
  205. GetRDSEnableStateStr(str, &len);
  206. strcat(bufOut, "\",\"rs_enabled\":");
  207. strncat(bufOut, str, len);
  208. #endif
  209. #ifdef HARDWARE_BT6709
  210. /* White list */
  211. const char *white_list_js[] = {
  212. ",\"wtl_ip1\":\"",
  213. "\",\"wtl_ip2\":\"",
  214. "\",\"wtl_ip3\":\"",
  215. "\",\"wtl_ip4\":\"",
  216. "\",\"wtl_ip5\":\"",
  217. };
  218. for (uint8_t i = 0; i < MAX_WHITE_LIST; i++) {
  219. GetWhiteListSTR(str, &len, i);
  220. strcat(bufOut, white_list_js[i]);
  221. strncat(bufOut, str, len);
  222. }
  223. strcat(bufOut, "\"");
  224. #endif
  225. /* Параметры даты и времени */
  226. GetDateStr(str, &len);
  227. strcat(bufOut, ",\"date\":\"");
  228. strncat(bufOut, str, len);
  229. GetTimeStr(str, &len);
  230. strcat(bufOut, "\",\"time\":\"");
  231. strncat(bufOut, str, len);
  232. /* Параметры SNTP */
  233. GetSntpStateStr(str, &len);
  234. strcat(bufOut, "\",\"ntp\":\"");
  235. strncat(bufOut, str, len);
  236. GetSntpServerIpStr(str, &len);
  237. strcat(bufOut, "\",\"ntpservip\":\"");
  238. strncat(bufOut, str, len);
  239. GetSntpTimeZoneStr(str, &len);
  240. strcat(bufOut, "\",\"utc\":\"");
  241. strncat(bufOut, str, len);
  242. GetUnixTimeStr(str, &len);
  243. strcat(bufOut, "\",\"utm\":\"");
  244. strncat(bufOut, str, len);
  245. GetSntpLastDataStr(str, &len);
  246. strcat(bufOut, "\",\"lastsynctime\":\"");
  247. strncat(bufOut, str, len);
  248. GetUPSVoltCellMinStr(str, &len);
  249. strcat(bufOut, "\",\"ups_cell_min\":\"");
  250. strncat(bufOut, str, len);
  251. GetUPSVoltCellMaxStr(str, &len);
  252. strcat(bufOut, "\",\"ups_cell_max\":\"");
  253. strncat(bufOut, str, len);
  254. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  255. GetVACAlarmHighRangeStr(str, &len);
  256. strcat(bufOut, "\",\"mainvolt_high\":\"");
  257. strncat(bufOut, str, len);
  258. GetVACAlarmLowRangeStr(str, &len);
  259. strcat(bufOut, "\",\"mainvolt_low\":\"");
  260. strncat(bufOut, str, len);
  261. GetVACAlarmHisteStr(str, &len);
  262. strcat(bufOut, "\",\"mainvolt_hist\":\"");
  263. strncat(bufOut, str, len);
  264. #endif
  265. GetTemperatureAlarmHighRangeStr(str, &len);
  266. strcat(bufOut, "\",\"temp_high\":\"");
  267. strncat(bufOut, str, len);
  268. GetTemperatureAlarmLowRangeStr(str, &len);
  269. strcat(bufOut, "\",\"temp_low\":\"");
  270. strncat(bufOut, str, len);
  271. GetTemperatureAlarmHisteStr(str, &len);
  272. strcat(bufOut, "\",\"temp_hist\":\"");
  273. strncat(bufOut, str, len);
  274. GetLoadAlarmHighRangeStr(str, &len);
  275. strcat(bufOut, "\",\"loadvolt_high\":\"");
  276. strncat(bufOut, str, len);
  277. GetLoadAlarmHisteStr(str, &len);
  278. strcat(bufOut, "\",\"loadvolt_hist\":\"");
  279. strncat(bufOut, str, len);
  280. /* Признак изменения сетевых настроек */
  281. GetWebReinitFlag(str, &len);
  282. strcat(bufOut, "\",\"netsettings_changed\":\"");
  283. strncat(bufOut, str, len);
  284. strncat(bufOut, "\"}", 2);
  285. *lenBufOut = strlen(bufOut);
  286. return bufOut;
  287. }
  288. uint8_t ConvertStringForJSON(char *inStr, char *paramValue, uint8_t inLen)
  289. {
  290. int len = 0, len2 = 0;
  291. char *strPtr = 0;
  292. uint8_t i = 0;
  293. while (i < inLen) {
  294. strPtr = strstr(inStr, "\"");
  295. if (strPtr != 0) {
  296. len = strPtr - inStr;
  297. if (len != 0) {
  298. strncat(paramValue, inStr, len);
  299. }
  300. strncat(paramValue, "\\", 1);
  301. strncat(paramValue, &inStr[len], 1);
  302. inStr = inStr + len + 1;
  303. i = i + len + 1;
  304. } else {
  305. if (paramValue != 0) {
  306. len2 = inLen - i;
  307. strncat(paramValue, inStr, len2);
  308. return 1;
  309. } else {
  310. return 0;
  311. }
  312. }
  313. }
  314. if (inLen == 0) {
  315. return 0;
  316. }
  317. return 1;
  318. }
  319. /**
  320. * @brief Возвращяет строку с информацией об устройстве
  321. * @retval None
  322. */
  323. // TODO Согласовать максимальную длину строк
  324. char *HTTP_GetInfo(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
  325. {
  326. char str[110];
  327. char tmp_str[220];
  328. uint8_t len;
  329. char tempStr[30];
  330. strncpy(tempStr, bufIn, 30);
  331. (void)lenBufIn;
  332. (void)reqNum;
  333. /* В запросе нет параметров, нужно формировать JSON ответ */
  334. if (strpbrk(tempStr, "?") == 0) {
  335. memset(bufOut, 0, SEND_BUF_MAX_LEN);
  336. /* Headers для поддержки saffari */
  337. strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  338. GetWorkTimeStr(str, &len);
  339. strcat(bufOut, "{\"uptime\":\"");
  340. strncat(bufOut, str, len);
  341. GetModelStr(str, &len);
  342. strcat(bufOut, "\",\"model\":\"");
  343. strncat(bufOut, str, len);
  344. GetProductionDataStr(str, &len);
  345. strcat(bufOut, "\",\"prodate\":\"");
  346. strncat(bufOut, str, len);
  347. GetVersionStr(str, &len);
  348. strcat(bufOut, "\",\"fwversion\":\"");
  349. strncat(bufOut, str, len);
  350. GetMacStr(str, &len);
  351. strcat(bufOut, "\",\"macaddr\":\"");
  352. strncat(bufOut, str, len);
  353. GetSerialNumberStr(str, &len);
  354. strcat(bufOut, "\",\"serno\":\"");
  355. strncat(bufOut, str, len);
  356. GetNameDeviceStr(str, &len);
  357. str[len] = 0;
  358. strcat(bufOut, "\",\"sysname\":\"");
  359. memset(tmp_str, 0, sizeof(tmp_str));
  360. if (ConvertStringForJSON(str, tmp_str, len)) {
  361. strncat(bufOut, tmp_str, strlen(tmp_str));
  362. } else {
  363. strncat(bufOut, str, len);
  364. }
  365. GetOwnerStr(str, &len);
  366. str[len] = 0;
  367. strcat(bufOut, "\",\"owner\":\"");
  368. memset(tmp_str, 0, sizeof(tmp_str));
  369. if (ConvertStringForJSON(str, tmp_str, len)) {
  370. strncat(bufOut, tmp_str, strlen(tmp_str));
  371. } else {
  372. strncat(bufOut, str, len);
  373. }
  374. GetLocationStr(str, &len);
  375. str[len] = 0;
  376. strcat(bufOut, "\",\"sysLocation\":\"");
  377. memset(tmp_str, 0, sizeof(tmp_str));
  378. if (ConvertStringForJSON(str, tmp_str, len)) {
  379. strncat(bufOut, tmp_str, strlen(tmp_str));
  380. } else {
  381. strncat(bufOut, str, len);
  382. }
  383. GetCommentsStr(str, &len);
  384. str[len] = 0;
  385. strcat(bufOut, "\",\"comment\":\"");
  386. memset(tmp_str, 0, sizeof(tmp_str));
  387. if (ConvertStringForJSON(str, tmp_str, len)) {
  388. strncat(bufOut, tmp_str, strlen(tmp_str));
  389. } else {
  390. strncat(bufOut, str, len);
  391. }
  392. GetUPSModelStr(str, &len);
  393. strcat(bufOut, "\",\"ups_model\":\"");
  394. strncat(bufOut, str, len);
  395. GetUPSSerialStr(str, &len);
  396. strcat(bufOut, "\",\"ups_sn\":\"");
  397. strncat(bufOut, str, len);
  398. GetUPSVersionStr(str, &len);
  399. strcat(bufOut, "\",\"ups_fwversion\":\"");
  400. strncat(bufOut, str, len);
  401. /* Признак изменения сетевых настроек */
  402. GetWebReinitFlag(str, &len);
  403. strcat(bufOut, "\",\"netsettings_changed\":\"");
  404. strncat(bufOut, str, len);
  405. strncat(bufOut, "\"}", 2);
  406. *lenBufOut = strlen(bufOut);
  407. return bufOut;
  408. }
  409. *lenBufOut = 0;
  410. return NULL;
  411. }
  412. void HTTP_GetHistoryPage(char *buf, uint32_t pageNumber)
  413. {
  414. char str[16];
  415. uint16_t len;
  416. strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n");
  417. strcat(buf, "{\"page\": [");
  418. History_GetPage(buf, pageNumber);
  419. len = strlen(buf);
  420. buf += len - 1;
  421. *buf = 0;
  422. buf -= len - 1;
  423. /* Количество страниц */
  424. memset(str, 0, 16);
  425. sprintf(str, "%i", History_GetPageCount());
  426. strcat(buf, "],\"pages\":\"");
  427. strcat(buf, str);
  428. /* Часовой пояс */
  429. GetSntpTimeZoneStr(str, (uint8_t *)&len);
  430. strcat(buf, "\",\"utc\":\"");
  431. strncat(buf, str, len);
  432. GetUnixTimeStr(str, (uint8_t *)&len);
  433. strcat(buf, "\",\"utm\":\"");
  434. strncat(buf, str, len);
  435. strcat(buf, "\"}");
  436. //printf(buf);
  437. }
  438. void HTTP_GetUpsHistoryPage(char *buf, uint32_t pageNumber)
  439. {
  440. char str[16];
  441. uint16_t len;
  442. strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n");
  443. strcat(buf, "{\"page\": [");
  444. LOG_GetPage(buf, pageNumber);
  445. len = strlen(buf);
  446. buf += len - 1;
  447. *buf = 0;
  448. buf -= len - 1;
  449. /* Количество страниц */
  450. memset(str, 0, 16);
  451. sprintf(str, "%i", LOG_GetPageCount());
  452. strcat(buf, "],\"pages\":\"");
  453. strcat(buf, str);
  454. /* Часовой пояс */
  455. GetSntpTimeZoneStr(str, (uint8_t *)&len);
  456. strcat(buf, "\",\"utc\":\"");
  457. strncat(buf, str, len);
  458. GetUnixTimeStr(str, (uint8_t *)&len);
  459. strcat(buf, "\",\"utm\":\"");
  460. strncat(buf, str, len);
  461. strcat(buf, "\"}");
  462. //printf(buf);
  463. }
  464. /**
  465. * @brief Возвращает uptime, freq, dutycicle
  466. */
  467. void HTTP_GetProgonParams(char *buf)
  468. {
  469. char str[20];
  470. u32_t tick;
  471. strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  472. strcat(buf, "{\"uptime\":\"");
  473. // snmp_get_sysuptime(&tick);
  474. tick = tick / 100;
  475. memset(str, 0, 20);
  476. sprintf(str, "%d", tick);
  477. strncat(buf, str, strlen(str));
  478. strncat(buf, "\"}", 2);
  479. }
  480. /**
  481. * @brief Сброс настроек (всё кроме сетевых параметров)
  482. */
  483. void HTTP_ResetSettings(void)
  484. {
  485. //taskENTER_CRITICAL();
  486. SNMP_SendUserTrap(DEVICE_RESTORED);
  487. log_event_data(LOG_SYSTEM_DEFCONFIG, name_login);
  488. vTaskDelay(500);
  489. SETTINGS_SetPartDefault();
  490. SETTINGS_Save();
  491. //taskEXIT_CRITICAL();
  492. }
  493. /**
  494. * @brief Сохранение настроек
  495. */
  496. void HTTP_SaveSettings(void)
  497. {
  498. // taskENTER_CRITICAL();
  499. SETTINGS_Save();
  500. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  501. if (telnet_act) {
  502. log_event_data(LOG_SETTING_SAVE, name_login_telnet);
  503. } else
  504. #endif
  505. log_event_data(LOG_SETTING_SAVE, name_login);
  506. // taskEXIT_CRITICAL();
  507. }
  508. /**
  509. * @brief Перезагрузка контроллера
  510. */
  511. char *HTTP_Reboot(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
  512. {
  513. (void)bufIn;
  514. (void)lenBufIn;
  515. (void)reqNum;
  516. strcpy(bufOut, "HTTP/1.1 200 OK\r\n");
  517. *lenBufOut = strlen(bufOut);
  518. /* Запускаем задачу отложенной перезагрузки. Контроллер должен успеть
  519. * отправить ответ серверу об успешном выполнении команды */
  520. HTTP_StartResetTask(false);
  521. return bufOut;
  522. }
  523. /**
  524. * @brief Запускает задачу ресета контроллера
  525. * @param fBootMode:
  526. * true - перед перезагрузкой будет установлен флаг входа в режим
  527. * bootloader и перезаписаны настройки
  528. *
  529. * false - обычная перезагрузка
  530. */
  531. void HTTP_StartResetTask(bool fBootMode)
  532. {
  533. static bool temp;
  534. temp = fBootMode;
  535. xTaskCreate(vTaskReboot, "RebootTask", configMINIMAL_STACK_SIZE,
  536. (void *)&temp, tskIDLE_PRIORITY, NULL);
  537. }
  538. /**
  539. * @brief
  540. */
  541. void vTaskReboot(void *pvParameters)
  542. {
  543. bool mode = false; // тип перезагрузки (нужно ли устанавливать флаг bootloader)
  544. for (;;) {
  545. mode = *(bool *)pvParameters;
  546. if (mode) {
  547. SNMP_SendUserTrap(FW_VERSION_UPDATE);
  548. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  549. if (telnet_act) {
  550. log_event_data(LOG_UPDATE_SOFT, name_login_telnet);
  551. } else
  552. #endif
  553. log_event_data(LOG_UPDATE_SOFT, name_login);
  554. SetLoadMode();
  555. HTTP_SaveSettings();
  556. vTaskDelay(2000);
  557. /* Блокируем управление ключем на тау секунд*/
  558. //IO_KeyBlockOn();
  559. vTaskDelay(1010);
  560. Reboot();
  561. } else {
  562. vTaskDelay(1000);
  563. /* Блокируем управление ключем на тау секунд*/
  564. //IO_KeyBlockOn();
  565. vTaskDelay(1010);
  566. Reboot();
  567. }
  568. }
  569. }
  570. /********************************* (C) ROTEK **********************************/