| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563 | 
							- #ifdef HARDWARE_BT6703
 
- #include "stm32f4xx.h"  
 
- #include "private_mib.h"
 
- #include "parameters.h"
 
- #include "settings_api.h"
 
- #include "log.h"
 
- #include "megatec.h"
 
- #include "FreeRTOS.h"
 
- #include "task.h"
 
- #ifdef PRINTF_STDLIB
 
- #include <stdio.h>
 
- #endif
 
- #ifdef PRINTF_CUSTOM
 
- #include "tinystdio.h"
 
- #endif
 
- #include "lwip/apps/snmp_scalar.h"
 
- #include "lwip/apps/snmp.h"
 
- //#include "snmp_core.h"
 
- extern struct snmp_mib mib2;
 
- /**
 
-   * @brief  Общая структура настроек
 
-   */
 
- extern SETTINGS_t sSettings;
 
- static s16_t signal_get_value(struct snmp_node_instance* instance, void* value);
 
- static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t len, void* value);
 
- static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len, void* value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.18  */
 
- static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.17  */
 
- static const struct snmp_scalar_node signal17 = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.16  */
 
- static const struct snmp_scalar_node signal16 = SNMP_SCALAR_CREATE_NODE_READONLY(16, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.15  */
 
- static const struct snmp_scalar_node signal15 = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.14  */
 
- static const struct snmp_scalar_node signal14 = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.13  */
 
- static const struct snmp_scalar_node signal13 = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.12  */
 
- static const struct snmp_scalar_node signal12 = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.11  */
 
- static const struct snmp_scalar_node signal11 = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.10  */
 
- static const struct snmp_scalar_node signal10 = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.9  */
 
- static const struct snmp_scalar_node signal9 = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.8  */
 
- 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);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.7  */
 
- 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);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.6  */
 
- static const struct snmp_scalar_node signal6 = SNMP_SCALAR_CREATE_NODE(6, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.5  */
 
- static const struct snmp_scalar_node signal5 = SNMP_SCALAR_CREATE_NODE(5, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.4  */
 
- static const struct snmp_scalar_node signal4 = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.3  */
 
- 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);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.2  */
 
- 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);
 
- /* signal .1.3.6.1.4.1.41752.911.6.1.1  */
 
- static const struct snmp_scalar_node signal1 = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
- // signals .1.3.6.1.4.1.41752.911.6.1 
 
- static const struct snmp_node* const signals_nodes[] = {
 
- /*  &test_signal.node.node,
 
-   &test_signal2.node.node,
 
-   &test_signal3.node.node*/
 
- 	&signal1.node.node,
 
- 	&signal2.node.node,
 
- 	&signal3.node.node,
 
- 	&signal4.node.node,
 
- 	&signal5.node.node,
 
- 	&signal6.node.node,
 
- 	&signal7.node.node,
 
- 	&signal8.node.node,
 
- 	&signal9.node.node,
 
- 	&signal10.node.node,
 
- 	&signal11.node.node,
 
- 	&signal12.node.node,
 
- 	&signal13.node.node,
 
- 	&signal14.node.node,
 
- 	&signal15.node.node,
 
- 	&signal16.node.node,
 
- 	&signal17.node.node,
 
- 	&signal18.node.node,
 
- };
 
- static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 
- // bt_6702 .1.3.6.1.4.1.41752.911.6 
 
- static const struct snmp_node* const bt6703_nodes[] = {
 
-   &signals_node.node
 
- };
 
- static const struct snmp_tree_node bt6703_node = SNMP_CREATE_TREE_NODE(6, bt6703_nodes);
 
- // swt .1.3.6.1.4.1.41752.911 
 
- static const struct snmp_node* const swt_nodes[] = {
 
-   &bt6703_node.node
 
- };
 
- static const struct snmp_tree_node swt_node = SNMP_CREATE_TREE_NODE(911, swt_nodes);
 
- // rotek .1.3.6.1.4.1.41752 
 
- static const struct snmp_node* const rotek_nodes[] = {
 
-   &swt_node.node
 
- };
 
- static const struct snmp_tree_node rotek_node = SNMP_CREATE_TREE_NODE(41752, rotek_nodes);
 
- // enterprises .1.3.6.1.4.1 
 
- static const struct snmp_node* const enterprises_nodes[] = {
 
-   &rotek_node.node
 
- };
 
- static const struct snmp_tree_node enterprises_node = SNMP_CREATE_TREE_NODE(1, enterprises_nodes);
 
- // private .1.3.6.1.4 
 
- static const struct snmp_node* const private_nodes[] = {
 
-   &enterprises_node.node
 
- };
 
- static const struct snmp_tree_node private_root = SNMP_CREATE_TREE_NODE(0, private_nodes);
 
- static const u32_t prvmib_base_oid[] = { 1,3,6,1,4 };
 
- static const struct snmp_mib private_mib = SNMP_MIB_CREATE(prvmib_base_oid, &private_root.node);
 
- void lwip_privmib_init(void)
 
- {
 
-     static const struct snmp_mib *my_snmp_mibs[] = {&mib2, &private_mib};
 
-    
 
-     snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
 
- }
 
- static s16_t signal_get_value(struct snmp_node_instance* instance, void* value)
 
- {
 
- 	u8_t *paramStr = (u8_t*)value;
 
- 	u8_t paramLength = 0;
 
-     u32_t oid = instance->node->oid; // id сигнала
 
-     switch (oid){
 
- 	case 1: /* FWVersion */
 
- 		GetVersionStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 4: /* UPSModel*/
 
- 		GetUPSModelStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 5: /* DO1*/
 
- 		GetDOUTStatusStr((char*)paramStr, ¶mLength, 0);
 
- 		break;
 
- 	case 6: /* DO2*/
 
- 		GetDOUTStatusStr((char*)paramStr, ¶mLength, 1);
 
- 		break;
 
- 	case 9: /* DIO*/
 
- 		GetDINStatusStr((char*)paramStr, ¶mLength, 0);
 
- 		break;
 
- 	case 10: /* IntTemp */
 
- 		GetInternalTempStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 11: /* InFreq */
 
- 		GetInputFreqStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 12: /* InVoltVAC */
 
- 		GetInputVoltageStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 13: /* OutVoltVAC */
 
- 		GetOutputVoltageStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 14: /* Power */
 
- 		GetPowerStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 15: /* BatCap */
 
- 		GetBatCapacityStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 16: /* BatTime */
 
- 		GetRuntimeStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 17: /* ConnectMonitor */
 
- 		GetConnectMonitorStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	case 18: /* Alarms */
 
- 		GetAlarmStr((char*)paramStr, ¶mLength);
 
- 		break;
 
- 	default:
 
- 	break;
 
-     }
 
-     return paramLength;
 
- }
 
- static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t len, void* value)
 
- {
 
- 	u32_t oid = instance->node->oid; // id сигнала
 
- 	char *val_string;
 
- 	char str[20];
 
- 	int8_t res = 0;
 
- 	s32_t val;
 
-      memset(str, 0, 20);
 
-     switch (oid)
 
-     {
 
-       case 2: /* RestoreSignal */
 
-         val = *(s32_t*)value;
 
-         if (val == 1) {
 
-       //	SNMP_SendUserTrap(DEVICE_RESTORED);
 
-   		log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
 
-   		vTaskDelay(500);
 
-   		SETTINGS_SetPartDefault();
 
-   		SETTINGS_Save();
 
-         }
 
-       break;
 
-       case 3: /* RebootSignal */
 
-         val = *(s32_t*)value;
 
-         if (val == 1){
 
- #ifndef BT6702_SERVICE
 
-   	//	SNMP_SendUserTrap(DEVICE_REBOOTED);
 
-   		log_event_data(LOG_SYSTEM_BOOT, "Администратор");
 
-   		vTaskDelay(1010);
 
-   		LOG_Disable();
 
- #endif
 
-   		NVIC_SystemReset();
 
-         }
 
-       break;
 
-   	case 5: /* DO1 */
 
-   	  if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET){
 
-   		  val_string = (char*)value;
 
-   		  SetROStr(val_string, 0);
 
-   		  if(val_string[0] == 0x31)
 
-   			  strcat(str, "Замкнуто");
 
-   		  else
 
-   			  strcat(str, "Разомкнуто");
 
-   		//  SNMP_SendUserTrap(DO0_TOGGLED);
 
-   		  log_event_data(LOG_DO0_STATE, str);
 
-   	  }
 
-   	  break;
 
-   	case 6: /* DO2 */
 
-   	  if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET){
 
-   		  val_string = (char*)value;
 
-   		  SetROStr(val_string, 1);
 
-   		  if(val_string[0] == 0x31)
 
-   			  strcat(str, "Замкнуто");
 
-   		  else
 
-   			  strcat(str, "Разомкнуто");
 
-   		//  SNMP_SendUserTrap(DO1_TOGGLED);
 
-   		  log_event_data(LOG_DO1_STATE, str);
 
-   	  }
 
-   	  break;
 
-   	case 7: /* BatTest */
 
-   	  val =*(s32_t*)value;
 
-   	  if(val == 0){
 
-   		  res = ups_metac_service_pdu(ups_cancel_test);
 
-   		  if(res == 1){
 
-   			  log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
 
-   		  }
 
-   	  }
 
-   	  else if(val > 0 && val < 100){
 
-   		  TimeParam = val;
 
-   		  res = ups_metac_service_pdu(ups_test_time);
 
-   		  if(res == 1){
 
-   			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
 
-   		  }
 
-   	  }
 
-   	  else if(val == 100){
 
-   		  res = ups_metac_service_pdu(ups_test_10sec);
 
-   		  if(res == 1){
 
-   			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
 
-   		  }
 
-   	  }
 
-   	  else if(val == 999){
 
-   		  res = ups_metac_service_pdu(ups_test_low_bat);
 
-   		  if(res == 1){
 
-   			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
 
-   		  }
 
-   	  }
 
-   	  break;
 
-   	case 8: /* Shutdown UPS */
 
-   	  val_string = (char*)value;
 
-   	  float shtdn_val = atof(val_string);
 
-   	  if(shtdn_val == 0){
 
-   		  res = ups_metac_service_pdu(ups_cancel_shut_down);
 
-   		 	if(res == 1){
 
-   		 		log_event_data(LOG_SHUTDOWN_UPS, "Администратор (Останов)");
 
-   		 	}
 
-   	  }
 
-   	  else{
 
-   		TimeParamFloat = shtdn_val;
 
-   		res = ups_metac_service_pdu(ups_shutdown);
 
-   		if(res == 1)
 
-   			log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
 
-   	  }
 
-   	  break;
 
-       default :
 
-     	  return SNMP_ERR_GENERROR;
 
-       break;
 
-     };
 
-   return SNMP_ERR_NOERROR;
 
- }
 
- static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len, void* value)
 
- {
 
- 	snmp_err_t ret = SNMP_ERR_WRONGVALUE;
 
-     char *val_string;
 
-     int32_t val;
 
-     u32_t oid = instance->node->oid; // id сигнала
 
-     switch (oid)
 
-     {
 
-       case 2:
 
-         if ( len == sizeof(s32_t) )
 
-         {
 
-         	ret = SNMP_ERR_NOERROR;
 
-         }
 
-         break;
 
-       case 3:
 
-         if ( len == sizeof(s32_t) )
 
-         {
 
-         	ret = SNMP_ERR_NOERROR;
 
-         }
 
-         break;
 
-   	case 5: /* DO1 */
 
-   		if ( len <= 1 )
 
-   	    {
 
-   		   val_string = (char*)value;
 
-   		   val_string[len] = 0;
 
-   		   if(atoi(val_string) <= 1){
 
-   			   if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET)
 
-   				 ret = SNMP_ERR_NOERROR;
 
-   		   }
 
-   	    }
 
-   	  break;
 
-   	case 6: /* DO2 */
 
-   		if ( len <= 1 )
 
-   		{
 
-   		   val_string = (char*)value;
 
-   		   val_string[len] = 0;
 
-   		   if(atoi(val_string) <= 1){
 
-   			   if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET)
 
-   				 ret = SNMP_ERR_NOERROR;
 
-   		   }
 
-   		}
 
-   	  break;
 
-   	case 7: /* BatTest */
 
-   	   val = *((s32_t*)value);
 
-   	   if((val >= 0 && val <= 100) || val == 999){
 
-   		 ret = SNMP_ERR_NOERROR;
 
-   	   }
 
-   	  break;
 
-   	case 8: /* Shutdown UPS */
 
-   		if ( len <= 3 )
 
