web_params_api.c 19 KB

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