mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-06-05 07:17:23 +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 len);
|
||||||
int ipmi_sdr_print_listentry(struct ipmi_intf *intf,
|
int ipmi_sdr_print_listentry(struct ipmi_intf *intf,
|
||||||
struct sdr_record_list *entry);
|
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,
|
const char *ipmi_sdr_get_status(struct sdr_record_full_sensor *sensor,
|
||||||
uint8_t stat);
|
uint8_t stat);
|
||||||
double sdr_convert_sensor_tolerance(struct sdr_record_full_sensor *sensor,
|
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
|
/* ipmi_sdr_get_unit_string - return units for base/modifier
|
||||||
*
|
*
|
||||||
|
* @pct: units are a percentage
|
||||||
* @type: unit type
|
* @type: unit type
|
||||||
* @base: base
|
* @base: base
|
||||||
* @modifier: modifier
|
* @modifier: modifier
|
||||||
*
|
*
|
||||||
* returns pointer to static string
|
* returns pointer to static string
|
||||||
*/
|
*/
|
||||||
char *
|
const char *
|
||||||
ipmi_sdr_get_unit_string(uint8_t type, uint8_t base, uint8_t modifier)
|
ipmi_sdr_get_unit_string(uint8_t pct, uint8_t type, uint8_t base, uint8_t modifier)
|
||||||
{
|
{
|
||||||
static char unitstr[16];
|
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));
|
memset(unitstr, 0, sizeof (unitstr));
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 2:
|
case 2:
|
||||||
snprintf(unitstr, sizeof (unitstr), "%s * %s",
|
snprintf(unitstr, sizeof (unitstr), "%s%s * %s",
|
||||||
unit_desc[base], unit_desc[modifier]);
|
pctstr, unit_desc[base], unit_desc[modifier]);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
snprintf(unitstr, sizeof (unitstr), "%s/%s",
|
snprintf(unitstr, sizeof (unitstr), "%s%s/%s",
|
||||||
unit_desc[base], unit_desc[modifier]);
|
pctstr, unit_desc[base], unit_desc[modifier]);
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1154,8 +1168,9 @@ int
|
|||||||
ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
||||||
struct sdr_record_full_sensor *sensor)
|
struct sdr_record_full_sensor *sensor)
|
||||||
{
|
{
|
||||||
char sval[16], unitstr[16], desc[17];
|
const char *unitstr = NULL;
|
||||||
int i = 0, validread = 1, do_unit = 1;
|
char sval[16], desc[17];
|
||||||
|
int i = 0, validread = 1;
|
||||||
double val = 0.0, creading = 0.0;
|
double val = 0.0, creading = 0.0;
|
||||||
struct ipmi_rs *rsp;
|
struct ipmi_rs *rsp;
|
||||||
uint8_t target, lun, channel;
|
uint8_t target, lun, channel;
|
||||||
@ -1219,25 +1234,11 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* determine units with possible modifiers */
|
/* determine units with possible modifiers */
|
||||||
if (do_unit && validread) {
|
if (validread) {
|
||||||
memset(unitstr, 0, sizeof (unitstr));
|
unitstr = ipmi_sdr_get_unit_string(sensor->unit.pct,
|
||||||
switch (sensor->unit.modifier) {
|
sensor->unit.modifier,
|
||||||
case 2:
|
sensor->unit.type.base,
|
||||||
i += snprintf(unitstr, sizeof (unitstr), "%s * %s",
|
sensor->unit.type.modifier);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1252,7 +1253,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
|
|
||||||
if (validread) {
|
if (validread) {
|
||||||
printf("%.*f,", (val == (int) val) ? 0 : 3, val);
|
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]));
|
ipmi_sdr_get_status(sensor, rsp->data[2]));
|
||||||
} else {
|
} else {
|
||||||
printf(",,ns");
|
printf(",,ns");
|
||||||
@ -1310,8 +1311,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
|
|
||||||
if (validread)
|
if (validread)
|
||||||
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
||||||
(val == (int) val) ? 0 : 2, val,
|
(val == (int) val) ? 0 : 2, val, unitstr);
|
||||||
do_unit ? unitstr : "");
|
|
||||||
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||||
i += snprintf(sval, sizeof (sval), "disabled ");
|
i += snprintf(sval, sizeof (sval), "disabled ");
|
||||||
else
|
else
|
||||||
@ -1344,8 +1344,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
|
|
||||||
if (validread)
|
if (validread)
|
||||||
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
||||||
(val == (int) val) ? 0 : 2, val,
|
(val == (int) val) ? 0 : 2, val, unitstr);
|
||||||
do_unit ? unitstr : "");
|
|
||||||
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||||
i += snprintf(sval, sizeof (sval), "Disabled");
|
i += snprintf(sval, sizeof (sval), "Disabled");
|
||||||
else
|
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) ? ">" : "<",
|
((evt->sel_type.standard_type.event_data[0] & 0xf) % 2) ? ">" : "<",
|
||||||
(threshold_reading==(int)threshold_reading) ? 0 : 2,
|
(threshold_reading==(int)threshold_reading) ? 0 : 2,
|
||||||
threshold_reading,
|
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.base,
|
||||||
sdr->record.full->unit.type.modifier));
|
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,
|
sdr_convert_sensor_reading(sdr->record.full,
|
||||||
evt->sel_type.standard_type.event_data[1]));
|
evt->sel_type.standard_type.event_data[1]));
|
||||||
/* determine units with possible modifiers */
|
/* determine units with possible modifiers */
|
||||||
switch (sdr->record.full->unit.modifier) {
|
printf ("%s\n", ipmi_sdr_get_unit_string(sdr->record.full->unit.pct,
|
||||||
case 2:
|
sdr->record.full->unit.modifier,
|
||||||
printf(" %s * %s\n",
|
sdr->record.full->unit.type.base,
|
||||||
unit_desc[sdr->record.full->unit.type.base],
|
sdr->record.full->unit.type.modifier));
|
||||||
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;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
/* oem code in byte 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,
|
sdr_convert_sensor_reading(sdr->record.full,
|
||||||
evt->sel_type.standard_type.event_data[2]));
|
evt->sel_type.standard_type.event_data[2]));
|
||||||
/* determine units with possible modifiers */
|
/* determine units with possible modifiers */
|
||||||
switch (sdr->record.full->unit.modifier) {
|
printf ("%s\n", ipmi_sdr_get_unit_string(sdr->record.full->unit.pct,
|
||||||
case 2:
|
sdr->record.full->unit.modifier,
|
||||||
printf(" %s * %s\n",
|
sdr->record.full->unit.type.base,
|
||||||
unit_desc[sdr->record.full->unit.type.base],
|
sdr->record.full->unit.type.modifier));
|
||||||
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;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
/* OEM code in byte 3 */
|
/* OEM code in byte 3 */
|
||||||
|
@ -228,8 +228,9 @@ static int
|
|||||||
ipmi_sensor_print_full_analog(struct ipmi_intf *intf,
|
ipmi_sensor_print_full_analog(struct ipmi_intf *intf,
|
||||||
struct sdr_record_full_sensor *sensor)
|
struct sdr_record_full_sensor *sensor)
|
||||||
{
|
{
|
||||||
char unitstr[16], id[17];
|
const char *unitstr = NULL;
|
||||||
int i = 0, validread = 1, thresh_available = 1;
|
char id[17];
|
||||||
|
int validread = 1, thresh_available = 1;
|
||||||
double val = 0.0;
|
double val = 0.0;
|
||||||
struct ipmi_rs *rsp;
|
struct ipmi_rs *rsp;
|
||||||
char *status = NULL;
|
char *status = NULL;
|
||||||
@ -277,25 +278,10 @@ ipmi_sensor_print_full_analog(struct ipmi_intf *intf,
|
|||||||
/*
|
/*
|
||||||
* Figure out units
|
* Figure out units
|
||||||
*/
|
*/
|
||||||
memset(unitstr, 0, sizeof (unitstr));
|
unitstr = ipmi_sdr_get_unit_string(sensor->unit.pct,
|
||||||
switch (sensor->unit.modifier) {
|
sensor->unit.modifier,
|
||||||
case 2:
|
sensor->unit.type.base,
|
||||||
i += snprintf(unitstr, sizeof (unitstr), "%s * %s",
|
sensor->unit.type.modifier);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get sensor thresholds
|
* 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) ? ">" : "<",
|
((evt->sel_type.standard_type.event_data[0] & 0xf) % 2) ? ">" : "<",
|
||||||
(threshold_reading==(int)threshold_reading) ? 0 : 2,
|
(threshold_reading==(int)threshold_reading) ? 0 : 2,
|
||||||
threshold_reading,
|
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.base,
|
||||||
sdr->record.full->unit.type.modifier));
|
sdr->record.full->unit.type.modifier));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user