📄 lwip_prvmib.c
字号:
snmp_mib_node_insert(&sensor_addr_inf.sensor_list_rn,index,&dummy);
strncpy(&sensor_addr_inf.sensor_files[index][0],dp->d_name,SENSOR_NAME_LEN);
printf("%s\n", sensor_addr_inf.sensor_files[index]);
}
cp += dp->d_reclen;
}
}
}
while (nbytes > 0);
free(buf);
}
close(fd);
}
#else /* SENSORS_USE_FILES && SENSORS_SEARCH_FILES */
for (i = 0; i < SENSOR_COUNT; i++) {
struct mib_list_node *dummy;
s32_t index = i;
char name[256];
sprintf(name, "%d.txt", i);
snmp_mib_node_insert(&sensor_addr_inf.sensor_list_rn, index, &dummy);
strncpy(&sensor_addr_inf.sensor_files[index][0], name, SENSOR_NAME_LEN);
printf("%s\n", sensor_addr_inf.sensor_files[index]);
#if !SENSORS_USE_FILES
/* initialize sensor value to != zero */
sensor_values[i] = 11 * (i+1);
#endif /* !SENSORS_USE_FILES */
}
#endif /* SENSORS_USE_FILE && SENSORS_SEARCH_FILES */
if (sensor_addr_inf.sensor_list_rn.count != 0)
{
/* enable sensor table, 2 tree_levels under this node
one for the registers and one for the index */
sensorentry.tree_levels = 2;
}
}
static u16_t
sensorentry_length(void* addr_inf, u8_t level)
{
struct sensor_inf *sensors = (struct sensor_inf *)addr_inf;
if (level == 0)
{
/* one object (temperature) */
return 1;
}
else if (level == 1)
{
/* number of sensor indexes */
return sensors->sensor_list_rn.count;
}
else
{
return 0;
}
}
static s32_t
sensorentry_idcmp(void* addr_inf, u8_t level, u16_t idx, s32_t sub_id)
{
struct sensor_inf *sensors = (struct sensor_inf *)addr_inf;
if (level == 0)
{
return ((s32_t)(idx + 1) - sub_id);
}
else if (level == 1)
{
struct mib_list_node *ln;
u16_t i;
i = 0;
ln = sensors->sensor_list_rn.head;
while (i < idx)
{
i++;
ln = ln->next;
}
LWIP_ASSERT("ln != NULL", ln != NULL);
return (ln->objid - sub_id);
}
else
{
return -1;
}
}
static void
sensorentry_get_subid(void* addr_inf, u8_t level, u16_t idx, s32_t *sub_id)
{
struct sensor_inf *sensors = (struct sensor_inf *)addr_inf;
if (level == 0)
{
*sub_id = idx + 1;
}
else if (level == 1)
{
struct mib_list_node *ln;
u16_t i;
i = 0;
ln = sensors->sensor_list_rn.head;
while (i < idx)
{
i++;
ln = ln->next;
}
LWIP_ASSERT("ln != NULL", ln != NULL);
*sub_id = ln->objid;
}
}
/**
* Async question for object definition
*/
static void
sensorentry_get_object_def_q(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *ident)
{
s32_t sensor_register, sensor_address;
LWIP_UNUSED_ARG(addr_inf);
LWIP_UNUSED_ARG(rid);
ident_len += 1;
ident -= 1;
/* send request */
sensor_register = ident[0];
sensor_address = ident[1];
LWIP_DEBUGF(SNMP_MIB_DEBUG,("sensor_request reg=%"S32_F" addr=%"S32_F"\n",
sensor_register, sensor_address));
/* fake async quesion/answer */
snmp_msg_event(rid);
}
static void
sensorentry_get_object_def_a(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_def *od)
{
LWIP_UNUSED_ARG(rid);
/* 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;
od->instance = MIB_OBJECT_TAB;
od->access = MIB_OBJECT_READ_WRITE;
od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
od->v_len = sizeof(s32_t);
}
else
{
LWIP_DEBUGF(SNMP_MIB_DEBUG,("sensorentry_get_object_def_a: no scalar\n"));
od->instance = MIB_OBJECT_NONE;
}
}
static void
sensorentry_get_object_def_pc(u8_t rid, u8_t ident_len, s32_t *ident)
{
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(ident_len);
LWIP_UNUSED_ARG(ident);
/* nop */
}
static void
sensorentry_get_value_q(u8_t rid, struct obj_def *od)
{
LWIP_UNUSED_ARG(od);
/* fake async quesion/answer */
snmp_msg_event(rid);
}
static void
sensorentry_get_value_a(u8_t rid, struct obj_def *od, u16_t len, void *value)
{
s32_t i;
s32_t *temperature = (s32_t *)value;
#if SENSORS_USE_FILES
FILE* sensf;
char senspath[sizeof(SENSORS_DIR)+1+SENSOR_NAME_LEN+1] = SENSORS_DIR"/";
#endif /* SENSORS_USE_FILES */
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(len);
i = od->id_inst_ptr[1];
#if SENSORS_USE_FILES
strncpy(&senspath[sizeof(SENSORS_DIR)],
sensor_addr_inf.sensor_files[i],
SENSOR_NAME_LEN);
sensf = fopen(senspath,"r");
if (sensf != NULL)
{
fscanf(sensf,"%"S32_F,temperature);
fclose(sensf);
}
#else /* SENSORS_USE_FILES */
if (i <= SENSOR_COUNT) {
*temperature = sensor_values[i];
}
#endif /* SENSORS_USE_FILES */
}
static void
sensorentry_get_value_pc(u8_t rid, struct obj_def *od)
{
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(od);
/* nop */
}
static void
sensorentry_set_test_q(u8_t rid, struct obj_def *od)
{
LWIP_UNUSED_ARG(od);
/* fake async quesion/answer */
snmp_msg_event(rid);
}
static u8_t
sensorentry_set_test_a(u8_t rid, struct obj_def *od, u16_t len, void *value)
{
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(od);
LWIP_UNUSED_ARG(len);
LWIP_UNUSED_ARG(value);
/* sensors are read-only */
return 1; /* 0 -> read only, != 0 -> read/write */
}
static void
sensorentry_set_test_pc(u8_t rid, struct obj_def *od)
{
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(od);
/* nop */
}
static void
sensorentry_set_value_q(u8_t rid, struct obj_def *od, u16_t len, void *value)
{
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(od);
LWIP_UNUSED_ARG(len);
LWIP_UNUSED_ARG(value);
/* fake async quesion/answer */
snmp_msg_event(rid);
}
static void
sensorentry_set_value_a(u8_t rid, struct obj_def *od, u16_t len, void *value)
{
s32_t i;
s32_t *temperature = (s32_t *)value;
#if SENSORS_USE_FILES
FILE* sensf;
char senspath[sizeof(SENSORS_DIR)+1+SENSOR_NAME_LEN+1] = SENSORS_DIR"/";
#endif /* SENSORS_USE_FILES */
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(len);
i = od->id_inst_ptr[1];
#if SENSORS_USE_FILES
strncpy(&senspath[sizeof(SENSORS_DIR)],
sensor_addr_inf.sensor_files[i],
SENSOR_NAME_LEN);
sensf = fopen(senspath, "w");
if (sensf != NULL)
{
fprintf(sensf, "%"S32_F, temperature);
fclose(sensf);
}
#else /* SENSORS_USE_FILES */
if (i <= SENSOR_COUNT) {
sensor_values[i] = *temperature;
}
#endif /* SENSORS_USE_FILES */
}
static void
sensorentry_set_value_pc(u8_t rid, struct obj_def *od)
{
LWIP_UNUSED_ARG(rid);
LWIP_UNUSED_ARG(od);
/* nop */
}
#endif /* LWIP_SNMP */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -