web_params_api.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  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. #include "parameters.h"
  15. #include "trap_params.h"
  16. #include "snmp_api.h"
  17. #include "trap_api.h"
  18. #include "settings_api.h"
  19. #include "common_config.h"
  20. #include "snmp.h"
  21. #include "log.h"
  22. #include "hal.h"
  23. #include "FreeRTOS.h"
  24. #include "task.h"
  25. #ifdef PRINTF_STDLIB
  26. #include <stdio.h>
  27. #endif
  28. #ifdef PRINTF_CUSTOM
  29. #include "tinystdio.h"
  30. #endif
  31. #include <string.h>
  32. typedef void (*pFunction)(void);
  33. pFunction Jump_To_Application;
  34. uint32_t JumpAddress;
  35. /**
  36. * @brief Возвращяет строку с настройками на первой странице
  37. * @retval None
  38. */
  39. void HTTP_GetParamsPage1(char *buf)
  40. {
  41. char str[40];
  42. uint8_t len;
  43. memset(buf, 0, 1000);
  44. // Headers для поддержки saffari
  45. strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  46. // Параметры UPS
  47. GetInputVoltageStr(str, &len);
  48. strcat(buf, "{\"AC\":\"");
  49. strncat(buf, str, len);
  50. GetOutputVoltageStr(str, &len);
  51. strcat(buf, "\",\"DC\":\"");
  52. strncat(buf, str, len);
  53. GetInputFreqStr(str, &len);
  54. strcat(buf, "\",\"in_freq\":\"");
  55. strncat(buf, str, len);
  56. GetOutputFreqStr(str, &len);
  57. strcat(buf, "\",\"out_freq\":\"");
  58. strncat(buf, str, len);
  59. GetPowerStr(str, &len);
  60. strcat(buf, "\",\"pwr\":\"");
  61. strncat(buf, str, len);
  62. GetBatCapacityStr(str, &len);
  63. strcat(buf, "\",\"bat_cap\":\"");
  64. strncat(buf, str, len);
  65. GetInternalTempStr(str, &len);
  66. strcat(buf, "\",\"inner_temp\":\"");
  67. strncat(buf, str, len);
  68. GetRuntimeStr(str, &len);
  69. strcat(buf, "\",\"bat_time_left\":\"");
  70. strncat(buf, str, len);
  71. GetDINStatusStr(str, &len, 0);
  72. strcat(buf, "\",\"di1\":\"");
  73. strncat(buf, str, len);
  74. GetDOUTStatusStr(str, &len, 0);
  75. strcat(buf, "\",\"ro1\":\"");
  76. strncat(buf, str, len);
  77. GetDOUTStatusStr(str, &len, 1);
  78. strcat(buf, "\",\"ro2\":\"");
  79. strncat(buf, str, len);
  80. // Дополнительные параметры
  81. // Мониторинг
  82. // load_monitor (нагрузка, 0 - норма, 1 - fail)
  83. // temp_monitor (внутренняя температура, 0 - норма, 1 - fail)
  84. // connect_monitor (связь с UPSом, 0 - норма, 1 - fail)
  85. GetAlarmMonitorStr(str, &len);
  86. strcat(buf, "\",\"m_alarm\":\"");
  87. strncat(buf, str, len);
  88. GetAlarmStr(str, &len);
  89. strcat(buf, "\",\"u_alarm\":\"");
  90. strncat(buf, str, len);
  91. // Признак изменения сетевых настроек
  92. GetWebReinitFlag(str, &len);
  93. strcat(buf, "\",\"netsettings_changed\":\"");
  94. strncat(buf, str, len);
  95. strncat(buf, "\"}", 2);
  96. //printf(buf);
  97. }
  98. /**
  99. * @brief Возвращяет строку с настройками на второй странице
  100. * @retval None
  101. */
  102. void HTTP_GetSettings(char *buf)
  103. {
  104. char str[30];
  105. uint8_t len;
  106. /* Headers для поддержки saffari */
  107. strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  108. /* SNMP */
  109. GetReadCommunity(str, &len);
  110. strcat(buf, "{\"read_community\":\"");
  111. strncat(buf, str, len);
  112. GetWriteCommunity(str, &len);
  113. strcat(buf, "\",\"write_community\":\"");
  114. strncat(buf, str, len);
  115. GetManagerIp(str, &len);
  116. strcat(buf, "\",\"managerIP\":\"");
  117. strncat(buf, str, len);
  118. GetManagerIp2(str, &len);
  119. strcat(buf, "\",\"managerIP2\":\"");
  120. strncat(buf, str, len);
  121. GetManagerIp3(str, &len);
  122. strcat(buf, "\",\"managerIP3\":\"");
  123. strncat(buf, str, len);
  124. GetManagerIp4(str, &len);
  125. strcat(buf, "\",\"managerIP4\":\"");
  126. strncat(buf, str, len);
  127. GetManagerIp5(str, &len);
  128. strcat(buf, "\",\"managerIP5\":\"");
  129. strncat(buf, str, len);
  130. /*Параметры реле и сухих контактов*/
  131. GetDINTypeActStr(str, &len, 0);
  132. strcat(buf, "\",\"di1\":\"");
  133. strncat(buf, str, len);
  134. GetROTypeActStr(str, &len, 0);
  135. strcat(buf, "\",\"ro1\":\"");
  136. strncat(buf, str, len);
  137. GetROTypeActStr(str, &len, 1);
  138. strcat(buf, "\",\"ro2\":\"");
  139. strncat(buf, str, len);
  140. /* WEB */
  141. GetIpStr(str, &len);
  142. strcat(buf, "\",\"ipaddr\":\"");
  143. strncat(buf, str, len);
  144. GetGatewayStr(str, &len);
  145. strcat(buf, "\",\"gw\":\"");
  146. strncat(buf, str, len);
  147. GetMaskStr(str, &len);
  148. strcat(buf, "\",\"mask\":\"");
  149. strncat(buf, str, len);
  150. GetDhcpStateStr(str, &len);
  151. strcat(buf, "\",\"dhcp\":");
  152. strncat(buf, str, len);
  153. GetAuthEnableStateStr(str, &len);
  154. strcat(buf, ",\"auth\":");
  155. strncat(buf, str, len);
  156. /* RADIUS */
  157. GetRDSIpStr(str, &len);
  158. strcat(buf, ",\"rs_server\":\"");
  159. strncat(buf, str, len);
  160. GetRDSPortStr(str, &len);
  161. strcat(buf, "\",\"rs_port\":\"");
  162. strncat(buf, str, len);
  163. GetRDSPasswordkStr(str, &len);
  164. strcat(buf, "\",\"rs_pwd\":\"");
  165. strncat(buf, str, len);
  166. GetRDSKeyAccesstStr(str, &len);
  167. strcat(buf, "\",\"rs_key\":\"");
  168. strncat(buf, str, len);
  169. GetRDSEnableStateStr(str, &len);
  170. strcat(buf, "\",\"rs_enabled\":");
  171. strncat(buf, str, len);
  172. /* Параметры даты и времени */
  173. GetDateStr(str, &len);
  174. strcat(buf, ",\"date\":\"");
  175. strncat(buf, str, len);
  176. GetTimeStr(str, &len);
  177. strcat(buf, "\",\"time\":\"");
  178. strncat(buf, str, len);
  179. /* Параметры SNTP */
  180. GetSntpStateStr(str, &len);
  181. strcat(buf, "\",\"ntp\":\"");
  182. strncat(buf, str, len);
  183. GetSntpServerIpStr(str, &len);
  184. strcat(buf, "\",\"ntpservip\":\"");
  185. strncat(buf, str, len);
  186. GetSntpTimeZoneStr(str, &len);
  187. strcat(buf, "\",\"utc\":\"");
  188. strncat(buf, str, len);
  189. GetUnixTimeStr(str, &len);
  190. strcat(buf, "\",\"utm\":\"");
  191. strncat(buf, str, len);
  192. GetSntpLastDataStr(str, &len);
  193. strcat(buf, "\",\"lastsynctime\":\"");
  194. strncat(buf, str, len);
  195. /* Признак изменения сетевых настроек */
  196. GetWebReinitFlag(str, &len);
  197. strcat(buf, "\",\"netsettings_changed\":\"");
  198. strncat(buf, str, len);
  199. strncat(buf, "\"}", 2);
  200. //printf(buf);
  201. }
  202. /**
  203. * @brief Возвращяет строку с информацией об устройстве
  204. * @retval None
  205. */
  206. // TODO Согласовать максимальную длину строк
  207. void HTTP_GetInfo(char *buf)
  208. {
  209. char str[40];
  210. uint8_t len;
  211. /* Headers для поддержки saffari */
  212. strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  213. GetWorkTimeStr(str, &len);
  214. strcat(buf, "{\"uptime\":\"");
  215. strncat(buf, str, len);
  216. GetModelStr(str, &len);
  217. strcat(buf, "\",\"model\":\"");
  218. strncat(buf, str, len);
  219. GetProductionDataStr(str, &len);
  220. strcat(buf, "\",\"prodate\":\"");
  221. strncat(buf, str, len);
  222. GetVersionStr(str, &len);
  223. strcat(buf, "\",\"fwversion\":\"");
  224. strncat(buf, str, len);
  225. GetMacStr(str, &len);
  226. strcat(buf, "\",\"macaddr\":\"");
  227. strncat(buf, str, len);
  228. GetSerialNumberStr(str, &len);
  229. strcat(buf, "\",\"serno\":\"");
  230. strncat(buf, str, len);
  231. GetOwnerStr(str, &len);
  232. strcat(buf, "\",\"owner\":\"");
  233. strncat(buf, str, len);
  234. GetLocationStr(str, &len);
  235. strcat(buf, "\",\"sysLocation\":\"");
  236. strncat(buf, str, len);
  237. GetCommentsStr(str, &len);
  238. strcat(buf, "\",\"comment\":\"");
  239. strncat(buf, str, len);
  240. GetUPSModelStr(str, &len);
  241. strcat(buf, "\",\"ups_model\":\"");
  242. strncat(buf, str, len);
  243. GetUPSVersionStr(str, &len);
  244. strcat(buf, "\",\"ups_fwversion\":\"");
  245. strncat(buf, str, len);
  246. /* Признак изменения сетевых настроек */
  247. GetWebReinitFlag(str, &len);
  248. strcat(buf, "\",\"netsettings_changed\":\"");
  249. strncat(buf, str, len);
  250. strncat(buf, "\"}", 2);
  251. }
  252. void HTTP_GetHistoryPage(char* buf, uint32_t pageNumber)
  253. {
  254. char str[16];
  255. uint16_t len;
  256. strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n");
  257. strcat(buf, "{\"page\": [");
  258. History_GetPage(buf, pageNumber);
  259. len = strlen(buf);
  260. buf +=len-1;
  261. *buf = 0;
  262. buf -=len-1;
  263. /* Количество страниц */
  264. memset(str, 0, 16);
  265. sprintf(str, "%i", History_GetPageCount());
  266. strcat(buf, "],\"pages\":\"");
  267. strcat(buf, str);
  268. /* Часовой пояс */
  269. GetSntpTimeZoneStr(str, (uint8_t*)&len);
  270. strcat(buf, "\",\"utc\":\"");
  271. strncat(buf, str, len);
  272. GetUnixTimeStr(str, (uint8_t*)&len);
  273. strcat(buf, "\",\"utm\":\"");
  274. strncat(buf, str, len);
  275. strcat(buf, "\"}");
  276. //printf(buf);
  277. }
  278. void HTTP_GetUpsHistoryPage(char* buf, uint32_t pageNumber)
  279. {
  280. char str[16];
  281. uint16_t len;
  282. strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n");
  283. strcat(buf, "{\"page\": [");
  284. LOG_GetPage(buf, pageNumber);
  285. len = strlen(buf);
  286. buf +=len-1;
  287. *buf = 0;
  288. buf -=len-1;
  289. /* Количество страниц */
  290. memset(str, 0, 16);
  291. sprintf(str, "%i", LOG_GetPageCount());
  292. strcat(buf, "],\"pages\":\"");
  293. strcat(buf, str);
  294. /* Часовой пояс */
  295. GetSntpTimeZoneStr(str, (uint8_t*)&len);
  296. strcat(buf, "\",\"utc\":\"");
  297. strncat(buf, str, len);
  298. GetUnixTimeStr(str, (uint8_t*)&len);
  299. strcat(buf, "\",\"utm\":\"");
  300. strncat(buf, str, len);
  301. strcat(buf, "\"}");
  302. //printf(buf);
  303. }
  304. /**
  305. * @brief Возвращает uptime, freq, dutycicle
  306. */
  307. void HTTP_GetProgonParams(char *buf)
  308. {
  309. char str[20];
  310. u32_t tick;
  311. strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
  312. strcat(buf, "{\"uptime\":\"");
  313. snmp_get_sysuptime(&tick);
  314. tick = tick/100;
  315. memset(str, 0, 20);
  316. sprintf(str, "%d", tick);
  317. strncat(buf, str, strlen(str));
  318. strncat(buf, "\"}", 2);
  319. }
  320. /**
  321. * @brief Сброс настроек (всё кроме сетевых параметров)
  322. */
  323. void HTTP_ResetSettings(void)
  324. {
  325. //taskENTER_CRITICAL();
  326. SNMP_SendUserTrap(DEVICE_RESTORED);
  327. log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
  328. vTaskDelay(500);
  329. SETTINGS_SetPartDefault();
  330. SETTINGS_Save();
  331. //taskEXIT_CRITICAL();
  332. }
  333. /**
  334. * @brief Сохранение настроек
  335. */
  336. void HTTP_SaveSettings(void)
  337. {
  338. // taskENTER_CRITICAL();
  339. SETTINGS_Save();
  340. // taskEXIT_CRITICAL();
  341. }
  342. /**
  343. * @brief Перезагрузка контроллера
  344. */
  345. void HTTP_Reboot(void)
  346. {
  347. vTaskDelay(1010);
  348. Reboot();
  349. }
  350. /**
  351. * @brief Запускает задачу ресета контроллера
  352. * @param fBootMode:
  353. * true - перед перезагрузкой будет установлен флаг входа в режим
  354. * bootloader и перезаписаны настройки
  355. *
  356. * false - обычная перезагрузка
  357. */
  358. void HTTP_StartResetTask(bool fBootMode)
  359. {
  360. static bool temp;
  361. temp = fBootMode;
  362. xTaskCreate(vTaskReboot, "RebootTask", configMINIMAL_STACK_SIZE,
  363. (void*)&temp, tskIDLE_PRIORITY, NULL);
  364. }
  365. /**
  366. * @brief
  367. */
  368. void vTaskReboot(void * pvParameters)
  369. {
  370. bool mode = false; // тип перезагрузки (нужно ли устанавливать флаг bootloader)
  371. for (;;)
  372. {
  373. mode = *(bool*)pvParameters;
  374. if (mode)
  375. {
  376. SNMP_SendUserTrap(FW_VERSION_UPDATE);
  377. log_event_data(LOG_UPDATE_SOFT, "Администратор");
  378. SetLoadMode();
  379. HTTP_SaveSettings();
  380. vTaskDelay(2000);
  381. /* Блокируем управление ключем на тау секунд*/
  382. //IO_KeyBlockOn();
  383. vTaskDelay(1010);
  384. Reboot();
  385. }
  386. else
  387. {
  388. vTaskDelay(1000);
  389. /* Блокируем управление ключем на тау секунд*/
  390. //IO_KeyBlockOn();
  391. vTaskDelay(1010);
  392. Reboot();
  393. }
  394. }
  395. }
  396. /********************************* (C) ROTEK **********************************/