parameters.c 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629
  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. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  21. #include "telnet_server.h"
  22. #endif
  23. #endif
  24. #include "sntp.h"
  25. #include "lwip/snmp.h"
  26. #include "lwip/sys.h"
  27. #include "common_config.h"
  28. //#include "d_inouts.h"
  29. #include "gpio.h"
  30. #include "round.h"
  31. //#if defined HARDWARE_BT6703
  32. #ifdef PRINTF_STDLIB
  33. #include <stdio.h>
  34. #endif
  35. #ifdef PRINTF_CUSTOM
  36. #include "tinystdio.h"
  37. #endif
  38. #include <string.h>
  39. #include <stdlib.h>
  40. #include <math.h>
  41. //#endif
  42. /**
  43. * @brief Структура для хранения состояний дискретных входов
  44. */
  45. //extern GPIO_INPUTS_t sGpioInputs;
  46. /**
  47. * @brief Общая структура настроек
  48. */
  49. extern SETTINGS_t sSettings;
  50. /**
  51. * @brief Структура для хранения временных сетевых настроек
  52. */
  53. extern WEB_PARAMS_t sTempWebParams;
  54. /**
  55. * @brief Флаг подтверждения новых сетевых параметров пользователем
  56. */
  57. extern bool fConfirmWebParams;
  58. #ifndef BT6702_SERVICE
  59. // ************************************************************************** //
  60. // Параметры UPS
  61. /**
  62. * @brief
  63. */
  64. void GetInputFreqStr(char *str, uint8_t *len)
  65. {
  66. sprintf(str, "%0.1f", UPS.Freq_in);
  67. *len = strlen(str);
  68. }
  69. /**
  70. * @brief
  71. */
  72. void GetOutputFreqStr(char *str, uint8_t *len)
  73. {
  74. sprintf(str, "%0.1f", UPS.Freq_in);
  75. *len = strlen(str);
  76. }
  77. /**
  78. * @brief
  79. */
  80. void GetInputVoltageStr(char *str, uint8_t *len)
  81. {
  82. sprintf(str, "%0.1f", UPS.VAC_in);
  83. *len = strlen(str);
  84. }
  85. /**
  86. * @brief
  87. */
  88. void GetOutputVoltageStr(char *str, uint8_t *len)
  89. {
  90. sprintf(str, "%0.1f", UPS.VAC_out);
  91. *len = strlen(str);
  92. }
  93. /**
  94. * @brief
  95. */
  96. void GetPowerStr(char *str, uint8_t *len)
  97. {
  98. sprintf(str, "%d", UPS.Load);
  99. *len = strlen(str);
  100. }
  101. /**
  102. * @brief
  103. */
  104. void GetBatCapacityStr(char *str, uint8_t *len)
  105. {
  106. sprintf(str, "%d", UPS.SOC);
  107. *len = strlen(str);
  108. }
  109. /**
  110. * @brief
  111. */
  112. void GetRuntimeStr(char *str, uint8_t *len)
  113. {
  114. sprintf(str, "%d", UPS.work_time);
  115. *len = strlen(str);
  116. }
  117. /**
  118. * @brief
  119. */
  120. void GetAKBWorktimeStr(char *str, uint8_t *len)
  121. {
  122. sprintf(str, "%d", (UPS.akb_work_time/60));
  123. *len = strlen(str);
  124. }
  125. /**
  126. * @brief
  127. */
  128. void GetInternalTempStr(char *str, uint8_t *len)
  129. {
  130. sprintf(str, "%0.1f", UPS.Temp);
  131. *len = strlen(str);
  132. }
  133. /**
  134. * @brief
  135. */
  136. void GetAlarmMonitorStr(char *str, uint8_t *len)
  137. {
  138. sprintf(str, "%d", UPS.Alarm);
  139. *len = strlen(str);
  140. }
  141. /**
  142. * @brief
  143. */
  144. void GetConnectMonitorStr(char *str, uint8_t *len)
  145. {
  146. if(UPS.Present)
  147. strcpy(str, "0");
  148. else
  149. strcpy(str, "1");
  150. *len = strlen(str);
  151. }
  152. // ************************************************************************** //
  153. // Alarms
  154. /**
  155. * @brief Индикация аварийных ситуаций
  156. */
  157. void GetAlarmStr(char *str, uint8_t *len)
  158. {
  159. sprintf(str, "%d", UPS.Status);
  160. *len = strlen(str);
  161. }
  162. /**
  163. * @brief Индикация аварийных ситуаций
  164. */
  165. void GetUPSAlarmStr(char *str, uint8_t *len)
  166. {
  167. if(((UPS.Status>>7)&0x01) || ((UPS.Status>>4)&0x01) || (UPS.Alarm & 0x01))
  168. strcpy(str, "Авария");
  169. else if(!((UPS.Status>>7)&0x01) && !((UPS.Status>>4)&0x01) && !(UPS.Alarm & 0x01))
  170. strcpy(str, "Норма");
  171. else if(((UPS.Status>>1)&0x01))
  172. strcat(str, "/Отключение нагрузки");
  173. *len = strlen(str);
  174. }
  175. /**
  176. * @brief Индикация аварийных ситуаций
  177. */
  178. void GetAKBAlarmStr(char *str, uint8_t *len)
  179. {
  180. if(((UPS.Status>>6)&0x01) || ((UPS.Alarm>>1) & 0x01))
  181. strcpy(str, "Авария");
  182. else if(!((UPS.Status>>6)&0x01) && !((UPS.Alarm>>1) & 0x01))
  183. strcpy(str, "Норма");
  184. else if(((UPS.Status>>2)&0x01))
  185. strcat(str, "/Тестирование");
  186. *len = strlen(str);
  187. }
  188. /**
  189. * @brief Индикация аварийных ситуаций
  190. */
  191. void GetConnectUPSAlarmStr(char *str, uint8_t *len)
  192. {
  193. if(((UPS.Alarm>>2) & 0x01))
  194. strcpy(str, "Авария");
  195. else if(!((UPS.Alarm>>2) & 0x01))
  196. strcpy(str, "Норма");
  197. *len = strlen(str);
  198. }
  199. /**
  200. * @brief Индикация аварийных ситуаций
  201. */
  202. void GetUPSModeStr(char *str, uint8_t *len)
  203. {
  204. if((UPS.Status>>5)&0x01)
  205. sprintf(str, "Bypass");
  206. else
  207. sprintf(str, "Boost or Buck");
  208. *len = strlen(str);
  209. }
  210. #endif
  211. // ************************************************************************** //
  212. // Параметры даты и времени
  213. /**
  214. * @brief Дата (Ready for PRS!)
  215. */
  216. void GetDateStr(char *str, uint8_t *len)
  217. {
  218. TM_RTC_t data;
  219. uint16_t sys_year ;
  220. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  221. sys_year = 2000 + data.year;
  222. sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
  223. *len = strlen(str);
  224. }
  225. /**
  226. * @brief Время (Ready for PRS!)
  227. */
  228. void GetTimeStr(char *str, uint8_t *len)
  229. {
  230. TM_RTC_t data;
  231. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  232. sprintf(str, "%02i:%02i", data.hours, data.minutes);
  233. *len = strlen(str);
  234. }
  235. /**
  236. * @brief Время (Ready for PRS!)
  237. */
  238. void GetUnixTimeStr(char *str, uint8_t *len)
  239. {
  240. TM_RTC_t data;
  241. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  242. sprintf(str, "%d", data.unix);
  243. *len = strlen(str);
  244. }
  245. // ************************************************************************** //
  246. // Параметры SNTP
  247. /**
  248. * @brief Состояние SNTP (Ready for PRS!)
  249. */
  250. void GetSntpStateStr(char *str, uint8_t *len)
  251. {
  252. if (sSettings.sSNTP.sntpEnable)
  253. {
  254. sprintf(str, "%s", "1"); //авто
  255. *len = strlen(str);
  256. }
  257. else
  258. {
  259. sprintf(str, "%s", "0"); //ручной
  260. *len = strlen(str);
  261. }
  262. }
  263. /**
  264. * @brief Состояние SNTP (Ready for PRS!)
  265. */
  266. void GetSntpStateStrRU(char *str, uint8_t *len)
  267. {
  268. if (sSettings.sSNTP.sntpEnable)
  269. {
  270. sprintf(str, "%s", "авто"); //авто
  271. *len = strlen(str);
  272. }
  273. else
  274. {
  275. sprintf(str, "%s", "ручной"); //ручной
  276. *len = strlen(str);
  277. }
  278. }
  279. /**
  280. * @brief IP адрес SNTP сервера (Ready for PRS!)
  281. */
  282. void GetSntpServerIpStr(char *str, uint8_t *len)
  283. {
  284. sprintf(str, "%s", sSettings.sSNTP.ip);
  285. *len = strlen(str);
  286. }
  287. /**
  288. * @brief Часовой пояс контроллера (Ready for PRS!)
  289. */
  290. void GetSntpTimeZoneStr(char *str, uint8_t *len)
  291. {
  292. sprintf(str, "%0.1f", sSettings.sSNTP.timeZone);
  293. *len = strlen(str);
  294. }
  295. /**
  296. * @brief Дата последней синхронизации SNTP (Ready for PRS!)
  297. */
  298. void GetSntpLastDataStr(char *str, uint8_t *len)
  299. {
  300. sprintf(str, "%s", sSettings.sSNTP.data);
  301. *len = strlen(str);
  302. }
  303. #ifndef HARDWARE_BT6709
  304. // ************************************************************************** //
  305. // Параметры реле/сухих контактов
  306. /**
  307. * @brief Тип действий при срабатывание сухих контактов
  308. */
  309. void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num)
  310. {
  311. sprintf(str, "%d", sSettings.sInOuts.din_type_act[num]);
  312. *len = strlen(str);
  313. }
  314. /**
  315. * @brief Состояние сухого контакта
  316. */
  317. void GetDINStatusStr(char *str, uint8_t *len, uint8_t num)
  318. {
  319. sprintf(str, "%d", (get_state_din_outs(DIN1+num)^1));
  320. *len = strlen(str);
  321. }
  322. /**
  323. * @brief Состояние сухого контакта
  324. */
  325. void GetDIN0StatusStr(char *str, uint8_t *len)
  326. {
  327. sprintf(str, "%d", (get_state_din_outs(DIN1)^1));
  328. *len = strlen(str);
  329. }
  330. /**
  331. * @brief Состояние сухого контакта
  332. */
  333. void GetDIN0StatusStrRU(char *str, uint8_t *len)
  334. {
  335. if(get_state_din_outs(DIN1)^1)
  336. sprintf(str, "Разомкнут" );
  337. else
  338. sprintf(str, "Замкнут" );
  339. *len = strlen(str);
  340. }
  341. /**
  342. * @brief Источник срабатывания реле
  343. */
  344. void GetROTypeActStr(char *str, uint8_t *len, uint8_t num)
  345. {
  346. sprintf(str, "%d", sSettings.sInOuts.ro_type_source[num]);
  347. *len = strlen(str);
  348. }
  349. /**
  350. * @brief Состояние релейного выхода
  351. */
  352. void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num)
  353. {
  354. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  355. sprintf(str, "%d", (get_state_din_outs(DOUT1+num)^1));
  356. #elif HARDWARE_BT6703
  357. sprintf(str, "%d", get_state_din_outs(DOUT1+num));
  358. #endif
  359. *len = strlen(str);
  360. }
  361. /**
  362. * @brief Состояние релейного выхода
  363. */
  364. void GetDOUTStatusStrRU(char *str, uint8_t *len, uint8_t num)
  365. {
  366. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  367. if (get_state_din_outs(DOUT1+num)^1)
  368. sprintf(str, "Замкнут");
  369. else
  370. sprintf(str, "Разомкнут");
  371. #elif HARDWARE_BT6703
  372. if(get_state_din_outs(DOUT1+num))
  373. sprintf(str, "Замкнут");
  374. else
  375. sprintf(str, "Разомкнут");
  376. #endif
  377. *len = strlen(str);
  378. }
  379. /**
  380. * @brief Состояние релейного выхода
  381. */
  382. void GetDOUT0StatusStr(char *str, uint8_t *len)
  383. {
  384. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  385. sprintf(str, "%d", (get_state_din_outs(DOUT1)^1));
  386. #elif HARDWARE_BT6703
  387. sprintf(str, "%d", get_state_din_outs(DOUT1));
  388. #endif
  389. *len = strlen(str);
  390. }
  391. /**
  392. * @brief Состояние релейного выхода
  393. */
  394. void GetDOUT1StatusStr(char *str, uint8_t *len)
  395. {
  396. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  397. sprintf(str, "%d", (get_state_din_outs(DOUT2)^1));
  398. #elif HARDWARE_BT6703
  399. sprintf(str, "%d", get_state_din_outs(DOUT2));
  400. #endif
  401. *len = strlen(str);
  402. }
  403. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  404. /**
  405. * @brief Состояние релейного выхода
  406. */
  407. void GetDOUT2StatusStr(char *str, uint8_t *len)
  408. {
  409. sprintf(str, "%d", (get_state_din_outs(DOUT3)^1));
  410. *len = strlen(str);
  411. }
  412. #endif
  413. #endif
  414. // ************************************************************************** //
  415. // Информация
  416. #ifndef BT6702_SERVICE
  417. /**
  418. * @brief Время работы устройства
  419. */
  420. void GetWorkTimeStr(char *str, uint8_t *len)
  421. {
  422. u32_t tick;
  423. uint16_t day;
  424. uint8_t hour;
  425. uint8_t min;
  426. // TODO открыть с новым api для snmp
  427. //snmp_get_sysuptime(&tick);
  428. MIB2_COPY_SYSUPTIME_TO(&tick);
  429. day = tick/8640000;
  430. tick = tick%8640000;
  431. hour = tick/360000;
  432. tick = tick%360000;
  433. min = tick/6000;
  434. sprintf(str, "%d дн. %d ч. %d мин.", day, hour, min);
  435. *len = strlen(str);
  436. }
  437. #endif
  438. /**
  439. * @brief Модель устройства
  440. */
  441. void GetModelStr(char *str, uint8_t *len)
  442. {
  443. *len = strlen(HW_REV);
  444. strncpy(str, HW_REV, *len);
  445. }
  446. /**
  447. * @brief Название устройсва устройства
  448. */
  449. void GetNameDeviceStr(char *str, uint8_t *len)
  450. {
  451. *len = (uint8_t)sSettings.sSnmp.sysName.len;
  452. strncpy(str, sSettings.sSnmp.sysName.name, *len);
  453. }
  454. /**
  455. * @brief Дата производства
  456. */
  457. void GetProductionDataStr(char *str, uint8_t *len)
  458. {
  459. *len = strlen(sSettings.sInfo.productionData);
  460. strncpy(str, sSettings.sInfo.productionData, *len);
  461. }
  462. /**
  463. * @brief Версия ПО
  464. */
  465. void GetVersionStr(char *str, uint8_t *len) // +
  466. {
  467. *len = strlen(VERSION);
  468. strncpy(str, VERSION, *len);
  469. }
  470. /**
  471. * @brief MAC адрес устройства
  472. */
  473. void GetMacStr(char *str, uint8_t *len)
  474. {
  475. *len = strlen(sSettings.sInfo.mac);
  476. strncpy(str, sSettings.sInfo.mac, *len);
  477. }
  478. /**
  479. * @brief Серийный номер устройства
  480. */
  481. void GetSerialNumberStr(char *str, uint8_t *len)
  482. {
  483. *len = strlen(sSettings.sInfo.serialNumber);
  484. strncpy(str, sSettings.sInfo.serialNumber, *len);
  485. }
  486. /**
  487. * @brief Владелец устройства
  488. */
  489. void GetOwnerStr(char *str, uint8_t *len)
  490. {
  491. *len = (uint8_t)sSettings.sSnmp.sysContact.len;
  492. strncpy(str, sSettings.sSnmp.sysContact.contact, *len);
  493. }
  494. /**
  495. * @brief Местоположение устройства
  496. */
  497. void GetLocationStr(char *str, uint8_t *len)
  498. {
  499. *len =(uint8_t) sSettings.sSnmp.sysLocation.len;
  500. strncpy(str, sSettings.sSnmp.sysLocation.location, *len);
  501. }
  502. /**
  503. * @brief Комментарии
  504. */
  505. void GetCommentsStr(char *str, uint8_t *len)
  506. {
  507. *len = strlen(sSettings.sInfo.comments);
  508. strncpy(str, sSettings.sInfo.comments, *len);
  509. }
  510. #ifndef BT6702_SERVICE
  511. /**
  512. * @brief Модель UPS
  513. */
  514. void GetUPSModelStr(char *str, uint8_t *len)
  515. {
  516. *len = strlen(UPS.model);
  517. strncpy(str, UPS.model, *len);
  518. }
  519. /**
  520. * @brief Серийный номер UPS
  521. */
  522. void GetUPSSerialStr(char *str, uint8_t *len)
  523. {
  524. *len = strlen(UPS.serial);
  525. strncpy(str, UPS.serial, *len);
  526. }
  527. /**
  528. * @brief Версия UPS ПО
  529. */
  530. void GetUPSVersionStr(char *str, uint8_t *len) // +
  531. {
  532. *len = strlen(UPS.vertion);
  533. strncpy(str, UPS.vertion, *len);
  534. }
  535. #endif
  536. // ************************************************************************** //
  537. // Настройки аутентификации
  538. void GetUserLogin(uint8_t user_id, char *str, uint8_t *len)
  539. {
  540. sprintf(str, "%s", sSettings.sAuth[user_id].login);
  541. *len = strlen(str);
  542. }
  543. void GetUserPassword(uint8_t user_id, char *str, uint8_t *len)
  544. {
  545. sprintf(str, "%s", sSettings.sAuth[user_id].password);
  546. *len = strlen(str);
  547. }
  548. void GetUserLevel(uint8_t user_id, char *str, uint8_t *len)
  549. {
  550. sprintf(str, "%d", sSettings.sAuth[user_id].level);
  551. *len = strlen(str);
  552. }
  553. void GetUserLevelInt(uint8_t user_id, uint8_t *value)
  554. {
  555. *value = sSettings.sAuth[user_id].level;
  556. }
  557. // ************************************************************************** //
  558. // Параметры WEB
  559. /**
  560. * @brief Текущий IP адрес
  561. */
  562. void GetIpStr(char *str, uint8_t *len)
  563. {
  564. /* Если сейчас временные настройки */
  565. if (sSettings.sFlags.netsettingsChanged)
  566. sprintf(str, "%s", sSettings.sWebTempParams.ip);
  567. else
  568. sprintf(str, "%s", sSettings.sWebParams.ip);
  569. *len = strlen(str);
  570. }
  571. /**
  572. * @brief Текущий шлюз
  573. */
  574. void GetGatewayStr(char *str, uint8_t *len)
  575. {
  576. /* Если сейчас временные настройки */
  577. if (sSettings.sFlags.netsettingsChanged)
  578. sprintf(str, "%s", sSettings.sWebTempParams.gate);
  579. else
  580. sprintf(str, "%s", sSettings.sWebParams.gate);
  581. *len = strlen(str);
  582. }
  583. /**
  584. * @brief Текущая маска подсети
  585. */
  586. void GetMaskStr(char *str, uint8_t *len)
  587. {
  588. /* Если сейчас временные настройки */
  589. if (sSettings.sFlags.netsettingsChanged)
  590. sprintf(str, "%s", sSettings.sWebTempParams.mask);
  591. else
  592. sprintf(str, "%s", sSettings.sWebParams.mask);
  593. *len = strlen(str);
  594. }
  595. /**
  596. * @brief Настройка DHCP
  597. */
  598. void GetDhcpStateStr(char *str, uint8_t *len)
  599. {
  600. /* Если сейчас временные настройки */
  601. if (sSettings.sFlags.netsettingsChanged)
  602. {
  603. if (sSettings.sWebTempParams.dhcpEnable)
  604. *str = '1';
  605. else
  606. *str = '0';
  607. }
  608. else
  609. {
  610. if (sSettings.sWebParams.dhcpEnable)
  611. *str = '1';
  612. else
  613. *str = '0';
  614. }
  615. *len = 1;
  616. }
  617. /**
  618. * @brief Настройка DHCP
  619. */
  620. void GetDhcpStateUDP(char *str, uint8_t *len)
  621. {
  622. /* Если сейчас временные настройки или был загружен файл конфигурации */
  623. if (sSettings.sFlags.netsettingsChanged)
  624. {
  625. if (sSettings.sWebTempParams.dhcpEnable)
  626. sprintf(str, "%s", "True");
  627. else
  628. sprintf(str, "%s", "False");
  629. }
  630. else
  631. {
  632. if (sSettings.sWebParams.dhcpEnable)
  633. sprintf(str, "%s", "True");
  634. else
  635. sprintf(str, "%s", "False");
  636. }
  637. *len = strlen(str);
  638. }
  639. /**
  640. * @brief Настройка DHCP
  641. */
  642. void GetDhcpStateStrRu(char *str, uint8_t *len)
  643. {
  644. /* Если сейчас временные настройки или был загружен файл конфигурации */
  645. if (sSettings.sFlags.netsettingsChanged)
  646. {
  647. if (sSettings.sWebTempParams.dhcpEnable)
  648. sprintf(str, "%s", "Вкл");
  649. else
  650. sprintf(str, "%s", "Откл");
  651. }
  652. else
  653. {
  654. if (sSettings.sWebParams.dhcpEnable)
  655. sprintf(str, "%s", "Вкл");
  656. else
  657. sprintf(str, "%s", "Откл");
  658. }
  659. *len = strlen(str);
  660. }
  661. #ifdef HARDWARE_BT6709
  662. // ************************************************************************** //
  663. // Параметры довверительных хостов
  664. /**
  665. * @brief диапазон доверительных хостов
  666. */
  667. void GetWhiteListSTR(char *str, uint8_t *len, uint8_t num)
  668. {
  669. if (sSettings.sFlags.netsettingsChanged)
  670. strcpy(str, sSettings.sWhiteListTemp[num].ip_range);
  671. else
  672. strcpy(str, sSettings.sWhiteList[num].ip_range);
  673. *len = strlen(str);
  674. }
  675. /**
  676. * @brief маска диапазона доверительных хостов
  677. */
  678. void GetWhiteListMask(uint32_t *value, uint8_t num)
  679. {
  680. if (sSettings.sFlags.netsettingsChanged)
  681. *value = sSettings.sWhiteListTemp[num].mask;
  682. else
  683. *value = sSettings.sWhiteList[num].mask;
  684. }
  685. /**
  686. * @brief ip диапазона доверительных хостов
  687. */
  688. void GetWhiteListIP(uint32_t *value, uint8_t num)
  689. {
  690. if (sSettings.sFlags.netsettingsChanged)
  691. *value = sSettings.sWhiteListTemp[num].ip;
  692. else
  693. *value = sSettings.sWhiteList[num].ip;
  694. }
  695. #endif
  696. // ************************************************************************** //
  697. // Параметры SNMP
  698. /**
  699. * @brief Текущее community для чтения
  700. */
  701. void GetReadCommunity(char *str, uint8_t *len)
  702. {
  703. sprintf(str, "%s", sSettings.sSnmp.readCommunity);
  704. *len = strlen(str);
  705. }
  706. /**
  707. * @brief Текущее community для записи
  708. */
  709. void GetWriteCommunity(char *str, uint8_t *len)
  710. {
  711. sprintf(str, "%s", sSettings.sSnmp.writeCommunity);
  712. *len = strlen(str);
  713. }
  714. /**
  715. * @brief IP SNMP менеджера
  716. */
  717. void GetManagerIp(char *str, uint8_t *len)
  718. {
  719. sprintf(str, "%s", sSettings.sSnmp.managerIP);
  720. *len = strlen(str);
  721. }
  722. void GetManagerIp2(char *str, uint8_t *len)
  723. {
  724. sprintf(str, "%s", sSettings.sSnmp.managerIP2);
  725. *len = strlen(str);
  726. }
  727. void GetManagerIp3(char *str, uint8_t *len)
  728. {
  729. sprintf(str, "%s", sSettings.sSnmp.managerIP3);
  730. *len = strlen(str);
  731. }
  732. void GetManagerIp4(char *str, uint8_t *len)
  733. {
  734. sprintf(str, "%s", sSettings.sSnmp.managerIP4);
  735. *len = strlen(str);
  736. }
  737. void GetManagerIp5(char *str, uint8_t *len)
  738. {
  739. sprintf(str, "%s", sSettings.sSnmp.managerIP5);
  740. *len = strlen(str);
  741. }
  742. #ifdef HARDWARE_BT6703
  743. // ************************************************************************** //
  744. // Параметры RADIUS
  745. /**
  746. * @brief Текущий IP адрес
  747. */
  748. void GetRDSIpStr(char *str, uint8_t *len)
  749. {
  750. sprintf(str, "%s", sSettings.sRADIUS.ServerIP);
  751. *len = strlen(str);
  752. }
  753. /**
  754. * @brief Текущий Порт
  755. */
  756. void GetRDSPortStr(char *str, uint8_t *len)
  757. {
  758. sprintf(str, "%d", sSettings.sRADIUS.port);
  759. *len = strlen(str);
  760. }
  761. /**
  762. * @brief Текущий Код access
  763. */
  764. void GetRDSKeyAccesstStr(char *str, uint8_t *len)
  765. {
  766. sprintf(str, "%d", sSettings.sRADIUS.key_access);
  767. *len = strlen(str);
  768. }
  769. /**
  770. * @brief Текущая пароль RADIUS
  771. */
  772. void GetRDSPasswordkStr(char *str, uint8_t *len)
  773. {
  774. sprintf(str, "%s", sSettings.sRADIUS.rds_password);
  775. *len = strlen(str);
  776. }
  777. /**
  778. * @brief Настройка вкл/ выкл RADIUS сервера
  779. */
  780. void GetRDSEnableStateStr(char *str, uint8_t *len)
  781. {
  782. if (sSettings.sRADIUS.RDSEnable)
  783. *str = '1';
  784. else
  785. *str = '0';
  786. *len = 1;
  787. }
  788. /**
  789. * @brief Настройка вкл/ выкл авторизации
  790. */
  791. void GetAuthEnableStateStr(char *str, uint8_t *len)
  792. {
  793. if (sSettings.sRADIUS.Auth_enable)
  794. *str = '1';
  795. else
  796. *str = '0';
  797. *len = 1;
  798. }
  799. #endif
  800. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  801. // ************************************************************************** //
  802. // Параметры Telnet
  803. /**
  804. * @brief Текущий Порт
  805. */
  806. void GetTelnetPortStr(char *str, uint8_t *len)
  807. {
  808. sprintf(str, "%d", sSettings.sTelnet.port);
  809. *len = strlen(str);
  810. }
  811. /**
  812. * @brief Настройка вкл/ выкл Telnet сервера
  813. */
  814. void GetTelnetEnableStateStr(char *str, uint8_t *len)
  815. {
  816. if (sSettings.sTelnet.TelnetEnable)
  817. *str = '1';
  818. else
  819. *str = '0';
  820. *len = 1;
  821. }
  822. #endif
  823. // ************************************************************************** //
  824. // Флаги
  825. /**
  826. * @brief Вернуть признак изменения сетевых параметров
  827. */
  828. void GetWebReinitFlag(char *str, uint8_t *len)
  829. {
  830. if (sSettings.sFlags.netsettingsChanged)
  831. {
  832. sprintf(str, "%s", "true");
  833. *len = strlen(str);
  834. }
  835. else
  836. {
  837. sprintf(str, "%s", "false");
  838. *len = strlen(str);
  839. }
  840. }
  841. // ************************************************************************** //
  842. // Параметры настройки ИБП
  843. /**
  844. * @brief Минимальное напряжение на ячейках АКБ
  845. */
  846. void GetUPSVoltCellMinStr(char *str, uint8_t *len)
  847. {
  848. sprintf(str, "%0.2f", roundto(sSettings.UPS_Setting.Ucellmin, 2));
  849. *len = strlen(str);
  850. }
  851. /**
  852. * @brief Максимальное напряжение на ячейках АКБ
  853. */
  854. void GetUPSVoltCellMaxStr(char *str, uint8_t *len)
  855. {
  856. sprintf(str, "%0.2f", roundto(sSettings.UPS_Setting.Ucellmax, 2));
  857. *len = strlen(str);
  858. }
  859. // ************************************************************************** //
  860. // Параметры менеджера аварийных событий
  861. /**
  862. * @brief Верхняя граница VAC
  863. */
  864. void GetVACAlarmHighRangeStr(char *str, uint8_t *len)
  865. {
  866. sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.high);
  867. *len = strlen(str);
  868. }
  869. /**
  870. * @brief Нижняя граница VAC
  871. */
  872. void GetVACAlarmLowRangeStr(char *str, uint8_t *len)
  873. {
  874. sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.low);
  875. *len = strlen(str);
  876. }
  877. /**
  878. * @brief Гистерезис (VAC)
  879. */
  880. void GetVACAlarmHisteStr(char *str, uint8_t *len)
  881. {
  882. sprintf(str, "%0.1f", sSettings.sAlarmManager.ac_output_range.hyst);
  883. *len = strlen(str);
  884. }
  885. /**
  886. * @brief Верхняя граница температуры
  887. */
  888. void GetTemperatureAlarmHighRangeStr(char *str, uint8_t *len)
  889. {
  890. sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.high);
  891. *len = strlen(str);
  892. }
  893. /**
  894. * @brief Нижняя граница температуры
  895. */
  896. void GetTemperatureAlarmLowRangeStr(char *str, uint8_t *len)
  897. {
  898. sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.low);
  899. *len = strlen(str);
  900. }
  901. /**
  902. * @brief Гистерезис (температура)
  903. */
  904. void GetTemperatureAlarmHisteStr(char *str, uint8_t *len)
  905. {
  906. sprintf(str, "%0.1f", sSettings.sAlarmManager.Temprature_range.hyst);
  907. *len = strlen(str);
  908. }
  909. /**
  910. * @brief Верхняя граница нагрузки
  911. */
  912. void GetLoadAlarmHighRangeStr(char *str, uint8_t *len)
  913. {
  914. sprintf(str, "%d", (int)sSettings.sAlarmManager.load_range.high);
  915. *len = strlen(str);
  916. }
  917. /**
  918. * @brief Гистерезис (нагрузки)
  919. */
  920. void GetLoadAlarmHisteStr(char *str, uint8_t *len)
  921. {
  922. sprintf(str, "%0.1f", sSettings.sAlarmManager.load_range.hyst);
  923. *len = strlen(str);
  924. }
  925. // ************************************************************************** //
  926. // Установка параметрв
  927. // ************************************************************************** //
  928. /**
  929. * @brief Установить признак обновления ПО.
  930. */
  931. void SetLoadMode(void)
  932. {
  933. /* Set loadMode = 1 */
  934. RTC_WriteBackupRegister(RTC_BKP_DR1, 1);
  935. /* Set bootTry = 0 */
  936. RTC_WriteBackupRegister(RTC_BKP_DR2, 0);
  937. }
  938. /**
  939. * @brief Установить признак изменения сетевых параметров
  940. */
  941. void SetWebReinitFlag(bool value)
  942. {
  943. sSettings.sFlags.netsettingsChanged = value;
  944. }
  945. /**
  946. * @brief Установить флаг подтверждения сетевых настроек пользователем
  947. */
  948. void SetConfirmWebParamsFlag(void)
  949. {
  950. fConfirmWebParams = true;
  951. }
  952. // ************************************************************************** //
  953. // Сетевые параметры
  954. /**
  955. * @brief IP адрес
  956. */
  957. void SetIPStr(char *str)
  958. {
  959. //strcpy(sSettings.sWebParams.ip, str);
  960. strcpy(sSettings.sWebTempParams.ip, str);
  961. }
  962. /**
  963. * @brief Шлюз
  964. */
  965. void SetGatewayStr(char *str)
  966. {
  967. //strcpy(sSettings.sWebParams.gate, str);
  968. strcpy(sSettings.sWebTempParams.gate, str);
  969. }
  970. /**
  971. * @brief Текущая маска подсети
  972. */
  973. void SetMaskStr(char *str)
  974. {
  975. //strcpy(sSettings.sWebParams.mask, str);
  976. strcpy(sSettings.sWebTempParams.mask, str);
  977. }
  978. /**
  979. * @brief Настройка DHCP
  980. */
  981. void SetDhcpStateStr(char *str)
  982. {
  983. if (strncmp(str, "on", 2) == 0)
  984. //sSettings.sWebParams.dhcpEnable = 1;
  985. sSettings.sWebTempParams.dhcpEnable = 1;
  986. else
  987. //sSettings.sWebParams.dhcpEnable = 0;
  988. sSettings.sWebTempParams.dhcpEnable = 0;
  989. }
  990. /**
  991. * @brief Настройка DHCP
  992. */
  993. void SetUDPDhcpStateStr(char *str)
  994. {
  995. if (strncmp(str, "True", 4) == 0)
  996. sSettings.sWebTempParams.dhcpEnable = 1;
  997. else if (strncmp(str, "False", 5) == 0)
  998. sSettings.sWebTempParams.dhcpEnable = 0;
  999. }
  1000. #ifdef HARDWARE_BT6709
  1001. // ************************************************************************** //
  1002. // Параметры довверительных хостов
  1003. /**
  1004. * @brief диапазон доверительных хостов
  1005. */
  1006. void SetWhiteListSTR(char *str, uint8_t num)
  1007. {
  1008. char ip_str[20];
  1009. char *mask_str;
  1010. uint32_t mask;
  1011. uint8_t num_octet = 0;
  1012. strcpy(sSettings.sWhiteListTemp[num].ip_range, str);
  1013. if(strlen(sSettings.sWhiteListTemp[num].ip_range) != 0){
  1014. mask_str = strstr(sSettings.sWhiteListTemp[num].ip_range, "/");
  1015. if(mask_str != NULL){
  1016. mask = atoi(&mask_str[1]);
  1017. sSettings.sWhiteListTemp[num].mask = 0;
  1018. for(uint8_t i = 0; i < mask; i ++){
  1019. if(i < 8)
  1020. num_octet = 1;
  1021. else
  1022. num_octet = i/8+1;
  1023. sSettings.sWhiteListTemp[num].mask |= (1 << (8*num_octet - 1 - (i - 8*(num_octet - 1))));
  1024. }
  1025. memset(ip_str, 0, 20);
  1026. strncpy(ip_str, sSettings.sWhiteListTemp[num].ip_range, (mask_str - sSettings.sWhiteListTemp[num].ip_range));
  1027. sSettings.sWhiteListTemp[num].ip = ipaddr_addr(ip_str);
  1028. }
  1029. else{
  1030. sSettings.sWhiteListTemp[num].mask = 0;
  1031. sSettings.sWhiteListTemp[num].ip = 0;
  1032. }
  1033. }
  1034. }
  1035. #endif
  1036. // ************************************************************************** //
  1037. // Параметры SNMP
  1038. /**
  1039. * @brief Community для чтения
  1040. */
  1041. void SetReadCommunity(char *str)
  1042. {
  1043. strcpy(sSettings.sSnmp.readCommunity, str);
  1044. }
  1045. /**
  1046. * @brief Community для записи
  1047. */
  1048. void SetWriteCommunity(char *str)
  1049. {
  1050. strcpy(sSettings.sSnmp.writeCommunity, str);
  1051. }
  1052. #ifndef BT6702_SERVICE
  1053. /**
  1054. * @brief IP SNMP менеджера
  1055. */
  1056. void SetManagerIp(char *str)
  1057. {
  1058. strcpy(sSettings.sSnmp.managerIP, str);
  1059. SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
  1060. }
  1061. void SetManagerIp2(char *str)
  1062. {
  1063. strcpy(sSettings.sSnmp.managerIP2, str);
  1064. SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
  1065. }
  1066. void SetManagerIp3(char *str)
  1067. {
  1068. strcpy(sSettings.sSnmp.managerIP3, str);
  1069. SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
  1070. }
  1071. void SetManagerIp4(char *str)
  1072. {
  1073. strcpy(sSettings.sSnmp.managerIP4, str);
  1074. SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
  1075. }
  1076. void SetManagerIp5(char *str)
  1077. {
  1078. strcpy(sSettings.sSnmp.managerIP5, str);
  1079. SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
  1080. }
  1081. /**
  1082. * @brief Название устройсва устройства
  1083. */
  1084. void SetNameDeviceStr(char *str)
  1085. {
  1086. strcpy(sSettings.sSnmp.sysName.name, str);
  1087. sSettings.sSnmp.sysName.len = strlen(str);
  1088. }
  1089. /**
  1090. * @brief Установить владельца
  1091. */
  1092. void SetOwner(char *str)
  1093. {
  1094. strcpy(sSettings.sSnmp.sysContact.contact, str);
  1095. sSettings.sSnmp.sysContact.len = strlen(str);
  1096. SNMP_SetObjDescr();
  1097. }
  1098. /**
  1099. * @brief Установить местоположение
  1100. */
  1101. void SetLocation(char *str)
  1102. {
  1103. strcpy(sSettings.sSnmp.sysLocation.location, str);
  1104. sSettings.sSnmp.sysLocation.len = strlen(str);
  1105. }
  1106. #endif
  1107. /**
  1108. * @brief Установить комментарий
  1109. */
  1110. void SetComment(char *str)
  1111. {
  1112. strcpy(sSettings.sInfo.comments, str);
  1113. }
  1114. #ifdef HARDWARE_BT6703
  1115. // ************************************************************************** //
  1116. // Сетевые параметры RADIUS сервера
  1117. /**
  1118. * @brief IP адрес
  1119. */
  1120. void SetRDSIpStr(char *str)
  1121. {
  1122. strcpy(sSettings.sRADIUS.ServerIP, str);
  1123. }
  1124. /**
  1125. * @brief Порт
  1126. */
  1127. void SetRDSPortStr(char *str)
  1128. {
  1129. sSettings.sRADIUS.port = atoi(str);
  1130. }
  1131. /**
  1132. * @brief Код access
  1133. */
  1134. void SetRDSKeyAccesstStr(char *str)
  1135. {
  1136. sSettings.sRADIUS.key_access = atoi(str);
  1137. }
  1138. /**
  1139. * @brief пароль RADIUS
  1140. */
  1141. void SetRDSPasswordkStr(char *str)
  1142. {
  1143. strcpy(sSettings.sRADIUS.rds_password, str);
  1144. }
  1145. /**
  1146. * @brief Настройка вкл/ выкл RADIUS сервера
  1147. */
  1148. void SetRDSEnableStateStr(char *str)
  1149. {
  1150. if (strncmp(str, "on", 2) == 0)
  1151. sSettings.sRADIUS.RDSEnable = 1;
  1152. else
  1153. sSettings.sRADIUS.RDSEnable = 0;
  1154. }
  1155. /**
  1156. * @brief Настройка вкл/ выкл авторизации
  1157. */
  1158. void SetAuthEnableStateStr(char *str)
  1159. {
  1160. if (strncmp(str, "on", 2) == 0)
  1161. sSettings.sRADIUS.Auth_enable = 1;
  1162. else
  1163. sSettings.sRADIUS.Auth_enable = 0;
  1164. }
  1165. #endif
  1166. #if defined HARDWARE_BT6707 || HARDWARE_BT6709
  1167. // ************************************************************************** //
  1168. // Параметры Telnet
  1169. #ifndef BT6702_SERVICE
  1170. /**
  1171. * @brief Текущий Порт
  1172. */
  1173. void SetTelnetPortStr(char *str)
  1174. {
  1175. sSettings.sTelnet.port = atoi(str);
  1176. }
  1177. /**
  1178. * @brief Настройка вкл/ выкл Telnet сервера
  1179. */
  1180. void SetTelnetEnableStateStr(char *str)
  1181. {
  1182. if (strncmp(str, "on", 2) == 0)
  1183. sSettings.sTelnet.TelnetEnable = 1;
  1184. else
  1185. sSettings.sTelnet.TelnetEnable = 0;
  1186. }
  1187. #endif
  1188. #endif
  1189. // ************************************************************************** //
  1190. // Параметры даты и времени
  1191. /**
  1192. * @brief Дата
  1193. */
  1194. void SetDateStr(char *str)
  1195. {
  1196. TM_RTC_t tmp_data;
  1197. char str_data[18];
  1198. char str_time[9];
  1199. uint8_t len;
  1200. memset(str_data, 0, 18);
  1201. memset(str_time, 0, 9);
  1202. str += 2;
  1203. strncpy(str_data, (str + 6), 2);
  1204. strncat(str_data, (str + 2), 4);
  1205. strncat(str_data, str, 2);
  1206. TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
  1207. sprintf(str_time, "-01-%02i:%02i", tmp_data.hours, tmp_data.minutes);
  1208. len = strlen(str_time);
  1209. strncat(str_data, str_time, len);
  1210. //TM_RTC_SetDateTimeString(&str_data);
  1211. TM_RTC_SetDateTimeString(str_data);
  1212. }
  1213. /**
  1214. * @brief Время
  1215. */
  1216. void SetTimeStr(char *str)
  1217. {
  1218. TM_RTC_t tmp_data;
  1219. char str_data[18];
  1220. char str_date[14];
  1221. uint8_t len;
  1222. memset(str_data, 0, 18);
  1223. memset(str_date, 0, 14);
  1224. TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
  1225. sprintf(str_date, "%02i-%02i-%02i-01-", tmp_data.date, tmp_data.month, tmp_data.year);
  1226. len = strlen(str_date);
  1227. strncat(str_data, str_date, len);
  1228. strncat(str_data, str, 5);
  1229. //TM_RTC_SetDateTimeString(&str_data);
  1230. TM_RTC_SetDateTimeString(str_data);
  1231. }
  1232. // ************************************************************************** //
  1233. // Параметры SNTP
  1234. #ifndef BT6702_SERVICE
  1235. /**
  1236. * @brief Состояние SNTP
  1237. */
  1238. void SetSntpStateStr(char *str)
  1239. {
  1240. if (strncmp(str, "1", 1) == 0){
  1241. sSettings.sSNTP.sntpEnable = true;
  1242. }
  1243. else{
  1244. sSettings.sSNTP.sntpEnable = false;
  1245. }
  1246. }
  1247. #endif
  1248. /**
  1249. * @brief IP адрес SNTP сервера
  1250. */
  1251. void SetSntpServerIpStr(char *str)
  1252. {
  1253. strcpy(sSettings.sSNTP.ip, str);
  1254. }
  1255. /**
  1256. * @brief Часовой пояс контроллера
  1257. */
  1258. void SetSntpTimeZoneStr(char *str)
  1259. {
  1260. float newUtc;
  1261. newUtc = atof(str);
  1262. if (sSettings.sSNTP.timeZone > 0)
  1263. {
  1264. if (newUtc >= 0)
  1265. {
  1266. if (newUtc >= sSettings.sSNTP.timeZone)
  1267. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1268. else
  1269. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1270. }
  1271. else
  1272. {
  1273. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1274. }
  1275. }
  1276. else if (sSettings.sSNTP.timeZone < 0)
  1277. {
  1278. if (newUtc >= 0)
  1279. {
  1280. TM_RTC_Correction(newUtc + fabs(sSettings.sSNTP.timeZone));
  1281. }
  1282. else
  1283. {
  1284. if (newUtc >= sSettings.sSNTP.timeZone)
  1285. TM_RTC_Correction(fabs(sSettings.sSNTP.timeZone) - fabs(newUtc));
  1286. else
  1287. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1288. }
  1289. }
  1290. else if (sSettings.sSNTP.timeZone == 0)
  1291. {
  1292. TM_RTC_Correction(newUtc);
  1293. }
  1294. sSettings.sSNTP.timeZone = newUtc; // atof(str);
  1295. //TM_RTC_Correction(sSettings.sSNTP.timeZone);
  1296. }
  1297. #ifndef HARDWARE_BT6709
  1298. // ************************************************************************** //
  1299. // Параметры реле/сухих контактов
  1300. /**
  1301. * @brief Тип действий при срабатывание сухих контактов
  1302. */
  1303. void SetDINTypeActStr(char *str, uint8_t num)
  1304. {
  1305. sSettings.sInOuts.din_type_act[num] = atoi(str);
  1306. }
  1307. /**
  1308. * @brief Источник срабатывания реле
  1309. */
  1310. void SetROTypeActStr(char *str, uint8_t num)
  1311. {
  1312. static uint8_t OldROtype_Sourse[2] = {0};
  1313. OldROtype_Sourse[num] = sSettings.sInOuts.ro_type_source[num];
  1314. sSettings.sInOuts.ro_type_source[num] = atoi(str);
  1315. if(OldROtype_Sourse[num] != sSettings.sInOuts.ro_type_source[num])
  1316. SetROInt(0, num);
  1317. }
  1318. /**
  1319. * @brief
  1320. */
  1321. void SetROStr(char *str, uint8_t num)
  1322. {
  1323. set_state_douts((DOUT1+num), atoi(str));
  1324. }
  1325. /**
  1326. * @brief
  1327. */
  1328. void SetROInt(uint8_t val, uint8_t num)
  1329. {
  1330. set_state_douts((DOUT1+num), val);
  1331. }
  1332. #endif
  1333. // ************************************************************************** //
  1334. // Параметры настройки ИБП
  1335. /**
  1336. * @brief Минимальное напряжение на ячейках АКБ
  1337. */
  1338. void SetUPSVoltCellMinStr(char *str)
  1339. {
  1340. sSettings.UPS_Setting.Ucellmin = atof(str);
  1341. }
  1342. /**
  1343. * @brief Максимальное напряжение на ячейках АКБ
  1344. */
  1345. void SetUPSVoltCellMaxStr(char *str)
  1346. {
  1347. sSettings.UPS_Setting.Ucellmax = atof(str);
  1348. }
  1349. // ************************************************************************** //
  1350. // Параметры менеджера аварий
  1351. /**
  1352. * @brief Верхняя граница VAC
  1353. */
  1354. void SetVACAlarmHighRangeStr(char *str)
  1355. {
  1356. sSettings.sAlarmManager.ac_output_range.high = atof(str);
  1357. }
  1358. /**
  1359. * @brief Нижняя граница VAC
  1360. */
  1361. void SetVACAlarmLowRangeStr(char *str)
  1362. {
  1363. sSettings.sAlarmManager.ac_output_range.low = atof(str);
  1364. }
  1365. /**
  1366. * @brief Гистерезис (VAC)
  1367. */
  1368. void SetVACAlarmHisteStr(char *str)
  1369. {
  1370. sSettings.sAlarmManager.ac_output_range.hyst = atof(str);
  1371. }
  1372. /**
  1373. * @brief Верхняя граница температуры
  1374. */
  1375. void SetTemperatureAlarmHighRangeStr(char *str)
  1376. {
  1377. sSettings.sAlarmManager.Temprature_range.high = atof(str);
  1378. }
  1379. /**
  1380. * @brief Нижняя граница температуры
  1381. */
  1382. void SetTemperatureAlarmLowRangeStr(char *str)
  1383. {
  1384. sSettings.sAlarmManager.Temprature_range.low = atof(str);
  1385. }
  1386. /**
  1387. * @brief Гистерезис (температура)
  1388. */
  1389. void SetTemperatureAlarmHisteStr(char *str)
  1390. {
  1391. sSettings.sAlarmManager.Temprature_range.hyst = atof(str);
  1392. }
  1393. /**
  1394. * @brief Верхняя граница нагрузки
  1395. */
  1396. void SetLoadAlarmHighRangeStr(char *str)
  1397. {
  1398. sSettings.sAlarmManager.load_range.high = atof(str);
  1399. }
  1400. /**
  1401. * @brief Гистерезис (нагрузки)
  1402. */
  1403. void SetLoadAlarmHistStr(char *str)
  1404. {
  1405. sSettings.sAlarmManager.load_range.hyst = atof(str);
  1406. }
  1407. /********************************* (C) РОТЕК **********************************/