|
@@ -9,6 +9,7 @@
|
|
|
#include "lwip/apps/snmp_scalar.h"
|
|
#include "lwip/apps/snmp_scalar.h"
|
|
|
#include "string.h"
|
|
#include "string.h"
|
|
|
#include "power.h"
|
|
#include "power.h"
|
|
|
|
|
+#include "datadef.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -20,6 +21,8 @@
|
|
|
//#define SNMP_SMARTPDU_CHANNEL_TABLE {1,3,6,1,4,1,2024,1,3,9}
|
|
//#define SNMP_SMARTPDU_CHANNEL_TABLE {1,3,6,1,4,1,2024,1,3,9}
|
|
|
//#define SNMP_SMARTPDU_ALARM_TABLE_IOD {1,3,6,1,4,1,2024,1,6,1}
|
|
//#define SNMP_SMARTPDU_ALARM_TABLE_IOD {1,3,6,1,4,1,2024,1,6,1}
|
|
|
#define SNMP_SMARTPDU_THR_TABLE_IOD {1,3,6,1,4,1,2024,1,7}
|
|
#define SNMP_SMARTPDU_THR_TABLE_IOD {1,3,6,1,4,1,2024,1,7}
|
|
|
|
|
+#define SNMP_SMARTPDU_TOTAL_OID {1,3,6,1,4,1,2024,1,3}
|
|
|
|
|
+
|
|
|
typedef struct
|
|
typedef struct
|
|
|
{
|
|
{
|
|
|
uint8_t sysdescr[10];
|
|
uint8_t sysdescr[10];
|
|
@@ -31,6 +34,7 @@ typedef struct
|
|
|
// char *id_device;
|
|
// char *id_device;
|
|
|
// char *id_sn;
|
|
// char *id_sn;
|
|
|
// char *id_version;
|
|
// char *id_version;
|
|
|
|
|
+ power_all_t all;
|
|
|
}snmp_smarpdu_t;
|
|
}snmp_smarpdu_t;
|
|
|
|
|
|
|
|
static snmp_smarpdu_t snmp_smart={
|
|
static snmp_smarpdu_t snmp_smart={
|
|
@@ -100,6 +104,61 @@ static s16_t sysinfo_get_value(const struct snmp_scalar_array_node_def *node, vo
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+static s16_t total_get_value(const struct snmp_scalar_array_node_def *node, void *value)
|
|
|
|
|
+{
|
|
|
|
|
+ char *var = NULL;
|
|
|
|
|
+ s16_t var_len;
|
|
|
|
|
+ char buff[100]= {0};
|
|
|
|
|
+ power_all_t *all = power_get_all();
|
|
|
|
|
+
|
|
|
|
|
+ switch(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;
|
|
|
|
|
+ }
|
|
|
|
|
+ var_len = strlen(buff);
|
|
|
|
|
+ memcpy(value, buff, var_len);
|
|
|
|
|
+ return var_len;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
#define POWER_VALUE 4
|
|
#define POWER_VALUE 4
|
|
|
|
|
|
|
|
typedef struct power_data{
|
|
typedef struct power_data{
|
|
@@ -240,7 +299,7 @@ static thr_s_t p_thr_s[POWER_VALUE] = {
|
|
|
},
|
|
},
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-static const struct snmp_oid_range th_table_oid_ranges[] = {
|
|
|
|
|
|
|
+static struct snmp_oid_range th_table_oid_ranges[] = {
|
|
|
{1, POWER_VALUE},
|
|
{1, POWER_VALUE},
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -418,38 +477,38 @@ static s16_t thr_get_value(struct snmp_node_instance *instance, void *value)
|
|
|
{
|
|
{
|
|
|
case COLUMN_PDUCHANNELLIMITID:
|
|
case COLUMN_PDUCHANNELLIMITID:
|
|
|
{
|
|
{
|
|
|
- *(s32_t *)value = p_t_data[row-1].id;
|
|
|
|
|
|
|
+ *(s32_t *)value = row-1;
|
|
|
return 4;
|
|
return 4;
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELLIMITNAME:
|
|
case COLUMN_PDUCHANNELLIMITNAME:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%s",p_t_data[row-1].name);
|
|
|
|
|
|
|
+ sprintf(buff,"%s",snmp_smart.all.pch[row-1].info.name);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELCURRENTLIMITUP:
|
|
case COLUMN_PDUCHANNELCURRENTLIMITUP:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_t_data[row-1].i_max);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.c_upper/10.0));
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITUP:
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITUP:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_t_data[row-1].v_max);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.v_upper/10.0));
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_t_data[row-1].v_min);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.v_lower/10.0));
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELPOWERLIMITUP:
|
|
case COLUMN_PDUCHANNELPOWERLIMITUP:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_t_data[row-1].p_max);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.p_upper/10.0));
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
|
|
case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_t_data[row-1].c_max);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].thr.w_upper/10.0));
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
@@ -518,6 +577,16 @@ 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;
|
|
|
|
|
+ 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];
|
|
|
|
|
+
|
|
|
|
|
+ return SNMP_ERR_NOERROR;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
static snmp_err_t get_instance(const u32_t *column, const u32_t *row_oid, u8_t row_oid_len, struct snmp_node_instance *cell_instance)
|
|
static snmp_err_t get_instance(const u32_t *column, const u32_t *row_oid, u8_t row_oid_len, struct snmp_node_instance *cell_instance)
|
|
|
{
|
|
{
|
|
|
if (!snmp_oid_in_range(row_oid, row_oid_len, th_table_oid_ranges, LWIP_ARRAYSIZE(th_table_oid_ranges)))
|
|
if (!snmp_oid_in_range(row_oid, row_oid_len, th_table_oid_ranges, LWIP_ARRAYSIZE(th_table_oid_ranges)))
|
|
@@ -528,6 +597,32 @@ static snmp_err_t get_instance(const u32_t *column, const u32_t *row_oid, u8_t r
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+static snmp_err_t power_get_next_instance(const u32_t *column, struct snmp_obj_id *row_oid, struct snmp_node_instance *cell_instance)
|
|
|
|
|
+{
|
|
|
|
|
+ u8_t i = 0;
|
|
|
|
|
+ struct snmp_next_oid_state state;
|
|
|
|
|
+ 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);
|
|
|
|
|
+ for (i = 0; i < snmp_smart.all.chs-1; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ u32_t test_oid = i + 1;
|
|
|
|
|
+ snmp_next_oid_check(&state, &test_oid, 1, NULL);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (state.status == SNMP_NEXT_OID_STATUS_SUCCESS)
|
|
|
|
|
+ {
|
|
|
|
|
+ snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
|
|
|
|
|
+ cell_instance->reference.u32 = *state.next_oid; /* 下个节点行OID */
|
|
|
|
|
+ cell_instance->reference.u32++;
|
|
|
|
|
+ return SNMP_ERR_NOERROR;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return SNMP_ERR_NOSUCHINSTANCE;
|
|
|
|
|
+}
|
|
|
static snmp_err_t get_next_instance(const u32_t *column, struct snmp_obj_id *row_oid, struct snmp_node_instance *cell_instance)
|
|
static snmp_err_t get_next_instance(const u32_t *column, struct snmp_obj_id *row_oid, struct snmp_node_instance *cell_instance)
|
|
|
{
|
|
{
|
|
|
u8_t i = 0;
|
|
u8_t i = 0;
|
|
@@ -535,8 +630,8 @@ static snmp_err_t get_next_instance(const u32_t *column, struct snmp_obj_id *row
|
|
|
u32_t next_oid = 0;
|
|
u32_t next_oid = 0;
|
|
|
|
|
|
|
|
snmp_next_oid_init(&state, row_oid->id, row_oid->len, &next_oid, 1);
|
|
snmp_next_oid_init(&state, row_oid->id, row_oid->len, &next_oid, 1);
|
|
|
-// power_all_t all;
|
|
|
|
|
-// power_data_get(&all);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ power_data_get(&snmp_smart.all);
|
|
|
for (i = 0; i < POWER_VALUE; i++)
|
|
for (i = 0; i < POWER_VALUE; i++)
|
|
|
{
|
|
{
|
|
|
u32_t test_oid = i + 1;
|
|
u32_t test_oid = i + 1;
|
|
@@ -562,50 +657,51 @@ static s16_t power_get_value(struct snmp_node_instance *instance, void *value)
|
|
|
{
|
|
{
|
|
|
case COLUMN_PDUCHANNELID:
|
|
case COLUMN_PDUCHANNELID:
|
|
|
{
|
|
{
|
|
|
- *(s32_t *)value = p_data[row-1].id;
|
|
|
|
|
|
|
+ *(s32_t *)value = row-1;
|
|
|
return 4;
|
|
return 4;
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELNAME:
|
|
case COLUMN_PDUCHANNELNAME:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%s",p_data[row-1].name);
|
|
|
|
|
|
|
+ sprintf(buff,"%s",snmp_smart.all.pch[row-1].info.name);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELSTATUS:
|
|
case COLUMN_PDUCHANNELSTATUS:
|
|
|
{
|
|
{
|
|
|
//sprintf(buff,"%d",p_data[row].status);
|
|
//sprintf(buff,"%d",p_data[row].status);
|
|
|
- *(s32_t *)value = p_data[row-1].status;
|
|
|
|
|
|
|
+ //*(s32_t *)value = p_data[row-1].status;
|
|
|
|
|
+ *(s32_t *)value = snmp_smart.all.pch[row-1].status;
|
|
|
return 4;
|
|
return 4;
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELVOLTAGE:
|
|
case COLUMN_PDUCHANNELVOLTAGE:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_data[row-1].v);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].voltage)/10.0);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELCURRENT:
|
|
case COLUMN_PDUCHANNELCURRENT:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_data[row-1].i);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].current)/10.0);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELFREQUENCY:
|
|
case COLUMN_PDUCHANNELFREQUENCY:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_data[row-1].f);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].freq)/100.0);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELCONSUMPTION:
|
|
case COLUMN_PDUCHANNELCONSUMPTION:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_data[row-1].c);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].consump)/1000.0);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELPOWERFACTOR:
|
|
case COLUMN_PDUCHANNELPOWERFACTOR:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_data[row-1].fa);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].factor)/100.0);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELPACTIVEPOWER:
|
|
case COLUMN_PDUCHANNELPACTIVEPOWER:
|
|
|
{
|
|
{
|
|
|
- sprintf(buff,"%.2f",p_data[row-1].p);
|
|
|
|
|
|
|
+ sprintf(buff,"%.2f",((float)snmp_smart.all.pch[row-1].power[0].power)/1000.0);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELREACTIVEPOWER:
|
|
case COLUMN_PDUCHANNELREACTIVEPOWER:
|
|
@@ -640,7 +736,9 @@ static snmp_err_t power_set_value (struct snmp_node_instance *instance, u16_t l
|
|
|
{
|
|
{
|
|
|
case COLUMN_PDUCHANNELSTATUS:
|
|
case COLUMN_PDUCHANNELSTATUS:
|
|
|
{
|
|
{
|
|
|
- p_data[row-1].status = *(uint32_t*)value;
|
|
|
|
|
|
|
+ //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]);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
@@ -656,27 +754,39 @@ static snmp_err_t thr_set_value(struct snmp_node_instance *instance,u16_t len, v
|
|
|
{
|
|
{
|
|
|
case COLUMN_PDUCHANNELCURRENTLIMITUP:
|
|
case COLUMN_PDUCHANNELCURRENTLIMITUP:
|
|
|
{
|
|
{
|
|
|
- p_t_data[row-1].i_max = (float)atof((char *)value);
|
|
|
|
|
|
|
+ snmp_smart.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]);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITUP:
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITUP:
|
|
|
{
|
|
{
|
|
|
- p_t_data[row-1].v_max = (float)atof((char *)value);
|
|
|
|
|
|
|
+ //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]);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
|
|
case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
|
|
|
{
|
|
{
|
|
|
- p_t_data[row-1].v_min = (float)atof((char *)value);
|
|
|
|
|
|
|
+ snmp_smart.all.pch[row].thr.v_lower = (float)atof((char *)value) * 10;
|
|
|
|
|
+ power_set_threshold(&snmp_smart.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;
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELPOWERLIMITUP:
|
|
case COLUMN_PDUCHANNELPOWERLIMITUP:
|
|
|
{
|
|
{
|
|
|
- p_t_data[row-1].p_max = (float)atof((char *)value);
|
|
|
|
|
|
|
+ //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]);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
|
|
case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
|
|
|
{
|
|
{
|
|
|
- p_t_data[row-1].c_max = (float)atof((char *)value);
|
|
|
|
|
|
|
+ //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]);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
@@ -695,6 +805,20 @@ static const struct snmp_scalar_array_node_def sysinfo_scalars_nodes[] = {
|
|
|
{0,0,0},
|
|
{0,0,0},
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+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[]={
|
|
static const struct snmp_table_col_def power_table_channels[]={
|
|
|
{COLUMN_PDUCHANNELID, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
{COLUMN_PDUCHANNELID, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
{COLUMN_PDUCHANNELNAME, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
{COLUMN_PDUCHANNELNAME, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
@@ -747,15 +871,19 @@ 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 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 const struct snmp_table_node power_table = SNMP_TABLE_CREATE(9, power_table_channels, get_instance, get_next_instance, \
|
|
|
|
|
|
|
+
|
|
|
|
|
+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);
|
|
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, \
|
|
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);
|
|
alarm_get_value, set_test, NULL);
|
|
|
|
|
|
|
|
-static const struct snmp_table_node thr_table = SNMP_TABLE_CREATE(6, threshold_limit_table, get_instance, get_next_instance, \
|
|
|
|
|
|
|
+static const struct snmp_table_node thr_table = SNMP_TABLE_CREATE(6, threshold_limit_table, power_get_instance, power_get_next_instance, \
|
|
|
thr_get_value, set_test, thr_set_value);
|
|
thr_get_value, set_test, thr_set_value);
|
|
|
|
|
|
|
|
static const struct snmp_table_node thr_s_table = SNMP_TABLE_CREATE(1, sensor_limit_table, get_instance, get_next_instance, \
|
|
static const struct snmp_table_node thr_s_table = SNMP_TABLE_CREATE(1, sensor_limit_table, get_instance, get_next_instance, \
|
|
@@ -771,7 +899,13 @@ static const struct snmp_node *const alarm_subnodes[]={
|
|
|
};
|
|
};
|
|
|
static const struct snmp_node *const power_subnodes[] = {
|
|
static const struct snmp_node *const power_subnodes[] = {
|
|
|
&power_table.node.node,
|
|
&power_table.node.node,
|
|
|
|
|
+ //&total_scalars.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[] = {
|
|
static const struct snmp_node *const thr_subnodes[] = {
|
|
|
&thr_table.node.node,
|
|
&thr_table.node.node,
|
|
|
};
|
|
};
|
|
@@ -780,13 +914,18 @@ static const struct snmp_node *const thr_s_subnodes[] = {
|
|
|
&thr_s_table.node.node,
|
|
&thr_s_table.node.node,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+
|
|
|
const struct snmp_tree_node power_treenode = SNMP_CREATE_TREE_NODE(3, power_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 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_treenode = SNMP_CREATE_TREE_NODE(2, thr_subnodes);
|
|
|
-const struct snmp_tree_node thr_s_treenode = SNMP_CREATE_TREE_NODE(3, thr_s_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[] =
|
|
static const struct snmp_node *const mib2_nodes_dev[] =
|
|
@@ -794,7 +933,9 @@ static const struct snmp_node *const mib2_nodes_dev[] =
|
|
|
&sysinfo_scalars.node.node,
|
|
&sysinfo_scalars.node.node,
|
|
|
&power_treenode.node,
|
|
&power_treenode.node,
|
|
|
&alarm_treenode.node,
|
|
&alarm_treenode.node,
|
|
|
- //&thr_treenode.node,
|
|
|
|
|
|
|
+ //&total_scalars.node.node,
|
|
|
|
|
+ //&total_treenode.node,
|
|
|
|
|
+ //&total_scalars.node.node,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
@@ -806,15 +947,18 @@ 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_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_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 prvmib_base_oid[] = SNMP_SMARTPDU_DEVICE_OID;
|
|
|
static const u32_t thr_base_oid[] = SNMP_SMARTPDU_THR_TABLE_IOD;
|
|
static const u32_t thr_base_oid[] = SNMP_SMARTPDU_THR_TABLE_IOD;
|
|
|
|
|
+static const u32_t total_base_oid[] = SNMP_SMARTPDU_TOTAL_OID;
|
|
|
|
|
|
|
|
const struct snmp_mib mib2_dev = SNMP_MIB_CREATE(prvmib_base_oid, &snmp_mib2_root_dev.node);
|
|
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_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};
|
|
|
|
|
|
|
+static const struct snmp_mib *dev_mibs[] = {&mib2, &mib2_dev,&mib2_th_dev,&mib2_totol_dev};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|