-   		{
 
-   		   val_string = (char*)value;
 
-   		   val_string[len] = 0;
 
-   		   if(atof(val_string) <= 10){
 
-   			 ret = SNMP_ERR_NOERROR;
 
-   		   }
 
-   		}
 
-   	  break;
 
-     };
 
-   return ret;
 
- }
 
- #endif
 
- #if 0
 
- #include "private_mib.h"
 
- #include "lwip/snmp.h"
 
- #include "lwip/snmp_msg.h"
 
- #include "lwip/snmp_asn1.h"
 
- #include "lwip/snmp_structs.h"
 
- #include "settings_api.h"
 
- #include "parameters.h"
 
- #include "web_params_api.h"
 
- #include "snmp_api.h"
 
- #include "trap_api.h"
 
- #include "common_config.h"
 
- #include "log.h"
 
- #include "megatec.h"
 
- #include "FreeRTOS.h"
 
- #include "task.h"
 
- #ifdef PRINTF_STDLIB
 
- #include <stdio.h>
 
- #endif
 
- #ifdef PRINTF_CUSTOM
 
- #include "tinystdio.h"
 
- #endif
 
- #include <stdlib.h>
 
- /**
 
-   * @brief  Общая структура настроек
 
-   */
 
- extern SETTINGS_t sSettings;
 
- extern float TimeParamFloat;
 
- extern void ocstrncpy(u8_t *dst, u8_t *src, u16_t n);
 
- char paramStr[255];
 
- uint8_t paramLength = 0;
 
- uint32_t paramInt = 0;
 
- static void system_get_object_def_ee( u8_t ident_len, s32_t *ident, struct obj_def *od );
 
- static void system_get_value_ee(struct obj_def *od, u16_t len, void *value);
 
- static u8_t system_set_test_ee(struct obj_def *od, u16_t len, void *value);
 
- static void system_set_value_ee(struct obj_def *od, u16_t len, void *value);
 
- /* Функции для узла Signals */
 
- static void signals_get_object_def (u8_t ident_len, s32_t *ident, struct obj_def *od);
 
- static void signals_get_value (struct obj_def *od, u16_t len, void *value);
 
- static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value);
 
- static void signals_set_value (struct obj_def *od, u16_t len, void *value);
 
- /*------------------------------------------------------------------------------
 
-  Описание узлов 
 
- ------------------------------------------------------------------------------*/
 
- /* узел SYSTEM (операции с EEPROM) */
 
- /*             0 1 2 3 4 5 6 */
 
- /* system .1.3.6.1.2.1.1 */
 
- const mib_scalar_node system_scalar_ee = {
 
-   &system_get_object_def_ee,
 
-   &system_get_value_ee,
 
-   &system_set_test_ee,
 
-   &system_set_value_ee,
 
-   MIB_NODE_SC,
 
-   0
 
- };
 
- // переменные узла SIGNALS ------------------------------------------
 
- const mib_scalar_node signals_var = 
 
- {
 
-   &signals_get_object_def,
 
-   &signals_get_value,
 
-   &signals_set_test,
 
-   &signals_set_value,
 
-   MIB_NODE_SC,
 
-   0
 
- };
 
- // узел SIGNALS -----------------------------------------------------
 
- const s32_t signals_ids[18] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };
 
- struct mib_node* const signals_nodes[18] =
 
- {
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
-   (struct mib_node* const)&signals_var,
 
- };
 
- const struct mib_array_node signals = 
 
- {
 
-   &noleafs_get_object_def,
 
-   &noleafs_get_value,
 
-   &noleafs_set_test,
 
-   &noleafs_set_value,
 
-   MIB_NODE_AR,
 
-   18,
 
-   signals_ids,
 
-   signals_nodes
 
- };
 
- // узел BT-6701 ------------------------------------------------------------
 
- const s32_t bt6701_ids[1] = { 1 };
 
- struct mib_node* const bt6701_nodes[1] = 
 
- {
 
-   (struct mib_node* const)&signals,
 
- };
 
- const struct mib_array_node bt6701 = 
 
- {
 
-   &noleafs_get_object_def,
 
-   &noleafs_get_value,
 
-   &noleafs_set_test,
 
-   &noleafs_set_value,
 
-   MIB_NODE_AR,
 
-   1,
 
-   bt6701_ids,
 
-   bt6701_nodes
 
- };
 
- // узел swt ------------------------------------------------------------
 
- const s32_t swt_ids[1] = { 
 
- 3
 
- };
 
- struct mib_node* const swt_nodes[1] = 
 
- {
 
-   (struct mib_node* const)&bt6701,
 
- };
 
- const struct mib_array_node swt = 
 
- {
 
-   &noleafs_get_object_def,
 
-   &noleafs_get_value,
 
-   &noleafs_set_test,
 
-   &noleafs_set_value,
 
-   MIB_NODE_AR,
 
-   1,
 
-   swt_ids,
 
-   swt_nodes
 
- };
 
- // узел ROTEK ------------------------------------------------------------
 
- const s32_t rotek_ids[1] = { 911 };
 
- struct mib_node* const rotek_nodes[1] = 
 
- {
 
-   (struct mib_node* const)&swt,
 
- };
 
- const struct mib_array_node rotek = 
 
- {
 
-   &noleafs_get_object_def,
 
-   &noleafs_get_value,
 
-   &noleafs_set_test,
 
-   &noleafs_set_value,
 
-   MIB_NODE_AR,
 
-   1,
 
-   rotek_ids,
 
-   rotek_nodes
 
- };
 
- // узел ENTERPRISES -------------------------------------------------------
 
- const s32_t enterprises_ids[1] = { 41752 };
 
- struct mib_node* const enterprises_nodes[1] = 
 
- {
 
-   (struct mib_node* const)&rotek
 
- };
 
- const struct mib_array_node enterprises = 
 
- {
 
-   &noleafs_get_object_def,
 
-   &noleafs_get_value,
 
-   &noleafs_set_test,
 
-   &noleafs_set_value,
 
-   MIB_NODE_AR,
 
-   1,
 
-   enterprises_ids,
 
-   enterprises_nodes
 
- };
 
- // узел PRIVATE -----------------------------------------------------------
 
- const s32_t mib_private_ids[1] = { 1 };
 
- struct mib_node* const mib_pivate_nodes[1] = 
 
- {
 
-   (struct mib_node* const)&enterprises
 
- };
 
- const struct mib_array_node mib_private = 
 
- {
 
-   &noleafs_get_object_def,
 
-   &noleafs_get_value,
 
-   &noleafs_set_test,
 
-   &noleafs_set_value,
 
-   MIB_NODE_AR,
 
-   1,
 
-   mib_private_ids,
 
-   mib_pivate_nodes
 
- };
 
- /*------------------------------------------------------------------------------
 
-  Функции
 
- ------------------------------------------------------------------------------*/
 
- // Функции для узла SIGNALS
 
- /**-----------------------------------------------------------------------------
 
-  \fn     static void signals_get_object_def (u8_t ident_len, s32_t *ident, struct obj_def *od)
 
-  \brief  функция получения свойств переменных узла Identification
 
-  \param  ident_len - the address length. длина адреса
 
-  \param  ident - points to objectname.0 (object id trailer) 
 
-  \param  od - points to object definition. указатель на описание переменной
 
-  \return нет
 
- ------------------------------------------------------------------------------*/
 
- static void signals_get_object_def (u8_t ident_len, s32_t *ident, struct obj_def *od)
 
- {
 
-   u8_t id;
 
-   
 
-   /* return to object name, adding index depth (1) */
 
-   ident_len += 1;
 
-   ident -= 1;
 
-   if (ident_len == 2)
 
-   {
 
-     od->id_inst_len = ident_len;
 
-     od->id_inst_ptr = ident;
 
-     id =     [0];
 
-     
 
-     switch (id)
 
-     {
 
-       case 1: /* FWVersion */
 
- 		GetVersionStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;
 
- 	 case 2: /* RestoreSignal */
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_WRITE_ONLY;
 
-         od->asn_type = SNMP_ASN1_INTEG;
 
-         od->v_len = sizeof(s32_t);
 
-         break;
 
- 	  case 3: /* RebootSignal */
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_WRITE_ONLY;
 
-         od->asn_type = SNMP_ASN1_INTEG;
 
-         od->v_len = sizeof(s32_t);
 
-         break;
 
- 	  case 4: /* UPSModel*/
 
- 		GetUPSModelStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;
 
- 	  case 5: /* DO1*/
 
- 		GetDOUTStatusStr(paramStr, ¶mLength, 0);
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
- 		od->access = MIB_OBJECT_READ_WRITE;
 
- 		od->asn_type = SNMP_ASN1_OC_STR;
 
- 		od->v_len = paramLength;
 
- 		break;
 
- 	  case 6: /* DO2*/
 
- 		GetDOUTStatusStr(paramStr, ¶mLength, 1);
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
- 		od->access = MIB_OBJECT_READ_WRITE;
 
- 		od->asn_type = SNMP_ASN1_OC_STR;
 
- 		od->v_len = paramLength;
 
- 		break;
 
- 	  case 7: /* BatTest*/
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
- 		od->access = MIB_OBJECT_WRITE_ONLY;
 
- 		od->asn_type = SNMP_ASN1_INTEG;
 
- 		od->v_len = sizeof(s32_t);
 
- 		break;
 
- 	  case 8: /* Shutdown UPS*/
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
- 		od->access = MIB_OBJECT_WRITE_ONLY;
 
- 		od->asn_type = SNMP_ASN1_OC_STR;
 
- 		od->v_len = paramLength;
 
- 		break;
 
- 	  case 9: /* DIO*/
 
- 		GetDINStatusStr(paramStr, ¶mLength, 0);
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
- 		od->access = MIB_OBJECT_READ_ONLY;
 
- 		od->asn_type = SNMP_ASN1_OC_STR;
 
- 		od->v_len = paramLength;
 
- 		break;
 
- 	  case 10: /* IntTemp */
 
- 		GetInternalTempStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;
 
- 	  case 11: /* InFreq */
 
- 		GetInputFreqStr(paramStr, ¶mLength);
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
- 		break;
 
- 	  case 12: /* InVoltVAC */
 
- 		GetInputVoltageStr(paramStr, ¶mLength);
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
- 		break;
 
- 	  case 13: /* OutVoltVAC */
 
- 		GetOutputVoltageStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;
 
- 	  case 14: /* Power */
 
- 		GetPowerStr(paramStr, ¶mLength);
 
- 		od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
- 		break;
 
- 	  case 15: /* BatCap */
 
- 		GetBatCapacityStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;
 
- 	  case 16: /* BatTime */
 
- 		GetRuntimeStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;	
 
-       case 17: /* ConnectMonitor */
 
- 		GetConnectMonitorStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;
 
-       case 18: /* Alarms */
 
-     	GetAlarmStr(paramStr, ¶mLength);
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_ONLY;
 
-         od->asn_type = SNMP_ASN1_OC_STR;
 
-         od->v_len = paramLength;
 
-         break;
 
-       default:
 
-         //LWIP_DEBUGF(SNMP_MIB_DEBUG,("planar_get_object_def: no such object\n"));
 
-         od->instance = MIB_OBJECT_NONE;
 
-         break;
 
-     };
 
-   }
 
-   else
 
-   {
 
-     LWIP_DEBUGF(SNMP_MIB_DEBUG,("planar_get_object_def: no scalar\n"));
 
-     od->instance = MIB_OBJECT_NONE;
 
-   }
 
- }
 
- /**-----------------------------------------------------------------------------
 
-  \fn     static void Identification_get_value(struct obj_def *od, u16_t len, void *value)
 
-  \brief  функция получения значения переменных узла Identification
 
-  \param  obj_def - указатель на описание переменной
 
-  \param  len - длина переменной в байтах 
 
-  \param  value - указатель на значение переменной
 
-  \return нет
 
- ------------------------------------------------------------------------------*/
 
- static void signals_get_value (struct obj_def *od, u16_t len, void *value)
 
