static void sensor_read_states(ipmi_sensor_t *sensor, int err, ipmi_states_t *states, void *cb_data) { struct ohoi_sensor_reading *p = cb_data; p->sensor_reading->ValuesPresent = SAHPI_SRF_EVENT_STATE; if (ipmi_is_event_messages_enabled(states)) p->sensor_reading->EventStatus.SensorStatus |= SAHPI_SENSTAT_EVENTS_ENABLED; if (ipmi_is_sensor_scanning_enabled(states)) p->sensor_reading->EventStatus.SensorStatus |= SAHPI_SENSTAT_EVENTS_ENABLED; if (ipmi_is_initial_update_in_progress(states)) p->sensor_reading->EventStatus.SensorStatus |= SAHPI_SENSTAT_BUSY; p->sensor_reading->EventStatus.EventStatus = states->__states; p->done = 1; }
static void read_sensor_states(ipmi_sensor_t *sensor, int err, ipmi_states_t *states, void *cb_data) { ipmi_cmd_info_t *cmd_info = cb_data; ipmi_cmdlang_t *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info); int i; char sensor_name[IPMI_SENSOR_NAME_LEN]; int rv; ipmi_cmdlang_lock(cmd_info); if (err) { cmdlang->errstr = "Error reading sensor"; cmdlang->err = err; ipmi_sensor_get_name(sensor, cmdlang->objstr, cmdlang->objstr_len); cmdlang->location = "cmd_sensor.c(read_sensor_states)"; goto out; } ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name)); ipmi_cmdlang_out(cmd_info, "Sensor", NULL); ipmi_cmdlang_down(cmd_info); ipmi_cmdlang_out(cmd_info, "Name", sensor_name); ipmi_cmdlang_out_bool(cmd_info, "Event Messages Enabled", ipmi_is_event_messages_enabled(states)); ipmi_cmdlang_out_bool(cmd_info, "Sensor Scanning Enabled", ipmi_is_sensor_scanning_enabled(states)); ipmi_cmdlang_out_bool(cmd_info, "Initial Update In Progress", ipmi_is_initial_update_in_progress(states)); for (i=0; i<15; i++) { int ival; const char *str; rv = ipmi_sensor_discrete_event_readable(sensor, i, &ival); if ((rv) || !ival) continue; ipmi_cmdlang_out(cmd_info, "Event", NULL); ipmi_cmdlang_down(cmd_info); ipmi_cmdlang_out_int(cmd_info, "Offset", i); str = ipmi_sensor_reading_name_string(sensor, i); if (strcmp(str, "unknown") != 0) ipmi_cmdlang_out(cmd_info, "Name", str); ipmi_cmdlang_out_bool(cmd_info, "Set", ipmi_is_state_set(states, i)); ipmi_cmdlang_up(cmd_info); } ipmi_cmdlang_up(cmd_info); out: ipmi_cmdlang_unlock(cmd_info); ipmi_cmdlang_cmd_info_put(cmd_info); }
static void got_discrete_states(ipmi_sensor_t *sensor, int err, ipmi_states_t *states, void *cb_data) { sdata_t *sdata = cb_data; int i; if (err) { printf("Error 0x%x getting discrete states for sensor %s\n", err, sdata->name); goto out; } if (err) { printf("Error 0x%x getting discrete states for sensor %s\n", err, sdata->name); goto out; } printf("Got state reading for sensor %s\n", sdata->name); if (ipmi_is_event_messages_enabled(states)) printf(" event messages enabled\n"); if (ipmi_is_sensor_scanning_enabled(states)) printf(" sensor scanning enabled\n"); if (ipmi_is_initial_update_in_progress(states)) printf(" initial update in progress\n"); for (i=0; i<15; i++) { int val, rv; rv = ipmi_sensor_discrete_event_readable(sensor, i, &val); if (rv || !val) continue; printf(" state %d value is %d\n", i, ipmi_is_state_set(states, i)); } out: release_sdata(sdata); }
static void read_sensor(ipmi_sensor_t *sensor, int err, enum ipmi_value_present_e value_present, unsigned int raw_val, double val, ipmi_states_t *states, void *cb_data) { ipmi_cmd_info_t *cmd_info = cb_data; ipmi_cmdlang_t *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info); enum ipmi_thresh_e thresh; char sensor_name[IPMI_SENSOR_NAME_LEN]; int rv; ipmi_cmdlang_lock(cmd_info); if (err) { cmdlang->errstr = "Error reading sensor"; cmdlang->err = err; ipmi_sensor_get_name(sensor, cmdlang->objstr, cmdlang->objstr_len); cmdlang->location = "cmd_sensor.c(read_sensor)"; goto out; } ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name)); ipmi_cmdlang_out(cmd_info, "Sensor", NULL); ipmi_cmdlang_down(cmd_info); ipmi_cmdlang_out(cmd_info, "Name", sensor_name); ipmi_cmdlang_out_bool(cmd_info, "Event Messages Enabled", ipmi_is_event_messages_enabled(states)); ipmi_cmdlang_out_bool(cmd_info, "Sensor Scanning Enabled", ipmi_is_sensor_scanning_enabled(states)); ipmi_cmdlang_out_bool(cmd_info, "Initial Update In Progress", ipmi_is_initial_update_in_progress(states)); switch (value_present) { case IPMI_BOTH_VALUES_PRESENT: ipmi_cmdlang_out_double(cmd_info, "Value", val); /* FALLTHRU */ case IPMI_RAW_VALUE_PRESENT: ipmi_cmdlang_out_hex(cmd_info, "Raw Value", raw_val); default: break; } for (thresh = IPMI_LOWER_NON_CRITICAL; thresh <= IPMI_UPPER_NON_RECOVERABLE; thresh++) { int ival; rv = ipmi_sensor_threshold_reading_supported(sensor, thresh, &ival); if ((rv) || !ival) continue; ipmi_cmdlang_out(cmd_info, "Threshold", NULL); ipmi_cmdlang_down(cmd_info); ipmi_cmdlang_out(cmd_info, "Name", ipmi_get_threshold_string(thresh)); ipmi_cmdlang_out_bool(cmd_info, "Out Of Range", ipmi_is_threshold_out_of_range(states, thresh)); ipmi_cmdlang_up(cmd_info); } ipmi_cmdlang_up(cmd_info); out: ipmi_cmdlang_unlock(cmd_info); ipmi_cmdlang_cmd_info_put(cmd_info); }
static void got_thresh_reading(ipmi_sensor_t *sensor, int err, enum ipmi_value_present_e value_present, unsigned int raw_value, double val, ipmi_states_t *states, void *cb_data) { sdata_t *sdata = cb_data; enum ipmi_thresh_e thresh; if (err) { printf("Error 0x%x getting discrete states for sensor %s\n", err, sdata->name); goto out; } printf("Got threshold reading for sensor %s\n", sdata->name); if (ipmi_is_event_messages_enabled(states)) printf(" event messages enabled\n"); if (ipmi_is_sensor_scanning_enabled(states)) printf(" sensor scanning enabled\n"); if (ipmi_is_initial_update_in_progress(states)) printf(" initial update in progress\n"); switch (value_present) { case IPMI_NO_VALUES_PRESENT: printf(" no value present\n"); break; case IPMI_BOTH_VALUES_PRESENT: { const char *percent = ""; const char *base; const char *mod_use = ""; const char *modifier = ""; const char *rate; base = ipmi_sensor_get_base_unit_string(sensor); if (ipmi_sensor_get_percentage(sensor)) percent = "%"; switch (ipmi_sensor_get_modifier_unit_use(sensor)) { case IPMI_MODIFIER_UNIT_NONE: break; case IPMI_MODIFIER_UNIT_BASE_DIV_MOD: mod_use = "/"; modifier = ipmi_sensor_get_modifier_unit_string(sensor); break; case IPMI_MODIFIER_UNIT_BASE_MULT_MOD: mod_use = "*"; modifier = ipmi_sensor_get_modifier_unit_string(sensor); break; } rate = ipmi_sensor_get_rate_unit_string(sensor); printf(" value: %lf%s %s%s%s%s\n", val, percent, base, mod_use, modifier, rate); } /* FALLTHROUGH */ case IPMI_RAW_VALUE_PRESENT: printf(" raw value: 0x%2.2x\n", raw_value); } if (sdata->thresh_sup == IPMI_THRESHOLD_ACCESS_SUPPORT_NONE) goto out; for (thresh=IPMI_LOWER_NON_CRITICAL; thresh<=IPMI_UPPER_NON_RECOVERABLE; thresh++) { int val, rv; rv = ipmi_sensor_threshold_reading_supported(sensor, thresh, &val); if (rv || !val) continue; if (ipmi_is_threshold_out_of_range(states, thresh)) printf(" Threshold %s is out of range\n", ipmi_get_threshold_string(thresh)); else printf(" Threshold %s is in range\n", ipmi_get_threshold_string(thresh)); } out: release_sdata(sdata); }