mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
sensor units should handle percentage units - ID: 3014014
This commit is contained in:
parent
83b34749c5
commit
6e5043f289
@ -896,7 +896,8 @@ int ipmi_sdr_print_rawentry(struct ipmi_intf *intf, uint8_t type, uint8_t * raw,
|
||||
int len);
|
||||
int ipmi_sdr_print_listentry(struct ipmi_intf *intf,
|
||||
struct sdr_record_list *entry);
|
||||
char *ipmi_sdr_get_unit_string(uint8_t type, uint8_t base, uint8_t modifier);
|
||||
const char *ipmi_sdr_get_unit_string(uint8_t pct, uint8_t type,
|
||||
uint8_t base, uint8_t modifier);
|
||||
const char *ipmi_sdr_get_status(struct sdr_record_full_sensor *sensor,
|
||||
uint8_t stat);
|
||||
double sdr_convert_sensor_tolerance(struct sdr_record_full_sensor *sensor,
|
||||
|
@ -64,30 +64,44 @@ static struct ipmi_sdr_iterator *sdr_list_itr = NULL;
|
||||
|
||||
/* ipmi_sdr_get_unit_string - return units for base/modifier
|
||||
*
|
||||
* @pct: units are a percentage
|
||||
* @type: unit type
|
||||
* @base: base
|
||||
* @modifier: modifier
|
||||
*
|
||||
* returns pointer to static string
|
||||
*/
|
||||
char *
|
||||
ipmi_sdr_get_unit_string(uint8_t type, uint8_t base, uint8_t modifier)
|
||||
const char *
|
||||
ipmi_sdr_get_unit_string(uint8_t pct, uint8_t type, uint8_t base, uint8_t modifier)
|
||||
{
|
||||
static char unitstr[16];
|
||||
|
||||
/*
|
||||
* By default, if units are supposed to be percent, we will pre-pend
|
||||
* the percent string to the textual representation of the units.
|
||||
*/
|
||||
char *pctstr = pct ? "% " : "";
|
||||
memset(unitstr, 0, sizeof (unitstr));
|
||||
switch (type) {
|
||||
case 2:
|
||||
snprintf(unitstr, sizeof (unitstr), "%s * %s",
|
||||
unit_desc[base], unit_desc[modifier]);
|
||||
snprintf(unitstr, sizeof (unitstr), "%s%s * %s",
|
||||
pctstr, unit_desc[base], unit_desc[modifier]);
|
||||
break;
|
||||
case 1:
|
||||
snprintf(unitstr, sizeof (unitstr), "%s/%s",
|
||||
unit_desc[base], unit_desc[modifier]);
|
||||
snprintf(unitstr, sizeof (unitstr), "%s%s/%s",
|
||||
pctstr, unit_desc[base], unit_desc[modifier]);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
snprintf(unitstr, sizeof (unitstr), "%s", unit_desc[base]);
|
||||
/*
|
||||
* Display the text "percent" only when the Base unit is
|
||||
* "unspecified" and the caller specified to print percent.
|
||||
*/
|
||||
if (base == 0 && pct) {
|
||||
snprintf(unitstr, sizeof(unitstr), "percent");
|
||||
} else {
|
||||
snprintf(unitstr, sizeof (unitstr), "%s%s",
|
||||
pctstr, unit_desc[base]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1154,8 +1168,9 @@ int
|
||||
ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
||||
struct sdr_record_full_sensor *sensor)
|
||||
{
|
||||
char sval[16], unitstr[16], desc[17];
|
||||
int i = 0, validread = 1, do_unit = 1;
|
||||
const char *unitstr = NULL;
|
||||
char sval[16], desc[17];
|
||||
int i = 0, validread = 1;
|
||||
double val = 0.0, creading = 0.0;
|
||||
struct ipmi_rs *rsp;
|
||||
uint8_t target, lun, channel;
|
||||
@ -1219,25 +1234,11 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
||||
}
|
||||
|
||||
/* determine units with possible modifiers */
|
||||
if (do_unit && validread) {
|
||||
memset(unitstr, 0, sizeof (unitstr));
|
||||
switch (sensor->unit.modifier) {
|
||||
case 2:
|
||||
i += snprintf(unitstr, sizeof (unitstr), "%s * %s",
|
||||
unit_desc[sensor->unit.type.base],
|
||||
unit_desc[sensor->unit.type.modifier]);
|
||||
break;
|
||||
case 1:
|
||||
i += snprintf(unitstr, sizeof (unitstr), "%s/%s",
|
||||
unit_desc[sensor->unit.type.base],
|
||||
unit_desc[sensor->unit.type.modifier]);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
i += snprintf(unitstr, sizeof (unitstr), "%s",
|
||||
unit_desc[sensor->unit.type.base]);
|
||||
break;
|
||||
}
|
||||
if (validread) {
|
||||
unitstr = ipmi_sdr_get_unit_string(sensor->unit.pct,
|
||||
sensor->unit.modifier,
|
||||
sensor->unit.type.base,
|
||||
sensor->unit.type.modifier);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1252,7 +1253,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
||||
|
||||
if (validread) {
|
||||
printf("%.*f,", (val == (int) val) ? 0 : 3, val);
|
||||
printf("%s,%s", do_unit ? unitstr : "",
|
||||
printf("%s,%s", unitstr,
|
||||
ipmi_sdr_get_status(sensor, rsp->data[2]));
|
||||
} else {
|
||||
printf(",,ns");
|
||||
@ -1310,8 +1311,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
||||
|
||||
if (validread)
|
||||
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
||||
(val == (int) val) ? 0 : 2, val,
|
||||
do_unit ? unitstr : "");
|
||||
(val == (int) val) ? 0 : 2, val, unitstr);
|
||||
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||
i += snprintf(sval, sizeof (sval), "disabled ");
|
||||
else
|
||||
@ -1344,8 +1344,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
||||
|
||||
if (validread)
|
||||
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
||||
(val == (int) val) ? 0 : 2, val,
|
||||
do_unit ? unitstr : "");
|
||||
(val == (int) val) ? 0 : 2, val, unitstr);
|
||||
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||
i += snprintf(sval, sizeof (sval), "Disabled");
|
||||
else
|
||||
|
@ -1124,7 +1124,8 @@ ipmi_sel_print_std_entry(struct ipmi_intf * intf, struct sel_event_record * evt)
|
||||
((evt->sel_type.standard_type.event_data[0] & 0xf) % 2) ? ">" : "<",
|
||||
(threshold_reading==(int)threshold_reading) ? 0 : 2,
|
||||
threshold_reading,
|
||||
ipmi_sdr_get_unit_string(sdr->record.full->unit.modifier,
|
||||
ipmi_sdr_get_unit_string(sdr->record.full->unit.pct,
|
||||
sdr->record.full->unit.modifier,
|
||||
sdr->record.full->unit.type.base,
|
||||
sdr->record.full->unit.type.modifier));
|
||||
}
|
||||
@ -1311,25 +1312,10 @@ ipmi_sel_print_extended_entry_verbose(struct ipmi_intf * intf, struct sel_event_
|
||||
sdr_convert_sensor_reading(sdr->record.full,
|
||||
evt->sel_type.standard_type.event_data[1]));
|
||||
/* determine units with possible modifiers */
|
||||
switch (sdr->record.full->unit.modifier) {
|
||||
case 2:
|
||||
printf(" %s * %s\n",
|
||||
unit_desc[sdr->record.full->unit.type.base],
|
||||
unit_desc[sdr->record.full->unit.type.modifier]);
|
||||
break;
|
||||
case 1:
|
||||
printf(" %s/%s\n",
|
||||
unit_desc[sdr->record.full->unit.type.base],
|
||||
unit_desc[sdr->record.full->unit.type.modifier]);
|
||||
break;
|
||||
case 0:
|
||||
printf(" %s\n",
|
||||
unit_desc[sdr->record.full->unit.type.base]);
|
||||
break;
|
||||
default:
|
||||
printf("\n");
|
||||
break;
|
||||
}
|
||||
printf ("%s\n", ipmi_sdr_get_unit_string(sdr->record.full->unit.pct,
|
||||
sdr->record.full->unit.modifier,
|
||||
sdr->record.full->unit.type.base,
|
||||
sdr->record.full->unit.type.modifier));
|
||||
break;
|
||||
case 2:
|
||||
/* oem code in byte 2 */
|
||||
@ -1352,25 +1338,10 @@ ipmi_sel_print_extended_entry_verbose(struct ipmi_intf * intf, struct sel_event_
|
||||
sdr_convert_sensor_reading(sdr->record.full,
|
||||
evt->sel_type.standard_type.event_data[2]));
|
||||
/* determine units with possible modifiers */
|
||||
switch (sdr->record.full->unit.modifier) {
|
||||
case 2:
|
||||
printf(" %s * %s\n",
|
||||
unit_desc[sdr->record.full->unit.type.base],
|
||||
unit_desc[sdr->record.full->unit.type.modifier]);
|
||||
break;
|
||||
case 1:
|
||||
printf(" %s/%s\n",
|
||||
unit_desc[sdr->record.full->unit.type.base],
|
||||
unit_desc[sdr->record.full->unit.type.modifier]);
|
||||
break;
|
||||
case 0:
|
||||
printf(" %s\n",
|
||||
unit_desc[sdr->record.full->unit.type.base]);
|
||||
break;
|
||||
default:
|
||||
printf("\n");
|
||||
break;
|
||||
}
|
||||
printf ("%s\n", ipmi_sdr_get_unit_string(sdr->record.full->unit.pct,
|
||||
sdr->record.full->unit.modifier,
|
||||
sdr->record.full->unit.type.base,
|
||||
sdr->record.full->unit.type.modifier));
|
||||
break;
|
||||
case 2:
|
||||
/* OEM code in byte 3 */
|
||||
|
@ -228,8 +228,9 @@ static int
|
||||
ipmi_sensor_print_full_analog(struct ipmi_intf *intf,
|
||||
struct sdr_record_full_sensor *sensor)
|
||||
{
|
||||
char unitstr[16], id[17];
|
||||
int i = 0, validread = 1, thresh_available = 1;
|
||||
const char *unitstr = NULL;
|
||||
char id[17];
|
||||
int validread = 1, thresh_available = 1;
|
||||
double val = 0.0;
|
||||
struct ipmi_rs *rsp;
|
||||
char *status = NULL;
|
||||
@ -277,25 +278,10 @@ ipmi_sensor_print_full_analog(struct ipmi_intf *intf,
|
||||
/*
|
||||
* Figure out units
|
||||
*/
|
||||
memset(unitstr, 0, sizeof (unitstr));
|
||||
switch (sensor->unit.modifier) {
|
||||
case 2:
|
||||
i += snprintf(unitstr, sizeof (unitstr), "%s * %s",
|
||||
unit_desc[sensor->unit.type.base],
|
||||
unit_desc[sensor->unit.type.modifier]);
|
||||
break;
|
||||
case 1:
|
||||
i += snprintf(unitstr, sizeof (unitstr), "%s/%s",
|
||||
unit_desc[sensor->unit.type.base],
|
||||
unit_desc[sensor->unit.type.modifier]);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
i += snprintf(unitstr, sizeof (unitstr), "%s",
|
||||
unit_desc[sensor->unit.type.base]);
|
||||
break;
|
||||
}
|
||||
|
||||
unitstr = ipmi_sdr_get_unit_string(sensor->unit.pct,
|
||||
sensor->unit.modifier,
|
||||
sensor->unit.type.base,
|
||||
sensor->unit.type.modifier);
|
||||
/*
|
||||
* Get sensor thresholds
|
||||
*/
|
||||
|
@ -284,7 +284,8 @@ log_event(struct ipmi_event_intf * eintf, struct sel_event_record * evt)
|
||||
((evt->sel_type.standard_type.event_data[0] & 0xf) % 2) ? ">" : "<",
|
||||
(threshold_reading==(int)threshold_reading) ? 0 : 2,
|
||||
threshold_reading,
|
||||
ipmi_sdr_get_unit_string(sdr->record.full->unit.modifier,
|
||||
ipmi_sdr_get_unit_string(sdr->record.full->unit.pct,
|
||||
sdr->record.full->unit.modifier,
|
||||
sdr->record.full->unit.type.base,
|
||||
sdr->record.full->unit.type.modifier));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user