- {
 
-   u8_t id;
 
-   
 
-   id = od->id_inst_ptr[0];
 
-   
 
-   switch (id)
 
-   {
 
-     case 1: /* FWVersion */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
- 	case 2: /* RestoreSignal */
 
- 	  *((s32_t*)value) = 0;
 
-       break;
 
- 	case 3: /* RebootSignal */
 
- 	  *((s32_t*)value) = 0;
 
-       break;
 
- 	case 4: /* UPSModel */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
- 	  break;
 
- 	case 5: /* DO1 */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
- 	  break;
 
- 	case 6: /* DO2 */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
- 	  break;
 
- 	case 7: /* BatTest */
 
- 	  *((s32_t*)value) = 0;
 
- 	  break;
 
- 	case 8: /* Shutdown UPS */
 
- 	  *((s32_t*)value) = 0;
 
- 	  break;
 
- 	case 9: /* DIO */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
- 	  break;
 
- 	case 10: /* IntTemp */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;  
 
- 	case 11: /* InFreq */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
- 	case 12: /* InVoltVAC */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
- 	case 13: /* OutVoltVAC */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
- 	case 14: /* Power */
 
-       ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
- 	case 15: /* BatCap */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
-     case 16: /* BatTime */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
-     case 17: /* ConnectMonitor */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
-     case 18: /* Alarms */
 
- 	  ocstrncpy((u8_t*)value, (u8_t*)paramStr, len);
 
-       break;
 
-     default :
 
- 	  break;
 
-   };
 
- }
 
- /**-----------------------------------------------------------------------------
 
-  \fn     static void Identification_set_value (struct obj_def *od, u16_t len, void *value)
 
-  \brief  функция записи значений переменных узла Identification
 
-  \param  obj_def - указатель на описание переменной
 
-  \param  len - длина переменной в байтах 
 
-  \param  value - указатель на значение переменной
 
-  \return нет
 
- ------------------------------------------------------------------------------*/
 
- static void signals_set_value (struct obj_def *od, u16_t len, void *value)
 
- {
 
-   u8_t id;
 
-   uint32_t val;
 
-   char *val_string;
 
-   char str[20];
 
-   int8_t res = 0;
 
-   memset(str, 0, 20);
 
-   
 
-   id = od->id_inst_ptr[0];
 
-   
 
-   switch (id)
 
-   {
 
-     case 2: /* RestoreSignal */
 
-       val = *((s32_t*)value);
 
-       if (val == 1) {
 
-     	SNMP_SendUserTrap(DEVICE_RESTORED);
 
- 		log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
 
- 		vTaskDelay(500);
 
- 		SETTINGS_SetPartDefault();
 
- 		SETTINGS_Save();
 
-       }
 
-     break;
 
-     case 3: /* RebootSignal */
 
-       val = *((s32_t*)value);
 
-       if (val == 1){
 
- #ifndef BT6702_SERVICE
 
- 		SNMP_SendUserTrap(DEVICE_REBOOTED);
 
- 		log_event_data(LOG_SYSTEM_BOOT, "Администратор");
 
- 		vTaskDelay(1010);
 
- 		LOG_Disable();
 
- #endif
 
- 		NVIC_SystemReset();
 
-       }
 
-     break;
 
- 	case 5: /* DO1 */
 
- 	  if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET){
 
- 		  val_string = (char*)value;
 
- 		  SetROStr(val_string, 0);
 
- 		  if(val_string[0] == 0x31)
 
- 			  strcat(str, "Замкнуто");
 
- 		  else
 
- 			  strcat(str, "Разомкнуто");
 
- 		  SNMP_SendUserTrap(DO0_TOGGLED);
 
- 		  log_event_data(LOG_DO0_STATE, str);
 
- 	  }
 
- 	  break;
 
- 	case 6: /* DO2 */
 
- 	  if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET){
 
- 		  val_string = (char*)value;
 
- 		  SetROStr(val_string, 1);
 
- 		  if(val_string[0] == 0x31)
 
- 			  strcat(str, "Замкнуто");
 
- 		  else
 
- 			  strcat(str, "Разомкнуто");
 
- 		  SNMP_SendUserTrap(DO1_TOGGLED);
 
- 		  log_event_data(LOG_DO1_STATE, str);
 
- 	  }
 
- 	  break;
 
- 	case 7: /* BatTest */
 
- 	  val =*((s32_t*)value);
 
- 	  if(val == 0){
 
- 		  res = ups_metac_service_pdu(ups_cancel_test);
 
- 		  if(res == 1){
 
- 			  log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
 
- 		  }
 
- 	  }
 
- 	  else if(val > 0 && val < 100){
 
- 		  TimeParam = val;
 
- 		  res = ups_metac_service_pdu(ups_test_time);
 
- 		  if(res == 1){
 
- 			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
 
- 		  }
 
- 	  }
 
- 	  else if(val == 100){
 
- 		  res = ups_metac_service_pdu(ups_test_10sec);
 
- 		  if(res == 1){
 
- 			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
 
- 		  }
 
- 	  }
 
- 	  else if(val == 999){
 
- 		  res = ups_metac_service_pdu(ups_test_low_bat);
 
- 		  if(res == 1){
 
- 			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
 
- 		  }
 
- 	  }
 
- 	  break;
 
- 	case 8: /* Shutdown UPS */
 
- 	  val_string = (char*)value;
 
- 	  float shtdn_val = atof(val_string);
 
- 	  if(shtdn_val == 0){
 
- 		  res = ups_metac_service_pdu(ups_cancel_shut_down);
 
- 		 	if(res == 1){
 
- 		 		log_event_data(LOG_SHUTDOWN_UPS, "Администратор (Останов)");
 
- 		 	}
 
- 	  }
 
- 	  else{
 
- 		TimeParamFloat = shtdn_val;
 
- 		res = ups_metac_service_pdu(ups_shutdown);
 
- 		if(res == 1)
 
- 			log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
 
- 	  }
 
- 	  break;
 
-     default :
 
-     break;
 
-   };
 
-   
 
- }
 
- /**-----------------------------------------------------------------------------
 
-  \fn     static u8_t Identification_set_test (struct obj_def *od, u16_t len, void *value)
 
-  \brief  функция проверки записываемых значений переменных узла Identification
 
-  \param  obj_def - указатель на описание переменной
 
-  \param  len - длина переменной в байтах 
 
-  \param  value - указатель на значение переменной
 
-  \return 0 - некорректное значение
 
-          1 - корректное значение
 
- ------------------------------------------------------------------------------*/
 
- static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value)
 
