parameters.c 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428
  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. #ifdef HARDWARE_BT6709
  21. #include "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. #include "urlcode.h"
  32. #include "sntp_api.h"
  33. #ifdef PRINTF_STDLIB
  34. #include <stdio.h>
  35. #endif
  36. #ifdef PRINTF_CUSTOM
  37. #include "tinystdio.h"
  38. #endif
  39. #include <string.h>
  40. #include <stdlib.h>
  41. #include <math.h>
  42. #ifdef NOTIFICATION_CONTROL_ENABLE
  43. extern const char* name_traps[];
  44. #endif
  45. /**
  46. * @brief Структура для хранения состояний дискретных входов
  47. */
  48. //extern GPIO_INPUTS_t sGpioInputs;
  49. /**
  50. * @brief Общая структура настроек
  51. */
  52. extern SETTINGS_t sSettings;
  53. /**
  54. * @brief Структура для хранения временных сетевых настроек
  55. */
  56. extern WEB_PARAMS_t sTempWebParams;
  57. /**
  58. * @brief Флаг подтверждения новых сетевых параметров пользователем
  59. */
  60. extern bool fConfirmWebParams;
  61. #ifndef BT6702_SERVICE
  62. // ************************************************************************** //
  63. // Параметры UPS
  64. /**
  65. * @brief
  66. */
  67. void GetInputFreqStr(char *str, uint8_t *len)
  68. {
  69. sprintf(str, "%0.1f", UPS.Freq_in);
  70. *len = strlen(str);
  71. }
  72. /**
  73. * @brief
  74. */
  75. void GetInputFreqInt(float *value)
  76. {
  77. *value = UPS.Freq_in;
  78. }
  79. /**
  80. * @brief
  81. */
  82. void GetOutputFreqStr(char *str, uint8_t *len)
  83. {
  84. sprintf(str, "%0.1f", UPS.Freq_in);
  85. *len = strlen(str);
  86. }
  87. /**
  88. * @brief
  89. */
  90. void GetInputVoltageStr(char *str, uint8_t *len)
  91. {
  92. sprintf(str, "%0.1f", UPS.VAC_in);
  93. *len = strlen(str);
  94. }
  95. /**
  96. * @brief
  97. */
  98. void GetInputVoltageInt(float *value)
  99. {
  100. *value = UPS.VAC_in;
  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 GetOutputVoltageInt(float *value)
  114. {
  115. *value = UPS.VAC_out;
  116. }
  117. /**
  118. * @brief
  119. */
  120. void GetPowerStr(char *str, uint8_t *len)
  121. {
  122. sprintf(str, "%d", UPS.Load);
  123. *len = strlen(str);
  124. }
  125. /**
  126. * @brief
  127. */
  128. void GetPowerInt(int32_t *value)
  129. {
  130. *value = UPS.Load;
  131. }
  132. /**
  133. * @brief
  134. */
  135. void GetBatCapacityStr(char *str, uint8_t *len)
  136. {
  137. sprintf(str, "%d", UPS.SOC);
  138. *len = strlen(str);
  139. }
  140. /**
  141. * @brief
  142. */
  143. void GetBatCapacityInt(int32_t *value)
  144. {
  145. *value = UPS.SOC;
  146. }
  147. /**
  148. * @brief
  149. */
  150. void GetRuntimeStr(char *str, uint8_t *len)
  151. {
  152. sprintf(str, "%d", UPS.work_time);
  153. *len = strlen(str);
  154. }
  155. /**
  156. * @brief
  157. */
  158. void GetRuntimeInt(int32_t *value)
  159. {
  160. *value = UPS.work_time;
  161. }
  162. /**
  163. * @brief
  164. */
  165. void GetAKBWorktimeStr(char *str, uint8_t *len)
  166. {
  167. sprintf(str, "%d", (UPS.akb_work_time / 60));
  168. *len = strlen(str);
  169. }
  170. /**
  171. * @brief
  172. */
  173. void GetAKBWorktimeInt(int32_t *value)
  174. {
  175. *value = (int32_t)(UPS.akb_work_time / 60);
  176. }
  177. /**
  178. * @brief
  179. */
  180. void GetInternalTempStr(char *str, uint8_t *len)
  181. {
  182. sprintf(str, "%0.1f", UPS.Temp);
  183. *len = strlen(str);
  184. }
  185. /**
  186. * @brief
  187. */
  188. void GetInternalTempInt(float *value)
  189. {
  190. *value = UPS.Temp;
  191. }
  192. /**
  193. * @brief
  194. */
  195. void GetAlarmMonitorStr(char *str, uint8_t *len)
  196. {
  197. sprintf(str, "%d", UPS.Alarm);
  198. *len = strlen(str);
  199. }
  200. /**
  201. * @brief
  202. */
  203. void GetConnectMonitorStr(char *str, uint8_t *len)
  204. {
  205. if (UPS.Present) {
  206. strcpy(str, "0");
  207. } else {
  208. strcpy(str, "1");
  209. }
  210. *len = strlen(str);
  211. }
  212. /**
  213. * @brief
  214. */
  215. void GetInputCurrentStr(char *str, uint8_t *len)
  216. {
  217. float value;
  218. if (UPS.VAC_in != 0) {
  219. value = (sSettings.UPS_Setting.ups_power * UPS.Load) / (100 * K_EFFICIENCY * UPS.VAC_in);
  220. } else {
  221. value = 0;
  222. }
  223. sprintf(str, "%0.3f", roundto(value, 3));
  224. *len = strlen(str);
  225. }
  226. /**
  227. * @brief
  228. */
  229. void GetInputCurrentInt(float *value)
  230. {
  231. if (UPS.VAC_in != 0) {
  232. *value = (sSettings.UPS_Setting.ups_power * UPS.Load) / (100 * K_EFFICIENCY * UPS.VAC_in);
  233. } else {
  234. *value = 0;
  235. }
  236. }
  237. /**
  238. * @brief
  239. */
  240. void GetOutputCurrentStr(char *str, uint8_t *len)
  241. {
  242. float value;
  243. if (UPS.VAC_out != 0) {
  244. value = (sSettings.UPS_Setting.ups_power * UPS.Load) / (100 * UPS.VAC_out);
  245. } else {
  246. value = 0;
  247. }
  248. sprintf(str, "%0.3f", roundto(value, 3));
  249. *len = strlen(str);
  250. }
  251. /**
  252. * @brief
  253. */
  254. void GetOutputCurrentInt(float *value)
  255. {
  256. if (UPS.VAC_out != 0) {
  257. *value = (sSettings.UPS_Setting.ups_power * UPS.Load) / (100 * UPS.VAC_out);
  258. } else {
  259. *value = 0;
  260. }
  261. }
  262. /**
  263. * @brief
  264. */
  265. void GetVoltageAKBtStr(char *str, uint8_t *len)
  266. {
  267. float value;
  268. if (UPS.Vakb_curr < 7) {
  269. value = AKB_NUM_CELL * (sSettings.UPS_Setting.Uakb / AKB_VOLTAGE) * UPS.Vakb_curr;
  270. } else {
  271. value = (sSettings.UPS_Setting.Uakb / AKB_VOLTAGE) * UPS.Vakb_curr;
  272. }
  273. sprintf(str, "%0.1f", roundto(value, 1));
  274. *len = strlen(str);
  275. }
  276. /**
  277. * @brief
  278. */
  279. void GetVoltageAKBInt(float *value)
  280. {
  281. if (UPS.Vakb_curr < 7) {
  282. *value = AKB_NUM_CELL * (sSettings.UPS_Setting.Uakb / AKB_VOLTAGE) * UPS.Vakb_curr;
  283. } else {
  284. *value = (sSettings.UPS_Setting.Uakb / AKB_VOLTAGE) * UPS.Vakb_curr;
  285. }
  286. }
  287. // ************************************************************************** //
  288. // Alarms
  289. /**
  290. * @brief Индикация аварийных ситуаций
  291. */
  292. void GetAlarmStr(char *str, uint8_t *len)
  293. {
  294. sprintf(str, "%d", UPS.Status);
  295. *len = strlen(str);
  296. }
  297. /**
  298. * @brief Индикация аварийных ситуаций
  299. */
  300. void GetUPSAlarmStr(char *str, uint8_t *len)
  301. {
  302. if (((UPS.Status >> 7) & 0x01) || ((UPS.Status >> 4) & 0x01) || (UPS.Alarm & 0x01)) {
  303. strcpy(str, "Авария");
  304. } else if (!((UPS.Status >> 7) & 0x01) && !((UPS.Status >> 4) & 0x01) && !(UPS.Alarm & 0x01)) {
  305. strcpy(str, "Норма");
  306. } else if (((UPS.Status >> 1) & 0x01)) {
  307. strcat(str, "/Отключение нагрузки");
  308. }
  309. *len = strlen(str);
  310. }
  311. /**
  312. * @brief Индикация аварийных ситуаций
  313. */
  314. void GetAKBAlarmStr(char *str, uint8_t *len)
  315. {
  316. if (((UPS.Status >> 6) & 0x01) || ((UPS.Alarm >> 1) & 0x01)) {
  317. strcpy(str, "Авария");
  318. } else if (!((UPS.Status >> 6) & 0x01) && !((UPS.Alarm >> 1) & 0x01)) {
  319. strcpy(str, "Норма");
  320. } else if (((UPS.Status >> 2) & 0x01)) {
  321. strcat(str, "/Тестирование");
  322. }
  323. *len = strlen(str);
  324. }
  325. /**
  326. * @brief Индикация аварийных ситуаций
  327. */
  328. void GetConnectUPSAlarmStr(char *str, uint8_t *len)
  329. {
  330. if (((UPS.Alarm >> 2) & 0x01)) {
  331. strcpy(str, "Авария");
  332. } else if (!((UPS.Alarm >> 2) & 0x01)) {
  333. strcpy(str, "Норма");
  334. }
  335. *len = strlen(str);
  336. }
  337. /**
  338. * @brief Индикация аварийных ситуаций
  339. */
  340. void GetUPSModeStr(char *str, uint8_t *len)
  341. {
  342. if ((UPS.Status >> 5) & 0x01) {
  343. sprintf(str, "Bypass");
  344. } else {
  345. sprintf(str, "Boost or Buck");
  346. }
  347. *len = strlen(str);
  348. }
  349. #endif
  350. // ************************************************************************** //
  351. // Параметры даты и времени
  352. /**
  353. * @brief Дата (Ready for PRS!)
  354. */
  355. void GetDateStr(char *str, uint8_t *len)
  356. {
  357. TM_RTC_t data;
  358. uint16_t sys_year ;
  359. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  360. sys_year = 2000 + data.year;
  361. sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
  362. *len = strlen(str);
  363. }
  364. /**
  365. * @brief Время (Ready for PRS!)
  366. */
  367. void GetTimeStr(char *str, uint8_t *len)
  368. {
  369. TM_RTC_t data;
  370. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  371. sprintf(str, "%02i:%02i", data.hours, data.minutes);
  372. *len = strlen(str);
  373. }
  374. /**
  375. * @brief Время (Ready for PRS!)
  376. */
  377. void GetUnixTimeStr(char *str, uint8_t *len)
  378. {
  379. TM_RTC_t data;
  380. TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
  381. sprintf(str, "%d", data.unix);
  382. *len = strlen(str);
  383. }
  384. // ************************************************************************** //
  385. // Параметры SNTP
  386. /**
  387. * @brief Состояние SNTP (Ready for PRS!)
  388. */
  389. void GetSntpStateStr(char *str, uint8_t *len)
  390. {
  391. if (sSettings.sSNTP.sntpEnable) {
  392. sprintf(str, "%s", "1"); //авто
  393. *len = strlen(str);
  394. } else {
  395. sprintf(str, "%s", "0"); //ручной
  396. *len = strlen(str);
  397. }
  398. }
  399. /**
  400. * @brief Состояние SNTP (Ready for PRS!)
  401. */
  402. void GetSntpStateStrRU(char *str, uint8_t *len)
  403. {
  404. if (sSettings.sSNTP.sntpEnable) {
  405. sprintf(str, "%s", "авто"); //авто
  406. *len = strlen(str);
  407. } else {
  408. sprintf(str, "%s", "ручной"); //ручной
  409. *len = strlen(str);
  410. }
  411. }
  412. /**
  413. * @brief IP адрес SNTP сервера (Ready for PRS!)
  414. */
  415. void GetSntpServerIpStr(char *str, uint8_t *len)
  416. {
  417. sprintf(str, "%s", sSettings.sSNTP.ip);
  418. *len = strlen(str);
  419. }
  420. /**
  421. * @brief Часовой пояс контроллера (Ready for PRS!)
  422. */
  423. void GetSntpTimeZoneStr(char *str, uint8_t *len)
  424. {
  425. sprintf(str, "%0.1f", sSettings.sSNTP.timeZone);
  426. *len = strlen(str);
  427. }
  428. /**
  429. * @brief Дата последней синхронизации SNTP (Ready for PRS!)
  430. */
  431. void GetSntpLastDataStr(char *str, uint8_t *len)
  432. {
  433. sprintf(str, "%s", sSettings.sSNTP.data);
  434. *len = strlen(str);
  435. }
  436. #ifdef INOUTS_ENABLE
  437. // ************************************************************************** //
  438. // Параметры реле/сухих контактов
  439. /**
  440. * @brief Тип действий при срабатывание сухих контактов
  441. */
  442. void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num)
  443. {
  444. sprintf(str, "%d", sSettings.sInOuts.din_type_act[num]);
  445. *len = strlen(str);
  446. }
  447. /**
  448. * @brief Тип действий при срабатывание сухих контактов
  449. */
  450. void GetDIN1TypeActStr(char *str, uint8_t *len)
  451. {
  452. sprintf(str, "%d", sSettings.sInOuts.din_type_act[DIN1]);
  453. *len = strlen(str);
  454. }
  455. /**
  456. * @brief Состояние сухого контакта
  457. */
  458. void GetDINStatusStr(char *str, uint8_t *len, uint8_t num)
  459. {
  460. sprintf(str, "%d", (get_state_din_outs(DIN1 + num) ^ 1));
  461. *len = strlen(str);
  462. }
  463. /**
  464. * @brief Состояние сухого контакта
  465. */
  466. void GetDIN0StatusStr(char *str, uint8_t *len)
  467. {
  468. sprintf(str, "%d", (get_state_din_outs(DIN1) ^ 1));
  469. *len = strlen(str);
  470. }
  471. /**
  472. * @brief Состояние сухого контакта
  473. */
  474. void GetDIN0StatusStrRU(char *str, uint8_t *len)
  475. {
  476. if (get_state_din_outs(DIN1) ^ 1) {
  477. sprintf(str, "Разомкнут" );
  478. } else {
  479. sprintf(str, "Замкнут" );
  480. }
  481. *len = strlen(str);
  482. }
  483. /**
  484. * @brief Источник срабатывания реле
  485. */
  486. void GetROTypeActStr(char *str, uint8_t *len, uint8_t num)
  487. {
  488. sprintf(str, "%d", sSettings.sInOuts.ro_type_source[num]);
  489. *len = strlen(str);
  490. }
  491. /**
  492. * @brief Источник срабатывания реле
  493. */
  494. void GetRO0TypeActStr(char *str, uint8_t *len)
  495. {
  496. sprintf(str, "%d", sSettings.sInOuts.ro_type_source[DOUT1]);
  497. *len = strlen(str);
  498. }
  499. /**
  500. * @brief Источник срабатывания реле
  501. */
  502. void GetRO1TypeActStr(char *str, uint8_t *len)
  503. {
  504. sprintf(str, "%d", sSettings.sInOuts.ro_type_source[DOUT2]);
  505. *len = strlen(str);
  506. }
  507. #ifdef HARDWARE_BT6707
  508. /**
  509. * @brief Источник срабатывания реле
  510. */
  511. void GetRO2TypeActStr(char *str, uint8_t *len)
  512. {
  513. sprintf(str, "%d", sSettings.sInOuts.ro_type_source[DOUT3]);
  514. *len = strlen(str);
  515. }
  516. #endif
  517. /**
  518. * @brief Состояние релейного выхода
  519. */
  520. void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num)
  521. {
  522. #if defined HARDWARE_BT6707
  523. sprintf(str, "%d", (get_state_din_outs(DOUT1 + num) ^ 1));
  524. #elif HARDWARE_BT6703
  525. sprintf(str, "%d", get_state_din_outs(DOUT1 + num));
  526. #endif
  527. *len = strlen(str);
  528. }
  529. /**
  530. * @brief Состояние релейного выхода
  531. */
  532. void GetDOUTStatusStrRU(char *str, uint8_t *len, uint8_t num)
  533. {
  534. #if defined HARDWARE_BT6707
  535. if (get_state_din_outs(DOUT1 + num) ^ 1) {
  536. sprintf(str, "Замкнут");
  537. } else {
  538. sprintf(str, "Разомкнут");
  539. }
  540. #elif HARDWARE_BT6703
  541. if (get_state_din_outs(DOUT1 + num)) {
  542. sprintf(str, "Замкнут");
  543. } else {
  544. sprintf(str, "Разомкнут");
  545. }
  546. #endif
  547. *len = strlen(str);
  548. }
  549. /**
  550. * @brief Состояние релейного выхода
  551. */
  552. void GetDOUT0StatusStr(char *str, uint8_t *len)
  553. {
  554. #if defined HARDWARE_BT6707
  555. sprintf(str, "%d", (get_state_din_outs(DOUT1) ^ 1));
  556. #elif HARDWARE_BT6703
  557. sprintf(str, "%d", get_state_din_outs(DOUT1));
  558. #endif
  559. *len = strlen(str);
  560. }
  561. /**
  562. * @brief Состояние релейного выхода
  563. */
  564. void GetDOUT1StatusStr(char *str, uint8_t *len)
  565. {
  566. #if defined HARDWARE_BT6707
  567. sprintf(str, "%d", (get_state_din_outs(DOUT2) ^ 1));
  568. #elif HARDWARE_BT6703
  569. sprintf(str, "%d", get_state_din_outs(DOUT2));
  570. #endif
  571. *len = strlen(str);
  572. }
  573. #if defined HARDWARE_BT6707
  574. /**
  575. * @brief Состояние релейного выхода
  576. */
  577. void GetDOUT2StatusStr(char *str, uint8_t *len)
  578. {
  579. sprintf(str, "%d", (get_state_din_outs(DOUT3) ^ 1));
  580. *len = strlen(str);
  581. }
  582. #endif
  583. #endif
  584. // ************************************************************************** //
  585. // Информация
  586. #ifndef BT6702_SERVICE
  587. /**
  588. * @brief Время работы устройства
  589. */
  590. void GetWorkTimeStr(char *str, uint8_t *len)
  591. {
  592. u32_t tick;
  593. uint16_t day;
  594. uint8_t hour;
  595. uint8_t min;
  596. // TODO открыть с новым api для snmp
  597. //snmp_get_sysuptime(&tick);
  598. MIB2_COPY_SYSUPTIME_TO(&tick);
  599. day = tick / 8640000;
  600. tick = tick % 8640000;
  601. hour = tick / 360000;
  602. tick = tick % 360000;
  603. min = tick / 6000;
  604. sprintf(str, "%d дн. %d ч. %d мин.", day, hour, min);
  605. *len = strlen(str);
  606. }
  607. #endif
  608. /**
  609. * @brief Модель устройства
  610. */
  611. void GetModelStr(char *str, uint8_t *len)
  612. {
  613. *len = strlen(HW_REV);
  614. strncpy(str, HW_REV, *len);
  615. }
  616. /**
  617. * @brief Название устройсва устройства
  618. */
  619. void GetNameDeviceStr(char *str, uint8_t *len)
  620. {
  621. *len = (uint8_t)sSettings.sSnmp.sysName.len;
  622. strncpy(str, sSettings.sSnmp.sysName.name, *len);
  623. }
  624. /**
  625. * @brief Дата производства
  626. */
  627. void GetProductionDataStr(char *str, uint8_t *len)
  628. {
  629. *len = strlen(sSettings.sInfo.productionData);
  630. strncpy(str, sSettings.sInfo.productionData, *len);
  631. }
  632. /**
  633. * @brief Версия ПО
  634. */
  635. void GetVersionStr(char *str, uint8_t *len) // +
  636. {
  637. *len = strlen(VERSION);
  638. strncpy(str, VERSION, *len);
  639. }
  640. /**
  641. * @brief MAC адрес устройства
  642. */
  643. void GetMacStr(char *str, uint8_t *len)
  644. {
  645. *len = strlen(sSettings.sInfo.mac);
  646. strncpy(str, sSettings.sInfo.mac, *len);
  647. }
  648. /**
  649. * @brief Серийный номер устройства
  650. */
  651. void GetSerialNumberStr(char *str, uint8_t *len)
  652. {
  653. *len = strlen(sSettings.sInfo.serialNumber);
  654. strncpy(str, sSettings.sInfo.serialNumber, *len);
  655. }
  656. /**
  657. * @brief Владелец устройства
  658. */
  659. void GetOwnerStr(char *str, uint8_t *len)
  660. {
  661. *len = (uint8_t)sSettings.sSnmp.sysContact.len;
  662. strncpy(str, sSettings.sSnmp.sysContact.contact, *len);
  663. }
  664. /**
  665. * @brief Местоположение устройства
  666. */
  667. void GetLocationStr(char *str, uint8_t *len)
  668. {
  669. *len = (uint8_t) sSettings.sSnmp.sysLocation.len;
  670. strncpy(str, sSettings.sSnmp.sysLocation.location, *len);
  671. }
  672. /**
  673. * @brief Комментарии
  674. */
  675. void GetCommentsStr(char *str, uint8_t *len)
  676. {
  677. *len = strlen(sSettings.sInfo.comments);
  678. strncpy(str, sSettings.sInfo.comments, *len);
  679. }
  680. #ifndef BT6702_SERVICE
  681. /**
  682. * @brief Модель UPS
  683. */
  684. void GetUPSModelStr(char *str, uint8_t *len)
  685. {
  686. *len = strlen(UPS.model);
  687. strncpy(str, UPS.model, *len);
  688. }
  689. /**
  690. * @brief Серийный номер UPS
  691. */
  692. void GetUPSSerialStr(char *str, uint8_t *len)
  693. {
  694. *len = strlen(UPS.serial);
  695. strncpy(str, UPS.serial, *len);
  696. }
  697. /**
  698. * @brief Версия UPS ПО
  699. */
  700. void GetUPSVersionStr(char *str, uint8_t *len) // +
  701. {
  702. *len = strlen(UPS.vertion);
  703. strncpy(str, UPS.vertion, *len);
  704. }
  705. #endif
  706. #ifdef NOTIFICATION_CONTROL_ENABLE
  707. // ************************************************************************** //
  708. // Параметры уведомления
  709. /**
  710. * @brief Параметр разрешения отправки трапа
  711. */
  712. void GetNotificationTrapsStateStr(char *str, uint8_t *len, uint8_t num)
  713. {
  714. if ( sSettings.sFlagNotification[num] ) {
  715. sprintf(str, "%s", "true");
  716. *len = strlen(str);
  717. } else {
  718. sprintf(str, "%s", "false");
  719. *len = strlen(str);
  720. }
  721. }
  722. /**
  723. * @brief Параметр разрешения отправки трапа
  724. */
  725. void GetNotificationTrapsStateStr2(char *str, uint8_t *len, uint8_t num)
  726. {
  727. if ( sSettings.sFlagNotification[num] ) {
  728. sprintf(str, "%s", "ENA");
  729. *len = strlen(str);
  730. } else {
  731. sprintf(str, "%s", "DIS");
  732. *len = strlen(str);
  733. }
  734. }
  735. /**
  736. * @brief Длинное имя трапа
  737. */
  738. void GetTrapLongNameStr(char *str, uint8_t *len, uint8_t num)
  739. {
  740. sprintf(str, "%s", name_traps[num]);
  741. *len = strlen(str);
  742. }
  743. #endif
  744. // ************************************************************************** //
  745. // Настройки аутентификации
  746. void GetUserLogin(uint8_t user_id, char *str, uint8_t *len)
  747. {
  748. sprintf(str, "%s", sSettings.sAuth[user_id].login);
  749. *len = strlen(str);
  750. }
  751. void GetUserPassword(uint8_t user_id, char *str, uint8_t *len)
  752. {
  753. sprintf(str, "%s", sSettings.sAuth[user_id].password);
  754. *len = strlen(str);
  755. }
  756. void GetUserLevel(uint8_t user_id, char *str, uint8_t *len)
  757. {
  758. sprintf(str, "%d", sSettings.sAuth[user_id].level);
  759. *len = strlen(str);
  760. }
  761. void GetUserLevelInt(uint8_t user_id, uint8_t *value)
  762. {
  763. *value = sSettings.sAuth[user_id].level;
  764. }
  765. // ************************************************************************** //
  766. // Параметры WEB
  767. /**
  768. * @brief Текущий IP адрес
  769. */
  770. void GetIpStr(char *str, uint8_t *len)
  771. {
  772. /* Если сейчас временные настройки */
  773. if (sSettings.sFlags.netsettingsChanged) {
  774. sprintf(str, "%s", sSettings.sWebTempParams.ip);
  775. } else {
  776. sprintf(str, "%s", sSettings.sWebParams.ip);
  777. }
  778. *len = strlen(str);
  779. }
  780. /**
  781. * @brief Текущий шлюз
  782. */
  783. void GetGatewayStr(char *str, uint8_t *len)
  784. {
  785. /* Если сейчас временные настройки */
  786. if (sSettings.sFlags.netsettingsChanged) {
  787. sprintf(str, "%s", sSettings.sWebTempParams.gate);
  788. } else {
  789. sprintf(str, "%s", sSettings.sWebParams.gate);
  790. }
  791. *len = strlen(str);
  792. }
  793. /**
  794. * @brief Текущая маска подсети
  795. */
  796. void GetMaskStr(char *str, uint8_t *len)
  797. {
  798. /* Если сейчас временные настройки */
  799. if (sSettings.sFlags.netsettingsChanged) {
  800. sprintf(str, "%s", sSettings.sWebTempParams.mask);
  801. } else {
  802. sprintf(str, "%s", sSettings.sWebParams.mask);
  803. }
  804. *len = strlen(str);
  805. }
  806. /**
  807. * @brief Настройка DHCP
  808. */
  809. void GetDhcpStateStr(char *str, uint8_t *len)
  810. {
  811. /* Если сейчас временные настройки */
  812. if (sSettings.sFlags.netsettingsChanged) {
  813. if (sSettings.sWebTempParams.dhcpEnable) {
  814. *str = '1';
  815. } else {
  816. *str = '0';
  817. }
  818. } else {
  819. if (sSettings.sWebParams.dhcpEnable) {
  820. *str = '1';
  821. } else {
  822. *str = '0';
  823. }
  824. }
  825. *len = 1;
  826. }
  827. /**
  828. * @brief Настройка DHCP
  829. */
  830. void GetDhcpStateUDP(char *str, uint8_t *len)
  831. {
  832. /* Если сейчас временные настройки или был загружен файл конфигурации */
  833. if (sSettings.sFlags.netsettingsChanged) {
  834. if (sSettings.sWebTempParams.dhcpEnable) {
  835. sprintf(str, "%s", "True");
  836. } else {
  837. sprintf(str, "%s", "False");
  838. }
  839. } else {
  840. if (sSettings.sWebParams.dhcpEnable) {
  841. sprintf(str, "%s", "True");
  842. } else {
  843. sprintf(str, "%s", "False");
  844. }
  845. }
  846. *len = strlen(str);
  847. }
  848. /**
  849. * @brief Настройка DHCP
  850. */
  851. void GetDhcpStateStrRu(char *str, uint8_t *len)
  852. {
  853. /* Если сейчас временные настройки или был загружен файл конфигурации */
  854. if (sSettings.sFlags.netsettingsChanged) {
  855. if (sSettings.sWebTempParams.dhcpEnable) {
  856. sprintf(str, "%s", "Вкл");
  857. } else {
  858. sprintf(str, "%s", "Откл");
  859. }
  860. } else {
  861. if (sSettings.sWebParams.dhcpEnable) {
  862. sprintf(str, "%s", "Вкл");
  863. } else {
  864. sprintf(str, "%s", "Откл");
  865. }
  866. }
  867. *len = strlen(str);
  868. }
  869. #ifdef WHITELIST_ENABLE
  870. // ************************************************************************** //
  871. // Параметры довверительных хостов
  872. /**
  873. * @brief диапазон доверительных хостов
  874. */
  875. void GetWhiteListSTR(char *str, uint8_t *len, uint8_t num)
  876. {
  877. if (sSettings.sFlags.netsettingsChanged) {
  878. strcpy(str, sSettings.sWhiteListTemp[num].ip_range);
  879. } else {
  880. strcpy(str, sSettings.sWhiteList[num].ip_range);
  881. }
  882. *len = strlen(str);
  883. }
  884. /**
  885. * @brief первый диапазон доверительных хостов
  886. */
  887. void GetWhiteList1STR(char *str, uint8_t *len)
  888. {
  889. GetWhiteListSTR(str, len, 0);
  890. }
  891. /**
  892. * @brief второй диапазон доверительных хостов
  893. */
  894. void GetWhiteList2STR(char *str, uint8_t *len)
  895. {
  896. GetWhiteListSTR(str, len, 1);
  897. }
  898. /**
  899. * @brief третий диапазон доверительных хостов
  900. */
  901. void GetWhiteList3STR(char *str, uint8_t *len)
  902. {
  903. GetWhiteListSTR(str, len, 2);
  904. }
  905. /**
  906. * @brief четвертый диапазон доверительных хостов
  907. */
  908. void GetWhiteList4STR(char *str, uint8_t *len)
  909. {
  910. GetWhiteListSTR(str, len, 3);
  911. }
  912. /**
  913. * @brief пятый диапазон доверительных хостов
  914. */
  915. void GetWhiteList5STR(char *str, uint8_t *len)
  916. {
  917. GetWhiteListSTR(str, len, 4);
  918. }
  919. /**
  920. * @brief маска диапазона доверительных хостов
  921. */
  922. void GetWhiteListMask(uint32_t *value, uint8_t num)
  923. {
  924. if (sSettings.sFlags.netsettingsChanged) {
  925. *value = sSettings.sWhiteListTemp[num].mask;
  926. } else {
  927. *value = sSettings.sWhiteList[num].mask;
  928. }
  929. }
  930. /**
  931. * @brief ip диапазона доверительных хостов
  932. */
  933. void GetWhiteListIP(uint32_t *value, uint8_t num)
  934. {
  935. if (sSettings.sFlags.netsettingsChanged) {
  936. *value = sSettings.sWhiteListTemp[num].ip;
  937. } else {
  938. *value = sSettings.sWhiteList[num].ip;
  939. }
  940. }
  941. #endif
  942. // ************************************************************************** //
  943. // Параметры SNMP
  944. /**
  945. * @brief Текущее community для чтения
  946. */
  947. void GetReadCommunity(char *str, uint8_t *len)
  948. {
  949. sprintf(str, "%s", sSettings.sSnmp.readCommunity);
  950. *len = strlen(str);
  951. }
  952. /**
  953. * @brief Текущее community для записи
  954. */
  955. void GetWriteCommunity(char *str, uint8_t *len)
  956. {
  957. sprintf(str, "%s", sSettings.sSnmp.writeCommunity);
  958. *len = strlen(str);
  959. }
  960. /**
  961. * @brief IP SNMP менеджера
  962. */
  963. void GetManagerIp(char *str, uint8_t *len)
  964. {
  965. sprintf(str, "%s", sSettings.sSnmp.managerIP);
  966. *len = strlen(str);
  967. }
  968. void GetManagerIp2(char *str, uint8_t *len)
  969. {
  970. sprintf(str, "%s", sSettings.sSnmp.managerIP2);
  971. *len = strlen(str);
  972. }
  973. void GetManagerIp3(char *str, uint8_t *len)
  974. {
  975. sprintf(str, "%s", sSettings.sSnmp.managerIP3);
  976. *len = strlen(str);
  977. }
  978. void GetManagerIp4(char *str, uint8_t *len)
  979. {
  980. sprintf(str, "%s", sSettings.sSnmp.managerIP4);
  981. *len = strlen(str);
  982. }
  983. void GetManagerIp5(char *str, uint8_t *len)
  984. {
  985. sprintf(str, "%s", sSettings.sSnmp.managerIP5);
  986. *len = strlen(str);
  987. }
  988. #ifdef RADIUS_SERVER_ENABLE
  989. // ************************************************************************** //
  990. // Параметры RADIUS
  991. /**
  992. * @brief Текущий IP адрес
  993. */
  994. void GetRDSIpStr(char *str, uint8_t *len)
  995. {
  996. sprintf(str, "%s", sSettings.sRADIUS.ServerIP);
  997. *len = strlen(str);
  998. }
  999. /**
  1000. * @brief Текущий Порт
  1001. */
  1002. void GetRDSPortStr(char *str, uint8_t *len)
  1003. {
  1004. sprintf(str, "%d", sSettings.sRADIUS.port);
  1005. *len = strlen(str);
  1006. }
  1007. /**
  1008. * @brief Текущий Код access
  1009. */
  1010. void GetRDSKeyAccesstStr(char *str, uint8_t *len)
  1011. {
  1012. sprintf(str, "%d", sSettings.sRADIUS.key_access);
  1013. *len = strlen(str);
  1014. }
  1015. /**
  1016. * @brief Текущая пароль RADIUS
  1017. */
  1018. void GetRDSPasswordkStr(char *str, uint8_t *len)
  1019. {
  1020. sprintf(str, "%s", sSettings.sRADIUS.rds_password);
  1021. *len = strlen(str);
  1022. }
  1023. /**
  1024. * @brief Настройка вкл/ выкл RADIUS сервера
  1025. */
  1026. void GetRDSEnableStateStr(char *str, uint8_t *len)
  1027. {
  1028. if (sSettings.sRADIUS.RDSEnable) {
  1029. *str = '1';
  1030. } else {
  1031. *str = '0';
  1032. }
  1033. *len = 1;
  1034. }
  1035. /**
  1036. * @brief Настройка вкл/ выкл авторизации
  1037. */
  1038. void GetAuthEnableStateStr(char *str, uint8_t *len)
  1039. {
  1040. if (sSettings.sRADIUS.Auth_enable) {
  1041. *str = '1';
  1042. } else {
  1043. *str = '0';
  1044. }
  1045. *len = 1;
  1046. }
  1047. #endif
  1048. #ifdef TELNET_ENABLE
  1049. // ************************************************************************** //
  1050. // Параметры Telnet
  1051. /**
  1052. * @brief Текущий Порт
  1053. */
  1054. void GetTelnetPortStr(char *str, uint8_t *len)
  1055. {
  1056. sprintf(str, "%d", sSettings.sTelnet.port);
  1057. *len = strlen(str);
  1058. }
  1059. /**
  1060. * @brief Настройка вкл/ выкл Telnet сервера
  1061. */
  1062. void GetTelnetEnableStateStr(char *str, uint8_t *len)
  1063. {
  1064. if (sSettings.sTelnet.TelnetEnable) {
  1065. *str = '1';
  1066. } else {
  1067. *str = '0';
  1068. }
  1069. *len = 1;
  1070. }
  1071. #if defined SSH_ENABLE
  1072. // ************************************************************************** //
  1073. // Параметры SSH
  1074. /**
  1075. * @brief Текущий Порт
  1076. */
  1077. void GetSSHPortStr(char *str, uint8_t *len)
  1078. {
  1079. sprintf(str, "%d", sSettings.sSSH.port);
  1080. *len = strlen(str);
  1081. }
  1082. /**
  1083. * @brief Настройка вкл/ выкл SSH сервера
  1084. */
  1085. void GetSSHEnableStateStr(char *str, uint8_t *len)
  1086. {
  1087. if (sSettings.sSSH.SSHEnable) {
  1088. *str = '1';
  1089. } else {
  1090. *str = '0';
  1091. }
  1092. *len = 1;
  1093. }
  1094. #endif // SSH_ENABLE
  1095. #endif
  1096. // ************************************************************************** //
  1097. // Флаги
  1098. /**
  1099. * @brief Вернуть признак изменения сетевых параметров
  1100. */
  1101. void GetWebReinitFlag(char *str, uint8_t *len)
  1102. {
  1103. if (sSettings.sFlags.netsettingsChanged) {
  1104. sprintf(str, "%s", "true");
  1105. *len = strlen(str);
  1106. } else {
  1107. sprintf(str, "%s", "false");
  1108. *len = strlen(str);
  1109. }
  1110. }
  1111. // ************************************************************************** //
  1112. // Параметры настройки ИБП
  1113. /**
  1114. * @brief Минимальное напряжение на ячейках АКБ
  1115. */
  1116. void GetUPSVoltCellMinStr(char *str, uint8_t *len)
  1117. {
  1118. sprintf(str, "%0.2f", roundto(sSettings.UPS_Setting.Ucellmin, 2));
  1119. *len = strlen(str);
  1120. }
  1121. /**
  1122. * @brief Минимальное напряжение на ячейках АКБ
  1123. */
  1124. void GetUPSVoltCellMinInt(float *value)
  1125. {
  1126. *value = sSettings.UPS_Setting.Ucellmin;
  1127. }
  1128. /**
  1129. * @brief Максимальное напряжение на ячейках АКБ
  1130. */
  1131. void GetUPSVoltCellMaxStr(char *str, uint8_t *len)
  1132. {
  1133. sprintf(str, "%0.2f", roundto(sSettings.UPS_Setting.Ucellmax, 2));
  1134. *len = strlen(str);
  1135. }
  1136. /**
  1137. * @brief Максимальное напряжение на ячейках АКБ
  1138. */
  1139. void GetUPSVoltCellMaxInt(float *value)
  1140. {
  1141. *value = sSettings.UPS_Setting.Ucellmax;
  1142. }
  1143. /**
  1144. * @brief Дата замены АКБ
  1145. */
  1146. void GetDataNextChangeAKBStrRU(char *str, uint8_t *len)
  1147. {
  1148. if (sSettings.UPS_Setting.set_data == 0) {
  1149. sprintf(str, "%s", "не установлена");
  1150. *len = strlen(str);
  1151. return;
  1152. }
  1153. TM_RTC_t data;
  1154. uint16_t sys_year;
  1155. uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000 * sSettings.UPS_Setting.life_time);
  1156. memset(&data, 0, sizeof(data));
  1157. TM_RTC_GetDateTimeFromUnix(&data, data_change);
  1158. sys_year = 2000 + data.year;
  1159. sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
  1160. *len = strlen(str);
  1161. }
  1162. /**
  1163. * @brief Дата замены АКБ
  1164. */
  1165. void GetDataNextChangeAKBStr(char *str, uint8_t *len)
  1166. {
  1167. if (sSettings.UPS_Setting.set_data == 0) {
  1168. *len = 0;
  1169. return;
  1170. }
  1171. TM_RTC_t data;
  1172. uint16_t sys_year;
  1173. uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000 * sSettings.UPS_Setting.life_time);
  1174. memset(&data, 0, sizeof(data));
  1175. TM_RTC_GetDateTimeFromUnix(&data, data_change);
  1176. sys_year = 2000 + data.year;
  1177. sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
  1178. *len = strlen(str);
  1179. }
  1180. /**
  1181. * @brief Дата установки АКБ
  1182. */
  1183. void GetDataSetAKBStr(char *str, uint8_t *len)
  1184. {
  1185. if (sSettings.UPS_Setting.set_data == 0) {
  1186. *len = 0;
  1187. return;
  1188. }
  1189. TM_RTC_t data;
  1190. uint16_t sys_year;
  1191. TM_RTC_GetDateTimeFromUnix(&data, sSettings.UPS_Setting.set_data);
  1192. sys_year = 2000 + data.year;
  1193. sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date);
  1194. *len = strlen(str);
  1195. }
  1196. /**
  1197. * @brief Срок службы АКБ
  1198. */
  1199. void GetLifeTimeAKBStr(char *str, uint8_t *len)
  1200. {
  1201. sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.life_time);
  1202. *len = strlen(str);
  1203. }
  1204. /**
  1205. * @brief Номинальное напряжение АКБ
  1206. */
  1207. void GetVoltageAKBNominalStr(char *str, uint8_t *len)
  1208. {
  1209. sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.Uakb);
  1210. *len = strlen(str);
  1211. }
  1212. /**
  1213. * @brief Полная мощность АКБ
  1214. */
  1215. void GetUPSPowerStr(char *str, uint8_t *len)
  1216. {
  1217. sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.ups_power);
  1218. *len = strlen(str);
  1219. }
  1220. /**
  1221. * @brief Емкость АКБ
  1222. */
  1223. void GetCapacityNominalAKBStr(char *str, uint8_t *len)
  1224. {
  1225. sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.common_capacity);
  1226. *len = strlen(str);
  1227. }
  1228. /**
  1229. * @brief Емкость АКБ
  1230. */
  1231. void GetCapacityNominalAKBInt(int32_t *value)
  1232. {
  1233. *value = (int32_t)sSettings.UPS_Setting.common_capacity;
  1234. }
  1235. // ************************************************************************** //
  1236. // Параметры менеджера аварийных событий
  1237. /**
  1238. * @brief Верхняя граница VAC
  1239. */
  1240. void GetVACAlarmHighRangeStr(char *str, uint8_t *len)
  1241. {
  1242. sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.high);
  1243. *len = strlen(str);
  1244. }
  1245. /**
  1246. * @brief Верхняя граница VAC
  1247. */
  1248. void GetVACAlarmHighRangeInt(int32_t *value)
  1249. {
  1250. *value = (int)sSettings.sAlarmManager.ac_output_range.high;
  1251. }
  1252. /**
  1253. * @brief Нижняя граница VAC
  1254. */
  1255. void GetVACAlarmLowRangeStr(char *str, uint8_t *len)
  1256. {
  1257. sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.low);
  1258. *len = strlen(str);
  1259. }
  1260. /**
  1261. * @brief Нижняя граница VAC
  1262. */
  1263. void GetVACAlarmLowRangeInt(int32_t *value)
  1264. {
  1265. *value = (int)sSettings.sAlarmManager.ac_output_range.low;
  1266. }
  1267. /**
  1268. * @brief Гистерезис (VAC)
  1269. */
  1270. void GetVACAlarmHisteStr(char *str, uint8_t *len)
  1271. {
  1272. sprintf(str, "%0.1f", sSettings.sAlarmManager.ac_output_range.hyst);
  1273. *len = strlen(str);
  1274. }
  1275. /**
  1276. * @brief Гистерезис (VAC)
  1277. */
  1278. void GetVACAlarmHisteInt(float *value)
  1279. {
  1280. *value = sSettings.sAlarmManager.ac_output_range.hyst;
  1281. }
  1282. /**
  1283. * @brief Верхняя граница температуры
  1284. */
  1285. void GetTemperatureAlarmHighRangeStr(char *str, uint8_t *len)
  1286. {
  1287. sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.high);
  1288. *len = strlen(str);
  1289. }
  1290. /**
  1291. * @brief Верхняя граница температуры
  1292. */
  1293. void GetTemperatureAlarmHighRangeInt(int32_t *value)
  1294. {
  1295. *value = (int)sSettings.sAlarmManager.Temprature_range.high;
  1296. }
  1297. /**
  1298. * @brief Нижняя граница температуры
  1299. */
  1300. void GetTemperatureAlarmLowRangeStr(char *str, uint8_t *len)
  1301. {
  1302. sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.low);
  1303. *len = strlen(str);
  1304. }
  1305. /**
  1306. * @brief Нижняя граница температуры
  1307. */
  1308. void GetTemperatureAlarmLowRangeInt(int32_t *value)
  1309. {
  1310. *value = (int)sSettings.sAlarmManager.Temprature_range.low;
  1311. }
  1312. /**
  1313. * @brief Гистерезис (температура)
  1314. */
  1315. void GetTemperatureAlarmHisteStr(char *str, uint8_t *len)
  1316. {
  1317. sprintf(str, "%0.1f", sSettings.sAlarmManager.Temprature_range.hyst);
  1318. *len = strlen(str);
  1319. }
  1320. /**
  1321. * @brief Гистерезис (температура)
  1322. */
  1323. void GetTemperatureAlarmHisteInt(float *value)
  1324. {
  1325. *value = sSettings.sAlarmManager.Temprature_range.hyst;
  1326. }
  1327. /**
  1328. * @brief Верхняя граница нагрузки
  1329. */
  1330. void GetLoadAlarmHighRangeStr(char *str, uint8_t *len)
  1331. {
  1332. sprintf(str, "%d", (int)sSettings.sAlarmManager.load_range.high);
  1333. *len = strlen(str);
  1334. }
  1335. /**
  1336. * @brief Верхняя граница нагрузки
  1337. */
  1338. void GetLoadAlarmHighRangeInt(int32_t *value)
  1339. {
  1340. *value = (int)sSettings.sAlarmManager.load_range.high;
  1341. }
  1342. /**
  1343. * @brief Гистерезис (нагрузки)
  1344. */
  1345. void GetLoadAlarmHisteStr(char *str, uint8_t *len)
  1346. {
  1347. sprintf(str, "%0.1f", sSettings.sAlarmManager.load_range.hyst);
  1348. *len = strlen(str);
  1349. }
  1350. /**
  1351. * @brief Гистерезис (нагрузки)
  1352. */
  1353. void GetLoadAlarmHisteInt(float *value)
  1354. {
  1355. *value = sSettings.sAlarmManager.load_range.hyst;
  1356. }
  1357. // ************************************************************************** //
  1358. // Установка параметрв
  1359. // ************************************************************************** //
  1360. /**
  1361. * @brief Установить признак обновления ПО.
  1362. */
  1363. void SetLoadMode(void)
  1364. {
  1365. /* Set loadMode = 1 */
  1366. RTC_WriteBackupRegister(RTC_BKP_DR1, 1);
  1367. /* Set bootTry = 0 */
  1368. RTC_WriteBackupRegister(RTC_BKP_DR2, 0);
  1369. }
  1370. /**
  1371. * @brief Установить признак изменения сетевых параметров
  1372. */
  1373. void SetWebReinitFlag(bool value)
  1374. {
  1375. sSettings.sFlags.netsettingsChanged = value;
  1376. }
  1377. /**
  1378. * @brief Установить флаг подтверждения сетевых настроек пользователем
  1379. */
  1380. void SetConfirmWebParamsFlag(void)
  1381. {
  1382. fConfirmWebParams = true;
  1383. }
  1384. #ifdef NOTIFICATION_CONTROL_ENABLE
  1385. // ************************************************************************** //
  1386. // Параметры уведомления
  1387. /**
  1388. * @brief Параметр разрешения отправки
  1389. */
  1390. void SetNotificationFlagsStr(uint8_t *value, uint8_t num)
  1391. {
  1392. sSettings.sFlagNotification[num] = *value;
  1393. }
  1394. #endif
  1395. // ************************************************************************** //
  1396. // Сетевые параметры
  1397. /**
  1398. * @brief IP адрес
  1399. */
  1400. void SetIPStr(char *str)
  1401. {
  1402. //strcpy(sSettings.sWebParams.ip, str);
  1403. strcpy(sSettings.sWebTempParams.ip, str);
  1404. }
  1405. /**
  1406. * @brief Шлюз
  1407. */
  1408. void SetGatewayStr(char *str)
  1409. {
  1410. //strcpy(sSettings.sWebParams.gate, str);
  1411. strcpy(sSettings.sWebTempParams.gate, str);
  1412. }
  1413. /**
  1414. * @brief Текущая маска подсети
  1415. */
  1416. void SetMaskStr(char *str)
  1417. {
  1418. //strcpy(sSettings.sWebParams.mask, str);
  1419. strcpy(sSettings.sWebTempParams.mask, str);
  1420. }
  1421. /**
  1422. * @brief Настройка DHCP
  1423. */
  1424. void SetDhcpStateStr(char *str)
  1425. {
  1426. if (strncmp(str, "on", 2) == 0)
  1427. //sSettings.sWebParams.dhcpEnable = 1;
  1428. {
  1429. sSettings.sWebTempParams.dhcpEnable = 1;
  1430. } else
  1431. //sSettings.sWebParams.dhcpEnable = 0;
  1432. {
  1433. sSettings.sWebTempParams.dhcpEnable = 0;
  1434. }
  1435. }
  1436. /**
  1437. * @brief Настройка DHCP
  1438. */
  1439. void SetUDPDhcpStateStr(char *str)
  1440. {
  1441. if (strncmp(str, "True", 4) == 0) {
  1442. sSettings.sWebTempParams.dhcpEnable = 1;
  1443. } else if (strncmp(str, "False", 5) == 0) {
  1444. sSettings.sWebTempParams.dhcpEnable = 0;
  1445. }
  1446. }
  1447. #ifdef WHITELIST_ENABLE
  1448. // ************************************************************************** //
  1449. // Параметры довверительных хостов
  1450. /**
  1451. * @brief диапазон доверительных хостов
  1452. */
  1453. void SetWhiteListSTR(char *str, uint8_t num)
  1454. {
  1455. char ip_str[20];
  1456. char *mask_str;
  1457. uint32_t mask;
  1458. uint8_t num_octet = 0;
  1459. strcpy(sSettings.sWhiteListTemp[num].ip_range, str);
  1460. if (strlen(sSettings.sWhiteListTemp[num].ip_range) != 0) {
  1461. mask_str = strstr(sSettings.sWhiteListTemp[num].ip_range, "/");
  1462. if (mask_str != NULL) {
  1463. mask = atoi(&mask_str[1]);
  1464. sSettings.sWhiteListTemp[num].mask = 0;
  1465. for (uint8_t i = 0; i < mask; i ++) {
  1466. if (i < 8) {
  1467. num_octet = 1;
  1468. } else {
  1469. num_octet = i / 8 + 1;
  1470. }
  1471. sSettings.sWhiteListTemp[num].mask |= (1 << (8 * num_octet - 1 - (i - 8 * (num_octet - 1))));
  1472. }
  1473. memset(ip_str, 0, 20);
  1474. strncpy(ip_str, sSettings.sWhiteListTemp[num].ip_range, (mask_str - sSettings.sWhiteListTemp[num].ip_range));
  1475. sSettings.sWhiteListTemp[num].ip = ipaddr_addr(ip_str);
  1476. } else {
  1477. memset(&sSettings.sWhiteListTemp[num], 0, sizeof(sSettings.sWhiteListTemp[num]));
  1478. sSettings.sWhiteListTemp[num].mask = 0;
  1479. sSettings.sWhiteListTemp[num].ip = 0;
  1480. }
  1481. } else {
  1482. memset(&sSettings.sWhiteListTemp[num], 0, sizeof(sSettings.sWhiteListTemp[num]));
  1483. sSettings.sWhiteListTemp[num].mask = 0;
  1484. sSettings.sWhiteListTemp[num].ip = 0;
  1485. }
  1486. }
  1487. /**
  1488. * @brief Первый диапазон доверительных хостов
  1489. */
  1490. void SetWhiteList1STR(char *str)
  1491. {
  1492. SetWhiteListSTR(str, 0);
  1493. }
  1494. /**
  1495. * @brief Второй диапазон доверительных хостов
  1496. */
  1497. void SetWhiteList2STR(char *str)
  1498. {
  1499. SetWhiteListSTR(str, 1);
  1500. }
  1501. /**
  1502. * @brief Третий диапазон доверительных хостов
  1503. */
  1504. void SetWhiteList3STR(char *str)
  1505. {
  1506. SetWhiteListSTR(str, 2);
  1507. }
  1508. /**
  1509. * @brief Четвертый диапазон доверительных хостов
  1510. */
  1511. void SetWhiteList4STR(char *str)
  1512. {
  1513. SetWhiteListSTR(str, 3);
  1514. }
  1515. /**
  1516. * @brief Пятый диапазон доверительных хостов
  1517. */
  1518. void SetWhiteList5STR(char *str)
  1519. {
  1520. SetWhiteListSTR(str, 4);
  1521. }
  1522. #endif
  1523. // ************************************************************************** //
  1524. // Параметры SNMP
  1525. /**
  1526. * @brief Community для чтения
  1527. */
  1528. void SetReadCommunity(char *str)
  1529. {
  1530. strcpy(sSettings.sSnmp.readCommunity, str);
  1531. }
  1532. /**
  1533. * @brief Community для записи
  1534. */
  1535. void SetWriteCommunity(char *str)
  1536. {
  1537. strcpy(sSettings.sSnmp.writeCommunity, str);
  1538. }
  1539. #ifndef BT6702_SERVICE
  1540. /**
  1541. * @brief IP SNMP менеджера
  1542. */
  1543. void SetManagerIp(char *str)
  1544. {
  1545. strcpy(sSettings.sSnmp.managerIP, str);
  1546. SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
  1547. }
  1548. void SetManagerIp2(char *str)
  1549. {
  1550. strcpy(sSettings.sSnmp.managerIP2, str);
  1551. SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
  1552. }
  1553. void SetManagerIp3(char *str)
  1554. {
  1555. strcpy(sSettings.sSnmp.managerIP3, str);
  1556. SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
  1557. }
  1558. void SetManagerIp4(char *str)
  1559. {
  1560. strcpy(sSettings.sSnmp.managerIP4, str);
  1561. SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
  1562. }
  1563. void SetManagerIp5(char *str)
  1564. {
  1565. strcpy(sSettings.sSnmp.managerIP5, str);
  1566. SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
  1567. }
  1568. /**
  1569. * @brief Название устройсва устройства
  1570. */
  1571. void SetNameDeviceStr(char *str)
  1572. {
  1573. strcpy(sSettings.sSnmp.sysName.name, str);
  1574. sSettings.sSnmp.sysName.len = strlen(str);
  1575. }
  1576. /**
  1577. * @brief Установить владельца
  1578. */
  1579. void SetOwner(char *str)
  1580. {
  1581. strcpy(sSettings.sSnmp.sysContact.contact, str);
  1582. sSettings.sSnmp.sysContact.len = strlen(str);
  1583. SNMP_SetObjDescr();
  1584. }
  1585. /**
  1586. * @brief Установить местоположение
  1587. */
  1588. void SetLocation(char *str)
  1589. {
  1590. strcpy(sSettings.sSnmp.sysLocation.location, str);
  1591. sSettings.sSnmp.sysLocation.len = strlen(str);
  1592. }
  1593. #endif
  1594. /**
  1595. * @brief Установить комментарий
  1596. */
  1597. void SetComment(char *str)
  1598. {
  1599. strcpy(sSettings.sInfo.comments, str);
  1600. }
  1601. #ifdef RADIUS_SERVER_ENABLE
  1602. // ************************************************************************** //
  1603. // Сетевые параметры RADIUS сервера
  1604. /**
  1605. * @brief IP адрес
  1606. */
  1607. void SetRDSIpStr(char *str)
  1608. {
  1609. strcpy(sSettings.sRADIUS.ServerIP, str);
  1610. }
  1611. /**
  1612. * @brief Порт
  1613. */
  1614. void SetRDSPortStr(char *str)
  1615. {
  1616. sSettings.sRADIUS.port = atoi(str);
  1617. }
  1618. /**
  1619. * @brief Код access
  1620. */
  1621. void SetRDSKeyAccesstStr(char *str)
  1622. {
  1623. sSettings.sRADIUS.key_access = atoi(str);
  1624. }
  1625. /**
  1626. * @brief пароль RADIUS
  1627. */
  1628. void SetRDSPasswordkStr(char *str)
  1629. {
  1630. strcpy(sSettings.sRADIUS.rds_password, str);
  1631. }
  1632. /**
  1633. * @brief Настройка вкл/ выкл RADIUS сервера
  1634. */
  1635. void SetRDSEnableStateStr(char *str)
  1636. {
  1637. if (strncmp(str, "on", 2) == 0) {
  1638. sSettings.sRADIUS.RDSEnable = 1;
  1639. } else {
  1640. sSettings.sRADIUS.RDSEnable = 0;
  1641. }
  1642. }
  1643. /**
  1644. * @brief Настройка вкл/ выкл авторизации
  1645. */
  1646. void SetAuthEnableStateStr(char *str)
  1647. {
  1648. if (strncmp(str, "on", 2) == 0) {
  1649. sSettings.sRADIUS.Auth_enable = 1;
  1650. } else {
  1651. sSettings.sRADIUS.Auth_enable = 0;
  1652. }
  1653. }
  1654. #endif
  1655. #ifdef TELNET_ENABLE
  1656. #ifndef BT6702_SERVICE
  1657. // ************************************************************************** //
  1658. // Параметры Telnet
  1659. /**
  1660. * @brief Текущий Порт
  1661. */
  1662. void SetTelnetPortStr(char *str)
  1663. {
  1664. sSettings.sTelnet.port = atoi(str);
  1665. }
  1666. /**
  1667. * @brief Настройка вкл/ выкл Telnet сервера
  1668. */
  1669. void SetTelnetEnableStateStr(char *str)
  1670. {
  1671. if (strncmp(str, "on", 2) == 0) {
  1672. sSettings.sTelnet.TelnetEnable = 1;
  1673. } else {
  1674. sSettings.sTelnet.TelnetEnable = 0;
  1675. }
  1676. }
  1677. #if defined SSH_ENABLE
  1678. #include "server.h"
  1679. // ************************************************************************** //
  1680. // Параметры SSH
  1681. /**
  1682. * @brief Текущий Порт
  1683. */
  1684. void SetSSHPortStr(char *str)
  1685. {
  1686. uint16_t new_port = atoi(str);
  1687. bool port_changed = new_port != sSettings.sSSH.port;
  1688. sSettings.sSSH.port = new_port;
  1689. if (port_changed) {
  1690. ssh_server_restart();
  1691. }
  1692. }
  1693. /**
  1694. * @brief Настройка вкл/ выкл SSH сервера
  1695. */
  1696. void SetSSHEnableStateStr(char *str)
  1697. {
  1698. if (strncmp(str, "on", 2) == 0) {
  1699. bool old_state = sSettings.sSSH.SSHEnable;
  1700. sSettings.sSSH.SSHEnable = 1;
  1701. if (old_state != true) {
  1702. ssh_server_init();
  1703. }
  1704. } else {
  1705. sSettings.sSSH.SSHEnable = 0;
  1706. ssh_server_restart();
  1707. }
  1708. }
  1709. #endif // SSH_ENABLE
  1710. #endif // !BT6702_SERVICE
  1711. #endif // TELNET_ENABLE
  1712. // ************************************************************************** //
  1713. // Параметры даты и времени
  1714. /**
  1715. * @brief Дата
  1716. */
  1717. void SetDateStr(char *str)
  1718. {
  1719. TM_RTC_t tmp_data;
  1720. char str_data[18];
  1721. char str_time[9];
  1722. uint8_t len;
  1723. memset(str_data, 0, 18);
  1724. memset(str_time, 0, 9);
  1725. str += 2;
  1726. strncpy(str_data, (str + 6), 2);
  1727. strncat(str_data, (str + 2), 4);
  1728. strncat(str_data, str, 2);
  1729. TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
  1730. sprintf(str_time, "-01-%02i:%02i", tmp_data.hours, tmp_data.minutes);
  1731. len = strlen(str_time);
  1732. strncat(str_data, str_time, len);
  1733. //TM_RTC_SetDateTimeString(&str_data);
  1734. TM_RTC_SetDateTimeString(str_data);
  1735. }
  1736. /**
  1737. * @brief Время
  1738. */
  1739. void SetTimeStr(char *str)
  1740. {
  1741. TM_RTC_t tmp_data;
  1742. char str_data[18];
  1743. char str_date[14];
  1744. uint8_t len;
  1745. memset(str_data, 0, 18);
  1746. memset(str_date, 0, 14);
  1747. TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
  1748. sprintf(str_date, "%02i-%02i-%02i-01-", tmp_data.date, tmp_data.month, tmp_data.year);
  1749. len = strlen(str_date);
  1750. strncat(str_data, str_date, len);
  1751. strncat(str_data, str, 5);
  1752. //TM_RTC_SetDateTimeString(&str_data);
  1753. TM_RTC_SetDateTimeString(str_data);
  1754. }
  1755. /**
  1756. * @brief Время
  1757. */
  1758. void SetTimeWebStr(char *str)
  1759. {
  1760. char tmp_str[MAX_WEB_PARAM_LEN];
  1761. memset(tmp_str, 0, sizeof(tmp_str));
  1762. url_decode(tmp_str, sizeof(tmp_str), str);
  1763. TM_RTC_t tmp_data;
  1764. char str_data[18];
  1765. char str_date[14];
  1766. uint8_t len;
  1767. memset(str_data, 0, 18);
  1768. memset(str_date, 0, 14);
  1769. TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN);
  1770. sprintf(str_date, "%02i-%02i-%02i-01-", tmp_data.date, tmp_data.month, tmp_data.year);
  1771. len = strlen(str_date);
  1772. strncat(str_data, str_date, len);
  1773. strncat(str_data, tmp_str, 5);
  1774. //TM_RTC_SetDateTimeString(&str_data);
  1775. TM_RTC_SetDateTimeString(str_data);
  1776. }
  1777. // ************************************************************************** //
  1778. // Параметры SNTP
  1779. #ifndef BT6702_SERVICE
  1780. /**
  1781. * @brief Состояние SNTP
  1782. */
  1783. void SetSntpStateStr(char *str)
  1784. {
  1785. bool enable_old_sntp = sSettings.sSNTP.sntpEnable;
  1786. if (strncmp(str, "1", 1) == 0) {
  1787. sSettings.sSNTP.sntpEnable = true;
  1788. } else {
  1789. sSettings.sSNTP.sntpEnable = false;
  1790. }
  1791. if (sSettings.sSNTP.sntpEnable != enable_old_sntp) {
  1792. #ifndef BT6702_SERVICE
  1793. SNTP_Init();
  1794. #endif
  1795. //vTaskDelay(7000);
  1796. SNTP_Poll();
  1797. }
  1798. }
  1799. #endif
  1800. /**
  1801. * @brief IP адрес SNTP сервера
  1802. */
  1803. void SetSntpServerIpStr(char *str)
  1804. {
  1805. if (strncmp(str, sSettings.sSNTP.ip, strlen(str)) != 0) {
  1806. strcpy(sSettings.sSNTP.ip, str);
  1807. #ifndef BT6702_SERVICE
  1808. SNTP_Init();
  1809. #endif
  1810. //vTaskDelay(7000);
  1811. SNTP_Poll();
  1812. }
  1813. }
  1814. /**
  1815. * @brief Часовой пояс контроллера
  1816. */
  1817. void SetSntpTimeZoneStr(char *str)
  1818. {
  1819. float newUtc;
  1820. newUtc = atof(str);
  1821. if (sSettings.sSNTP.timeZone > 0) {
  1822. if (newUtc >= 0) {
  1823. if (newUtc >= sSettings.sSNTP.timeZone) {
  1824. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1825. }
  1826. else
  1827. {
  1828. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1829. }
  1830. } else {
  1831. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1832. }
  1833. } else if (sSettings.sSNTP.timeZone < 0) {
  1834. if (newUtc >= 0) {
  1835. TM_RTC_Correction(newUtc + fabs(sSettings.sSNTP.timeZone));
  1836. } else {
  1837. if (newUtc >= sSettings.sSNTP.timeZone) {
  1838. TM_RTC_Correction(fabs(sSettings.sSNTP.timeZone) - fabs(newUtc));
  1839. } else {
  1840. TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone);
  1841. }
  1842. }
  1843. } else if (sSettings.sSNTP.timeZone == 0) {
  1844. TM_RTC_Correction(newUtc);
  1845. }
  1846. sSettings.sSNTP.timeZone = newUtc; // atof(str);
  1847. //TM_RTC_Correction(sSettings.sSNTP.timeZone);
  1848. }
  1849. #ifdef INOUTS_ENABLE
  1850. // ************************************************************************** //
  1851. // Параметры реле/сухих контактов
  1852. /**
  1853. * @brief Тип действий при срабатывание сухих контактов
  1854. */
  1855. void SetDINTypeActStr(char *str, uint8_t num)
  1856. {
  1857. sSettings.sInOuts.din_type_act[num] = atoi(str);
  1858. }
  1859. /**
  1860. * @brief Тип действий при срабатывание сухих контактов
  1861. */
  1862. void SetDIN1TypeActStr(char *str)
  1863. {
  1864. SetDINTypeActStr(str, 0);
  1865. }
  1866. /**
  1867. * @brief Источник срабатывания реле
  1868. */
  1869. void SetROTypeActStr(char *str, uint8_t num)
  1870. {
  1871. static uint8_t OldROtype_Sourse[2] = {0};
  1872. OldROtype_Sourse[num] = sSettings.sInOuts.ro_type_source[num];
  1873. sSettings.sInOuts.ro_type_source[num] = atoi(str);
  1874. if (OldROtype_Sourse[num] != sSettings.sInOuts.ro_type_source[num]) {
  1875. SetROInt(0, num);
  1876. }
  1877. }
  1878. /**
  1879. * @brief Источник срабатывания реле 1
  1880. */
  1881. void SetRO1TypeActStr(char *str)
  1882. {
  1883. SetROTypeActStr(str, 0);
  1884. }
  1885. /**
  1886. * @brief Источник срабатывания реле 2
  1887. */
  1888. void SetRO2TypeActStr(char *str)
  1889. {
  1890. SetROTypeActStr(str, 1);
  1891. }
  1892. #ifdef HARDWARE_BT6707
  1893. /**
  1894. * @brief Источник срабатывания реле 3
  1895. */
  1896. void SetRO3TypeActStr(char *str)
  1897. {
  1898. SetROTypeActStr(str, 2);
  1899. }
  1900. #endif
  1901. /**
  1902. * @brief
  1903. */
  1904. void SetROStr(char *str, uint8_t num)
  1905. {
  1906. set_state_douts((DOUT1 + num), atoi(str));
  1907. }
  1908. /**
  1909. * @brief
  1910. */
  1911. void SetROInt(uint8_t val, uint8_t num)
  1912. {
  1913. set_state_douts((DOUT1 + num), val);
  1914. }
  1915. #endif
  1916. // ************************************************************************** //
  1917. // Параметры настройки ИБП
  1918. /**
  1919. * @brief Минимальное напряжение на ячейках АКБ
  1920. */
  1921. void SetUPSVoltCellMinStr(char *str)
  1922. {
  1923. sSettings.UPS_Setting.Ucellmin = atof(str);
  1924. }
  1925. /**
  1926. * @brief Минимальное напряжение на ячейках АКБ
  1927. */
  1928. void SetUPSVoltCellMinInt(float value)
  1929. {
  1930. sSettings.UPS_Setting.Ucellmin = value;
  1931. }
  1932. /**
  1933. * @brief Максимальное напряжение на ячейках АКБ
  1934. */
  1935. void SetUPSVoltCellMaxStr(char *str)
  1936. {
  1937. sSettings.UPS_Setting.Ucellmax = atof(str);
  1938. }
  1939. /**
  1940. * @brief Максимальное напряжение на ячейках АКБ
  1941. */
  1942. void SetUPSVoltCellMaxInt(float value)
  1943. {
  1944. sSettings.UPS_Setting.Ucellmax = value;
  1945. }
  1946. /**
  1947. * @brief Дата установки АКБ
  1948. */
  1949. void SetDataSetAKBStr(char *str)
  1950. {
  1951. TM_RTC_t tmp_data;
  1952. char str_data[3];
  1953. if (str[0] != 0) {
  1954. memset(str_data, 0, 3);
  1955. memset(&tmp_data, 0, sizeof(tmp_data));
  1956. str += 2;
  1957. strncpy(str_data, str, 2);
  1958. tmp_data.year = atoi(str_data);
  1959. memset(str_data, 0, 3);
  1960. strncat(str_data, (str + 3), 2);
  1961. tmp_data.month = atoi(str_data);
  1962. memset(str_data, 0, 3);
  1963. strncat(str_data, (str + 6), 2);
  1964. tmp_data.date = atoi(str_data);
  1965. sSettings.UPS_Setting.set_data = TM_RTC_GetUnixTimeStamp(&tmp_data);
  1966. } else {
  1967. sSettings.UPS_Setting.set_data = 0;
  1968. }
  1969. }
  1970. /**
  1971. * @brief Срок службы АКБ
  1972. */
  1973. void SetLifeTimeAKBStr(char *str)
  1974. {
  1975. sSettings.UPS_Setting.life_time = atof(str);
  1976. }
  1977. /**
  1978. * @brief Номинальное напряжение АКБ
  1979. */
  1980. void SetVoltageAKBNominalStr(char *str)
  1981. {
  1982. sSettings.UPS_Setting.Uakb = atof(str);
  1983. }
  1984. /**
  1985. * @brief Полная мощность АКБ
  1986. */
  1987. void SetUPSPowerStr(char *str)
  1988. {
  1989. sSettings.UPS_Setting.ups_power = atof(str);
  1990. }
  1991. /**
  1992. * @brief Емкость АКБ
  1993. */
  1994. void SetCapacityNominalAKBStr(char *str)
  1995. {
  1996. sSettings.UPS_Setting.common_capacity = atoi(str);
  1997. }
  1998. // ************************************************************************** //
  1999. // Параметры менеджера аварий
  2000. /**
  2001. * @brief Верхняя граница VAC
  2002. */
  2003. void SetVACAlarmHighRangeStr(char *str)
  2004. {
  2005. sSettings.sAlarmManager.ac_output_range.high = atof(str);
  2006. }
  2007. /**
  2008. * @brief Верхняя граница VAC
  2009. */
  2010. void SetVACAlarmHighRangeInt(float value)
  2011. {
  2012. sSettings.sAlarmManager.ac_output_range.high = value;
  2013. }
  2014. /**
  2015. * @brief Нижняя граница VAC
  2016. */
  2017. void SetVACAlarmLowRangeStr(char *str)
  2018. {
  2019. sSettings.sAlarmManager.ac_output_range.low = atof(str);
  2020. }
  2021. /**
  2022. * @brief Нижняя граница VAC
  2023. */
  2024. void SetVACAlarmLowRangeInt(float value)
  2025. {
  2026. sSettings.sAlarmManager.ac_output_range.low = value;
  2027. }
  2028. /**
  2029. * @brief Гистерезис (VAC)
  2030. */
  2031. void SetVACAlarmHisteStr(char *str)
  2032. {
  2033. sSettings.sAlarmManager.ac_output_range.hyst = atof(str);
  2034. }
  2035. /**
  2036. * @brief Гистерезис (VAC)
  2037. */
  2038. void SetVACAlarmHisteInt(float value)
  2039. {
  2040. sSettings.sAlarmManager.ac_output_range.hyst = value;
  2041. }
  2042. /**
  2043. * @brief Верхняя граница температуры
  2044. */
  2045. void SetTemperatureAlarmHighRangeStr(char *str)
  2046. {
  2047. sSettings.sAlarmManager.Temprature_range.high = atof(str);
  2048. }
  2049. /**
  2050. * @brief Верхняя граница температуры
  2051. */
  2052. void SetTemperatureAlarmHighRangeInt(float value)
  2053. {
  2054. sSettings.sAlarmManager.Temprature_range.high = value;
  2055. }
  2056. /**
  2057. * @brief Нижняя граница температуры
  2058. */
  2059. void SetTemperatureAlarmLowRangeStr(char *str)
  2060. {
  2061. sSettings.sAlarmManager.Temprature_range.low = atof(str);
  2062. }
  2063. /**
  2064. * @brief Нижняя граница температуры
  2065. */
  2066. void SetTemperatureAlarmLowRangeInt(float value)
  2067. {
  2068. sSettings.sAlarmManager.Temprature_range.low = value;
  2069. }
  2070. /**
  2071. * @brief Гистерезис (температура)
  2072. */
  2073. void SetTemperatureAlarmHisteStr(char *str)
  2074. {
  2075. sSettings.sAlarmManager.Temprature_range.hyst = atof(str);
  2076. }
  2077. /**
  2078. * @brief Гистерезис (температура)
  2079. */
  2080. void SetTemperatureAlarmHisteInt(float value)
  2081. {
  2082. sSettings.sAlarmManager.Temprature_range.hyst = value;
  2083. }
  2084. /**
  2085. * @brief Верхняя граница нагрузки
  2086. */
  2087. void SetLoadAlarmHighRangeStr(char *str)
  2088. {
  2089. sSettings.sAlarmManager.load_range.high = atof(str);
  2090. }
  2091. /**
  2092. * @brief Верхняя граница нагрузки
  2093. */
  2094. void SetLoadAlarmHighRangeInt(float value)
  2095. {
  2096. sSettings.sAlarmManager.load_range.high = value;
  2097. }
  2098. /**
  2099. * @brief Гистерезис (нагрузки)
  2100. */
  2101. void SetLoadAlarmHistStr(char *str)
  2102. {
  2103. sSettings.sAlarmManager.load_range.hyst = atof(str);
  2104. }
  2105. /**
  2106. * @brief Гистерезис (нагрузки)
  2107. */
  2108. void SetLoadAlarmHistInt(float value)
  2109. {
  2110. sSettings.sAlarmManager.load_range.hyst = value;
  2111. }
  2112. void SetEmptyFuncStr(char *str)
  2113. {
  2114. }
  2115. /********************************* (C) РОТЕК **********************************/