web_params_api.c 22 KB

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