- {
 
-   u8_t id, set_ok;
 
-   char *val_string;
 
-   int32_t val;
 
-   LWIP_UNUSED_ARG(value);
 
-   set_ok = 0;
 
-   id = od->id_inst_ptr[0];
 
-   
 
-   switch (id)
 
-   {
 
-     case 2: 
 
-       if ( len == sizeof(s32_t) )
 
-       {
 
-         set_ok = 1;
 
-       }
 
-       break;  
 
- 	  
 
-     case 3: 
 
-       if ( len == sizeof(s32_t) )
 
-       {
 
-         set_ok = 1;
 
-       }
 
-       break; 
 
- 	case 5: /* DO1 */
 
- 		if ( len <= 1 )
 
- 	    {
 
- 		   val_string = (char*)value;
 
- 		   val_string[len] = 0;
 
- 		   if(atoi(val_string) <= 1){
 
- 			   if(sSettings.sInOuts.ro_type_source[0] == SNMP_SET)
 
- 				   set_ok = 1;
 
- 		   }
 
- 	    }
 
- 	  break;
 
- 	case 6: /* DO2 */
 
- 		if ( len <= 1 )
 
- 		{
 
- 		   val_string = (char*)value;
 
- 		   val_string[len] = 0;
 
- 		   if(atoi(val_string) <= 1){
 
- 			   if(sSettings.sInOuts.ro_type_source[1] == SNMP_SET)
 
- 				   set_ok = 1;
 
- 		   }
 
- 		}
 
- 	  break;
 
- 	case 7: /* BatTest */
 
- 	   val = *((s32_t*)value);
 
- 	   if((val >= 0 && val <= 100) || val == 999){
 
- 		   set_ok = 1;
 
- 	   }
 
- 	  break;
 
- 	case 8: /* Shutdown UPS */
 
- 		if ( len <= 3 )
 
- 		{
 
- 		   val_string = (char*)value;
 
- 		   val_string[len] = 0;
 
- 		   if(atof(val_string) <= 10){
 
- 			set_ok = 1;
 
- 		   }
 
- 		}
 
- 	  break;
 
-   };
 
-   
 
-   return set_ok;
 
- }
 
- /**
 
-  * Returns systems object definitions (eeprom).
 
-  *
 
-  * @param ident_len the address length (2)
 
-  * @param ident points to objectname.0 (object id trailer)
 
-  * @param od points to object definition.
 
-  */
 
- static void
 
- system_get_object_def_ee(u8_t ident_len, s32_t *ident, struct obj_def *od)
 
- {
 
-   u8_t id;
 
-   /* return to object name, adding index depth (1) */
 
-   ident_len += 1;
 
-   ident -= 1;
 
-   if (ident_len == 2)
 
-   {
 
-     od->id_inst_len = ident_len;
 
-     od->id_inst_ptr = ident;
 
-     id = ident[0];
 
-     //LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def_ee system.%"U16_F".0\n",(u16_t)id));
 
-     switch (id)
 
-     {
 
-       case 4: /* sysContact */
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_WRITE;
 
-         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
 
-         od->v_len = 1 /*GetSnmpStringLen(SNMP_SYSCONTACT_TYPE)*/;
 
-         break;
 
-       case 5: /* sysName */
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_WRITE;
 
-         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
 
-         od->v_len = 1 /*GetSnmpStringLen(SNMP_SYSNAME_TYPE)*/;
 
-         break;
 
-       case 6: /* sysLocation */
 
-         od->instance = MIB_OBJECT_SCALAR;
 
-         od->access = MIB_OBJECT_READ_WRITE;
 
-         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
 
-         od->v_len = 1 /*GetSnmpStringLen(SNMP_SYSLOCATION_TYPE)*/;
 
-         break;
 
-       default:
 
-         //LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def_ee: no such object\n"));
 
-         od->instance = MIB_OBJECT_NONE;
 
-         break;
 
-     };
 
-   }
 
-   else
 
-   {
 
-     LWIP_DEBUGF(SNMP_MIB_DEBUG,("system_get_object_def_ee: no scalar\n"));
 
-     od->instance = MIB_OBJECT_NONE;
 
-   }
 
- }
 
- // ----------------------------------------------------------------------------
 
- /**
 
-  * Returns system object value.
 
-  *
 
-  * @param ident_len the address length (2)
 
-  * @param ident points to objectname.0 (object id trailer)
 
-  * @param len return value space (in bytes)
 
-  * @param value points to (varbind) space to copy value into.
 
-  */
 
- static void
 
- system_get_value_ee(struct obj_def *od, u16_t len, void *value)
 
- {
 
-   u8_t id;
 
-   id = od->id_inst_ptr[0];
 
-   switch (id)
 
-   {
 
-     case 4: /* sysContact */
 
-       //GetSnmpString(SNMP_SYSCONTACT_TYPE, value, len );
 
-       break;
 
-     case 5: /* sysName */
 
-       //GetSnmpString(SNMP_SYSNAME_TYPE, value, len );
 
-       break;
 
-     case 6: /* sysLocation */
 
-       //GetSnmpString(SNMP_SYSLOCATION_TYPE, value, len );
 
-       break;
 
-   };
 
- }
 
- // ----------------------------------------------------------------------------
 
- static u8_t
 
- system_set_test_ee(struct obj_def *od, u16_t len, void *value)
 
- {
 
-   u8_t id, set_ok;
 
-   LWIP_UNUSED_ARG(value);
 
-   set_ok = 0;
 
-   id = od->id_inst_ptr[0];
 
-   switch (id)
 
-   {
 
-     case 4: /* sysContact */
 
-       if ( len <= 255 )
 
-       {
 
-         set_ok = 1;
 
-       }
 
-       break;
 
-     case 5: /* sysName */
 
-       if ( len <= 255 )
 
-       {
 
-         set_ok = 1;
 
-       }
 
-       break;
 
-     case 6: /* sysLocation */
 
-       if ( len <= 255 )
 
-       {
 
-         set_ok = 1;
 
-       }
 
-       break;
 
-   };
 
-   return set_ok;
 
- }
 
- // ----------------------------------------------------------------------------
 
- static void
 
- system_set_value_ee(struct obj_def *od, u16_t len, void *value)
 
- {
 
-   u8_t id;
 
-   id = od->id_inst_ptr[0];
 
-   switch (id)
 
-   {
 
-     case 4: /* sysContact */
 
-       //SetSnmpString(SNMP_SYSCONTACT_TYPE, value, len );
 
-       //*syscontact_len_ptr = len;
 
-     break;
 
-     case 5: /* sysName */
 
-       //SetSnmpString(SNMP_SYSNAME_TYPE, value, len );
 
-       //*sysname_len_ptr = len;
 
-     break;
 
-     case 6: /* sysLocation */
 
-       //SetSnmpString(SNMP_SYSLOCATION_TYPE, value, len );
 
-       //*syslocation_len_ptr = len;
 
-     break;
 
-   };
 
- }
 
- // ----------------------------------------------------------------------------
 
- /**-----------------------------------------------------------------------------
 
-  \fn     err_t snmp_send_trap_ex (s8_t generic_trap, 
 
-                          struct snmp_obj_id *eoid, 
 
-                          s32_t specific_trap, 
 
-                          struct snmp_obj_id* varbinds, 
 
-                          u8_t varbinds_num)
 
-  \brief  функция посылки трапа с возможностью пристыковывать переменные
 
-  \param  generic_trap  - код трапа
 
-  \param  eoid          - указатель на enterprise object identifier
 
-  \param  specific_trap - used for enterprise traps when generic_trap == 6
 
-  \param  varbinds      - указатель на переменные
 
-  \param  varbinds_num  - число переменных
 
-  \return код ошибки
 
- ------------------------------------------------------------------------------*/
 
- err_t snmp_send_trap_ex (s8_t generic_trap, 
 
-                          struct snmp_obj_id *eoid, 
 
-                          s32_t specific_trap, 
 
-                          struct snmp_obj_id* varbinds, 
 
-                          u8_t varbinds_num)
 
- {
 
- 	uint8_t bSnmpActive = 1;
 
- 	
 
- 	struct snmp_varbind** vb_list;
 
- 	struct mib_node* node;
 
- 	struct obj_def obj;
 
- 	err_t tResult;
 
- 	s32_t* VarNum;
 
-     struct snmp_name_ptr np;
 
- 	
 
- 	/* SNMP не готово - ничего не отправляем */
 
- 	if( !bSnmpActive )
 
- 	{
 
- 		return ERR_MEM;
 
- 	}
 
- 	
 
- 	/* создаем таблицу указателей переменных */
 
- 	pvPortMalloc( varbinds_num * sizeof(struct snmp_varbind*) );
 
- 	/*
 
- 	if(vb_list == NULL)
 
- 	{
 
- 		return ERR_MEM;
 
- 	}
 
- 	*/
 
- 	/* создаем сами переменные */
 
- 	for(u8_t i = 0; i < varbinds_num; i++)
 
- 	{
 
- 		/* ищем узел в дереве*/
 
- 		node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len - 3, 
 
- 										 &varbinds[i].id[4], &np );
 
- 		
 
- 		//node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len, 
 
- 		//								 &varbinds[i].id[0], &np );
 
- 		
 
- 		if(node != NULL)
 
- 		{
 
- 			/* получаем информацию о переменной узла */
 
- 			VarNum = &varbinds[i].id[ varbinds[i].len - 1 ];
 
- 			
 
- 			if( node->node_type == MIB_NODE_EX)
 
- 			{
 
- 				struct mib_external_node* node_ex;
 
- 				node_ex = (struct mib_external_node*)node;
 
- 				/* TODO: подставить правильный rid вместо 0 */
 
- 				node_ex->get_object_def_a(0, 1, VarNum, &obj);
 
- 			}
 
- 			else
 
- 			{
 
- 				node->get_object_def(1, VarNum, &obj);
 
- 			}
 
- 			
 
- 			/* создаем переменную */
 
- 			vb_list[i] = snmp_varbind_alloc(&varbinds[i], obj.asn_type, obj.v_len);
 
- 			if( vb_list[i] != NULL )
 
- 			{
 
- 				{
 
- 					/* получаем значение переменной */
 
- 					if( node->node_type == MIB_NODE_EX)
 
- 					{
 
- 						struct mib_external_node* node_ex;
 
- 						node_ex = (struct mib_external_node*)node;
 
- 						/* TODO: подставить правильный rid вместо 0 */
 
- 						node_ex->get_value_a(0, &obj, obj.v_len, vb_list[i]->value);
 
- 					}
 
- 					else
 
- 					{
 
- 						node->get_value(&obj, obj.v_len, vb_list[i]->value);
 
- 					}
 
- 					/* добавляем переменную в ловушку */
 
- 					snmp_varbind_tail_add(&trap_msg.outvb, vb_list[i]);
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	/* посылаем ловушку */
 
- 	tResult = snmp_send_trap(generic_trap, eoid, specific_trap);
 
- 	
 
- 	/* удаляем переменные из списка */
 
- 	snmp_varbind_list_free(&trap_msg.outvb);
 
- 	
 
- 	/* удаляем указатели переменных */
 
- 	vPortFree(vb_list);
 
- 	
 
- 	return tResult;
 
- }
 
- void SNMP_SendTestTrap(void)
 
- {
 
- /*  
 
-   struct snmp_varbind *vb;
 
-   struct snmp_obj_id objid = {11, {1, 3, 6, 1, 4, 1, 41752, 5, 16, 2, 1}};
 
-   unsigned char msg[] = "Sex, drugs and LwIP";
 
-   unsigned char msglen = 19;
 
-   
 
-   vb = snmp_varbind_alloc(&objid, SNMP_ASN1_OPAQUE, msglen);
 
-   
 
-   vb->value = &msg;
 
-            
 
-   trap_msg.outvb.head = vb;
 
-   trap_msg.outvb.tail = vb;
 
-   trap_msg.outvb.count = 1;
 
-   
 
-   snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, &objid, 0);
 
-      
 
-   trap_msg.outvb.head = NULL;
 
-   trap_msg.outvb.tail = NULL;
 
-   trap_msg.outvb.count = 0;
 
-   //vb->value = NULL;
 
-      
 
-   snmp_varbind_free(vb);
 
- */  
 
-   static struct snmp_obj_id trapObjId = {11, {1, 3, 6, 1, 4, 1, 41752, 5, 16, 2, 1}};
 
-   static struct snmp_obj_id varObjId  = {11, {1, 3, 6, 1, 4, 1, 41752, 5, 16, 1, 1}};
 
-   
 
-   struct snmp_varbind* vb;
 
-   u32_t *u32ptr;
 
-   
 
-   vb = snmp_varbind_alloc(&varObjId, MIB_NODE_SC, 4);
 
-   
 
-   vb->value_len = 4;
 
-   vb->value_type = 0x02;
 
-   u32ptr = vb->value; 	
 
-   *u32ptr = 23;
 
-   
 
-   if( vb != NULL )
 
- 	snmp_varbind_tail_add(&trap_msg.outvb, vb);
 
- 			
 
-   snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, &trapObjId, 0);
 
- 	
 
-   /* удаляем переменные из списка */
 
-   snmp_varbind_list_free(&trap_msg.outvb);
 
-   
 
-   //snmp_send_trap_ex(SNMP_GENTRAP_ENTERPRISESPC, &trapObjId, 0, &varObjId, 1);
 
-   
 
-   
 
- #if 0	
 
- 	struct snmp_varbind** vb_list;
 
- 	struct mib_node* node;
 
- 	struct obj_def obj;
 
- 	err_t tResult;
 
- 	s32_t* VarNum;
 
-     struct snmp_name_ptr np;
 
- 	
 
- 	/* создаем указатель на переменную */
 
- 	pvPortMalloc(sizeof(struct snmp_varbind*) );
 
- 	/* создаем сами переменные */
 
- 	for(u8_t i = 0; i < varbinds_num; i++)
 
- 	{
 
- 		/* ищем узел в дереве*/
 
- 		node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len - 4, 
 
- 										 &varbinds[i].id[4], &np );
 
- 		
 
- 		//node = snmp_search_tree( (struct mib_node*)&internet, varbinds[i].len, 
 
- 		//								 &varbinds[i].id[0], &np );
 
- 		
 
- 		if(node != NULL)
 
- 		{
 
- 			/* получаем информацию о переменной узла */
 
- 			VarNum = &varbinds[i].id[ varbinds[i].len - 1 ];
 
- 			
 
- 			if( node->node_type == MIB_NODE_EX)
 
- 			{
 
- 				struct mib_external_node* node_ex;
 
- 				node_ex = (struct mib_external_node*)node;
 
- 				/* TODO: подставить правильный rid вместо 0 */
 
- 				node_ex->get_object_def_a(0, 1, VarNum, &obj);
 
- 			}
 
- 			else
 
- 			{
 
- 				node->get_object_def(1, VarNum, &obj);
 
- 			}
 
- 			
 
- 			/* создаем переменную */
 
- 			vb_list[i] = snmp_varbind_alloc(&varbinds[i], obj.asn_type, obj.v_len);
 
- 			if( vb_list[i] != NULL )
 
- 			{
 
- 				{
 
- 					/* получаем значение переменной */
 
- 					if( node->node_type == MIB_NODE_EX)
 
- 					{
 
- 						struct mib_external_node* node_ex;
 
- 						node_ex = (struct mib_external_node*)node;
 
- 						/* TODO: подставить правильный rid вместо 0 */
 
- 						node_ex->get_value_a(0, &obj, obj.v_len, vb_list[i]->value);
 
- 					}
 
- 					else
 
- 					{
 
- 						node->get_value(&obj, obj.v_len, vb_list[i]->value);
 
- 					}
 
- 					/* добавляем переменную в ловушку */
 
- 					snmp_varbind_tail_add(&trap_msg.outvb, vb_list[i]);
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	/* посылаем ловушку */
 
- 	tResult = snmp_send_trap(generic_trap, eoid, specific_trap);
 
- 	
 
- 	/* удаляем переменные из списка */
 
- 	snmp_varbind_list_free(&trap_msg.outvb);
 
- 	
 
- 	/* удаляем указатели переменных */
 
- 	vPortFree(vb_list);
 
- 	
 
- 	return tResult;
 
- #endif	
 
- }
 
- #define NUM_PRIVATE_TRAP 10
 
-  
 
- //static unsigned char SNMP_TRAP_0_FLAG = 1;
 
- //static struct ip_addr SNMP_TRAP_0_ADDR;
 
-  
 
- extern struct snmp_msg_trap trap_msg;
 
-  
 
- struct private_trap
 
- {
 
-   /* source enterprise ID (sysObjectID) */
 
-   struct snmp_obj_id *enterprise; 
 
-   /* trap ID */
 
-   struct snmp_obj_id *trap_oid;
 
-  
 
-   /* specific trap code */
 
-   u32_t spc_trap;
 
-  
 
-   /* object value ASN1 type */
 
-   u8_t value_type;
 
-   /* object value length (in u8_t) */
 
-   u8_t value_len;
 
-   /* object value */
 
-   void *value;
 
-   /* indicate that the trap is sent */
 
-   u8_t in_use;
 
- };
 
-  
 
- struct private_trap trap_bank[NUM_PRIVATE_TRAP];
 
-  
 
- struct private_trap * getNextFreePrivateTrap()
 
- {
 
-    u8_t index;
 
-    void * result = NULL;
 
-   
 
-    for(index = 0; index < NUM_PRIVATE_TRAP; index++)
 
-    {
 
-       if(!trap_bank[index].in_use)
 
-       {
 
-          trap_bank[index].in_use = 1;
 
-          result = &trap_bank[index];        
 
-          break;
 
-       }
 
-    }
 
-   
 
-    return result; 
 
- }
 
-  
 
- void freePrivateTrap(struct private_trap * trap)
 
- {
 
-    trap->enterprise = NULL;
 
-    trap->trap_oid = NULL;
 
-    trap->value = NULL;
 
-    trap->in_use = 0;  
 
- }
 
-  
 
- void vSendTrapCallback( void * parameters )
 
- {
 
-    struct private_trap * trapToSend;
 
-    struct snmp_varbind * vb;
 
-   
 
-    if( parameters != NULL )
 
-    {
 
-       trapToSend = (struct private_trap *) parameters;
 
-      
 
-       vb = snmp_varbind_alloc(trapToSend->enterprise,
 
-                               trapToSend->value_type,
 
-                               trapToSend->value_len);
 
-                              
 
-       vb->value = trapToSend->value;
 
-            
 
-       trap_msg.outvb.head = vb;
 
-       trap_msg.outvb.tail = vb;
 
-       trap_msg.outvb.count = 1;
 
-      
 
-       snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC, trapToSend->trap_oid, trapToSend->spc_trap);
 
-      
 
-       trap_msg.outvb.head = NULL;
 
-       trap_msg.outvb.tail = NULL;
 
-       trap_msg.outvb.count = 0;
 
-      
 
-       vb->value = NULL;
 
-      
 
-       snmp_varbind_free(vb);
 
-      
 
-       freePrivateTrap(trapToSend);
 
-    }  
 
- }
 
- #endif
 
-  
 
 
  |