parameters.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  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 "common_config.h"
  20. //#include "ups_params.h"
  21. #if defined HARDWARE_BT6702
  22. #ifdef PRINTF_STDLIB
  23. #include <stdio.h>
  24. #endif
  25. #ifdef PRINTF_CUSTOM
  26. #include "tinystdio.h"
  27. #endif
  28. #include <string.h>
  29. #include <stdlib.h>
  30. #include <math.h>
  31. #endif
  32. /**
  33. * @brief Структура для хранения состояний дискретных входов
  34. */
  35. //extern GPIO_INPUTS_t sGpioInputs;
  36. /**
  37. * @brief Общая структура настроек
  38. */
  39. extern SETTINGS_t sSettings;
  40. /**
  41. * @brief Структура для хранения временных сетевых настроек
  42. */
  43. extern WEB_PARAMS_t sTempWebParams;
  44. /**
  45. * @brief Флаг подтверждения новых сетевых параметров пользователем
  46. */
  47. extern bool fConfirmWebParams;
  48. // ************************************************************************** //
  49. // Параметры UPS
  50. /**
  51. * @brief
  52. */
  53. void GetLineFailBitStr(char *str, uint8_t *len)
  54. {
  55. /* if (upsParams.lineFailBit)
  56. *str = '1';
  57. else
  58. *str = '0';*/
  59. *len = 1;
  60. }
  61. /**
  62. * @brief
  63. */
  64. void GetLowBatteryBitStr(char *str, uint8_t *len)
  65. {
  66. /* if (upsParams.lowBatteryBit)
  67. *str = '1';
  68. else
  69. *str = '0';
  70. *len = 1;*/
  71. }
  72. /**
  73. * @brief
  74. */
  75. void GetInputFreqStr(char *str, uint8_t *len)
  76. {
  77. /* sprintf(str, "%0.1f", upsParams.inputFrequency);
  78. //strcpy(str, upsParamsStr.inputFrequency);*/
  79. *len = strlen(str);
  80. }
  81. /**
  82. * @brief
  83. */
  84. void GetOutputFreqStr(char *str, uint8_t *len)
  85. {
  86. // sprintf(str, "%0.1f", upsParams.outputFrequency);
  87. //strcpy(str, upsParamsStr.outputFrequency);
  88. *len = strlen(str);
  89. }
  90. /**
  91. * @brief
  92. */
  93. void GetInputVoltageStr(char *str, uint8_t *len)
  94. {
  95. // sprintf(str, "%0.1f", upsParams.inputVoltage);
  96. //strcpy(str, upsParamsStr.inputVoltage);
  97. *len = strlen(str);
  98. }
  99. /**
  100. * @brief
  101. */
  102. void GetOutputVoltageStr(char *str, uint8_t *len)
  103. {
  104. //sprintf(str, "%0.1f", upsParams.outputVoltage);
  105. //strcpy(str, upsParamsStr.outputVoltage);
  106. *len = strlen(str);
  107. }
  108. /**
  109. * @brief
  110. */
  111. void GetPowerStr(char *str, uint8_t *len)
  112. {
  113. // sprintf(str, "%0.1f", upsParams.power);
  114. //sprintf(str, upsParamsStr.power);
  115. *len = strlen(str);
  116. }
  117. /**
  118. * @brief
  119. */
  120. void GetBatCapacityStr(char *str, uint8_t *len)
  121. {
  122. // sprintf(str, "%0.1f", upsParams.batteryCapacity);
  123. //strcpy(str, upsParamsStr.batteryCapacity);
  124. *len = strlen(str);
  125. }
  126. /**
  127. * @brief
  128. */
  129. void GetRuntimeStr(char *str, uint8_t *len)
  130. {
  131. // sprintf(str, "%d", upsParams.runtime);
  132. //strcpy(str, upsParamsStr.runtime);
  133. *len = strlen(str);
  134. }
  135. /**
  136. * @brief
  137. */
  138. void GetInternalTempStr(char *str, uint8_t *len)
  139. {
  140. // sprintf(str, "%0.1f", upsParams.temperature);
  141. //strcpy(str, upsParamsStr.temperature);
  142. *len = strlen(str);
  143. }
  144. /**
  145. * @brief
  146. */
  147. void GetLoadMonitorStr(char *str, uint8_t *len)
  148. {
  149. /* // if (upsParams.monitor_power)
  150. *str = '1';
  151. else
  152. *str = '0';*/
  153. *len = 1;
  154. }
  155. /**
  156. * @brief
  157. */
  158. void GetTempMonitorStr(char *str, uint8_t *len)
  159. {
  160. /*// if (upsParams.monitor_temperature)
  161. *str = '1';
  162. else
  163. *str = '0';*/
  164. *len = 1;
  165. }
  166. /**
  167. * @brief
  168. */
  169. void GetConnectMonitorStr(char *str, uint8_t *len)
  170. {
  171. // В WEB флаг коннекта инвернысный!!!
  172. // 0 - коннект есть, 1 - нет
  173. /* if (upsParams.connect)
  174. *str = '0';
  175. else
  176. *str = '1';*/
  177. *len = 1;
  178. }
  179. // ************************************************************************** //
  180. // Alarms
  181. /**
  182. * @brief Индикация аварийных ситуаций
  183. */
  184. void GetAlarmStr(char *str, uint8_t *len)
  185. {
  186. strncpy(str, 0, 1);
  187. *len = 1;
  188. //strncpy(str, (char*)&sAlarm, sizeof(sAlarm));
  189. //*len = sizeof(sAlarm);
  190. }
  191. // ************************************************************************** //
  192. // Информация
  193. /**
  194. * @brief Время работы устройства
  195. */
  196. void GetWorkTimeStr(char *str, uint8_t *len)
  197. {
  198. u32_t tick;
  199. uint16_t day;
  200. uint8_t hour;
  201. uint8_t min;
  202. snmp_get_sysuptime(&tick);
  203. day = tick/8640000;
  204. tick = tick%8640000;
  205. hour = tick/360000;
  206. tick = tick%360000;
  207. min = tick/6000;
  208. sprintf(str, "%d дн. %d ч. %d мин.", day, hour, min);
  209. *len = strlen(str);
  210. }
  211. /**
  212. * @brief Модель устройства
  213. */
  214. void GetModelStr(char *str, uint8_t *len)
  215. {
  216. *len = strlen(sSettings.sSnmp.sysName);
  217. strncpy(str, sSettings.sSnmp.sysName, *len);
  218. }
  219. /**
  220. * @brief Дата производства
  221. */
  222. void GetProductionDataStr(char *str, uint8_t *len)
  223. {
  224. *len = strlen(sSettings.sInfo.productionData);
  225. strncpy(str, sSettings.sInfo.productionData, *len);
  226. }
  227. /**
  228. * @brief Версия ПО
  229. */
  230. void GetVersionStr(char *str, uint8_t *len) // +
  231. {
  232. *len = strlen(VERSION);
  233. strncpy(str, VERSION, *len);
  234. }
  235. /**
  236. * @brief MAC адрес устройства
  237. */
  238. void GetMacStr(char *str, uint8_t *len)
  239. {
  240. *len = strlen(sSettings.sInfo.mac);
  241. strncpy(str, sSettings.sInfo.mac, *len);
  242. }
  243. /**
  244. * @brief Серийный номер устройства
  245. */
  246. void GetSerialNumberStr(char *str, uint8_t *len)
  247. {
  248. *len = strlen(sSettings.sInfo.serialNumber);
  249. strncpy(str, sSettings.sInfo.serialNumber, *len);
  250. }
  251. /**
  252. * @brief Владелец устройства
  253. */
  254. void GetOwnerStr(char *str, uint8_t *len)
  255. {
  256. *len = strlen(sSettings.sSnmp.sysContact);
  257. strncpy(str, sSettings.sSnmp.sysContact, *len);
  258. }
  259. /**
  260. * @brief Местоположение устройства
  261. */
  262. void GetLocationStr(char *str, uint8_t *len)
  263. {
  264. *len = strlen(sSettings.sSnmp.sysLocation);
  265. strncpy(str, sSettings.sSnmp.sysLocation, *len);
  266. }
  267. /**
  268. * @brief Комментарии
  269. */
  270. void GetCommentsStr(char *str, uint8_t *len)
  271. {
  272. *len = strlen(sSettings.sInfo.comments);
  273. strncpy(str, sSettings.sInfo.comments, *len);
  274. }
  275. // ************************************************************************** //
  276. // Параметры WEB
  277. /**
  278. * @brief Текущий IP адрес
  279. */
  280. void GetIpStr(char *str, uint8_t *len)
  281. {
  282. /* Если сейчас временные настройки */
  283. if (sSettings.sFlags.netsettingsChanged)
  284. sprintf(str, "%s", sSettings.sWebTempParams.ip);
  285. else
  286. sprintf(str, "%s", sSettings.sWebParams.ip);
  287. *len = strlen(str);
  288. }
  289. /**
  290. * @brief Текущий шлюз
  291. */
  292. void GetGatewayStr(char *str, uint8_t *len)
  293. {
  294. /* Если сейчас временные настройки */
  295. if (sSettings.sFlags.netsettingsChanged)
  296. sprintf(str, "%s", sSettings.sWebTempParams.gate);
  297. else
  298. sprintf(str, "%s", sSettings.sWebParams.gate);
  299. *len = strlen(str);
  300. }
  301. /**
  302. * @brief Текущая маска подсети
  303. */
  304. void GetMaskStr(char *str, uint8_t *len)
  305. {
  306. /* Если сейчас временные настройки */
  307. if (sSettings.sFlags.netsettingsChanged)
  308. sprintf(str, "%s", sSettings.sWebTempParams.mask);
  309. else
  310. sprintf(str, "%s", sSettings.sWebParams.mask);
  311. *len = strlen(str);
  312. }
  313. /**
  314. * @brief Настройка DHCP
  315. */
  316. void GetDhcpStateStr(char *str, uint8_t *len)
  317. {
  318. /* Если сейчас временные настройки */
  319. if (sSettings.sFlags.netsettingsChanged)
  320. {
  321. if (sSettings.sWebTempParams.dhcpEnable)
  322. *str = '1';
  323. else
  324. *str = '0';
  325. }
  326. else
  327. {
  328. if (sSettings.sWebParams.dhcpEnable)
  329. *str = '1';
  330. else
  331. *str = '0';
  332. }
  333. *len = 1;
  334. }
  335. // ************************************************************************** //
  336. // Параметры SNMP
  337. /**
  338. * @brief Текущее community для чтения
  339. */
  340. void GetReadCommunity(char *str, uint8_t *len)
  341. {
  342. sprintf(str, "%s", sSettings.sSnmp.readCommunity);
  343. *len = strlen(str);
  344. }
  345. /**
  346. * @brief Текущее community для записи
  347. */
  348. void GetWriteCommunity(char *str, uint8_t *len)
  349. {
  350. sprintf(str, "%s", sSettings.sSnmp.writeCommunity);
  351. *len = strlen(str);
  352. }
  353. /**
  354. * @brief IP SNMP менеджера
  355. */
  356. void GetManagerIp(char *str, uint8_t *len)
  357. {
  358. sprintf(str, "%s", sSettings.sSnmp.managerIP);
  359. *len = strlen(str);
  360. }
  361. void GetManagerIp2(char *str, uint8_t *len)
  362. {
  363. sprintf(str, "%s", sSettings.sSnmp.managerIP2);
  364. *len = strlen(str);
  365. }
  366. void GetManagerIp3(char *str, uint8_t *len)
  367. {
  368. sprintf(str, "%s", sSettings.sSnmp.managerIP3);
  369. *len = strlen(str);
  370. }
  371. // ************************************************************************** //
  372. // Сброс настроек и перезагрузка
  373. /**
  374. * @brief Произошел сброс настроек
  375. */
  376. void GetRestore(char *str, uint8_t *len) // +
  377. {
  378. sprintf(str, "%s", "1");
  379. *len = 1;
  380. }
  381. /**
  382. * @brief Произошла перезагрузка
  383. */
  384. void GetReboot(char *str, uint8_t *len) // +
  385. {
  386. sprintf(str, "%s", "1");
  387. *len = 1;
  388. }
  389. // ************************************************************************** //
  390. // Флаги
  391. /**
  392. * @brief Вернуть признак изменения сетевых параметров
  393. */
  394. void GetWebReinitFlag(char *str, uint8_t *len)
  395. {
  396. if (sSettings.sFlags.netsettingsChanged)
  397. {
  398. sprintf(str, "%s", "true");
  399. *len = strlen(str);
  400. }
  401. else
  402. {
  403. sprintf(str, "%s", "false");
  404. *len = strlen(str);
  405. }
  406. }
  407. // ************************************************************************** //
  408. // Установка параметрв
  409. // ************************************************************************** //
  410. /**
  411. * @brief Установить признак обновления ПО.
  412. */
  413. void SetLoadMode(void)
  414. {
  415. sSettings.bootParams.loadMode = 1;
  416. }
  417. /**
  418. * @brief Установить признак изменения сетевых параметров
  419. */
  420. void SetWebReinitFlag(bool value)
  421. {
  422. sSettings.sFlags.netsettingsChanged = value;
  423. }
  424. /**
  425. * @brief Установить флаг подтверждения сетевых настроек пользователем
  426. */
  427. void SetConfirmWebParamsFlag(void)
  428. {
  429. fConfirmWebParams = true;
  430. }
  431. // ************************************************************************** //
  432. // Сетевые параметры
  433. /**
  434. * @brief IP адрес
  435. */
  436. void SetIPStr(char *str)
  437. {
  438. //strcpy(sSettings.sWebParams.ip, str);
  439. strcpy(sSettings.sWebTempParams.ip, str);
  440. }
  441. /**
  442. * @brief Шлюз
  443. */
  444. void SetGatewayStr(char *str)
  445. {
  446. //strcpy(sSettings.sWebParams.gate, str);
  447. strcpy(sSettings.sWebTempParams.gate, str);
  448. }
  449. /**
  450. * @brief Текущая маска подсети
  451. */
  452. void SetMaskStr(char *str)
  453. {
  454. //strcpy(sSettings.sWebParams.mask, str);
  455. strcpy(sSettings.sWebTempParams.mask, str);
  456. }
  457. /**
  458. * @brief Настройка DHCP
  459. */
  460. void SetDhcpStateStr(char *str)
  461. {
  462. if (strncmp(str, "on", 2) == 0)
  463. //sSettings.sWebParams.dhcpEnable = 1;
  464. sSettings.sWebTempParams.dhcpEnable = 1;
  465. else
  466. //sSettings.sWebParams.dhcpEnable = 0;
  467. sSettings.sWebTempParams.dhcpEnable = 0;
  468. }
  469. // ************************************************************************** //
  470. // Параметры SNMP
  471. /**
  472. * @brief Community для чтения
  473. */
  474. void SetReadCommunity(char *str)
  475. {
  476. strcpy(sSettings.sSnmp.readCommunity, str);
  477. }
  478. /**
  479. * @brief Community для записи
  480. */
  481. void SetWriteCommunity(char *str)
  482. {
  483. strcpy(sSettings.sSnmp.writeCommunity, str);
  484. }
  485. /**
  486. * @brief IP SNMP менеджера
  487. */
  488. void SetManagerIp(char *str)
  489. {
  490. strcpy(sSettings.sSnmp.managerIP, str);
  491. SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
  492. }
  493. void SetManagerIp2(char *str)
  494. {
  495. strcpy(sSettings.sSnmp.managerIP2, str);
  496. SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
  497. }
  498. void SetManagerIp3(char *str)
  499. {
  500. strcpy(sSettings.sSnmp.managerIP3, str);
  501. SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
  502. }
  503. /**
  504. * @brief Установить владельца
  505. */
  506. void SetOwner(char *str)
  507. {
  508. strcpy(sSettings.sSnmp.sysContact, str);
  509. SNMP_SetSysContact(sSettings.sSnmp.sysContact);
  510. SNMP_SetObjDescr();
  511. }
  512. /**
  513. * @brief Установить местоположение
  514. */
  515. void SetLocation(char *str)
  516. {
  517. strcpy(sSettings.sSnmp.sysLocation, str);
  518. SNMP_SetSysLocation(sSettings.sSnmp.sysLocation);
  519. }
  520. /**
  521. * @brief Установить комментарий
  522. */
  523. void SetComment(char *str)
  524. {
  525. strcpy(sSettings.sInfo.comments, str);
  526. }
  527. /********************************* (C) РОТЕК **********************************/