private_mib_bt6709.c 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  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 "hal.h"
  18. #include "FreeRTOS.h"
  19. #include "task.h"
  20. #include <ctype.h>
  21. #ifdef PRINTF_STDLIB
  22. #include <stdio.h>
  23. #endif
  24. #ifdef PRINTF_CUSTOM
  25. #include "tinystdio.h"
  26. #endif
  27. #include "lwip/apps/snmp_scalar.h"
  28. #include "lwip/apps/snmp.h"
  29. //#include "snmp_core.h"
  30. #define MUL100 100
  31. #define MUL10 10
  32. extern struct snmp_mib mib2;
  33. /**
  34. * @brief Общая структура настроек
  35. */
  36. extern SETTINGS_t sSettings;
  37. static s16_t signal_get_value(struct snmp_node_instance *instance, void *value);
  38. static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value);
  39. static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value);
  40. /* signal .1.3.6.1.4.1.41752.911.10.1.49 */
  41. static const struct snmp_scalar_node signal49 = SNMP_SCALAR_CREATE_NODE_READONLY(49, SNMP_ASN1_TYPE_OCTET_STRING,
  42. signal_get_value);
  43. /* signal .1.3.6.1.4.1.41752.911.10.1.48 */
  44. static const struct snmp_scalar_node signal48 = SNMP_SCALAR_CREATE_NODE(48, SNMP_NODE_INSTANCE_READ_WRITE,
  45. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  46. /* signal .1.3.6.1.4.1.41752.911.10.1.47 */
  47. static const struct snmp_scalar_node signal47 = SNMP_SCALAR_CREATE_NODE_READONLY(47, SNMP_ASN1_TYPE_OCTET_STRING,
  48. signal_get_value);
  49. /* signal .1.3.6.1.4.1.41752.911.10.1.46 */
  50. static const struct snmp_scalar_node signal46 = SNMP_SCALAR_CREATE_NODE_READONLY(46, SNMP_ASN1_TYPE_OCTET_STRING,
  51. signal_get_value);
  52. /* signal .1.3.6.1.4.1.41752.911.10.1.45 */
  53. static const struct snmp_scalar_node signal45 = SNMP_SCALAR_CREATE_NODE_READONLY(45, SNMP_ASN1_TYPE_OCTET_STRING,
  54. signal_get_value);
  55. /* signal .1.3.6.1.4.1.41752.911.10.1.44 */
  56. static const struct snmp_scalar_node signal44 = SNMP_SCALAR_CREATE_NODE_READONLY(44, SNMP_ASN1_TYPE_OCTET_STRING,
  57. signal_get_value);
  58. /* signal .1.3.6.1.4.1.41752.911.10.1.43 */
  59. static const struct snmp_scalar_node signal43 = SNMP_SCALAR_CREATE_NODE(43, 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.10.1.42 */
  62. static const struct snmp_scalar_node signal42 = SNMP_SCALAR_CREATE_NODE(42, 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.10.1.41 */
  65. static const struct snmp_scalar_node signal41 = SNMP_SCALAR_CREATE_NODE(41, 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.10.1.40 */
  68. static const struct snmp_scalar_node signal40 = SNMP_SCALAR_CREATE_NODE(40, 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.10.1.39 */
  71. static const struct snmp_scalar_node signal39 = SNMP_SCALAR_CREATE_NODE(39, 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.10.1.38 */
  74. static const struct snmp_scalar_node signal38 = SNMP_SCALAR_CREATE_NODE(38, 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.10.1.37 */
  77. static const struct snmp_scalar_node signal37 = SNMP_SCALAR_CREATE_NODE(37, 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.10.1.36 */
  80. static const struct snmp_scalar_node signal36 = SNMP_SCALAR_CREATE_NODE(36, 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.10.1.35 */
  83. static const struct snmp_scalar_node signal35 = SNMP_SCALAR_CREATE_NODE(35, 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.10.1.34 */
  86. static const struct snmp_scalar_node signal34 = SNMP_SCALAR_CREATE_NODE(34, 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.10.1.33 */
  89. static const struct snmp_scalar_node signal33 = SNMP_SCALAR_CREATE_NODE(33, 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.10.1.32 */
  92. static const struct snmp_scalar_node signal32 = SNMP_SCALAR_CREATE_NODE(32, 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.10.1.31 */
  95. static const struct snmp_scalar_node signal31 = SNMP_SCALAR_CREATE_NODE(31, 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.10.1.30 */
  98. static const struct snmp_scalar_node signal30 = SNMP_SCALAR_CREATE_NODE(30, 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.10.1.29 */
  101. static const struct snmp_scalar_node signal29 = SNMP_SCALAR_CREATE_NODE(29, 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.10.1.28 */
  104. static const struct snmp_scalar_node signal28 = SNMP_SCALAR_CREATE_NODE(28, SNMP_NODE_INSTANCE_READ_WRITE,
  105. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  106. /* signal .1.3.6.1.4.1.41752.911.10.1.27 */
  107. static const struct snmp_scalar_node signal27 = SNMP_SCALAR_CREATE_NODE_READONLY(27, SNMP_ASN1_TYPE_OCTET_STRING,
  108. signal_get_value);
  109. /* signal .1.3.6.1.4.1.41752.911.10.1.26 */
  110. static const struct snmp_scalar_node signal26 = SNMP_SCALAR_CREATE_NODE_READONLY(26, SNMP_ASN1_TYPE_OCTET_STRING,
  111. signal_get_value);
  112. /* signal .1.3.6.1.4.1.41752.911.10.1.25 */
  113. static const struct snmp_scalar_node signal25 = SNMP_SCALAR_CREATE_NODE_READONLY(25, SNMP_ASN1_TYPE_OCTET_STRING,
  114. signal_get_value);
  115. /* signal .1.3.6.1.4.1.41752.911.10.1.24 */
  116. static const struct snmp_scalar_node signal24 = SNMP_SCALAR_CREATE_NODE_READONLY(24, SNMP_ASN1_TYPE_OCTET_STRING,
  117. signal_get_value);
  118. /* signal .1.3.6.1.4.1.41752.911.10.1.23 */
  119. static const struct snmp_scalar_node signal23 = SNMP_SCALAR_CREATE_NODE_READONLY(23, SNMP_ASN1_TYPE_OCTET_STRING,
  120. signal_get_value);
  121. /* signal .1.3.6.1.4.1.41752.911.10.1.22 */
  122. static const struct snmp_scalar_node signal22 = SNMP_SCALAR_CREATE_NODE(22, 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.10.1.21 */
  125. static const struct snmp_scalar_node signal21 = SNMP_SCALAR_CREATE_NODE(21, 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.10.1.20 */
  128. static const struct snmp_scalar_node signal20 = SNMP_SCALAR_CREATE_NODE(20, 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.10.1.19 */
  131. static const struct snmp_scalar_node signal19 = SNMP_SCALAR_CREATE_NODE(19, 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.10.1.18 */
  134. static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE(18, SNMP_NODE_INSTANCE_READ_WRITE,
  135. SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
  136. /* signal .1.3.6.1.4.1.41752.911.10.1.17 */
  137. static const struct snmp_scalar_node signal17 = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_OCTET_STRING,
  138. signal_get_value);
  139. /* signal .1.3.6.1.4.1.41752.911.10.1.16 */
  140. static const struct snmp_scalar_node signal16 = SNMP_SCALAR_CREATE_NODE_READONLY(16, SNMP_ASN1_TYPE_OCTET_STRING,
  141. signal_get_value);
  142. /* signal .1.3.6.1.4.1.41752.911.10.1.15 */
  143. static const struct snmp_scalar_node signal15 = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_OCTET_STRING,
  144. signal_get_value);
  145. /* signal .1.3.6.1.4.1.41752.911.10.1.14 */
  146. static const struct snmp_scalar_node signal14 = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_OCTET_STRING,
  147. signal_get_value);
  148. /* signal .1.3.6.1.4.1.41752.911.10.1.13 */
  149. static const struct snmp_scalar_node signal13 = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_OCTET_STRING,
  150. signal_get_value);
  151. /* signal .1.3.6.1.4.1.41752.911.10.1.12 */
  152. static const struct snmp_scalar_node signal12 = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_OCTET_STRING,
  153. signal_get_value);
  154. /* signal .1.3.6.1.4.1.41752.911.10.1.11 */
  155. static const struct snmp_scalar_node signal11 = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_OCTET_STRING,
  156. signal_get_value);
  157. /* signal .1.3.6.1.4.1.41752.911.10.1.10 */
  158. static const struct snmp_scalar_node signal10 = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_OCTET_STRING,
  159. signal_get_value);
  160. /* signal .1.3.6.1.4.1.41752.911.10.1.9 */
  161. static const struct snmp_scalar_node signal9 = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_OCTET_STRING,
  162. signal_get_value);
  163. /* signal .1.3.6.1.4.1.41752.911.10.1.8 */
  164. static const struct snmp_scalar_node signal8 = SNMP_SCALAR_CREATE_NODE(8, SNMP_NODE_INSTANCE_WRITE_ONLY,
  165. SNMP_ASN1_TYPE_OCTET_STRING, NULL, signal_set_test, signal_set_value);
  166. /* signal .1.3.6.1.4.1.41752.911.10.1.7 */
  167. static const struct snmp_scalar_node signal7 = SNMP_SCALAR_CREATE_NODE(7, SNMP_NODE_INSTANCE_WRITE_ONLY,
  168. SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
  169. /* signal .1.3.6.1.4.1.41752.911.10.1.6 */
  170. static const struct snmp_scalar_node signal6 = SNMP_SCALAR_CREATE_NODE_READONLY(6, SNMP_ASN1_TYPE_OCTET_STRING,
  171. signal_get_value);
  172. /* signal .1.3.6.1.4.1.41752.911.10.1.5 */
  173. static const struct snmp_scalar_node signal5 = SNMP_SCALAR_CREATE_NODE_READONLY(5, SNMP_ASN1_TYPE_OCTET_STRING,
  174. signal_get_value);
  175. /* signal .1.3.6.1.4.1.41752.911.10.1.4 */
  176. static const struct snmp_scalar_node signal4 = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_OCTET_STRING,
  177. signal_get_value);
  178. /* signal .1.3.6.1.4.1.41752.911.10.1.3 */
  179. static const struct snmp_scalar_node signal3 = SNMP_SCALAR_CREATE_NODE(3, 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.10.1.2 */
  182. static const struct snmp_scalar_node signal2 = SNMP_SCALAR_CREATE_NODE(2, SNMP_NODE_INSTANCE_WRITE_ONLY,
  183. SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
  184. /* signal .1.3.6.1.4.1.41752.911.10.1.1 */
  185. static const struct snmp_scalar_node signal1 = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_OCTET_STRING,
  186. signal_get_value);
  187. // signals .1.3.6.1.4.1.41752.911.10.1
  188. static const struct snmp_node *const signals_nodes[] = {
  189. &signal1.node.node,
  190. &signal2.node.node,
  191. &signal3.node.node,
  192. &signal4.node.node,
  193. &signal5.node.node,
  194. &signal6.node.node,
  195. &signal7.node.node,
  196. &signal8.node.node,
  197. &signal9.node.node,
  198. &signal10.node.node,
  199. &signal11.node.node,
  200. &signal12.node.node,
  201. &signal13.node.node,
  202. &signal14.node.node,
  203. &signal15.node.node,
  204. &signal16.node.node,
  205. &signal17.node.node,
  206. &signal18.node.node,
  207. &signal19.node.node,
  208. &signal20.node.node,
  209. &signal21.node.node,
  210. &signal22.node.node,
  211. &signal23.node.node,
  212. &signal24.node.node,
  213. &signal25.node.node,
  214. &signal26.node.node,
  215. &signal27.node.node,
  216. &signal28.node.node,
  217. &signal29.node.node,
  218. &signal30.node.node,
  219. &signal31.node.node,
  220. &signal32.node.node,
  221. &signal33.node.node,
  222. &signal34.node.node,
  223. &signal35.node.node,
  224. &signal36.node.node,
  225. &signal37.node.node,
  226. &signal38.node.node,
  227. &signal39.node.node,
  228. &signal40.node.node,
  229. &signal41.node.node,
  230. &signal42.node.node,
  231. &signal43.node.node,
  232. &signal44.node.node,
  233. &signal45.node.node,
  234. &signal46.node.node,
  235. &signal47.node.node,
  236. &signal48.node.node,
  237. &signal49.node.node,
  238. };
  239. static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
  240. // bt_6703 .1.3.6.1.4.1.41752.911.10
  241. static const struct snmp_node *const bt6709_nodes[] = {
  242. &signals_node.node
  243. };
  244. static const struct snmp_tree_node bt6709_node = SNMP_CREATE_TREE_NODE(SNMP_DEV_ROOT_OID, bt6709_nodes);
  245. // swt .1.3.6.1.4.1.41752.911
  246. static const struct snmp_node *const swt_nodes[] = {
  247. &bt6709_node.node
  248. };
  249. static const struct snmp_tree_node swt_node = SNMP_CREATE_TREE_NODE(911, swt_nodes);
  250. // rotek .1.3.6.1.4.1.41752
  251. static const struct snmp_node *const rotek_nodes[] = {
  252. &swt_node.node
  253. };
  254. static const struct snmp_tree_node rotek_node = SNMP_CREATE_TREE_NODE(41752, rotek_nodes);
  255. // enterprises .1.3.6.1.4.1
  256. static const struct snmp_node *const enterprises_nodes[] = {
  257. &rotek_node.node
  258. };
  259. static const struct snmp_tree_node enterprises_node = SNMP_CREATE_TREE_NODE(1, enterprises_nodes);
  260. // private .1.3.6.1.4
  261. static const struct snmp_node *const private_nodes[] = {
  262. &enterprises_node.node
  263. };
  264. static const struct snmp_tree_node private_root = SNMP_CREATE_TREE_NODE(0, private_nodes);
  265. static const u32_t prvmib_base_oid[] = { 1, 3, 6, 1, 4 };
  266. static const struct snmp_mib private_mib = SNMP_MIB_CREATE(prvmib_base_oid, &private_root.node);
  267. void lwip_privmib_init(void)
  268. {
  269. static const struct snmp_mib *my_snmp_mibs[] = {&mib2, &private_mib};
  270. snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
  271. }
  272. uint32_t check_netsettings(char *addr, uint8_t len)
  273. {
  274. uint32_t val = 0;
  275. uint8_t i, j;
  276. uint8_t cnt_dot = 0;
  277. uint8_t digit = 0;
  278. uint8_t c = *addr;
  279. for (j = 0; j <= len; j ++) {
  280. if (isdigit(c)) {
  281. val = (val * 10) + (int)(c - '0');
  282. } else if (c == '.' || c == 0) {
  283. if (val > 0xff) {
  284. return 0;
  285. }
  286. cnt_dot ++;
  287. val = 0;
  288. } else {
  289. return 0;
  290. }
  291. c = *++addr;
  292. }
  293. if (cnt_dot != 4) {
  294. return 0;
  295. }
  296. return 1;
  297. }
  298. static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
  299. {
  300. u8_t *paramStr = (u8_t *)value;
  301. s32_t *paramInt = (u8_t*)value;
  302. u8_t paramLength = 0;
  303. float val = 0;
  304. int32_t int_val = 0;
  305. u32_t oid = instance->node->oid; // id сигнала
  306. switch (oid) {
  307. case 1: /* FWVersion */
  308. GetVersionStr((char *)paramStr, &paramLength);
  309. break;
  310. case 4: /* UPSModel*/
  311. GetUPSModelStr((char *)paramStr, &paramLength);
  312. break;
  313. case 5: /* UPSSerial*/
  314. GetUPSSerialStr((char *)paramStr, &paramLength);
  315. break;
  316. case 6: /* UPSVersion*/
  317. GetUPSVersionStr((char *)paramStr, &paramLength);
  318. break;
  319. case 9: /* IntTemp */
  320. GetInternalTempStr((char *)paramStr, &paramLength);
  321. break;
  322. case 10: /* InFreq */
  323. GetInputFreqStr((char *)paramStr, &paramLength);
  324. break;
  325. case 11: /* InVoltVAC */
  326. GetInputVoltageStr((char *)paramStr, &paramLength);
  327. break;
  328. case 12: /* OutVoltVAC */
  329. GetOutputVoltageStr((char *)paramStr, &paramLength);
  330. break;
  331. case 13: /* Power */
  332. GetPowerStr((char *)paramStr, &paramLength);
  333. break;
  334. case 14: /* BatCap */
  335. GetBatCapacityStr((char *)paramStr, &paramLength);
  336. break;
  337. case 15: /* BatTime */
  338. GetRuntimeStr((char *)paramStr, &paramLength);
  339. break;
  340. case 16: /* ConnectMonitor */
  341. GetConnectMonitorStr((char *)paramStr, &paramLength);
  342. break;
  343. case 17: /* Alarms */
  344. GetAlarmStr((char *)paramStr, &paramLength);
  345. break;
  346. case 18: /* IP server1 (traps) */
  347. GetManagerIp((char *)paramStr, &paramLength);
  348. break;
  349. case 19: /* IP server2 (traps) */
  350. GetManagerIp2((char *)paramStr, &paramLength);
  351. break;
  352. case 20: /* IP server3 (traps) */
  353. GetManagerIp3((char *)paramStr, &paramLength);
  354. break;
  355. case 21: /* IP server4 (traps) */
  356. GetManagerIp4((char *)paramStr, &paramLength);
  357. break;
  358. case 22: /* IP server5 (traps) */
  359. GetManagerIp5((char *)paramStr, &paramLength);
  360. break;
  361. case 23: /* WhiteList range 1 */
  362. GetWhiteListSTR((char *)paramStr, &paramLength, 0);
  363. break;
  364. case 24: /* WhiteList range 2 */
  365. GetWhiteListSTR((char *)paramStr, &paramLength, 1);
  366. break;
  367. case 25: /* WhiteList range 3 */
  368. GetWhiteListSTR((char *)paramStr, &paramLength, 2);
  369. break;
  370. case 26: /* WhiteList range 4 */
  371. GetWhiteListSTR((char *)paramStr, &paramLength, 3);
  372. break;
  373. case 27: /* WhiteList range 5 */
  374. GetWhiteListSTR((char *)paramStr, &paramLength, 4);
  375. break;
  376. case 28: /* UPSVoltCellMin */
  377. GetUPSVoltCellMinStr((char *)paramStr, &paramLength);
  378. break;
  379. case 29: /* UPSVoltCellMax */
  380. GetUPSVoltCellMaxStr((char *)paramStr, &paramLength);
  381. break;
  382. case 30: /* VACAlarmHighRange */
  383. GetVACAlarmHighRangeStr((char *)paramStr, &paramLength);
  384. break;
  385. case 31: /* VACAlarmLowRange */
  386. GetVACAlarmLowRangeStr((char *)paramStr, &paramLength);
  387. break;
  388. case 32: /* VACAlarmHistRange */
  389. GetVACAlarmHisteStr((char *)paramStr, &paramLength);
  390. break;
  391. case 33: /* TemperatureAlarmHighRange */
  392. GetTemperatureAlarmHighRangeStr((char *)paramStr, &paramLength);
  393. break;
  394. case 34: /* TemperatureAlarmLowRange */
  395. GetTemperatureAlarmLowRangeStr((char *)paramStr, &paramLength);
  396. break;
  397. case 35: /* TemperatureAlarmHistRange */
  398. GetTemperatureAlarmHisteStr((char *)paramStr, &paramLength);
  399. break;
  400. case 36: /* LoadAlarmHighRange */
  401. GetLoadAlarmHighRangeStr((char *)paramStr, &paramLength);
  402. break;
  403. case 37: /* LoadAlarmHistRange */
  404. GetLoadAlarmHisteStr((char *)paramStr, &paramLength);
  405. break;
  406. case 38: /* SntpTimeZone */
  407. GetSntpTimeZoneStr((char *)paramStr, &paramLength);
  408. break;
  409. case 39: /* SntpState */
  410. GetSntpStateStr((char *)paramStr, &paramLength);
  411. break;
  412. case 40: /* SntpServerIp */
  413. GetSntpServerIpStr((char *)paramStr, &paramLength);
  414. break;
  415. case 41: /* SntpLastData */
  416. GetSntpLastDataStr((char *)paramStr, &paramLength);
  417. break;
  418. case 42: /* Date */
  419. GetDateStr((char *)paramStr, &paramLength);
  420. break;
  421. case 43: /* Time */
  422. GetTimeStr((char *)paramStr, &paramLength);
  423. break;
  424. case 44: /* AKBTimeWork */
  425. GetAKBWorktimeStr((char *)paramStr, &paramLength);
  426. break;
  427. case 45: /* InputCurrent */
  428. GetInputCurrentStr((char *)paramStr, &paramLength);
  429. break;
  430. case 46: /* OutputCurrent */
  431. GetOutputCurrentStr((char *)paramStr, &paramLength);
  432. break;
  433. case 47: /* VoltageAKB */
  434. GetVoltageAKBtStr((char *)paramStr, &paramLength);
  435. break;
  436. case 48: /* CapacityNominalAKB*/
  437. GetCapacityNominalAKBStr((char *)paramStr, &paramLength);
  438. break;
  439. case 49: /* DataNextChangeAKB*/
  440. GetDataNextChangeAKBStr((char *)paramStr, &paramLength);
  441. break;
  442. default:
  443. break;
  444. }
  445. return paramLength;
  446. }
  447. static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value)
  448. {
  449. u32_t oid = instance->node->oid; // id сигнала
  450. char *val_string;
  451. char str[20];
  452. int8_t res = 0;
  453. s32_t val;
  454. float setVal;
  455. bool enable_old_sntp;
  456. memset(str, 0, 20);
  457. switch (oid) {
  458. case 2: /* RestoreSignal */
  459. val = *(s32_t *)value;
  460. if (val == 1) {
  461. // SNMP_SendUserTrap(DEVICE_RESTORED);
  462. log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
  463. vTaskDelay(500);
  464. SETTINGS_SetPartDefault();
  465. SETTINGS_Save();
  466. }
  467. break;
  468. case 3: /* RebootSignal */
  469. val = *(s32_t *)value;
  470. if (val == 1) {
  471. HTTP_StartResetTask(false);
  472. }
  473. break;
  474. case 7: /* BatTest */
  475. val = *(s32_t *)value;
  476. if (val == 0) {
  477. res = ups_metac_service_pdu(ups_cancel_test);
  478. if (res == 1) {
  479. log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
  480. }
  481. } else if (val > 0 && val < 100) {
  482. TimeParam = val;
  483. res = ups_metac_service_pdu(ups_test_time);
  484. set_act_source(SNMP_ACT);
  485. } else if (val == 100) {
  486. res = ups_metac_service_pdu(ups_test_10sec);
  487. set_act_source(SNMP_ACT);
  488. } else if (val == 999) {
  489. res = ups_metac_service_pdu(ups_test_low_bat);
  490. set_act_source(SNMP_ACT);
  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. }
  581. break;
  582. case 40:
  583. val_string = (char *)value;
  584. if (strncmp(val_string, sSettings.sSNTP.ip, strlen(val_string)) != 0) {
  585. SetSntpServerIpStr(val_string);
  586. SETTINGS_Save();
  587. log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
  588. SNTP_Init();
  589. //vTaskDelay(7000);
  590. SNTP_Poll();
  591. }
  592. break;
  593. case 41:
  594. break;
  595. case 42:
  596. val_string = (char *)value;
  597. SetDateStr(val_string);
  598. break;
  599. case 43:
  600. val_string = (char *)value;
  601. SetTimeStr(val_string);
  602. break;
  603. case 48:
  604. val_string = (char *)value;
  605. SetCapacityNominalAKBStr(val_string);
  606. break;
  607. default :
  608. return SNMP_ERR_GENERROR;
  609. break;
  610. };
  611. if ((oid >= 18 && oid <= 22)
  612. || (oid >= 28 && oid <= 38)) {
  613. SETTINGS_Save();
  614. log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
  615. }
  616. return SNMP_ERR_NOERROR;
  617. }
  618. static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value)
  619. {
  620. snmp_err_t ret = SNMP_ERR_WRONGVALUE;
  621. char *val_string;
  622. int32_t val;
  623. float tmp_value;
  624. uint8_t j;
  625. u32_t oid = instance->node->oid; // id сигнала
  626. bool fail = false;
  627. switch (oid) {
  628. case 2:
  629. case 3:
  630. if ( len == sizeof(s32_t) ) {
  631. val = *((s32_t *)value);
  632. if (val == 1) {
  633. ret = SNMP_ERR_NOERROR;
  634. }
  635. }
  636. break;
  637. case 7: /* BatTest */
  638. val = *((s32_t *)value);
  639. if ((val >= 0 && val <= 100) || val == 999) {
  640. ret = SNMP_ERR_NOERROR;
  641. }
  642. break;
  643. case 8: /* Shutdown UPS */
  644. if ( len <= 3 ) {
  645. val_string = (char *)value;
  646. val_string[len] = 0;
  647. if (atof(val_string) <= 10) {
  648. ret = SNMP_ERR_NOERROR;
  649. }
  650. }
  651. break;
  652. case 18:
  653. case 19:
  654. case 20:
  655. case 21:
  656. case 22:
  657. case 40:
  658. if ( len <= 15 ) {
  659. val_string = (char *)value;
  660. val_string[len] = 0;
  661. if (check_netsettings(val_string, len)) {
  662. ret = SNMP_ERR_NOERROR;
  663. }
  664. }
  665. break;
  666. case 28:
  667. val_string = (char *)value;
  668. val_string[len] = 0;
  669. for (j = 0; j < len; j ++) {
  670. if (!isfloatdigit(val_string[j])) {
  671. return ret;
  672. }
  673. }
  674. tmp_value = atof(val_string);
  675. if (tmp_value < sSettings.UPS_Setting.Ucellmax && tmp_value > MIN_VOLT_CELL_RANGE) {
  676. ret = SNMP_ERR_NOERROR;
  677. }
  678. break;
  679. case 29:
  680. val_string = (char *)value;
  681. val_string[len] = 0;
  682. for (j = 0; j < len; j ++) {
  683. if (!isfloatdigit(val_string[j])) {
  684. return ret;
  685. }
  686. }
  687. tmp_value = atof(val_string);
  688. if (tmp_value > sSettings.UPS_Setting.Ucellmin && tmp_value <= MAX_VOLT_CELL_RANGE) {
  689. ret = SNMP_ERR_NOERROR;
  690. }
  691. break;
  692. case 30:
  693. val_string = (char *)value;
  694. val_string[len] = 0;
  695. for (j = 0; j < len; j ++) {
  696. if (!isdigit_int(val_string[j])) {
  697. return ret;
  698. }
  699. }
  700. tmp_value = atof(val_string);
  701. if (tmp_value >= MAX_VAC_MIN_RANGE && tmp_value <= MAX_VAC_MAX_RANGE) {
  702. ret = SNMP_ERR_NOERROR;
  703. }
  704. break;
  705. case 31:
  706. val_string = (char *)value;
  707. val_string[len] = 0;
  708. for (j = 0; j < len; j ++) {
  709. if (!isdigit_int(val_string[j])) {
  710. return ret;
  711. }
  712. }
  713. tmp_value = atof(val_string);
  714. if (tmp_value >= MIN_VAC_MIN_RANGE && tmp_value <= MIN_VAC_MAX_RANGE) {
  715. ret = SNMP_ERR_NOERROR;
  716. }
  717. break;
  718. case 32:
  719. val_string = (char *)value;
  720. val_string[len] = 0;
  721. for (j = 0; j < len; j ++) {
  722. if (!isdigit_int(val_string[j])) {
  723. return ret;
  724. }
  725. }
  726. tmp_value = atof(val_string);
  727. if (tmp_value >= HIST_VAC_MIN_RANGE && tmp_value <= HIST_VAC_MAX_RANGE) {
  728. ret = SNMP_ERR_NOERROR;
  729. }
  730. break;
  731. case 33:
  732. val_string = (char *)value;
  733. val_string[len] = 0;
  734. for (j = 0; j < len; j ++) {
  735. if (!isdigit_int(val_string[j])) {
  736. return ret;
  737. }
  738. }
  739. tmp_value = atof(val_string);
  740. if (tmp_value >= MAX_TEMP_MIN_RANGE && tmp_value <= MAX_TEMP_MAX_RANGE) {
  741. ret = SNMP_ERR_NOERROR;
  742. }
  743. break;
  744. case 34:
  745. val_string = (char *)value;
  746. val_string[len] = 0;
  747. for (j = 0; j < len; j ++) {
  748. if (!isdigit_int(val_string[j])) {
  749. if (j == 0 && val_string[j] == '-') {
  750. continue;
  751. } else {
  752. return ret;
  753. }
  754. }
  755. }
  756. tmp_value = atof(val_string);
  757. if (tmp_value >= MIN_TEMP_MIN_RANGE && tmp_value <= MIN_TEMP_MAX_RANGE) {
  758. ret = SNMP_ERR_NOERROR;
  759. }
  760. break;
  761. case 35:
  762. val_string = (char *)value;
  763. val_string[len] = 0;
  764. for (j = 0; j < len; j ++) {
  765. if (!isfloatdigit(val_string[j])) {
  766. return ret;
  767. }
  768. }
  769. tmp_value = atof(val_string);
  770. if (tmp_value >= HIST_TEMP_MIN_RANGE && tmp_value <= HIST_TEMP_MAX_RANGE) {
  771. ret = SNMP_ERR_NOERROR;
  772. }
  773. break;
  774. case 36:
  775. val_string = (char *)value;
  776. val_string[len] = 0;
  777. for (j = 0; j < len; j ++) {
  778. if (!isdigit_int(val_string[j])) {
  779. return ret;
  780. }
  781. }
  782. tmp_value = atof(val_string);
  783. if (tmp_value >= MAX_LOAD_MIN_RANGE && tmp_value <= MAX_LOAD_MAX_RANGE) {
  784. ret = SNMP_ERR_NOERROR;
  785. }
  786. break;
  787. case 37:
  788. val_string = (char *)value;
  789. val_string[len] = 0;
  790. for (j = 0; j < len; j ++) {
  791. if (!isfloatdigit(val_string[j])) {
  792. return ret;
  793. }
  794. }
  795. tmp_value = atof(val_string);
  796. if (tmp_value >= HIST_LOAD_MIN_RANGE && tmp_value <= HIST_LOAD_MAX_RANGE) {
  797. ret = SNMP_ERR_NOERROR;
  798. }
  799. break;
  800. case 38:
  801. val_string = (char *)value;
  802. val_string[len] = 0;
  803. if (len > 1 && len < 5) {
  804. bool fail = false;
  805. if (val_string[0] != '-' && val_string[0] != '+') {
  806. fail = true;
  807. }
  808. if (!isdigit_int(val_string[1]) && (!isdigit_int(val_string[2]) && val_string[2] != '.')
  809. && (!isdigit_int(val_string[3]) && val_string[3] != '.')) {
  810. fail = true;
  811. }
  812. if (len == 5) {
  813. if (!isdigit_int(val_string[4])) {
  814. fail = true;
  815. }
  816. }
  817. if (!fail) {
  818. tmp_value = atof(val_string);
  819. if (tmp_value >= -12.0 && tmp_value <= 12.0) {
  820. ret = SNMP_ERR_NOERROR;
  821. }
  822. }
  823. }
  824. break;
  825. case 39:
  826. val_string = (char *)value;
  827. val_string[len] = 0;
  828. if (len == 1) {
  829. if (val_string[0] == '0' || val_string[0] == '1') {
  830. ret = SNMP_ERR_NOERROR;
  831. }
  832. }
  833. break;
  834. case 42:
  835. val_string = (char *)value;
  836. val_string[len] = 0;
  837. if (len == 10) {
  838. for (j = 0; j < len; j++) {
  839. if (j != 4 && j != 7) {
  840. if (val_string[j] > 0x39 || val_string[j] < 0x30) {
  841. fail = true;
  842. break;
  843. }
  844. } else if (j == 4 || j == 7) {
  845. if (val_string[j] != '-') {
  846. fail = true;
  847. break;
  848. }
  849. }
  850. }
  851. if (!fail) {
  852. uint16_t temp = 0;
  853. temp = 1000 * (val_string[0] - 0x30) + 100 * (val_string[1] - 0x30) + 10 * (val_string[2] - 0x30) + val_string[3] -
  854. 0x30;
  855. if (temp > 2099 || temp < 2000) {
  856. fail = true;
  857. }
  858. temp = 0;
  859. temp = 10 * (val_string[5] - 0x30) + (val_string[6] - 0x30);
  860. if (temp > 12) {
  861. fail = true;
  862. }
  863. temp = 0;
  864. temp = 10 * (val_string[8] - 0x30) + (val_string[9] - 0x30);
  865. if (temp > 31) {
  866. fail = true;
  867. }
  868. }
  869. if (!fail) {
  870. ret = SNMP_ERR_NOERROR;
  871. }
  872. }
  873. break;
  874. case 43:
  875. val_string = (char *)value;
  876. val_string[len] = 0;
  877. if (len == 5) {
  878. for (j = 0; j < len; j++) {
  879. if (j != 2) {
  880. if (val_string[j] > 0x39 || val_string[j] < 0x30) {
  881. fail = true;
  882. break;
  883. }
  884. } else if (j == 2) {
  885. if (val_string[j] != ':') {
  886. fail = true;
  887. break;
  888. }
  889. }
  890. }
  891. if (!fail) {
  892. uint16_t temp = 0;
  893. temp = 10 * (val_string[0] - 0x30) + (val_string[1] - 0x30);
  894. if (temp > 23) {
  895. fail = true;
  896. }
  897. temp = 0;
  898. temp = 10 * (val_string[3] - 0x30) + (val_string[4] - 0x30);
  899. if (temp > 59) {
  900. fail = true;
  901. }
  902. }
  903. if (!fail) {
  904. ret = SNMP_ERR_NOERROR;
  905. }
  906. }
  907. break;
  908. case 48:
  909. val_string = (char *)value;
  910. val_string[len] = 0;
  911. for (j = 0; j < len; j ++) {
  912. if (!isdigit_int(val_string[j])) {
  913. return ret;
  914. }
  915. }
  916. val = atoi(val_string);
  917. if (val >= CAPACITY_MIN_RANGE && val <= CAPACITY_MAX_RANGE) {
  918. ret = SNMP_ERR_NOERROR;
  919. }
  920. break;
  921. };
  922. return ret;
  923. }
  924. #endif