parameters.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269
  1. /********************************* (C) РОТЕК ***********************************
  2. * @module parameters
  3. * @file parameters.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief Template
  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 "parameters.h"
  14. #include "settings_api.h"
  15. #include "rtc.h"
  16. #ifndef BT6702_SERVICE
  17. #include "snmp_api.h"
  18. #include "snmp.h"
  19. #include "megatec.h"
  20. #endif
  21. #include "sntp.h"
  22. #include "lwip/snmp.h"
  23. #include "lwip/sys.h"
  24. #include "common_config.h"
  25. //#include "d_inouts.h"
  26. #include "gpio.h"
  27. //#if defined HARDWARE_BT6702
  28. #ifdef PRINTF_STDLIB
  29. #include <stdio.h>
  30. #endif
  31. #ifdef PRINTF_CUSTOM
  32. #include "tinystdio.h"
  33. #endif
  34. #include <string.h>
  35. #include <stdlib.h>
  36. #include <math.h>
  37. //#endif
  38. /**
  39. * @brief Структура для хранения состояний дискретных входов
  40. */
  41. //extern GPIO_INPUTS_t sGpioInputs;
  42. /**
  43. * @brief Общая структура настроек
  44. */
  45. extern SETTINGS_t sSettings;
  46. /**
  47. * @brief Структура для хранения временных сетевых настроек
  48. */
  49. extern WEB_PARAMS_t sTempWebParams;
  50. /**
  51. * @brief Флаг подтверждения новых сетевых параметров пользователем
  52. */
  53. extern bool fConfirmWebParams;
  54. #ifndef BT6702_SERVICE
  55. // ************************************************************************** //
  56. // Параметры UPS
  57. /**
  58. * @brief
  59. */
  60. void GetInputFreqStr(char *str, uint8_t *len)
  61. {
  62. sprintf(str, "%0.1f", UPS.Freq_in);
  63. *len = strlen(str);
  64. }
  65. /**
  66. * @brief
  67. */
  68. void GetOutputFreqStr(char *str, uint8_t *len)
  69. {
  70. sprintf(str, "%0.1f", UPS.Freq_in);
  71. *len = strlen(str);
  72. }
  73. /**
  74. * @brief
  75. */
  76. void GetInputVoltageStr(char *str, uint8_t *len)
  77. {
  78. sprintf(str, "%0.1f", UPS.VAC_in);
  79. *len = strlen(str);
  80. }
  81. /**
  82. * @brief
  83. */
  84. void GetOutputVoltageStr(char *str, uint8_t *len)
  85. {
  86. sprintf(str, "%0.1f", UPS.VAC_out);
  87. *len = strlen(str);
  88. }
  89. /**
  90. * @brief
  91. */
  92. void GetPowerStr(char *str, uint8_t *len)
  93. {
  94. sprintf(str, "%d", UPS.Load);
  95. *len = strlen(str);
  96. }
  97. /**
  98. * @brief
  99. */
  100. void GetBatCapacityStr(char *str, uint8_t *len)
  101. {
  102. sprintf(str, "%d", UPS.SOC);
  103. *len = strlen(str);
  104. }
  105. /**
  106. * @brief
  107. */
  108. void GetRuntimeStr(char *str, uint8_t *len)
  109. {
  110. sprintf(str, "%d", UPS.work_time);
  111. *len = strlen(str);
  112. }
  113. /**
  114. * @brief
  115. */
  116. void GetInternalTempStr(char *str, uint8_t *len)
  117. {
  118. sprintf(str, "%0.1f", UPS.Temp);
  119. *len = strlen(str);
  120. }
  121. /**
  122. * @brief
  123. */
  124. void GetAlarmMonitorStr(char *str, uint8_t *len)
  125. {
  126. sprintf(str, "%d", UPS.Alarm);
  127. *len = strlen(str);
  128. }
  129. /**
  130. * @brief
  131. */
  132. void GetConnectMonitorStr(char *str, uint8_t *len)
  133. {
  134. if(UPS.Present)
  135. strcpy(str, "0");
  136. else
  137. strcpy(str, "1");
  138. *len = strlen(str);
  139. }
  140. // ************************************************************************** //
  141. // Alarms
  142. /**
  143. * @brief Индикация аварийных ситуаций
  144. */
  145. void GetAlarmStr(char *str, uint8_t *len)
  146. {
  147. sprintf(str, "%d", UPS.Status);
  148. *len = strlen(str);
  149. }
  150. /**
  151. * @brief Индикация аварийных ситуаций
  152. */
  153. void GetUPSModeStr(char *str, uint8_t *len)
  154. {
  155. if((UPS.Status>>5)&0x01)
  156. sprintf(str, "Bypass");
  157. else
  158. sprintf(str, "Boost or Buck");
  159. *len = strlen(str);
  160. }
  161. #endif
  162. // ************************************************************************** //
  163. // Параметры даты и времени
  164. /**
  165. * @brief Дата (Ready for PRS!)
  166. */
  167. void GetDateStr(char *str, uint8_t *len)
  168. {
  169. TM_RTC_t data;
  170. uint16_t sys_year ;
  171. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  172. sys_year = 2000 + data.year;
  173. sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
  174. *len = strlen(str);
  175. }
  176. /**
  177. * @brief Время (Ready for PRS!)
  178. */
  179. void GetTimeStr(char *str, uint8_t *len)
  180. {
  181. TM_RTC_t data;
  182. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  183. sprintf(str, "%02i:%02i", data.hours, data.minutes);
  184. *len = strlen(str);
  185. }
  186. /**
  187. * @brief Время (Ready for PRS!)
  188. */
  189. void GetUnixTimeStr(char *str, uint8_t *len)
  190. {
  191. TM_RTC_t data;
  192. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  193. sprintf(str, "%d", data.unix);
  194. *len = strlen(str);
  195. }
  196. // ************************************************************************** //
  197. // Параметры SNTP
  198. /**
  199. * @brief Состояние SNTP (Ready for PRS!)
  200. */
  201. void GetSntpStateStr(char *str, uint8_t *len)
  202. {
  203. if (sSettings.sSNTP.sntpEnable)
  204. {
  205. sprintf(str, "%s", "1"); //авто
  206. *len = strlen(str);
  207. }
  208. else
  209. {
  210. sprintf(str, "%s", "0"); //ручной
  211. *len = strlen(str);
  212. }
  213. }
  214. /**
  215. * @brief Состояние SNTP (Ready for PRS!)
  216. */
  217. void GetSntpStateStrRU(char *str, uint8_t *len)
  218. {
  219. if (sSettings.sSNTP.sntpEnable)
  220. {
  221. sprintf(str, "%s", "авто"); //авто
  222. *len = strlen(str);
  223. }
  224. else
  225. {
  226. sprintf(str, "%s", "ручной"); //ручной
  227. *len = strlen(str);
  228. }
  229. }
  230. /**
  231. * @brief IP адрес SNTP сервера (Ready for PRS!)
  232. */
  233. void GetSntpServerIpStr(char *str, uint8_t *len)
  234. {
  235. sprintf(str, "%s", sSettings.sSNTP.ip);
  236. *len = strlen(str);
  237. }
  238. /**
  239. * @brief Часовой пояс контроллера (Ready for PRS!)
  240. */
  241. void GetSntpTimeZoneStr(char *str, uint8_t *len)
  242. {
  243. sprintf(str, "%0.1f", sSettings.sSNTP.timeZone);
  244. *len = strlen(str);
  245. }
  246. /**
  247. * @brief Дата последней синхронизации SNTP (Ready for PRS!)
  248. */
  249. void GetSntpLastDataStr(char *str, uint8_t *len)
  250. {
  251. sprintf(str, "%s", sSettings.sSNTP.data);
  252. *len = strlen(str);
  253. }
  254. // ************************************************************************** //
  255. // Параметры реле/сухих контактов
  256. /**
  257. * @brief Тип действий при срабатывание сухих контактов
  258. */
  259. void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num)
  260. {
  261. sprintf(str, "%d", sSettings.sInOuts.din_type_act[num]);
  262. *len = strlen(str);
  263. }
  264. /**
  265. * @brief Состояние сухого контакта
  266. */
  267. void GetDINStatusStr(char *str, uint8_t *len, uint8_t num)
  268. {
  269. sprintf(str, "%d", (get_state_din_outs(DIN1+num)^1));
  270. *len = strlen(str);
  271. }
  272. /**
  273. * @brief Состояние сухого контакта
  274. */
  275. void GetDIN0StatusStr(char *str, uint8_t *len)
  276. {
  277. sprintf(str, "%d", (get_state_din_outs(DIN1)^1));
  278. *len = strlen(str);
  279. }
  280. /**
  281. * @brief Состояние сухого контакта
  282. */
  283. void GetDIN0StatusStrRU(char *str, uint8_t *len)
  284. {
  285. if(get_state_din_outs(DIN1)^1)
  286. sprintf(str, "Разомкнут" );
  287. else
  288. sprintf(str, "Замкнут" );
  289. *len = strlen(str);
  290. }
  291. /**
  292. * @brief Источник срабатывания реле
  293. */
  294. void GetROTypeActStr(char *str, uint8_t *len, uint8_t num)
  295. {
  296. sprintf(str, "%d", sSettings.sInOuts.ro_type_source[num]);
  297. *len = strlen(str);
  298. }
  299. /**
  300. * @brief Состояние релейного выхода
  301. */
  302. void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num)
  303. {
  304. #ifdef HARDWARE_BT6706
  305. sprintf(str, "%d", (get_state_din_outs(DOUT1+num)^1));
  306. #elif HARDWARE_BT6702
  307. sprintf(str, "%d", get_state_din_outs(DOUT1+num));
  308. #endif
  309. *len = strlen(str);
  310. }
  311. /**
  312. * @brief Состояние релейного выхода
  313. */
  314. void GetDOUTStatusStrRU(char *str, uint8_t *len, uint8_t num)
  315. {
  316. #ifdef HARDWARE_BT6706
  317. if (get_state_din_outs(DOUT1+num)^1)
  318. sprintf(str, "Замкнут");
  319. else
  320. sprintf(str, "Разомкнут");
  321. #elif HARDWARE_BT6702
  322. if(get_state_din_outs(DOUT1+num))
  323. sprintf(str, "Замкнут");
  324. else
  325. sprintf(str, "Разомкнут");
  326. #endif
  327. *len = strlen(str);
  328. }
  329. /**
  330. * @brief Состояние релейного выхода
  331. */
  332. void GetDOUT0StatusStr(char *str, uint8_t *len)
  333. {
  334. #ifdef HARDWARE_BT6706
  335. sprintf(str, "%d", (get_state_din_outs(DOUT1)^1));
  336. #elif HARDWARE_BT6702
  337. sprintf(str, "%d", get_state_din_outs(DOUT1));
  338. #endif
  339. *len = strlen(str);
  340. }
  341. /**
  342. * @brief Состояние релейного выхода
  343. */
  344. void GetDOUT1StatusStr(char *str, uint8_t *len)
  345. {
  346. #ifdef HARDWARE_BT6706
  347. sprintf(str, "%d", (get_state_din_outs(DOUT2)^1));
  348. #elif HARDWARE_BT6702
  349. sprintf(str, "%d", get_state_din_outs(DOUT2));
  350. #endif
  351. *len = strlen(str);
  352. }
  353. #ifdef HARDWARE_BT6706
  354. /**
  355. * @brief Состояние релейного выхода
  356. */
  357. void GetDOUT2StatusStr(char *str, uint8_t *len)
  358. {
  359. sprintf(str, "%d", (get_state_din_outs(DOUT3)^1));
  360. *len = strlen(str);
  361. }
  362. #endif
  363. // ************************************************************************** //
  364. // Информация
  365. #ifndef BT6702_SERVICE
  366. /**
  367. * @brief Время работы устройства
  368. */
  369. void GetWorkTimeStr(char *str, uint8_t *len)
  370. {
  371. u32_t tick;
  372. uint16_t day;
  373. uint8_t hour;
  374. uint8_t min;
  375. // TODO открыть с новым api для snmp
  376. //snmp_get_sysuptime(&tick);
  377. MIB2_COPY_SYSUPTIME_TO(&tick);
  378. day = tick/8640000;
  379. tick = tick%8640000;
  380. hour = tick/360000;
  381. tick = tick%360000;
  382. min = tick/6000;
  383. sprintf(str, "%d дн. %d ч. %d мин.", day, hour, min);
  384. *len = strlen(str);
  385. }
  386. #endif
  387. /**
  388. * @brief Модель устройства
  389. */
  390. void GetModelStr(char *str, uint8_t *len)
  391. {
  392. *len = strlen(sSettings.sSnmp.sysName);
  393. strncpy(str, sSettings.sSnmp.sysName, *len);
  394. }
  395. /**
  396. * @brief Дата производства
  397. */
  398. void GetProductionDataStr(char *str, uint8_t *len)
  399. {
  400. *len = strlen(sSettings.sInfo.productionData);
  401. strncpy(str, sSettings.sInfo.productionData, *len);
  402. }
  403. /**
  404. * @brief Версия ПО
  405. */
  406. void GetVersionStr(char *str, uint8_t *len) // +
  407. {
  408. *len = strlen(VERSION);
  409. strncpy(str, VERSION, *len);
  410. }
  411. /**
  412. * @brief MAC адрес устройства
  413. */
  414. void GetMacStr(char *str, uint8_t *len)
  415. {
  416. *len = strlen(sSettings.sInfo.mac);
  417. strncpy(str, sSettings.sInfo.mac, *len);
  418. }
  419. /**
  420. * @brief Серийный номер устройства
  421. */
  422. void GetSerialNumberStr(char *str, uint8_t *len)
  423. {
  424. *len = strlen(sSettings.sInfo.serialNumber);
  425. strncpy(str, sSettings.sInfo.serialNumber, *len);
  426. }
  427. /**
  428. * @brief Владелец устройства
  429. */
  430. void GetOwnerStr(char *str, uint8_t *len)
  431. {
  432. *len = strlen(sSettings.sSnmp.sysContact);
  433. strncpy(str, sSettings.sSnmp.sysContact, *len);
  434. }
  435. /**
  436. * @brief Местоположение устройства
  437. */
  438. void GetLocationStr(char *str, uint8_t *len)
  439. {
  440. *len = strlen(sSettings.sSnmp.sysLocation);
  441. strncpy(str, sSettings.sSnmp.sysLocation, *len);
  442. }
  443. /**
  444. * @brief Комментарии
  445. */
  446. void GetCommentsStr(char *str, uint8_t *len)
  447. {
  448. *len = strlen(sSettings.sInfo.comments);
  449. strncpy(str, sSettings.sInfo.comments, *len);
  450. }
  451. #ifndef BT6702_SERVICE
  452. /**
  453. * @brief Модель UPS
  454. */
  455. void GetUPSModelStr(char *str, uint8_t *len)
  456. {
  457. *len = strlen(UPS.model);
  458. strncpy(str, UPS.model, *len);
  459. }
  460. /**
  461. * @brief Версия UPS ПО
  462. */
  463. void GetUPSVersionStr(char *str, uint8_t *len) // +
  464. {
  465. *len = strlen(UPS.vertion);
  466. strncpy(str, UPS.vertion, *len);
  467. }
  468. #endif
  469. // ************************************************************************** //
  470. // Настройки аутентификации
  471. void GetUserLogin(uint8_t user_id, char *str, uint8_t *len)
  472. {
  473. sprintf(str, "%s", sSettings.sAuth[user_id].login);
  474. *len = strlen(str);
  475. }
  476. void GetUserPassword(uint8_t user_id, char *str, uint8_t *len)
  477. {
  478. sprintf(str, "%s", sSettings.sAuth[user_id].password);
  479. *len = strlen(str);
  480. }
  481. void GetUserLevel(uint8_t user_id, char *str, uint8_t *len)
  482. {
  483. sprintf(str, "%d", sSettings.sAuth[user_id].level);
  484. *len = strlen(str);
  485. }
  486. void GetUserLevelInt(uint8_t user_id, uint8_t *value)
  487. {
  488. *value = sSettings.sAuth[user_id].level;
  489. }
  490. // ************************************************************************** //
  491. // Параметры WEB
  492. /**
  493. * @brief Текущий IP адрес
  494. */
  495. void GetIpStr(char *str, uint8_t *len)
  496. {
  497. /* Если сейчас временные настройки */
  498. if (sSettings.sFlags.netsettingsChanged)
  499. sprintf(str, "%s", sSettings.sWebTempParams.ip);
  500. else
  501. sprintf(str, "%s", sSettings.sWebParams.ip);
  502. *len = strlen(str);
  503. }
  504. /**
  505. * @brief Текущий шлюз
  506. */
  507. void GetGatewayStr(char *str, uint8_t *len)
  508. {
  509. /* Если сейчас временные настройки */
  510. if (sSettings.sFlags.netsettingsChanged)
  511. sprintf(str, "%s", sSettings.sWebTempParams.gate);
  512. else
  513. sprintf(str, "%s", sSettings.sWebParams.gate);
  514. *len = strlen(str);
  515. }
  516. /**
  517. * @brief Текущая маска подсети
  518. */
  519. void GetMaskStr(char *str, uint8_t *len)
  520. {
  521. /* Если сейчас временные настройки */
  522. if (sSettings.sFlags.netsettingsChanged)
  523. sprintf(str, "%s", sSettings.sWebTempParams.mask);
  524. else
  525. sprintf(str, "%s", sSettings.sWebParams.mask);
  526. *len = strlen(str);
  527. }
  528. /**
  529. * @brief Настройка DHCP
  530. */
  531. void GetDhcpStateStr(char *str, uint8_t *len)
  532. {
  533. /* Если сейчас временные настройки */
  534. if (sSettings.sFlags.netsettingsChanged)
  535. {
  536. if (sSettings.sWebTempParams.dhcpEnable)
  537. *str = '1';
  538. else
  539. *str = '0';
  540. }
  541. else
  542. {
  543. if (sSettings.sWebParams.dhcpEnable)
  544. *str = '1';
  545. else
  546. *str = '0';
  547. }
  548. *len = 1;
  549. }
  550. /**
  551. * @brief Настройка DHCP
  552. */
  553. void GetDhcpStateUDP(char *str, uint8_t *len)
  554. {
  555. /* Если сейчас временные настройки или был загружен файл конфигурации */
  556. if (sSettings.sFlags.netsettingsChanged)
  557. {
  558. if (sSettings.sWebTempParams.dhcpEnable)
  559. sprintf(str, "%s", "True");
  560. else
  561. sprintf(str, "%s", "False");
  562. }
  563. else
  564. {
  565. if (sSettings.sWebParams.dhcpEnable)
  566. sprintf(str, "%s", "True");
  567. else
  568. sprintf(str, "%s", "False");
  569. }
  570. *len = strlen(str);
  571. }
  572. /**
  573. * @brief Настройка DHCP
  574. */
  575. void GetDhcpStateStrRu(char *str, uint8_t *len)
  576. {
  577. /* Если сейчас временные настройки или был загружен файл конфигурации */
  578. if (sSettings.sFlags.netsettingsChanged)
  579. {
  580. if (sSettings.sWebTempParams.dhcpEnable)
  581. sprintf(str, "%s", "Вкл");
  582. else
  583. sprintf(str, "%s", "Откл");
  584. }
  585. else
  586. {
  587. if (sSettings.sWebParams.dhcpEnable)
  588. sprintf(str, "%s", "Вкл");
  589. else
  590. sprintf(str, "%s", "Откл");
  591. }
  592. *len = strlen(str);
  593. }
  594. // ************************************************************************** //
  595. // Параметры SNMP
  596. /**
  597. * @brief Текущее community для чтения
  598. */
  599. void GetReadCommunity(char *str, uint8_t *len)
  600. {
  601. sprintf(str, "%s", sSettings.sSnmp.readCommunity);
  602. *len = strlen(str);
  603. }
  604. /**
  605. * @brief Текущее community для записи
  606. */
  607. void GetWriteCommunity(char *str, uint8_t *len)
  608. {
  609. sprintf(str, "%s", sSettings.sSnmp.writeCommunity);
  610. *len = strlen(str);
  611. }
  612. /**
  613. * @brief IP SNMP менеджера
  614. */
  615. void GetManagerIp(char *str, uint8_t *len)
  616. {
  617. sprintf(str, "%s", sSettings.sSnmp.managerIP);
  618. *len = strlen(str);
  619. }
  620. void GetManagerIp2(char *str, uint8_t *len)
  621. {
  622. sprintf(str, "%s", sSettings.sSnmp.managerIP2);
  623. *len = strlen(str);
  624. }
  625. void GetManagerIp3(char *str, uint8_t *len)
  626. {
  627. sprintf(str, "%s", sSettings.sSnmp.managerIP3);
  628. *len = strlen(str);
  629. }
  630. void GetManagerIp4(char *str, uint8_t *len)
  631. {
  632. sprintf(str, "%s", sSettings.sSnmp.managerIP4);
  633. *len = strlen(str);
  634. }
  635. void GetManagerIp5(char *str, uint8_t *len)
  636. {
  637. sprintf(str, "%s", sSettings.sSnmp.managerIP5);
  638. *len = strlen(str);
  639. }
  640. #ifdef HARDWARE_BT6702
  641. // ************************************************************************** //
  642. // Параметры RADIUS
  643. /**
  644. * @brief Текущий IP адрес
  645. */
  646. void GetRDSIpStr(char *str, uint8_t *len)
  647. {
  648. sprintf(str, "%s", sSettings.sRADIUS.ServerIP);
  649. *len = strlen(str);
  650. }
  651. /**
  652. * @brief Текущий Порт
  653. */
  654. void GetRDSPortStr(char *str, uint8_t *len)
  655. {
  656. sprintf(str, "%d", sSettings.sRADIUS.port);
  657. *len = strlen(str);
  658. }
  659. /**
  660. * @brief Текущий Код access
  661. */
  662. void GetRDSKeyAccesstStr(char *str, uint8_t *len)
  663. {
  664. sprintf(str, "%d", sSettings.sRADIUS.key_access);
  665. *len = strlen(str);
  666. }
  667. /**
  668. * @brief Текущая пароль RADIUS
  669. */
  670. void GetRDSPasswordkStr(char *str, uint8_t *len)
  671. {
  672. sprintf(str, "%s", sSettings.sRADIUS.rds_password);
  673. *len = strlen(str);
  674. }
  675. /**
  676. * @brief Настройка вкл/ выкл RADIUS сервера
  677. */
  678. void GetRDSEnableStateStr(char *str, uint8_t *len)
  679. {
  680. if (sSettings.sRADIUS.RDSEnable)
  681. *str = '1';
  682. else
  683. *str = '0';
  684. *len = 1;
  685. }
  686. /**
  687. * @brief Настройка вкл/ выкл авторизации
  688. */
  689. void GetAuthEnableStateStr(char *str, uint8_t *len)
  690. {
  691. if (sSettings.sRADIUS.Auth_enable)
  692. *str = '1';
  693. else
  694. *str = '0';
  695. *len = 1;
  696. }
  697. #endif
  698. #ifdef HARDWARE_BT6706
  699. // ************************************************************************** //
  700. // Параметры Telnet
  701. /**
  702. * @brief Текущий Порт
  703. */
  704. void GetTelnetPortStr(char *str, uint8_t *len)
  705. {
  706. sprintf(str, "%d", sSettings.sTelnet.port);
  707. *len = strlen(str);
  708. }
  709. /**
  710. * @brief Настройка вкл/ выкл Telnet сервера
  711. */
  712. void GetTelnetEnableStateStr(char *str, uint8_t *len)
  713. {
  714. if (sSettings.sTelnet.TelnetEnable)
  715. *str = '1';
  716. else
  717. *str = '0';
  718. *len = 1;
  719. }
  720. #endif
  721. // ************************************************************************** //
  722. // Флаги
  723. /**
  724. * @brief Вернуть признак изменения сетевых параметров
  725. */
  726. void GetWebReinitFlag(char *str, uint8_t *len)
  727. {
  728. if (sSettings.sFlags.netsettingsChanged)
  729. {
  730. sprintf(str, "%s", "true");
  731. *len = strlen(str);
  732. }
  733. else
  734. {
  735. sprintf(str, "%s", "false");
  736. *len = strlen(str);
  737. }
  738. }
  739. // ************************************************************************** //
  740. // Установка параметрв
  741. // ************************************************************************** //
  742. /**
  743. * @brief Установить признак обновления ПО.
  744. */
  745. void SetLoadMode(void)
  746. {
  747. /* Set loadMode = 1 */
  748. RTC_WriteBackupRegister(RTC_BKP_DR1, 1);
  749. /* Set bootTry = 0 */
  750. RTC_WriteBackupRegister(RTC_BKP_DR2, 0);
  751. }
  752. /**
  753. * @brief Установить признак изменения сетевых параметров
  754. */
  755. void SetWebReinitFlag(bool value)
  756. {
  757. sSettings.sFlags.netsettingsChanged = value;
  758. }
  759. /**
  760. * @brief Установить флаг подтверждения сетевых настроек пользователем
  761. */
  762. void SetConfirmWebParamsFlag(void)
  763. {
  764. fConfirmWebParams = true;
  765. }
  766. // ************************************************************************** //
  767. // Сетевые параметры
  768. /**
  769. * @brief IP адрес
  770. */
  771. void SetIPStr(char *str)
  772. {
  773. //strcpy(sSettings.sWebParams.ip, str);
  774. strcpy(sSettings.sWebTempParams.ip, str);
  775. }
  776. /**
  777. * @brief Шлюз
  778. */
  779. void SetGatewayStr(char *str)
  780. {
  781. //strcpy(sSettings.sWebParams.gate, str);
  782. strcpy(sSettings.sWebTempParams.gate, str);
  783. }
  784. /**
  785. * @brief Текущая маска подсети
  786. */
  787. void SetMaskStr(char *str)
  788. {
  789. //strcpy(sSettings.sWebParams.mask, str);
  790. strcpy(sSettings.sWebTempParams.mask, str);
  791. }
  792. /**
  793. * @brief Настройка DHCP
  794. */
  795. void SetDhcpStateStr(char *str)
  796. {
  797. if (strncmp(str, "on", 2) == 0)
  798. //sSettings.sWebParams.dhcpEnable = 1;
  799. sSettings.sWebTempParams.dhcpEnable = 1;
  800. else
  801. //sSettings.sWebParams.dhcpEnable = 0;
  802. sSettings.sWebTempParams.dhcpEnable = 0;
  803. }
  804. /**
  805. * @brief Настройка DHCP
  806. */
  807. void SetUDPDhcpStateStr(char *str)
  808. {
  809. if (strncmp(str, "True", 4) == 0)
  810. sSettings.sWebTempParams.dhcpEnable = 1;
  811. else if (strncmp(str, "False", 5) == 0)
  812. sSettings.sWebTempParams.dhcpEnable = 0;
  813. }
  814. // ************************************************************************** //
  815. // Параметры SNMP
  816. /**
  817. * @brief Community для чтения
  818. */
  819. void SetReadCommunity(char *str)
  820. {
  821. strcpy(sSettings.sSnmp.readCommunity, str);
  822. }
  823. /**
  824. * @brief Community для записи
  825. */
  826. void SetWriteCommunity(char *str)
  827. {
  828. strcpy(sSettings.sSnmp.writeCommunity, str);
  829. }
  830. #ifndef BT6702_SERVICE
  831. /**
  832. * @brief IP SNMP менеджера
  833. */
  834. void SetManagerIp(char *str)
  835. {
  836. strcpy(sSettings.sSnmp.managerIP, str);
  837. SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
  838. }
  839. void SetManagerIp2(char *str)
  840. {
  841. strcpy(sSettings.sSnmp.managerIP2, str);
  842. SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
  843. }
  844. void SetManagerIp3(char *str)
  845. {
  846. strcpy(sSettings.sSnmp.managerIP3, str);
  847. SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
  848. }
  849. void SetManagerIp4(char *str)
  850. {
  851. strcpy(sSettings.sSnmp.managerIP4, str);
  852. SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
  853. }
  854. void SetManagerIp5(char *str)
  855. {
  856. strcpy(sSettings.sSnmp.managerIP5, str);
  857. SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
  858. }
  859. /**
  860. * @brief Установить владельца
  861. */
  862. void SetOwner(char *str)
  863. {
  864. strcpy(sSettings.sSnmp.sysContact, str);
  865. SNMP_SetSysContact(sSettings.sSnmp.sysContact);
  866. SNMP_SetObjDescr();
  867. }
  868. /**
  869. * @brief Установить местоположение
  870. */
  871. void SetLocation(char *str)
  872. {
  873. strcpy(sSettings.sSnmp.sysLocation, str);
  874. SNMP_SetSysLocation(sSettings.sSnmp.sysLocation);
  875. }
  876. #endif
  877. /**
  878. * @brief Установить комментарий
  879. */
  880. void SetComment(char *str)
  881. {
  882. strcpy(sSettings.sInfo.comments, str);
  883. }
  884. #ifdef HARDWARE_BT6702
  885. // ************************************************************************** //
  886. // Сетевые параметры RADIUS сервера
  887. /**
  888. * @brief IP адрес
  889. */
  890. void SetRDSIpStr(char *str)
  891. {
  892. strcpy(sSettings.sRADIUS.ServerIP, str);
  893. }
  894. /**
  895. * @brief Порт
  896. */
  897. void SetRDSPortStr(char *str)
  898. {
  899. sSettings.sRADIUS.port = atoi(str);
  900. }
  901. /**
  902. * @brief Код access
  903. */
  904. void SetRDSKeyAccesstStr(char *str)
  905. {
  906. sSettings.sRADIUS.key_access = atoi(str);
  907. }
  908. /**
  909. * @brief пароль RADIUS
  910. */
  911. void SetRDSPasswordkStr(char *str)
  912. {
  913. strcpy(sSettings.sRADIUS.rds_password, str);
  914. }
  915. /**
  916. * @brief Настройка вкл/ выкл RADIUS сервера
  917. */
  918. void SetRDSEnableStateStr(char *str)
  919. {
  920. if (strncmp(str, "on", 2) == 0)
  921. sSettings.sRADIUS.RDSEnable = 1;
  922. else
  923. sSettings.sRADIUS.RDSEnable = 0;
  924. }
  925. /**
  926. * @brief Настройка вкл/ выкл авторизации
  927. */
  928. void SetAuthEnableStateStr(char *str)
  929. {
  930. if (strncmp(str, "on", 2) == 0)
  931. sSettings.sRADIUS.Auth_enable = 1;
  932. else
  933. sSettings.sRADIUS.Auth_enable = 0;
  934. }
  935. #endif
  936. #ifdef HARDWARE_BT6706
  937. // ************************************************************************** //
  938. // Параметры Telnet
  939. /**
  940. * @brief Текущий Порт
  941. */
  942. void SetTelnetPortStr(char *str)
  943. {
  944. sSettings.sTelnet.port = atoi(str);
  945. }
  946. /**
  947. * @brief Настройка вкл/ выкл Telnet сервера
  948. */
  949. void SetTelnetEnableStateStr(char *str)
  950. {
  951. if (strncmp(str, "on", 2) == 0)
  952. sSettings.sTelnet.TelnetEnable = 1;
  953. else
  954. sSettings.sTelnet.TelnetEnable = 0;
  955. }
  956. #endif
  957. // ************************************************************************** //
  958. // Параметры даты и времени
  959. /**
  960. * @brief Дата
  961. */
  962. void SetDateStr(char *str)
  963. {
  964. TM_RTC_t tmp_data;
  965. char str_data[18];
  966. char str_time[9];
  967. uint8_t len;
  968. memset(str_data, 0, 18);
  969. memset(str_time, 0, 9);
  970. str += 2;
  971. strncpy(str_data, (str + 6), 2);
  972. strncat(str_data, (str + 2), 4);
  973. strncat(str_data, str, 2);
  974. TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
  975. sprintf(str_time, "-01-%02i:%02i", tmp_data.hours, tmp_data.minutes);
  976. len = strlen(str_time);
  977. strncat(str_data, str_time, len);
  978. //TM_RTC_SetDateTimeString(&str_data);
  979. TM_RTC_SetDateTimeString(str_data);
  980. }
  981. /**
  982. * @brief Время
  983. */
  984. void SetTimeStr(char *str)
  985. {
  986. TM_RTC_t tmp_data;
  987. char str_data[18];
  988. char str_date[14];
  989. uint8_t len;
  990. memset(str_data, 0, 18);
  991. memset(str_date, 0, 14);
  992. TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
  993. sprintf(str_date, "%02i-%02i-%02i-01-", tmp_data.date, tmp_data.month, tmp_data.year);
  994. len = strlen(str_date);
  995. strncat(str_data, str_date, len);
  996. strncat(str_data, str, 5);
  997. //TM_RTC_SetDateTimeString(&str_data);
  998. TM_RTC_SetDateTimeString(str_data);
  999. }
  1000. // ************************************************************************** //
  1001. // Параметры SNTP
  1002. #ifndef BT6702_SERVICE
  1003. /**
  1004. * @brief Состояние SNTP
  1005. */
  1006. void SetSntpStateStr(char *str)
  1007. {
  1008. if (strncmp(str, "1", 1) == 0){
  1009. sSettings.sSNTP.sntpEnable = true;
  1010. }
  1011. else{
  1012. sSettings.sSNTP.sntpEnable = false;
  1013. }
  1014. }
  1015. #endif
  1016. /**
  1017. * @brief IP адрес SNTP сервера
  1018. */
  1019. void SetSntpServerIpStr(char *str)
  1020. {
  1021. strcpy(sSettings.sSNTP.ip, str);
  1022. }
  1023. /**
  1024. * @brief Часовой пояс контроллера
  1025. */
  1026. void SetSntpTimeZoneStr(char *str)
  1027. {
  1028. float newUtc;
  1029. newUtc = atof(str);
  1030. if (sSettings.sSNTP.timeZone > 0)
  1031. {
  1032. if (newUtc >= 0)
  1033. {
  1034. if (newUtc >= sSettings.sSNTP.timeZone)
  1035. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1036. else
  1037. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1038. }
  1039. else
  1040. {
  1041. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1042. }
  1043. }
  1044. else if (sSettings.sSNTP.timeZone < 0)
  1045. {
  1046. if (newUtc >= 0)
  1047. {
  1048. TM_RTC_Correction(newUtc + fabs(sSettings.sSNTP.timeZone));
  1049. }
  1050. else
  1051. {
  1052. if (newUtc >= sSettings.sSNTP.timeZone)
  1053. TM_RTC_Correction(fabs(sSettings.sSNTP.timeZone) - fabs(newUtc));
  1054. else
  1055. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1056. }
  1057. }
  1058. else if (sSettings.sSNTP.timeZone == 0)
  1059. {
  1060. TM_RTC_Correction(newUtc);
  1061. }
  1062. sSettings.sSNTP.timeZone = newUtc; // atof(str);
  1063. //TM_RTC_Correction(sSettings.sSNTP.timeZone);
  1064. }
  1065. // ************************************************************************** //
  1066. // Параметры реле/сухих контактов
  1067. /**
  1068. * @brief Тип действий при срабатывание сухих контактов
  1069. */
  1070. void SetDINTypeActStr(char *str, uint8_t num)
  1071. {
  1072. sSettings.sInOuts.din_type_act[num] = atoi(str);
  1073. }
  1074. /**
  1075. * @brief Источник срабатывания реле
  1076. */
  1077. void SetROTypeActStr(char *str, uint8_t num)
  1078. {
  1079. static uint8_t OldROtype_Sourse[2] = {0};
  1080. OldROtype_Sourse[num] = sSettings.sInOuts.ro_type_source[num];
  1081. sSettings.sInOuts.ro_type_source[num] = atoi(str);
  1082. if(OldROtype_Sourse[num] != sSettings.sInOuts.ro_type_source[num])
  1083. SetROInt(0, num);
  1084. }
  1085. /**
  1086. * @brief
  1087. */
  1088. void SetROStr(char *str, uint8_t num)
  1089. {
  1090. set_state_douts((DOUT1+num), atoi(str));
  1091. }
  1092. /**
  1093. * @brief
  1094. */
  1095. void SetROInt(uint8_t val, uint8_t num)
  1096. {
  1097. set_state_douts((DOUT1+num), val);
  1098. }
  1099. /********************************* (C) РОТЕК **********************************/