private_mib_bt6709.c 29 KB

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