private_mib_bt6709.c 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006
  1. /*
  2. * private_mib_bt6709.c
  3. *
  4. * Created on: 03.10.2018
  5. * Author: balbekova
  6. */
  7. #if defined HARDWARE_BT6709
  8. #include "stm32f4xx.h"
  9. #include "private_mib.h"
  10. #include "parameters.h"
  11. #include "settings_api.h"
  12. #include "log.h"
  13. #include "megatec.h"
  14. #include "control_symbol.h"
  15. #include "sntp_api.h"
  16. #include "web_params_api.h"
  17. #include "FreeRTOS.h"
  18. #include "task.h"
  19. #include <ctype.h>
  20. #ifdef PRINTF_STDLIB
  21. #include <stdio.h>
  22. #endif
  23. #ifdef PRINTF_CUSTOM
  24. #include "tinystdio.h"
  25. #endif
  26. #include "lwip/apps/snmp_scalar.h"
  27. #include "lwip/apps/snmp.h"
  28. //#include "snmp_core.h"
  29. extern struct snmp_mib mib2;
  30. /**
  31. * @brief Общая структура настроек
  32. */
  33. extern SETTINGS_t sSettings;
  34. static s16_t signal_get_value(struct snmp_node_instance *instance, void *value);
  35. static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value);
  36. static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value);
  37. /* signal .1.3.6.1.4.1.41752.911.8.1.49 */
  38. static const struct snmp_scalar_node signal49 = SNMP_SCALAR_CREATE_NODE_READONLY(49, SNMP_ASN1_TYPE_OCTET_STRING,
  39. signal_get_value);
  40. /* signal .1.3.6.1.4.1.41752.911.8.1.48 */
  41. static const struct snmp_scalar_node signal48 = SNMP_SCALAR_CREATE_NODE_READONLY(48, SNMP_ASN1_TYPE_OCTET_STRING,
  42. signal_get_value);
  43. /* signal .1.3.6.1.4.1.41752.911.8.1.47 */
  44. static const struct snmp_scalar_node signal47 = SNMP_SCALAR_CREATE_NODE_READONLY(47, SNMP_ASN1_TYPE_OCTET_STRING,
  45. signal_get_value);
  46. /* signal .1.3.6.1.4.1.41752.911.8.1.46 */
  47. static const struct snmp_scalar_node signal46 = SNMP_SCALAR_CREATE_NODE_READONLY(46, SNMP_ASN1_TYPE_OCTET_STRING,
  48. signal_get_value);
  49. /* signal .1.3.6.1.4.1.41752.911.8.1.45 */
  50. static const struct snmp_scalar_node signal45 = SNMP_SCALAR_CREATE_NODE_READONLY(45, SNMP_ASN1_TYPE_OCTET_STRING,
  51. signal_get_value);
  52. /* signal .1.3.6.1.4.1.41752.911.8.1.44 */
  53. static const struct snmp_scalar_node signal44 = SNMP_SCALAR_CREATE_NODE_READONLY(44, SNMP_ASN1_TYPE_OCTET_STRING,
  54. signal_get_value);
  55. /* signal .1.3.6.1.4.1.41752.911.8.1.43 */
  56. static const struct snmp_scalar_node signal43 = SNMP_SCALAR_CREATE_NODE(43, SNMP_NODE_INSTANCE_READ_WRITE,
  57. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  58. /* signal .1.3.6.1.4.1.41752.911.8.1.42 */
  59. static const struct snmp_scalar_node signal42 = SNMP_SCALAR_CREATE_NODE(42, SNMP_NODE_INSTANCE_READ_WRITE,
  60. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  61. /* signal .1.3.6.1.4.1.41752.911.8.1.41 */
  62. static const struct snmp_scalar_node signal41 = SNMP_SCALAR_CREATE_NODE(41, SNMP_NODE_INSTANCE_READ_WRITE,
  63. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  64. /* signal .1.3.6.1.4.1.41752.911.8.1.40 */
  65. static const struct snmp_scalar_node signal40 = SNMP_SCALAR_CREATE_NODE(40, SNMP_NODE_INSTANCE_READ_WRITE,
  66. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  67. /* signal .1.3.6.1.4.1.41752.911.8.1.39 */
  68. static const struct snmp_scalar_node signal39 = SNMP_SCALAR_CREATE_NODE(39, SNMP_NODE_INSTANCE_READ_WRITE,
  69. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  70. /* signal .1.3.6.1.4.1.41752.911.8.1.38 */
  71. static const struct snmp_scalar_node signal38 = SNMP_SCALAR_CREATE_NODE(38, SNMP_NODE_INSTANCE_READ_WRITE,
  72. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  73. /* signal .1.3.6.1.4.1.41752.911.8.1.37 */
  74. static const struct snmp_scalar_node signal37 = SNMP_SCALAR_CREATE_NODE(37, SNMP_NODE_INSTANCE_READ_WRITE,
  75. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  76. /* signal .1.3.6.1.4.1.41752.911.8.1.36 */
  77. static const struct snmp_scalar_node signal36 = SNMP_SCALAR_CREATE_NODE(36, SNMP_NODE_INSTANCE_READ_WRITE,
  78. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  79. /* signal .1.3.6.1.4.1.41752.911.8.1.22 */
  80. static const struct snmp_scalar_node signal35 = SNMP_SCALAR_CREATE_NODE(35, SNMP_NODE_INSTANCE_READ_WRITE,
  81. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  82. /* signal .1.3.6.1.4.1.41752.911.8.1.34 */
  83. static const struct snmp_scalar_node signal34 = SNMP_SCALAR_CREATE_NODE(34, SNMP_NODE_INSTANCE_READ_WRITE,
  84. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  85. /* signal .1.3.6.1.4.1.41752.911.8.1.33 */
  86. static const struct snmp_scalar_node signal33 = SNMP_SCALAR_CREATE_NODE(33, SNMP_NODE_INSTANCE_READ_WRITE,
  87. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  88. /* signal .1.3.6.1.4.1.41752.911.8.1.32 */
  89. static const struct snmp_scalar_node signal32 = SNMP_SCALAR_CREATE_NODE(32, SNMP_NODE_INSTANCE_READ_WRITE,
  90. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  91. /* signal .1.3.6.1.4.1.41752.911.8.1.31 */
  92. static const struct snmp_scalar_node signal31 = SNMP_SCALAR_CREATE_NODE(31, SNMP_NODE_INSTANCE_READ_WRITE,
  93. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  94. /* signal .1.3.6.1.4.1.41752.911.8.1.22 */
  95. static const struct snmp_scalar_node signal30 = SNMP_SCALAR_CREATE_NODE(30, SNMP_NODE_INSTANCE_READ_WRITE,
  96. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  97. /* signal .1.3.6.1.4.1.41752.911.8.1.29 */
  98. static const struct snmp_scalar_node signal29 = SNMP_SCALAR_CREATE_NODE(29, SNMP_NODE_INSTANCE_READ_WRITE,
  99. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  100. /* signal .1.3.6.1.4.1.41752.911.8.1.28 */
  101. static const struct snmp_scalar_node signal28 = SNMP_SCALAR_CREATE_NODE(28, SNMP_NODE_INSTANCE_READ_WRITE,
  102. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  103. /* signal .1.3.6.1.4.1.41752.911.8.1.27 */
  104. static const struct snmp_scalar_node signal27 = SNMP_SCALAR_CREATE_NODE_READONLY(27, SNMP_ASN1_TYPE_OCTET_STRING,
  105. signal_get_value);
  106. /* signal .1.3.6.1.4.1.41752.911.8.1.26 */
  107. static const struct snmp_scalar_node signal26 = SNMP_SCALAR_CREATE_NODE_READONLY(26, SNMP_ASN1_TYPE_OCTET_STRING,
  108. signal_get_value);
  109. /* signal .1.3.6.1.4.1.41752.911.8.1.25 */
  110. static const struct snmp_scalar_node signal25 = SNMP_SCALAR_CREATE_NODE_READONLY(25, SNMP_ASN1_TYPE_OCTET_STRING,
  111. signal_get_value);
  112. /* signal .1.3.6.1.4.1.41752.911.8.1.24 */
  113. static const struct snmp_scalar_node signal24 = SNMP_SCALAR_CREATE_NODE_READONLY(24, SNMP_ASN1_TYPE_OCTET_STRING,
  114. signal_get_value);
  115. /* signal .1.3.6.1.4.1.41752.911.8.1.23 */
  116. static const struct snmp_scalar_node signal23 = SNMP_SCALAR_CREATE_NODE_READONLY(23, SNMP_ASN1_TYPE_OCTET_STRING,
  117. signal_get_value);
  118. /* signal .1.3.6.1.4.1.41752.911.8.1.22 */
  119. static const struct snmp_scalar_node signal22 = SNMP_SCALAR_CREATE_NODE(22, SNMP_NODE_INSTANCE_READ_WRITE,
  120. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  121. /* signal .1.3.6.1.4.1.41752.911.8.1.21 */
  122. static const struct snmp_scalar_node signal21 = SNMP_SCALAR_CREATE_NODE(21, SNMP_NODE_INSTANCE_READ_WRITE,
  123. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  124. /* signal .1.3.6.1.4.1.41752.911.8.1.20 */
  125. static const struct snmp_scalar_node signal20 = SNMP_SCALAR_CREATE_NODE(20, SNMP_NODE_INSTANCE_READ_WRITE,
  126. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  127. /* signal .1.3.6.1.4.1.41752.911.8.1.19 */
  128. static const struct snmp_scalar_node signal19 = SNMP_SCALAR_CREATE_NODE(19, SNMP_NODE_INSTANCE_READ_WRITE,
  129. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  130. /* signal .1.3.6.1.4.1.41752.911.8.1.18 */
  131. static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE(18, SNMP_NODE_INSTANCE_READ_WRITE,
  132. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  133. /* signal .1.3.6.1.4.1.41752.911.8.1.17 */
  134. static const struct snmp_scalar_node signal17 = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_OCTET_STRING,
  135. signal_get_value);
  136. /* signal .1.3.6.1.4.1.41752.911.8.1.16 */
  137. static const struct snmp_scalar_node signal16 = SNMP_SCALAR_CREATE_NODE_READONLY(16, SNMP_ASN1_TYPE_OCTET_STRING,
  138. signal_get_value);
  139. /* signal .1.3.6.1.4.1.41752.911.8.1.15 */
  140. static const struct snmp_scalar_node signal15 = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_OCTET_STRING,
  141. signal_get_value);
  142. /* signal .1.3.6.1.4.1.41752.911.8.1.14 */
  143. static const struct snmp_scalar_node signal14 = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_OCTET_STRING,
  144. signal_get_value);
  145. /* signal .1.3.6.1.4.1.41752.911.8.1.13 */
  146. static const struct snmp_scalar_node signal13 = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_OCTET_STRING,
  147. signal_get_value);
  148. /* signal .1.3.6.1.4.1.41752.911.8.1.12 */
  149. static const struct snmp_scalar_node signal12 = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_OCTET_STRING,
  150. signal_get_value);
  151. /* signal .1.3.6.1.4.1.41752.911.8.1.11 */
  152. static const struct snmp_scalar_node signal11 = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_OCTET_STRING,
  153. signal_get_value);
  154. /* signal .1.3.6.1.4.1.41752.911.8.1.10 */
  155. static const struct snmp_scalar_node signal10 = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_OCTET_STRING,
  156. signal_get_value);
  157. /* signal .1.3.6.1.4.1.41752.911.8.1.9 */
  158. static const struct snmp_scalar_node signal9 = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_OCTET_STRING,
  159. signal_get_value);
  160. /* signal .1.3.6.1.4.1.41752.911.8.1.8 */
  161. static const struct snmp_scalar_node signal8 = SNMP_SCALAR_CREATE_NODE(8, SNMP_NODE_INSTANCE_WRITE_ONLY,
  162. SNMP_ASN1_TYPE_OCTET_STRING, NULL, signal_set_test, signal_set_value);
  163. /* signal .1.3.6.1.4.1.41752.911.8.1.7 */
  164. static const struct snmp_scalar_node signal7 = SNMP_SCALAR_CREATE_NODE(7, SNMP_NODE_INSTANCE_WRITE_ONLY,
  165. SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
  166. /* signal .1.3.6.1.4.1.41752.911.8.1.6 */
  167. static const struct snmp_scalar_node signal6 = SNMP_SCALAR_CREATE_NODE_READONLY(6, SNMP_ASN1_TYPE_OCTET_STRING,
  168. signal_get_value);
  169. /* signal .1.3.6.1.4.1.41752.911.8.1.5 */
  170. static const struct snmp_scalar_node signal5 = SNMP_SCALAR_CREATE_NODE_READONLY(5, SNMP_ASN1_TYPE_OCTET_STRING,
  171. signal_get_value);
  172. /* signal .1.3.6.1.4.1.41752.911.8.1.4 */
  173. static const struct snmp_scalar_node signal4 = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_OCTET_STRING,
  174. signal_get_value);
  175. /* signal .1.3.6.1.4.1.41752.911.8.1.3 */
  176. static const struct snmp_scalar_node signal3 = SNMP_SCALAR_CREATE_NODE(3, SNMP_NODE_INSTANCE_WRITE_ONLY,
  177. SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
  178. /* signal .1.3.6.1.4.1.41752.911.8.1.2 */
  179. static const struct snmp_scalar_node signal2 = SNMP_SCALAR_CREATE_NODE(2, SNMP_NODE_INSTANCE_WRITE_ONLY,
  180. SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
  181. /* signal .1.3.6.1.4.1.41752.911.8.1.1 */
  182. static const struct snmp_scalar_node signal1 = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_OCTET_STRING,
  183. signal_get_value);
  184. // signals .1.3.6.1.4.1.41752.911.8.1
  185. static const struct snmp_node *const signals_nodes[] = {
  186. &signal1.node.node,
  187. &signal2.node.node,
  188. &signal3.node.node,
  189. &signal4.node.node,
  190. &signal5.node.node,
  191. &signal6.node.node,
  192. &signal7.node.node,
  193. &signal8.node.node,
  194. &signal9.node.node,
  195. &signal10.node.node,
  196. &signal11.node.node,
  197. &signal12.node.node,
  198. &signal13.node.node,
  199. &signal14.node.node,
  200. &signal15.node.node,
  201. &signal16.node.node,
  202. &signal17.node.node,
  203. &signal18.node.node,
  204. &signal19.node.node,
  205. &signal20.node.node,
  206. &signal21.node.node,
  207. &signal22.node.node,
  208. &signal23.node.node,
  209. &signal24.node.node,
  210. &signal25.node.node,
  211. &signal26.node.node,
  212. &signal27.node.node,
  213. &signal28.node.node,
  214. &signal29.node.node,
  215. &signal30.node.node,
  216. &signal31.node.node,
  217. &signal32.node.node,
  218. &signal33.node.node,
  219. &signal34.node.node,
  220. &signal35.node.node,
  221. &signal36.node.node,
  222. &signal37.node.node,
  223. &signal38.node.node,
  224. &signal39.node.node,
  225. &signal40.node.node,
  226. &signal41.node.node,
  227. &signal42.node.node,
  228. &signal43.node.node,
  229. &signal44.node.node,
  230. &signal45.node.node,
  231. &signal46.node.node,
  232. &signal47.node.node,
  233. &signal48.node.node,
  234. &signal49.node.node,
  235. };
  236. static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
  237. // bt_6703 .1.3.6.1.4.1.41752.911.8
  238. static const struct snmp_node *const bt6709_nodes[] = {
  239. &signals_node.node
  240. };
  241. static const struct snmp_tree_node bt6709_node = SNMP_CREATE_TREE_NODE(8, bt6709_nodes);
  242. // swt .1.3.6.1.4.1.41752.911
  243. static const struct snmp_node *const swt_nodes[] = {
  244. &bt6709_node.node
  245. };
  246. static const struct snmp_tree_node swt_node = SNMP_CREATE_TREE_NODE(911, swt_nodes);
  247. // rotek .1.3.6.1.4.1.41752
  248. static const struct snmp_node *const rotek_nodes[] = {
  249. &swt_node.node
  250. };
  251. static const struct snmp_tree_node rotek_node = SNMP_CREATE_TREE_NODE(41752, rotek_nodes);
  252. // enterprises .1.3.6.1.4.1
  253. static const struct snmp_node *const enterprises_nodes[] = {
  254. &rotek_node.node
  255. };
  256. static const struct snmp_tree_node enterprises_node = SNMP_CREATE_TREE_NODE(1, enterprises_nodes);
  257. // private .1.3.6.1.4
  258. static const struct snmp_node *const private_nodes[] = {
  259. &enterprises_node.node
  260. };
  261. static const struct snmp_tree_node private_root = SNMP_CREATE_TREE_NODE(0, private_nodes);
  262. static const u32_t prvmib_base_oid[] = { 1, 3, 6, 1, 4 };
  263. static const struct snmp_mib private_mib = SNMP_MIB_CREATE(prvmib_base_oid, &private_root.node);
  264. void lwip_privmib_init(void)
  265. {
  266. static const struct snmp_mib *my_snmp_mibs[] = {&mib2, &private_mib};
  267. snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
  268. }
  269. uint32_t check_netsettings(char *addr, uint8_t len)
  270. {
  271. uint32_t val = 0;
  272. char c;
  273. uint8_t i, j;
  274. uint8_t cnt_dot = 0;
  275. uint8_t digit = 0;
  276. c = *addr;
  277. for (j = 0; j <= len; j ++) {
  278. if (isdigit(c)) {
  279. val = (val * 10) + (int)(c - '0');
  280. } else if (c == '.' || c == 0) {
  281. if (val > 0xff) {
  282. return 0;
  283. }
  284. cnt_dot ++;
  285. val = 0;
  286. } else {
  287. return 0;
  288. }
  289. c = *++addr;
  290. }
  291. if (cnt_dot != 4) {
  292. return 0;
  293. }
  294. return 1;
  295. }
  296. static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
  297. {
  298. u8_t *paramStr = (u8_t *)value;
  299. u8_t paramLength = 0;
  300. u32_t oid = instance->node->oid; // id сигнала
  301. switch (oid) {
  302. case 1: /* FWVersion */
  303. GetVersionStr((char *)paramStr, &paramLength);
  304. break;
  305. case 4: /* UPSModel*/
  306. GetUPSModelStr((char *)paramStr, &paramLength);
  307. break;
  308. case 5: /* UPSSerial*/
  309. GetUPSSerialStr((char *)paramStr, &paramLength);
  310. break;
  311. case 6: /* UPSVersion*/
  312. GetUPSVersionStr((char *)paramStr, &paramLength);
  313. break;
  314. case 9: /* IntTemp */
  315. GetInternalTempStr((char *)paramStr, &paramLength);
  316. break;
  317. case 10: /* InFreq */
  318. GetInputFreqStr((char *)paramStr, &paramLength);
  319. break;
  320. case 11: /* InVoltVAC */
  321. GetInputVoltageStr((char *)paramStr, &paramLength);
  322. break;
  323. case 12: /* OutVoltVAC */
  324. GetOutputVoltageStr((char *)paramStr, &paramLength);
  325. break;
  326. case 13: /* Power */
  327. GetPowerStr((char *)paramStr, &paramLength);
  328. break;
  329. case 14: /* BatCap */
  330. GetBatCapacityStr((char *)paramStr, &paramLength);
  331. break;
  332. case 15: /* BatTime */
  333. GetRuntimeStr((char *)paramStr, &paramLength);
  334. break;
  335. case 16: /* ConnectMonitor */
  336. GetConnectMonitorStr((char *)paramStr, &paramLength);
  337. break;
  338. case 17: /* Alarms */
  339. GetAlarmStr((char *)paramStr, &paramLength);
  340. break;
  341. case 18: /* IP server1 (traps) */
  342. GetManagerIp((char *)paramStr, &paramLength);
  343. break;
  344. case 19: /* IP server2 (traps) */
  345. GetManagerIp2((char *)paramStr, &paramLength);
  346. break;
  347. case 20: /* IP server3 (traps) */
  348. GetManagerIp3((char *)paramStr, &paramLength);
  349. break;
  350. case 21: /* IP server4 (traps) */
  351. GetManagerIp4((char *)paramStr, &paramLength);
  352. break;
  353. case 22: /* IP server5 (traps) */
  354. GetManagerIp5((char *)paramStr, &paramLength);
  355. break;
  356. case 23: /* WhiteList range 1 */
  357. GetWhiteListSTR((char *)paramStr, &paramLength, 0);
  358. break;
  359. case 24: /* WhiteList range 2 */
  360. GetWhiteListSTR((char *)paramStr, &paramLength, 1);
  361. break;
  362. case 25: /* WhiteList range 3 */
  363. GetWhiteListSTR((char *)paramStr, &paramLength, 2);
  364. break;
  365. case 26: /* WhiteList range 4 */
  366. GetWhiteListSTR((char *)paramStr, &paramLength, 3);
  367. break;
  368. case 27: /* WhiteList range 5 */
  369. GetWhiteListSTR((char *)paramStr, &paramLength, 4);
  370. break;
  371. case 28: /* UPSVoltCellMin */
  372. GetUPSVoltCellMinStr((char *)paramStr, &paramLength);
  373. break;
  374. case 29: /* UPSVoltCellMax */
  375. GetUPSVoltCellMaxStr((char *)paramStr, &paramLength);
  376. break;
  377. case 30: /* VACAlarmHighRange */
  378. GetVACAlarmHighRangeStr((char *)paramStr, &paramLength);
  379. break;
  380. case 31: /* VACAlarmLowRange */
  381. GetVACAlarmLowRangeStr((char *)paramStr, &paramLength);
  382. break;
  383. case 32: /* VACAlarmHistRange */
  384. GetVACAlarmHisteStr((char *)paramStr, &paramLength);
  385. break;
  386. case 33: /* TemperatureAlarmHighRange */
  387. GetTemperatureAlarmHighRangeStr((char *)paramStr, &paramLength);
  388. break;
  389. case 34: /* TemperatureAlarmLowRange */
  390. GetTemperatureAlarmLowRangeStr((char *)paramStr, &paramLength);
  391. break;
  392. case 35: /* TemperatureAlarmHistRange */
  393. GetTemperatureAlarmHisteStr((char *)paramStr, &paramLength);
  394. break;
  395. case 36: /* LoadAlarmHighRange */
  396. GetLoadAlarmHighRangeStr((char *)paramStr, &paramLength);
  397. break;
  398. case 37: /* LoadAlarmHistRange */
  399. GetLoadAlarmHisteStr((char *)paramStr, &paramLength);
  400. break;
  401. case 38: /* SntpTimeZone */
  402. GetSntpTimeZoneStr((char *)paramStr, &paramLength);
  403. break;
  404. case 39: /* SntpState */
  405. GetSntpStateStr((char *)paramStr, &paramLength);
  406. break;
  407. case 40: /* SntpServerIp */
  408. GetSntpServerIpStr((char *)paramStr, &paramLength);
  409. break;
  410. case 41: /* SntpLastData */
  411. GetSntpLastDataStr((char *)paramStr, &paramLength);
  412. break;
  413. case 42: /* Date */
  414. GetDateStr((char *)paramStr, &paramLength);
  415. break;
  416. case 43: /* Time */
  417. GetTimeStr((char *)paramStr, &paramLength);
  418. break;
  419. case 44: /* AKBTimeWork */
  420. GetAKBWorktimeStr((char *)paramStr, &paramLength);
  421. break;
  422. case 45: /* InputCurrent */
  423. GetInputCurrentStr((char *)paramStr, &paramLength);
  424. break;
  425. case 46: /* OutputCurrent */
  426. GetOutputCurrentStr((char *)paramStr, &paramLength);
  427. break;
  428. case 47: /* VoltageAKB */
  429. GetVoltageAKBtStr((char *)paramStr, &paramLength);
  430. break;
  431. case 48: /* DataNextChangeAKB */
  432. GetCapacityNominalAKBStr((char *)paramStr, &paramLength);
  433. break;
  434. case 49: /* CapacityNominalAKB */
  435. GetDataNextChangeAKBStr((char *)paramStr, &paramLength);
  436. break;
  437. default:
  438. break;
  439. }
  440. return paramLength;
  441. }
  442. static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value)
  443. {
  444. u32_t oid = instance->node->oid; // id сигнала
  445. char *val_string;
  446. char str[20];
  447. int8_t res = 0;
  448. s32_t val;
  449. bool enable_old_sntp;
  450. memset(str, 0, 20);
  451. switch (oid) {
  452. case 2: /* RestoreSignal */
  453. val = *(s32_t *)value;
  454. if (val == 1) {
  455. // SNMP_SendUserTrap(DEVICE_RESTORED);
  456. log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
  457. vTaskDelay(500);
  458. SETTINGS_SetPartDefault();
  459. SETTINGS_Save();
  460. }
  461. break;
  462. case 3: /* RebootSignal */
  463. val = *(s32_t *)value;
  464. if (val == 1) {
  465. HTTP_StartResetTask(false);
  466. }
  467. break;
  468. case 7: /* BatTest */
  469. val = *(s32_t *)value;
  470. if (val == 0) {
  471. res = ups_metac_service_pdu(ups_cancel_test);
  472. if (res == 1) {
  473. log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
  474. }
  475. } else if (val > 0 && val < 100) {
  476. TimeParam = val;
  477. res = ups_metac_service_pdu(ups_test_time);
  478. if (res == 1) {
  479. log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
  480. }
  481. } else if (val == 100) {
  482. res = ups_metac_service_pdu(ups_test_10sec);
  483. if (res == 1) {
  484. log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
  485. }
  486. } else if (val == 999) {
  487. res = ups_metac_service_pdu(ups_test_low_bat);
  488. if (res == 1) {
  489. log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
  490. }
  491. }
  492. break;
  493. case 8: /* Shutdown UPS */
  494. val_string = (char *)value;
  495. float shtdn_val = atof(val_string);
  496. if (shtdn_val == 0) {
  497. res = ups_metac_service_pdu(ups_cancel_shut_down);
  498. if (res == 1) {
  499. log_event_data(LOG_SHUTDOWN_UPS, "Администратор (Останов)");
  500. }
  501. } else {
  502. TimeParamFloat = shtdn_val;
  503. res = ups_metac_service_pdu(ups_shutdown);
  504. if (res == 1) {
  505. log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
  506. }
  507. }
  508. break;
  509. case 18:
  510. val_string = (char *)value;
  511. SetManagerIp(val_string);
  512. break;
  513. case 19:
  514. val_string = (char *)value;
  515. SetManagerIp2(val_string);
  516. break;
  517. case 20:
  518. val_string = (char *)value;
  519. SetManagerIp3(val_string);
  520. break;
  521. case 21:
  522. val_string = (char *)value;
  523. SetManagerIp4(val_string);
  524. break;
  525. case 22:
  526. val_string = (char *)value;
  527. SetManagerIp5(val_string);
  528. break;
  529. case 28:
  530. val_string = (char *)value;
  531. SetUPSVoltCellMinStr(val_string);
  532. break;
  533. case 29:
  534. val_string = (char *)value;
  535. SetUPSVoltCellMaxStr(val_string);
  536. break;
  537. case 30:
  538. val_string = (char *)value;
  539. SetVACAlarmHighRangeStr(val_string);
  540. break;
  541. case 31:
  542. val_string = (char *)value;
  543. SetVACAlarmLowRangeStr(val_string);
  544. break;
  545. case 32:
  546. val_string = (char *)value;
  547. SetVACAlarmHisteStr(val_string);
  548. break;
  549. case 33:
  550. val_string = (char *)value;
  551. SetTemperatureAlarmHighRangeStr(val_string);
  552. break;
  553. case 34:
  554. val_string = (char *)value;
  555. SetTemperatureAlarmLowRangeStr(val_string);
  556. break;
  557. case 35:
  558. val_string = (char *)value;
  559. SetTemperatureAlarmHisteStr(val_string);
  560. break;
  561. case 36:
  562. val_string = (char *)value;
  563. SetLoadAlarmHighRangeStr(val_string);
  564. break;
  565. case 37:
  566. val_string = (char *)value;
  567. SetLoadAlarmHistStr(val_string);
  568. break;
  569. case 38:
  570. val_string = (char *)value;
  571. SetSntpTimeZoneStr(val_string);
  572. break;
  573. case 39:
  574. enable_old_sntp = sSettings.sSNTP.sntpEnable;
  575. val_string = (char *)value;
  576. SetSntpStateStr(val_string);
  577. if (sSettings.sSNTP.sntpEnable != enable_old_sntp) {
  578. SETTINGS_Save();
  579. log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
  580. SNTP_Init();
  581. //vTaskDelay(7000);
  582. SNTP_Poll();
  583. }
  584. break;
  585. case 40:
  586. val_string = (char *)value;
  587. if (strncmp(val_string, sSettings.sSNTP.ip, strlen(val_string)) != 0) {
  588. SetSntpServerIpStr(val_string);
  589. SETTINGS_Save();
  590. log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
  591. SNTP_Init();
  592. //vTaskDelay(7000);
  593. SNTP_Poll();
  594. }
  595. break;
  596. case 41:
  597. break;
  598. case 42:
  599. val_string = (char *)value;
  600. SetDateStr(val_string);
  601. break;
  602. case 43:
  603. val_string = (char *)value;
  604. SetTimeStr(val_string);
  605. break;
  606. default :
  607. return SNMP_ERR_GENERROR;
  608. break;
  609. };
  610. if ((oid >= 18 && oid <= 22)
  611. || (oid >= 28 && oid <= 38)) {
  612. SETTINGS_Save();
  613. log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
  614. }
  615. return SNMP_ERR_NOERROR;
  616. }
  617. static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value)
  618. {
  619. snmp_err_t ret = SNMP_ERR_WRONGVALUE;
  620. char *val_string;
  621. int32_t val;
  622. float tmp_value;
  623. uint8_t j;
  624. u32_t oid = instance->node->oid; // id сигнала
  625. bool fail = false;
  626. switch (oid) {
  627. case 2:
  628. case 3:
  629. if ( len == sizeof(s32_t) ) {
  630. val = *((s32_t *)value);
  631. if (val == 1) {
  632. ret = SNMP_ERR_NOERROR;
  633. }
  634. }
  635. break;
  636. case 7: /* BatTest */
  637. val = *((s32_t *)value);
  638. if ((val >= 0 && val <= 100) || val == 999) {
  639. ret = SNMP_ERR_NOERROR;
  640. }
  641. break;
  642. case 8: /* Shutdown UPS */
  643. if ( len <= 3 ) {
  644. val_string = (char *)value;
  645. val_string[len] = 0;
  646. if (atof(val_string) <= 10) {
  647. ret = SNMP_ERR_NOERROR;
  648. }
  649. }
  650. break;
  651. case 18:
  652. case 19:
  653. case 20:
  654. case 21:
  655. case 22:
  656. case 40:
  657. if ( len <= 15 ) {
  658. val_string = (char *)value;
  659. val_string[len] = 0;
  660. if (check_netsettings(val_string, len)) {
  661. ret = SNMP_ERR_NOERROR;
  662. }
  663. }
  664. break;
  665. case 28:
  666. val_string = (char *)value;
  667. val_string[len] = 0;
  668. for (j = 0; j < len; j ++) {
  669. if (!isfloatdigit(val_string[j])) {
  670. return ret;
  671. }
  672. }
  673. tmp_value = atof(val_string);
  674. if (tmp_value < sSettings.UPS_Setting.Ucellmax && tmp_value > MIN_VOLT_CELL_RANGE) {
  675. ret = SNMP_ERR_NOERROR;
  676. }
  677. break;
  678. case 29:
  679. val_string = (char *)value;
  680. val_string[len] = 0;
  681. for (j = 0; j < len; j ++) {
  682. if (!isfloatdigit(val_string[j])) {
  683. return ret;
  684. }
  685. }
  686. tmp_value = atof(val_string);
  687. if (tmp_value > sSettings.UPS_Setting.Ucellmin && tmp_value <= MAX_VOLT_CELL_RANGE) {
  688. ret = SNMP_ERR_NOERROR;
  689. }
  690. break;
  691. case 30:
  692. val_string = (char *)value;
  693. val_string[len] = 0;
  694. for (j = 0; j < len; j ++) {
  695. if (!isdigit_int(val_string[j])) {
  696. return ret;
  697. }
  698. }
  699. tmp_value = atof(val_string);
  700. if (tmp_value >= MAX_VAC_MIN_RANGE && tmp_value <= MAX_VAC_MAX_RANGE) {
  701. ret = SNMP_ERR_NOERROR;
  702. }
  703. break;
  704. case 31:
  705. val_string = (char *)value;
  706. val_string[len] = 0;
  707. for (j = 0; j < len; j ++) {
  708. if (!isdigit_int(val_string[j])) {
  709. return ret;
  710. }
  711. }
  712. tmp_value = atof(val_string);
  713. if (tmp_value >= MIN_VAC_MIN_RANGE && tmp_value <= MIN_VAC_MAX_RANGE) {
  714. ret = SNMP_ERR_NOERROR;
  715. }
  716. break;
  717. case 32:
  718. val_string = (char *)value;
  719. val_string[len] = 0;
  720. for (j = 0; j < len; j ++) {
  721. if (!isdigit_int(val_string[j])) {
  722. return ret;
  723. }
  724. }
  725. tmp_value = atof(val_string);
  726. if (tmp_value >= HIST_VAC_MIN_RANGE && tmp_value <= HIST_VAC_MAX_RANGE) {
  727. ret = SNMP_ERR_NOERROR;
  728. }
  729. break;
  730. case 33:
  731. val_string = (char *)value;
  732. val_string[len] = 0;
  733. for (j = 0; j < len; j ++) {
  734. if (!isdigit_int(val_string[j])) {
  735. return ret;
  736. }
  737. }
  738. tmp_value = atof(val_string);
  739. if (tmp_value >= MAX_TEMP_MIN_RANGE && tmp_value <= MAX_TEMP_MAX_RANGE) {
  740. ret = SNMP_ERR_NOERROR;
  741. }
  742. break;
  743. case 34:
  744. val_string = (char *)value;
  745. val_string[len] = 0;
  746. for (j = 0; j < len; j ++) {
  747. if (!isdigit_int(val_string[j])) {
  748. if (j == 0 && val_string[j] == '-') {
  749. continue;
  750. } else {
  751. return ret;
  752. }
  753. }
  754. }
  755. tmp_value = atof(val_string);
  756. if (tmp_value >= MIN_TEMP_MIN_RANGE && tmp_value <= MIN_TEMP_MAX_RANGE) {
  757. ret = SNMP_ERR_NOERROR;
  758. }
  759. break;
  760. case 35:
  761. val_string = (char *)value;
  762. val_string[len] = 0;
  763. for (j = 0; j < len; j ++) {
  764. if (!isfloatdigit(val_string[j])) {
  765. return ret;
  766. }
  767. }
  768. tmp_value = atof(val_string);
  769. if (tmp_value >= HIST_TEMP_MIN_RANGE && tmp_value <= HIST_TEMP_MAX_RANGE) {
  770. ret = SNMP_ERR_NOERROR;
  771. }
  772. break;
  773. case 36:
  774. val_string = (char *)value;
  775. val_string[len] = 0;
  776. for (j = 0; j < len; j ++) {
  777. if (!isdigit_int(val_string[j])) {
  778. return ret;
  779. }
  780. }
  781. tmp_value = atof(val_string);
  782. if (tmp_value >= MAX_LOAD_MIN_RANGE && tmp_value <= MAX_LOAD_MAX_RANGE) {
  783. ret = SNMP_ERR_NOERROR;
  784. }
  785. break;
  786. case 37:
  787. val_string = (char *)value;
  788. val_string[len] = 0;
  789. for (j = 0; j < len; j ++) {
  790. if (!isfloatdigit(val_string[j])) {
  791. return ret;
  792. }
  793. }
  794. tmp_value = atof(val_string);
  795. if (tmp_value >= HIST_LOAD_MIN_RANGE && tmp_value <= HIST_LOAD_MAX_RANGE) {
  796. ret = SNMP_ERR_NOERROR;
  797. }
  798. break;
  799. case 38:
  800. val_string = (char *)value;
  801. val_string[len] = 0;
  802. if (len > 1 && len < 5) {
  803. bool fail = false;
  804. if (val_string[0] != '-' && val_string[0] != '+') {
  805. fail = true;
  806. }
  807. if (!isdigit_int(val_string[1]) && (!isdigit_int(val_string[2]) && val_string[2] != '.')
  808. && (!isdigit_int(val_string[3]) && val_string[3] != '.')) {
  809. fail = true;
  810. }
  811. if (len == 5) {
  812. if (!isdigit_int(val_string[4])) {
  813. fail = true;
  814. }
  815. }
  816. if (!fail) {
  817. tmp_value = atof(val_string);
  818. if (tmp_value >= -12.0 && tmp_value <= 12.0) {
  819. ret = SNMP_ERR_NOERROR;
  820. }
  821. }
  822. }
  823. break;
  824. case 39:
  825. val_string = (char *)value;
  826. val_string[len] = 0;
  827. if (len == 1) {
  828. if (val_string[0] == '0' || val_string[0] == '1') {
  829. ret = SNMP_ERR_NOERROR;
  830. }
  831. }
  832. break;
  833. case 42:
  834. val_string = (char *)value;
  835. val_string[len] = 0;
  836. if (len == 10) {
  837. for (j = 0; j < len; j++) {
  838. if (j != 4 && j != 7) {
  839. if (val_string[j] > 0x39 || val_string[j] < 0x30) {
  840. fail = true;
  841. break;
  842. }
  843. } else if (j == 4 || j == 7) {
  844. if (val_string[j] != '-') {
  845. fail = true;
  846. break;
  847. }
  848. }
  849. }
  850. if (!fail) {
  851. uint16_t temp = 0;
  852. temp = 1000 * (val_string[0] - 0x30) + 100 * (val_string[1] - 0x30) + 10 * (val_string[2] - 0x30) + val_string[3] -
  853. 0x30;
  854. if (temp > 2099 || temp < 2000) {
  855. fail = true;
  856. }
  857. temp = 0;
  858. temp = 10 * (val_string[5] - 0x30) + (val_string[6] - 0x30);
  859. if (temp > 12) {
  860. fail = true;
  861. }
  862. temp = 0;
  863. temp = 10 * (val_string[8] - 0x30) + (val_string[9] - 0x30);
  864. if (temp > 31) {
  865. fail = true;
  866. }
  867. }
  868. if (!fail) {
  869. ret = SNMP_ERR_NOERROR;
  870. }
  871. }
  872. break;
  873. case 43:
  874. val_string = (char *)value;
  875. val_string[len] = 0;
  876. if (len == 5) {
  877. for (j = 0; j < len; j++) {
  878. if (j != 2) {
  879. if (val_string[j] > 0x39 || val_string[j] < 0x30) {
  880. fail = true;
  881. break;
  882. }
  883. } else if (j == 2) {
  884. if (val_string[j] != ':') {
  885. fail = true;
  886. break;
  887. }
  888. }
  889. }
  890. if (!fail) {
  891. uint16_t temp = 0;
  892. temp = 10 * (val_string[0] - 0x30) + (val_string[1] - 0x30);
  893. if (temp > 23) {
  894. fail = true;
  895. }
  896. temp = 0;
  897. temp = 10 * (val_string[3] - 0x30) + (val_string[4] - 0x30);
  898. if (temp > 59) {
  899. fail = true;
  900. }
  901. }
  902. if (!fail) {
  903. ret = SNMP_ERR_NOERROR;
  904. }
  905. }
  906. break;
  907. };
  908. return ret;
  909. }
  910. #endif