瀏覽代碼

f407 电量总数据显示snmp,显示屏通道数据显示。

liyi 1 年之前
父節點
當前提交
954d083649
共有 3 個文件被更改,包括 169 次插入 和 102 次删除
  1. 39 21
      f407/applications/power.c
  2. 101 69
      f407/applications/snmp.c
  3. 29 12
      f407/applications/ui/menu.c

+ 39 - 21
f407/applications/power.c

@@ -384,27 +384,45 @@ static int total_proc(power_handle_t *h)
     
     lock_on(h->lck);
     if(h->prod->type==PDU_AC_I3O3) times = 3;
-    for(i=0; i<h->brd_max; i++) {
-        if(h->pbrd[i]) {
-            for (j=0; i<h->pbrd[i]->chs; i++) {
-                pch = &h->pbrd[i]->pch[j];
-								float chn_total_p = 0.0; 
-                for(k=0; k<times; k++) {
-                    chn_total_p = ( pch->power[j].factor == 0 ? 0 : (pch->power[j].power/1000.0 / pch->power[j].factor * 100.0));
-										tmp[k].voltage = pch->power[j].voltage/10.0;
-                    tmp[k].current += (pch->power[j].current/10.0);
-										
-										tmp[k].power   += chn_total_p;
-                    tmp[k].freq    = (pch->power[j].freq/10.0);
-                    tmp[k].consump += (pch->power[j].consump/1000.0);
-#if 1
-                    tmp[k].active  += pch->power[j].power/1000.0;
-                    tmp[k].reactive += (chn_total_p-(pch->power[j].power/1000.0));
-#endif
-                }
-            }
-        }
-    }
+		
+
+
+		for(int i = 1 ;i < h->chs;i++)
+		{
+			float chn_total_p = 0.0;
+			for(k=0; k<times; k++) {
+				chn_total_p = (  h->pch[i]->power[k].factor == 0 ? 0 : ( h->pch[i]->power[k].power/1000.0 /  h->pch[i]->power[k].factor * 100.0));
+				tmp[k].consump += (h->pch[i]->power[k].consump/1000.0);
+				tmp[k].voltage = (tmp[k].voltage > h->pch[i]->power[k].voltage/10.0 ) ? tmp[k].voltage : h->pch[i]->power[k].voltage/10.0;
+				tmp[k].current += ( h->pch[i]->power[k].current/10.0);
+				tmp[k].power   += chn_total_p;
+				tmp[k].active += h->pch[i]->power[k].power/1000.0;
+				tmp[k].reactive += (chn_total_p-(h->pch[i]->power[k].power/1000.0));
+			}
+		}
+		
+
+//    for(i=0; i<h->brd_max; i++) {
+//        if(h->pbrd[i]) {
+//            for (j=0; i<h->pbrd[i]->chs; i++) {
+//                pch = &h->pbrd[i]->pch[j];
+//								float chn_total_p = 0.0; 
+//                for(k=0; k<times; k++) {
+//                    chn_total_p = ( pch->power[j].factor == 0 ? 0 : (pch->power[j].power/1000.0 / pch->power[j].factor * 100.0));
+//										tmp[k].voltage = pch->power[j].voltage/10.0;
+//                    tmp[k].current += (pch->power[j].current/10.0);
+//										
+//										tmp[k].power   += chn_total_p;
+//                    tmp[k].freq    = (pch->power[j].freq/10.0);
+//                    tmp[k].consump += (pch->power[j].consump/1000.0);
+//#if 1
+//                    tmp[k].active  += pch->power[j].power/1000.0;
+//                    tmp[k].reactive += (chn_total_p-(pch->power[j].power/1000.0));
+//#endif
+//                }
+//            }
+//        }
+//    }
     
     h->ttl.type = h->prod->type;
     for(k=0; k<times; k++) {

+ 101 - 69
f407/applications/snmp.c

@@ -34,7 +34,7 @@ typedef struct
 //	char *id_device;
 //	char *id_sn;
 //	char *id_version;	
-	power_all_t all;
+//	power_all_t all;
 }snmp_smarpdu_t;
 
 static snmp_smarpdu_t snmp_smart={
@@ -470,6 +470,7 @@ static s16_t  thr_s_get_value(struct snmp_node_instance *instance, void *value)
 
 static s16_t thr_get_value(struct snmp_node_instance *instance, void *value)
 {
+		power_all_t *all = power_get_all();
     u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
 		char buff[50]= {0};
@@ -483,32 +484,32 @@ static s16_t thr_get_value(struct snmp_node_instance *instance, void *value)
 				break;
 			case COLUMN_PDUCHANNELLIMITNAME:
 			{
-				sprintf(buff,"%s",snmp_smart.all.pch[row-1].info.name);
+				sprintf(buff,"%s",all->pch[row-1].info.name);
 			}
 			break;
 			case COLUMN_PDUCHANNELCURRENTLIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.c_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.c_upper/10.0));
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.v_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.v_upper/10.0));
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.v_lower/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.v_lower/10.0));
 			}
 			break;
 			case COLUMN_PDUCHANNELPOWERLIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.p_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.p_upper/10.0));
 			}
 			break;
 			case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.w_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.w_upper/10.0));
 			}
 			break;
 			default:
@@ -579,7 +580,8 @@ static s16_t alarm_get_value(struct snmp_node_instance *instance, void *value)
 
 static snmp_err_t power_get_instance(const u32_t *column, const u32_t *row_oid, u8_t row_oid_len, struct snmp_node_instance *cell_instance)
 {
-	th_table_oid_ranges[0].max = snmp_smart.all.chs-1;
+	power_all_t *all = power_get_all();
+	th_table_oid_ranges[0].max = all->chs-1;
 	if (!snmp_oid_in_range(row_oid, row_oid_len, th_table_oid_ranges, LWIP_ARRAYSIZE(th_table_oid_ranges)))
         return SNMP_ERR_NOSUCHINSTANCE;
 	cell_instance->reference.u32 = row_oid[0];
@@ -606,8 +608,9 @@ static snmp_err_t power_get_next_instance(const u32_t *column, struct snmp_obj_i
 
     snmp_next_oid_init(&state, row_oid->id, row_oid->len, &next_oid, 1);
 		
-    power_data_get(&snmp_smart.all);
-    for (i = 0; i < snmp_smart.all.chs-1; i++)
+    //power_data_get(&snmp_smart.all);
+		power_all_t *all = power_get_all();
+    for (i = 0; i < all->chs-1; i++)
     {
         u32_t test_oid = i + 1;
         snmp_next_oid_check(&state, &test_oid, 1, NULL);
@@ -630,8 +633,8 @@ static snmp_err_t get_next_instance(const u32_t *column, struct snmp_obj_id *row
     u32_t next_oid = 0;
 
     snmp_next_oid_init(&state, row_oid->id, row_oid->len, &next_oid, 1);
-		
-    power_data_get(&snmp_smart.all);
+		power_all_t *all = power_get_all();
+    //power_data_get(&snmp_smart.all);
     for (i = 0; i < POWER_VALUE; i++)
     {
         u32_t test_oid = i + 1;
@@ -650,6 +653,7 @@ static snmp_err_t get_next_instance(const u32_t *column, struct snmp_obj_id *row
 
 static s16_t power_get_value(struct snmp_node_instance *instance, void *value)
 {
+		power_all_t *all = power_get_all();
     u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
 		char buff[100]= {0};
@@ -663,45 +667,45 @@ static s16_t power_get_value(struct snmp_node_instance *instance, void *value)
 				break;
 			case COLUMN_PDUCHANNELNAME:
 			{
-				sprintf(buff,"%s",snmp_smart.all.pch[row-1].info.name);
+				sprintf(buff,"%s",all->pch[row-1].info.name);
 			}
 				break;
 			case COLUMN_PDUCHANNELSTATUS:
 			{
 				//sprintf(buff,"%d",p_data[row].status);
 				//*(s32_t *)value	= p_data[row-1].status;
-				*(s32_t *)value = snmp_smart.all.pch[row-1].status;
+				*(s32_t *)value = all->pch[row-1].status;
 				return 4;
 			}
 				break;
 			case COLUMN_PDUCHANNELVOLTAGE:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].voltage)/10.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[0].voltage)/10.0);
 			}
 				break;
 			case COLUMN_PDUCHANNELCURRENT:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].current)/10.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[0].current)/10.0);
 			}
 				break;
 			case COLUMN_PDUCHANNELFREQUENCY:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].freq)/100.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[0].freq)/100.0);
 			}
 				break;
 			case COLUMN_PDUCHANNELCONSUMPTION:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].consump)/1000.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[0].consump)/1000.0);
 			}
 				break;
 			case COLUMN_PDUCHANNELPOWERFACTOR:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].factor)/100.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[0].factor)/100.0);
 			}
 				break;
 			case COLUMN_PDUCHANNELPACTIVEPOWER:
 			{
-				sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].power)/1000.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[0].power)/1000.0);
 			}
 				break;
 			case COLUMN_PDUCHANNELREACTIVEPOWER:
@@ -730,6 +734,7 @@ static snmp_err_t set_test(struct snmp_node_instance *instance, u16_t len, void
 
 static snmp_err_t  power_set_value (struct snmp_node_instance *instance, u16_t len, void *value)
 {
+		power_all_t *all = power_get_all();
 	  u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
 		switch(col)
@@ -737,8 +742,8 @@ static snmp_err_t  power_set_value (struct snmp_node_instance *instance, u16_t l
 			case  COLUMN_PDUCHANNELSTATUS:
 			{
 				//p_data[row-1].status = *(uint32_t*)value;
-				snmp_smart.all.pch[row].status = *(uint32_t*)value;
-				power_set_ch_sw_n(&snmp_smart.all.pch[row]);
+				all->pch[row].status = *(uint32_t*)value;
+				power_set_ch_sw_n(&all->pch[row]);
 			}
 				break;
 			default:
@@ -750,43 +755,44 @@ static snmp_err_t thr_set_value(struct snmp_node_instance *instance,u16_t len, v
 {
 	  u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
+		power_all_t *all = power_get_all();
 		switch(col)
 		{
 			case COLUMN_PDUCHANNELCURRENTLIMITUP:
 			{
-				snmp_smart.all.pch[row].thr.c_upper = (float)atof((char *)value) * 10;
+				all->pch[row].thr.c_upper = (float)atof((char *)value) * 10;
 				//p_t_data[row-1].i_max = (float)atof((char *)value);
-				//snmp_smart.all.pch[row-1]
-				power_set_threshold(&snmp_smart.all.pch[row]);
+				//all->pch[row-1]
+				power_set_threshold(&all->pch[row]);
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITUP:
 			{
 				//p_t_data[row-1].v_max = (float)atof((char *)value);
-				snmp_smart.all.pch[row].thr.v_upper = (float)atof((char *)value) * 10;
-				power_set_threshold(&snmp_smart.all.pch[row]);
+				all->pch[row].thr.v_upper = (float)atof((char *)value) * 10;
+				power_set_threshold(&all->pch[row]);
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
 			{
-				snmp_smart.all.pch[row].thr.v_lower = (float)atof((char *)value) * 10;
-				power_set_threshold(&snmp_smart.all.pch[row]);
+				all->pch[row].thr.v_lower = (float)atof((char *)value) * 10;
+				power_set_threshold(&all->pch[row]);
 				//p_t_data[row-1].v_min = (float)atof((char *)value);
-				//snmp_smart.all.pch[row-1].thr.v_upper = (float)atof((char *)value) * 10;
+				//all->pch[row-1].thr.v_upper = (float)atof((char *)value) * 10;
 			}
 			break;
 			case COLUMN_PDUCHANNELPOWERLIMITUP:
 			{
 				//p_t_data[row-1].p_max = (float)atof((char *)value);
-				snmp_smart.all.pch[row].thr.p_upper = (float)atof((char *)value) * 1000;
-				power_set_threshold(&snmp_smart.all.pch[row]);
+				all->pch[row].thr.p_upper = (float)atof((char *)value) * 1000;
+				power_set_threshold(&all->pch[row]);
 			}
 			break;
 			case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
 			{
 				//p_t_data[row-1].c_max = (float)atof((char *)value);
-				snmp_smart.all.pch[row].thr.w_upper = (float)atof((char *)value) * 1000;
-				power_set_threshold(&snmp_smart.all.pch[row]);
+				all->pch[row].thr.w_upper = (float)atof((char *)value) * 1000;
+				power_set_threshold(&all->pch[row]);
 			}
 			break;
 			default:
@@ -807,18 +813,6 @@ static const struct snmp_scalar_array_node_def sysinfo_scalars_nodes[] = {
 
 
 
-static const struct snmp_scalar_array_node_def total_scalars_node[] = {
-	{SCALAR_VOLTAGE,													SNMP_ASN1_TYPE_OCTET_STRING,				  SNMP_NODE_INSTANCE_READ_ONLY,},
-	{SCALAR_CURRENT,													SNMP_ASN1_TYPE_OCTET_STRING,				  SNMP_NODE_INSTANCE_READ_ONLY,},
-	{SCALAR_CONSUMEPTION,											SNMP_ASN1_TYPE_OCTET_STRING,				  SNMP_NODE_INSTANCE_READ_ONLY,},
-	{SCALAR_POWER_FACTOR,											SNMP_ASN1_TYPE_OCTET_STRING,				  SNMP_NODE_INSTANCE_READ_ONLY,},
-	{SCALAR_PACTIVE_POWER,										SNMP_ASN1_TYPE_OCTET_STRING,				  SNMP_NODE_INSTANCE_READ_ONLY,},
-	{SCALAR_REACTIVE_POWER,										SNMP_ASN1_TYPE_OCTET_STRING,				  SNMP_NODE_INSTANCE_READ_ONLY,},
-	{SCALAR_APPARENT_POWER,										SNMP_ASN1_TYPE_OCTET_STRING,				  SNMP_NODE_INSTANCE_READ_ONLY,},
-	{0,0,0},
-};
-
-
 static const struct snmp_table_col_def power_table_channels[]={
 	{COLUMN_PDUCHANNELID,											SNMP_ASN1_TYPE_INTEGER,								SNMP_NODE_INSTANCE_READ_ONLY},
 	{COLUMN_PDUCHANNELNAME,										SNMP_ASN1_TYPE_OCTET_STRING,					SNMP_NODE_INSTANCE_READ_ONLY},
@@ -871,15 +865,60 @@ static const struct snmp_table_col_def 	sensor_limit_table[] = {
 
 
 const struct snmp_scalar_array_node sysinfo_scalars = SNMP_SCALAR_CREATE_ARRAY_NODE(1, sysinfo_scalars_nodes, sysinfo_get_value, NULL, NULL);
-const struct snmp_scalar_array_node total_scalars = SNMP_SCALAR_CREATE_ARRAY_NODE(1,total_scalars_node, total_get_value, NULL, NULL);
 
+static s16_t get_total_scalar_value(struct snmp_node_instance *instance , void* data)
+{
+	power_all_t *all = power_get_all();
+	char buff[100] = {0};
+	switch(instance->node->oid)
+	{
+		case SCALAR_VOLTAGE:
+			sprintf(buff,"%.2f",all->ttl.total[0].voltage);
+		break;
+		case SCALAR_CURRENT:
+			sprintf(buff,"%.2f",all->ttl.total[0].current);
+		break;
+		case SCALAR_CONSUMEPTION:
+			sprintf(buff,"%.2f",all->ttl.total[0].consump);
+		break;
+		case SCALAR_POWER_FACTOR:
+			sprintf(buff,"%.2f",all->ttl.total[0].factor);
+		break;
+		case SCALAR_PACTIVE_POWER:
+			sprintf(buff,"%.2f",all->ttl.total[0].power);
+		break;
+		case SCALAR_REACTIVE_POWER:
+			sprintf(buff,"%.2f",all->ttl.total[0].reactive);
+		break;
+		case SCALAR_APPARENT_POWER:
+			sprintf(buff,"%.2f",all->ttl.total[0].active);
+			break;
+		default:
+			return 0;
+	}
+	memcpy(data,buff,strlen(buff));
+		
+   return strlen(buff);	
+}
+
+
+const struct snmp_scalar_node voltage_scalar = SNMP_SCALAR_CREATE_NODE(SCALAR_VOLTAGE,SNMP_NODE_INSTANCE_READ_ONLY,SNMP_ASN1_TYPE_OCTET_STRING,get_total_scalar_value,NULL,NULL);
+const struct snmp_scalar_node current_scalar = SNMP_SCALAR_CREATE_NODE(SCALAR_CURRENT,SNMP_NODE_INSTANCE_READ_ONLY,SNMP_ASN1_TYPE_OCTET_STRING,get_total_scalar_value,NULL,NULL);
+const struct snmp_scalar_node consumer_scalar = SNMP_SCALAR_CREATE_NODE(SCALAR_CONSUMEPTION,SNMP_NODE_INSTANCE_READ_ONLY,SNMP_ASN1_TYPE_OCTET_STRING,get_total_scalar_value,NULL,NULL);
+const struct snmp_scalar_node factor_scalar = SNMP_SCALAR_CREATE_NODE(SCALAR_POWER_FACTOR,SNMP_NODE_INSTANCE_READ_ONLY,SNMP_ASN1_TYPE_OCTET_STRING,get_total_scalar_value,NULL,NULL);
+const struct snmp_scalar_node pactive_scalar = SNMP_SCALAR_CREATE_NODE(SCALAR_PACTIVE_POWER,SNMP_NODE_INSTANCE_READ_ONLY,SNMP_ASN1_TYPE_OCTET_STRING,get_total_scalar_value,NULL,NULL);
+const struct snmp_scalar_node reactive_scalar = SNMP_SCALAR_CREATE_NODE(SCALAR_REACTIVE_POWER,SNMP_NODE_INSTANCE_READ_ONLY,SNMP_ASN1_TYPE_OCTET_STRING,get_total_scalar_value,NULL,NULL);
+const struct snmp_scalar_node appactive_scalar = SNMP_SCALAR_CREATE_NODE(SCALAR_APPARENT_POWER,SNMP_NODE_INSTANCE_READ_ONLY,SNMP_ASN1_TYPE_OCTET_STRING,get_total_scalar_value,NULL,NULL);
 
 
-static const struct snmp_table_node power_table = SNMP_TABLE_CREATE(9, power_table_channels, power_get_instance, power_get_next_instance, \
-							power_get_value, set_test, power_set_value);
 
 
 
+
+
+static const struct snmp_table_node power_table = SNMP_TABLE_CREATE(9, power_table_channels, power_get_instance, power_get_next_instance, \
+							power_get_value, set_test, power_set_value);
+
 static const struct snmp_table_node alarm_table = SNMP_TABLE_CREATE(1, alarm_history_table, get_instance, get_next_instance, \
 							alarm_get_value, set_test, NULL);
 
@@ -899,13 +938,16 @@ static const struct snmp_node *const alarm_subnodes[]={
 };
 static const struct snmp_node *const power_subnodes[] = {
     &power_table.node.node,
-		//&total_scalars.node.node,
+		&voltage_scalar.node.node,
+		&current_scalar.node.node,
+		&consumer_scalar.node.node,
+		&factor_scalar.node.node,
+		&pactive_scalar.node.node,
+		&reactive_scalar.node.node,
+		&appactive_scalar.node.node,
 };
 
-//static const struct snmp_node *const total_subnodes[] = {
-//		&total_scalars.node.node,
-//    //&power_table.node.node,
-//};
+
 static const struct snmp_node *const thr_subnodes[] = {
     &thr_table.node.node,
 };
@@ -916,16 +958,11 @@ static const struct snmp_node *const thr_s_subnodes[] = {
 
 
 const struct snmp_tree_node power_treenode 	= SNMP_CREATE_TREE_NODE(3, power_subnodes);
-//const struct snmp_tree_node total_treenode 	= SNMP_CREATE_TREE_NODE(3, total_subnodes);
 const struct snmp_tree_node alarm_treenode 	= SNMP_CREATE_TREE_NODE(6, alarm_subnodes);
 const struct snmp_tree_node thr_treenode 		= SNMP_CREATE_TREE_NODE(2, thr_subnodes);
 const struct snmp_tree_node thr_s_treenode 	= SNMP_CREATE_TREE_NODE(3, thr_s_subnodes);
 
 
-static const struct snmp_node *const mib2_nodes_dev_3[]=
-{
-	&total_scalars.node.node,
-};
 
 
 static const struct snmp_node *const mib2_nodes_dev[] =
@@ -933,9 +970,6 @@ static const struct snmp_node *const mib2_nodes_dev[] =
     &sysinfo_scalars.node.node,
 		&power_treenode.node,
 		&alarm_treenode.node,
-		//&total_scalars.node.node,
-		//&total_treenode.node,
-	  //&total_scalars.node.node,
 };
 
 
@@ -947,18 +981,17 @@ static const struct snmp_node *const mib2_nodes_dev_2[]={
 
 static const struct snmp_tree_node snmp_mib2_root_dev = SNMP_CREATE_TREE_NODE(1, mib2_nodes_dev);
 static const struct snmp_tree_node snmp_mib2_thr_dev = SNMP_CREATE_TREE_NODE(7, mib2_nodes_dev_2);
-static const struct snmp_tree_node snmp_mib2_totol_dev = SNMP_CREATE_TREE_NODE(3,mib2_nodes_dev_3);
+
 
 static const u32_t prvmib_base_oid[] = SNMP_SMARTPDU_DEVICE_OID;
-static const u32_t thr_base_oid[] = SNMP_SMARTPDU_THR_TABLE_IOD;
-static const u32_t total_base_oid[] = SNMP_SMARTPDU_TOTAL_OID;
+static const u32_t thr_base_oid		[] = SNMP_SMARTPDU_THR_TABLE_IOD;
 
 const struct snmp_mib mib2_dev = SNMP_MIB_CREATE(prvmib_base_oid, &snmp_mib2_root_dev.node);
 const struct snmp_mib mib2_th_dev = SNMP_MIB_CREATE(thr_base_oid, &snmp_mib2_thr_dev.node);
-const struct snmp_mib mib2_totol_dev = SNMP_MIB_CREATE(total_base_oid, &snmp_mib2_totol_dev.node);
 
 
-static const struct snmp_mib *dev_mibs[] = {&mib2, &mib2_dev,&mib2_th_dev,&mib2_totol_dev};
+
+static const struct snmp_mib *dev_mibs[] = {&mib2, &mib2_dev,&mib2_th_dev};
 
 
 
@@ -968,8 +1001,7 @@ static const struct snmp_mib *dev_mibs[] = {&mib2, &mib2_dev,&mib2_th_dev,&mib2_
 
 
 void netif_event_callback(struct netif *netif) {
-    //snmp_ifType ifType = netif->link_type == NETIF_TYPE_ETHERNET ? ifTypeEthernetCsmacd : ifTypeOther;
-    //snmp_insert_ipnetif(netif, ifType); // 将网络接口添加到 SNMP MIB-2 中
+
 }
 
 static void mibs_init(void) {

+ 29 - 12
f407/applications/ui/menu.c

@@ -96,8 +96,9 @@ static modbus_data_t*get_pmb(menu_handle_t *h)
 static int get_ch_out_max(menu_handle_t *h)
 {
     int ch=0;
-    paras_data_t *p=paras_get();
-    
+    //paras_data_t *p=paras_get();
+    power_all_t *all = power_get_all();
+		ch = all->chs - 1;
     return ch;
 }
 static int is_ph3_in(menu_handle_t *h)
@@ -244,20 +245,21 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
 {
     int r;
     char tmp[100];
-    power_ch_t *pwr,info={0};
+		power_all_t *all = power_get_all();
+//    power_ch_t *pwr,info={0};
 
-    pwr = &info;
+//    pwr = &info;
     sprintf(tmp, "%s", lang_get_str(h->lang, STR_ID_OUTPUT));
 
-    r = get_output(h, h->ch_out, h->ph_out, &info);
-    if(r==0 && h->ch_out_max>0) {
+    //r = get_output(h, h->ch_out, h->ph_out, &info);
+    if(h->ch_out_max>0) {
         sprintf(tmp, "%s CH%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1);
     }
 
     //lcd_fill(COLOR_BLACK);
     lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
 
-    char *pon=((pwr->status)?lang_get_str(h->lang, STR_ID_ON):lang_get_str(h->lang, STR_ID_OFF));
+    char *pon=((all->pch[h->ch_out+1].status)?lang_get_str(h->lang, STR_ID_ON):lang_get_str(h->lang, STR_ID_OFF));
 #ifdef TEXT_ALIGN
     sprintf(tmp, "%s:%s", lang_get_str(h->lang, STR_ID_SWITCH), pon);
     lcd_draw_string(0, item_h, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
@@ -269,14 +271,14 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
     sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_FACTOR), pwr->factor);
     lcd_draw_string(LCD_WIDTH/2, item_h*2, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 #else
-    sprintf(tmp, "%s:%s  %s:%0.2f", lang_get_str(h->lang, STR_ID_SWITCH), pon, lang_get_str(h->lang, STR_ID_CURRENT), ((float)pwr->power[0].current/10.0));
+    sprintf(tmp, "%s:%s  %s:%0.2f", lang_get_str(h->lang, STR_ID_SWITCH), pon, lang_get_str(h->lang, STR_ID_CURRENT), ((float)all->pch[h->ch_out+1].power[0].current/10.0));
     lcd_draw_string(0, item_h, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
-    sprintf(tmp, "%s:%0.2f %s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), (((float)pwr->power[0].power) / 1000.0), lang_get_str(h->lang, STR_ID_FACTOR), 
-								((float)pwr->power[0].factor)/100.0);
+    sprintf(tmp, "%s:%0.2f %s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), (((float)all->pch[h->ch_out+1].power[0].power)/1000.0), lang_get_str(h->lang, STR_ID_FACTOR), 
+								(all->pch[h->ch_out+1].power[0].factor)/100.0);
     lcd_draw_string(0, item_h*2, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 #endif
-    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CONSUMP), ((float)pwr->power[0].consump)/1000.0);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CONSUMP), (all->pch[h->ch_out+1].power[0].consump)/1000.0);
     lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
     //lcd_refresh();
@@ -562,12 +564,12 @@ static int menu_key_handle(menu_handle_t *h, key_val_t *kv)
     h->ch_out_max = get_ch_out_max(h);
     switch(h->menu.menu_id) {
         case MENU_SYSTEM:
-        case MENU_SENSOR:
         {
             if(h->menu.menu_lv==0) {
                 if(h->uflag&UFLAG_FLIP || ((kv->key==KEY_UP || kv->key==KEY_DOWN) && kv->type==TYPE_SHORT)) {
                     if(kv->key==KEY_UP) {
                         h->menu.menu_id = h->menu.menu_id?(h->menu.menu_id-1):MENU_MAX-1;
+
                     }
                     else {
                         h->menu.menu_id = (h->menu.menu_id==MENU_MAX-1)?0:(h->menu.menu_id+1);
@@ -575,6 +577,21 @@ static int menu_key_handle(menu_handle_t *h, key_val_t *kv)
                 }
             }
         }
+				break;
+        case MENU_SENSOR:
+				{
+					if(h->menu.menu_lv==0) {
+						if(h->uflag&UFLAG_FLIP || ((kv->key==KEY_UP || kv->key==KEY_DOWN) && kv->type==TYPE_SHORT)) {
+							if(kv->key==KEY_UP) {
+									h->menu.menu_id--;
+									h->ch_out = h->ch_out_max -1;
+							}else
+							{
+								h->menu.menu_id++;
+							}
+						}
+					}
+				}
         break;
 
         case MENU_INPUT: