parameters.c 23 KB

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