parameters.c 23 KB

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