|
|
@@ -8,6 +8,7 @@
|
|
|
#include "lwip/apps/snmp_table.h"
|
|
|
#include "lwip/apps/snmp_scalar.h"
|
|
|
#include "string.h"
|
|
|
+#include "power.h"
|
|
|
|
|
|
|
|
|
|
|
|
@@ -16,8 +17,9 @@
|
|
|
|
|
|
#define SNMP_SMARTPDU_OID {1,3,6,1,4,1,2024}
|
|
|
#define SNMP_SMARTPDU_DEVICE_OID {1,3,6,1,4,1,2024,1}
|
|
|
-#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_THR_TABLE_IOD {1,3,6,1,4,1,2024,1,7}
|
|
|
typedef struct
|
|
|
{
|
|
|
uint8_t sysdescr[10];
|
|
|
@@ -114,6 +116,38 @@ typedef struct power_data{
|
|
|
float a_p;
|
|
|
}p_data_t;
|
|
|
|
|
|
+typedef struct alarm_data{
|
|
|
+ uint8_t id;
|
|
|
+ uint8_t type;
|
|
|
+ char * alarm_info;
|
|
|
+ uint8_t alarm_action;
|
|
|
+ uint32_t alarm_action_para;
|
|
|
+ char * date;
|
|
|
+ char * time;
|
|
|
+}p_alarm_t;
|
|
|
+
|
|
|
+typedef struct threshold_data{
|
|
|
+ uint8_t id;
|
|
|
+ char *name;
|
|
|
+ float v_max;
|
|
|
+ float v_min;
|
|
|
+ float i_max;
|
|
|
+ float p_max;
|
|
|
+ float c_max;
|
|
|
+}thr_d_t;
|
|
|
+
|
|
|
+
|
|
|
+typedef struct thr_sensor_data{
|
|
|
+ uint8_t id;
|
|
|
+ char *name;
|
|
|
+ uint32_t val1_up;
|
|
|
+ uint32_t val2_up;
|
|
|
+ uint32_t val1_down;
|
|
|
+ uint32_t val2_down;
|
|
|
+}thr_s_t;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
static p_data_t p_data[POWER_VALUE]={
|
|
|
@@ -171,14 +205,320 @@ static p_data_t p_data[POWER_VALUE]={
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-
|
|
|
+static thr_s_t p_thr_s[POWER_VALUE] = {
|
|
|
+ {
|
|
|
+ .id = 1,
|
|
|
+ .name = "sers_th1",
|
|
|
+ .val1_up = 23,
|
|
|
+ .val2_up = 32,
|
|
|
+ .val1_down = 11,
|
|
|
+ .val2_down = 12,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 2,
|
|
|
+ .name = "sers_th2",
|
|
|
+ .val1_up = 23,
|
|
|
+ .val2_up = 32,
|
|
|
+ .val1_down = 11,
|
|
|
+ .val2_down = 12,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 3,
|
|
|
+ .name = "sers_th3",
|
|
|
+ .val1_up = 23,
|
|
|
+ .val2_up = 32,
|
|
|
+ .val1_down = 11,
|
|
|
+ .val2_down = 12,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 4,
|
|
|
+ .name = "sers_th4",
|
|
|
+ .val1_up = 23,
|
|
|
+ .val2_up = 32,
|
|
|
+ .val1_down = 11,
|
|
|
+ .val2_down = 12,
|
|
|
+ },
|
|
|
+};
|
|
|
|
|
|
static const struct snmp_oid_range th_table_oid_ranges[] = {
|
|
|
{1, POWER_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)
|
|
|
+
|
|
|
+
|
|
|
+static p_alarm_t p_a_data[POWER_VALUE]={
|
|
|
+ {
|
|
|
+ .id = 1,
|
|
|
+ .type = 3,
|
|
|
+ .alarm_info="voltage alarm!!!",
|
|
|
+ .alarm_action = 0,
|
|
|
+ .alarm_action_para = 4,
|
|
|
+ .date = "2052.12.20",
|
|
|
+ .time = "12:30:47",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 2,
|
|
|
+ .type = 2,
|
|
|
+ .alarm_info="current alarm!!!",
|
|
|
+ .alarm_action = 1,
|
|
|
+ .alarm_action_para = 2,
|
|
|
+ .date = "2002-11-20",
|
|
|
+ .time = "10:30:47",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 3,
|
|
|
+ .type = 1,
|
|
|
+ .alarm_info="power alarm!!!",
|
|
|
+ .alarm_action = 3,
|
|
|
+ .alarm_action_para = 6,
|
|
|
+ .date = "2012-11-20",
|
|
|
+ .time = "10:59:47",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 4,
|
|
|
+ .type = 4,
|
|
|
+ .alarm_info="consumer alarm!!!",
|
|
|
+ .alarm_action = 3,
|
|
|
+ .alarm_action_para = 6,
|
|
|
+ .date = "2012-11-20",
|
|
|
+ .time = "10:59:47",
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static thr_d_t p_t_data[POWER_VALUE]=
|
|
|
+{
|
|
|
+ {
|
|
|
+ .id = 1,
|
|
|
+ .name="thrould",
|
|
|
+ .v_max = 250.00,
|
|
|
+ .v_min = 180.00,
|
|
|
+ .i_max = 50.00,
|
|
|
+ .p_max = 20000.00,
|
|
|
+ .c_max = 10000,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 2,
|
|
|
+ .name="thrould",
|
|
|
+ .v_max = 250.00,
|
|
|
+ .v_min = 180.00,
|
|
|
+ .i_max = 50.00,
|
|
|
+ .p_max = 20000.00,
|
|
|
+ .c_max = 10000,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 3,
|
|
|
+ .name="thrould",
|
|
|
+ .v_max = 250.00,
|
|
|
+ .v_min = 180.00,
|
|
|
+ .i_max = 50.00,
|
|
|
+ .p_max = 20000.00,
|
|
|
+ .c_max = 10000,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = 4,
|
|
|
+ .name="thrould",
|
|
|
+ .v_max = 250.00,
|
|
|
+ .v_min = 180.00,
|
|
|
+ .i_max = 50.00,
|
|
|
+ .p_max = 20000.00,
|
|
|
+ .c_max = 10000,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static snmp_err_t thr_s_set_value(struct snmp_node_instance *instance,u16_t len, void *value)
|
|
|
+{
|
|
|
+ u32_t row = instance->reference.u32;
|
|
|
+ u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
|
|
|
+ switch(col)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE1UP:
|
|
|
+ {
|
|
|
+ p_thr_s[row-1].val1_up = *(uint32_t *)value;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE2UP:
|
|
|
+ {
|
|
|
+ p_thr_s[row-1].val2_up = *(uint32_t *)value;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE1DOWN:
|
|
|
+ {
|
|
|
+ p_thr_s[row-1].val1_down = *(uint32_t *)value;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE2DOWN:
|
|
|
+ {
|
|
|
+ p_thr_s[row-1].val2_down = *(uint32_t *)value;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return SNMP_ERR_NOTWRITABLE;
|
|
|
+ }
|
|
|
+ return SNMP_ERR_NOERROR;
|
|
|
+}
|
|
|
+
|
|
|
+static s16_t thr_s_get_value(struct snmp_node_instance *instance, void *value)
|
|
|
+{
|
|
|
+ u32_t row = instance->reference.u32;
|
|
|
+ u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
|
|
|
+ char buff[50]= {0};
|
|
|
+ switch(col)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUSENSORLIMITID:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_thr_s[row-1].id;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITNAME:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%s",p_thr_s[row-1].name);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE1UP:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_thr_s[row-1].val1_up;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE2UP:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_thr_s[row-1].val2_up;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE1DOWN:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_thr_s[row-1].val1_down;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUSENSORLIMITVALUE2DOWN:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_thr_s[row-1].val2_down;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ memcpy(value,buff,strlen(buff));
|
|
|
+ return strlen(buff);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+static s16_t thr_get_value(struct snmp_node_instance *instance, void *value)
|
|
|
+{
|
|
|
+ u32_t row = instance->reference.u32;
|
|
|
+ u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
|
|
|
+ char buff[50]= {0};
|
|
|
+ switch (col)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUCHANNELLIMITID:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_t_data[row-1].id;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELLIMITNAME:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%s",p_t_data[row-1].name);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELCURRENTLIMITUP:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%.2f",p_t_data[row-1].i_max);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELVOLTAGELIMITUP:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%.2f",p_t_data[row-1].v_max);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%.2f",p_t_data[row-1].v_min);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELPOWERLIMITUP:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%.2f",p_t_data[row-1].p_max);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%.2f",p_t_data[row-1].c_max);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ memcpy(value,buff,strlen(buff));
|
|
|
+ return strlen(buff);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+static s16_t alarm_get_value(struct snmp_node_instance *instance, void *value)
|
|
|
+{
|
|
|
+ u32_t row = instance->reference.u32;
|
|
|
+ u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
|
|
|
+ char buff[50]= {0};
|
|
|
+ switch (col)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUALARMID:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_a_data[row-1].id;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMTYPE:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_a_data[row-1].type;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMCONTEXT:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%s",p_a_data[row-1].alarm_info);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMACTION:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_a_data[row-1].alarm_action;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMACTIONPARA:
|
|
|
+ {
|
|
|
+ *(s32_t *)value = p_a_data[row-1].alarm_action_para;
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMDATE:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%s",p_a_data[row-1].date);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUALARMTIME:
|
|
|
+ {
|
|
|
+ sprintf(buff,"%s",p_a_data[row-1].time);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ memcpy(value,buff,strlen(buff));
|
|
|
+
|
|
|
+ return strlen(buff);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+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)))
|
|
|
return SNMP_ERR_NOSUCHINSTANCE;
|
|
|
@@ -188,13 +528,15 @@ static snmp_err_t power_get_instance(const u32_t *column, const u32_t *row_oid,
|
|
|
}
|
|
|
|
|
|
|
|
|
-static snmp_err_t power_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;
|
|
|
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_all_t all;
|
|
|
+// power_data_get(&all);
|
|
|
for (i = 0; i < POWER_VALUE; i++)
|
|
|
{
|
|
|
u32_t test_oid = i + 1;
|
|
|
@@ -215,18 +557,6 @@ static s16_t power_get_value(struct snmp_node_instance *instance, void *value)
|
|
|
{
|
|
|
u32_t row = instance->reference.u32;
|
|
|
u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
|
|
|
- //s32_t *value_s32 = (s32_t *)value;
|
|
|
-
|
|
|
- /* 第一列索引 */
|
|
|
-// if (col == 1)
|
|
|
-// {
|
|
|
-// *(s32_t *)value = row;
|
|
|
-// return sizeof(s32_t);
|
|
|
-// }
|
|
|
-// if (col < 4)
|
|
|
-// th_value[row - 1][col - 2] = row * 100 + col * 10 + rand() % 10 + th_value[row - 1][col];
|
|
|
-
|
|
|
-// *value_s32 = p_data[row - 1][col - 2];
|
|
|
char buff[100]= {0};
|
|
|
switch (col)
|
|
|
{
|
|
|
@@ -296,7 +626,7 @@ static s16_t power_get_value(struct snmp_node_instance *instance, void *value)
|
|
|
|
|
|
return strlen(buff);
|
|
|
}
|
|
|
-static snmp_err_t th_set_test(struct snmp_node_instance *instance, u16_t len, void *value)
|
|
|
+static snmp_err_t set_test(struct snmp_node_instance *instance, u16_t len, void *value)
|
|
|
{
|
|
|
LOGD("write test\n");
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
@@ -318,7 +648,42 @@ static snmp_err_t power_set_value (struct snmp_node_instance *instance, u16_t l
|
|
|
}
|
|
|
return SNMP_ERR_NOERROR;
|
|
|
}
|
|
|
-
|
|
|
+static snmp_err_t thr_set_value(struct snmp_node_instance *instance,u16_t len, void *value)
|
|
|
+{
|
|
|
+ u32_t row = instance->reference.u32;
|
|
|
+ u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
|
|
|
+ switch(col)
|
|
|
+ {
|
|
|
+ case COLUMN_PDUCHANNELCURRENTLIMITUP:
|
|
|
+ {
|
|
|
+ p_t_data[row-1].i_max = (float)atof((char *)value);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELVOLTAGELIMITUP:
|
|
|
+ {
|
|
|
+ p_t_data[row-1].v_max = (float)atof((char *)value);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
|
|
|
+ {
|
|
|
+ p_t_data[row-1].v_min = (float)atof((char *)value);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELPOWERLIMITUP:
|
|
|
+ {
|
|
|
+ p_t_data[row-1].p_max = (float)atof((char *)value);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
|
|
|
+ {
|
|
|
+ p_t_data[row-1].c_max = (float)atof((char *)value);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return SNMP_ERR_INCONSISTENTNAME;
|
|
|
+ }
|
|
|
+ return SNMP_ERR_NOERROR;
|
|
|
+}
|
|
|
|
|
|
static const struct snmp_scalar_array_node_def sysinfo_scalars_nodes[] = {
|
|
|
{1, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY}, /* product id */
|
|
|
@@ -330,69 +695,126 @@ static const struct snmp_scalar_array_node_def sysinfo_scalars_nodes[] = {
|
|
|
{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},
|
|
|
+ {COLUMN_PDUCHANNELSTATUS, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE},
|
|
|
+ {COLUMN_PDUCHANNELVOLTAGE, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELCURRENT, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELFREQUENCY, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELCONSUMPTION, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELPOWERFACTOR, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELPACTIVEPOWER, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELREACTIVEPOWER, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELAPPARENTPOWER, 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},
|
|
|
- {COLUMN_PDUCHANNELSTATUS,SNMP_ASN1_TYPE_INTEGER,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELVOLTAGE,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELCURRENT,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELFREQUENCY,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELCONSUMPTION,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELPOWERFACTOR,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELPACTIVEPOWER,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELREACTIVEPOWER,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
- {COLUMN_PDUCHANNELAPPARENTPOWER,SNMP_ASN1_TYPE_OCTET_STRING,SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+
|
|
|
+static const struct snmp_table_col_def alarm_history_table[]={
|
|
|
+ {COLUMN_PDUALARMID, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUALARMTYPE, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUALARMCONTEXT, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUALARMACTION, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUALARMACTIONPARA, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUALARMDATE, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUALARMTIME, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
{0,0,0},
|
|
|
};
|
|
|
|
|
|
+static const struct snmp_table_col_def threshold_limit_table[] = {
|
|
|
+ {COLUMN_PDUCHANNELLIMITID, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELLIMITNAME, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY},
|
|
|
+ {COLUMN_PDUCHANNELCURRENTLIMITUP, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
|
|
|
+ {COLUMN_PDUCHANNELVOLTAGELIMITUP, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
|
|
|
+ {COLUMN_PDUCHANNELVOLTAGELIMITDOWN, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
|
|
|
+ {COLUMN_PDUCHANNELPOWERLIMITUP, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
|
|
|
+ {COLUMN_PDUCHANNELCONSUMPTIONLIMITUP, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_WRITE},
|
|
|
+ {0,0,0},
|
|
|
+};
|
|
|
+
|
|
|
+static const struct snmp_table_col_def sensor_limit_table[] = {
|
|
|
+ {COLUMN_PDUSENSORLIMITID, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_ONLY,},
|
|
|
+ {COLUMN_PDUSENSORLIMITNAME, SNMP_ASN1_TYPE_OCTET_STRING, SNMP_NODE_INSTANCE_READ_ONLY,},
|
|
|
+ {COLUMN_PDUSENSORLIMITVALUE1UP, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE,},
|
|
|
+ {COLUMN_PDUSENSORLIMITVALUE2UP, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE,},
|
|
|
+ {COLUMN_PDUSENSORLIMITVALUE1DOWN, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE,},
|
|
|
+ {COLUMN_PDUSENSORLIMITVALUE2DOWN, SNMP_ASN1_TYPE_INTEGER, SNMP_NODE_INSTANCE_READ_WRITE,},
|
|
|
+ {0,0,0},
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
|
|
|
const struct snmp_scalar_array_node sysinfo_scalars = SNMP_SCALAR_CREATE_ARRAY_NODE(1, sysinfo_scalars_nodes, sysinfo_get_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, th_set_test, power_set_value);
|
|
|
|
|
|
|
|
|
+static const struct snmp_table_node power_table = SNMP_TABLE_CREATE(9, power_table_channels, get_instance, 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);
|
|
|
+
|
|
|
+static const struct snmp_table_node thr_table = SNMP_TABLE_CREATE(6, threshold_limit_table, get_instance, get_next_instance, \
|
|
|
+ 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, \
|
|
|
+ thr_s_get_value, set_test, thr_s_set_value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+static const struct snmp_node *const alarm_subnodes[]={
|
|
|
+ &alarm_table.node.node,
|
|
|
+};
|
|
|
static const struct snmp_node *const power_subnodes[] = {
|
|
|
&power_table.node.node,
|
|
|
};
|
|
|
+static const struct snmp_node *const thr_subnodes[] = {
|
|
|
+ &thr_table.node.node,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct snmp_node *const thr_s_subnodes[] = {
|
|
|
+ &thr_s_table.node.node,
|
|
|
+};
|
|
|
+
|
|
|
+const struct snmp_tree_node power_treenode = SNMP_CREATE_TREE_NODE(3, power_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);
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
-const struct snmp_tree_node power_treenode = SNMP_CREATE_TREE_NODE(3, power_subnodes);
|
|
|
|
|
|
static const struct snmp_node *const mib2_nodes_dev[] =
|
|
|
{
|
|
|
&sysinfo_scalars.node.node,
|
|
|
&power_treenode.node,
|
|
|
+ &alarm_treenode.node,
|
|
|
+ //&thr_treenode.node,
|
|
|
};
|
|
|
|
|
|
-//static const struct snmp_node *const mib2_nodes_pw_dev[] ={
|
|
|
-// &power_treenode.node,
|
|
|
-//};
|
|
|
|
|
|
+static const struct snmp_node *const mib2_nodes_dev_2[]={
|
|
|
+ &thr_treenode.node,
|
|
|
+ &thr_s_treenode.node,
|
|
|
+};
|
|
|
|
|
|
|
|
|
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_pw_dev = SNMP_CREATE_TREE_NODE(11, mib2_nodes_pw_dev);
|
|
|
-
|
|
|
-
|
|
|
+static const struct snmp_tree_node snmp_mib2_thr_dev = SNMP_CREATE_TREE_NODE(7, mib2_nodes_dev_2);
|
|
|
|
|
|
|
|
|
static const u32_t prvmib_base_oid[] = SNMP_SMARTPDU_DEVICE_OID;
|
|
|
-//static const u32_t power_base_oid[] = SNMP_SMARTPDU_CHANNEL_TABLE;
|
|
|
-
|
|
|
+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_pw_dev = SNMP_MIB_CREATE(power_base_oid, &snmp_mib2_pw_dev.node);
|
|
|
-
|
|
|
+const struct snmp_mib mib2_th_dev = SNMP_MIB_CREATE(thr_base_oid, &snmp_mib2_thr_dev.node);
|
|
|
|
|
|
-static const struct snmp_mib *dev_mibs[] = {&mib2, &mib2_dev};
|
|
|
+static const struct snmp_mib *dev_mibs[] = {&mib2, &mib2_dev,&mib2_th_dev};
|
|
|
|
|
|
|
|
|
|