web_params_api.c 21 KB

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