summaryrefslogtreecommitdiffstats
path: root/common/recipes-core/sensor-util/files/sensor-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-core/sensor-util/files/sensor-util.c')
-rw-r--r--common/recipes-core/sensor-util/files/sensor-util.c137
1 files changed, 64 insertions, 73 deletions
diff --git a/common/recipes-core/sensor-util/files/sensor-util.c b/common/recipes-core/sensor-util/files/sensor-util.c
index eb38d65..c37fc38 100644
--- a/common/recipes-core/sensor-util/files/sensor-util.c
+++ b/common/recipes-core/sensor-util/files/sensor-util.c
@@ -26,72 +26,74 @@
#include <stdint.h>
#include <string.h>
#include <errno.h>
+#include <stdbool.h>
#include <openbmc/pal.h>
+#include <openbmc/sdr.h>
static int
print_usage() {
- printf("Usage: sensor-util [ %s ] <sensor num>\n"
- "sensor num is optional.", pal_fru_list);
+ printf("Usage: sensor-util [ %s ] <--threshold> <sensor num>\n",
+ pal_fru_list);
}
static void
-print_single_sensor_reading(uint8_t fru, uint8_t *sensor_list, int sensor_cnt, uint8_t num) {
-
- int i;
- float fvalue;
- char name[24];
- char units[64];
- int ret = 0;
-
- for (i = 0; i < sensor_cnt; i++) {
-
- if (sensor_list[i] == num) {
- ret = 1;
- pal_get_sensor_name(fru, sensor_list[i], name);
- pal_get_sensor_units(fru, sensor_list[i], units);
-
- if (pal_sensor_read(fru, sensor_list[i], &fvalue) < 0) {
-
- printf("pal_sensor_read failed: fru: %d num: 0x%X name: %-23s\n",
- fru, sensor_list[i], name);
- } else {
- printf("%-23s: %.2f %s\n", name, fvalue, units);
- }
-
- break;
- }
+print_sensor_reading(float fvalue, thresh_sensor_t *thresh, bool threshold) {
+
+ if (threshold) {
+ printf("%-23s: Curr: %.2f %-8s\t"
+ " UCR: %.2f "
+ " UNC: %.2f "
+ " UNR: %.2f "
+ " LCR: %.2f "
+ " LNC: %.2f "
+ " LNR: %.2f \n",
+ thresh->name, fvalue, thresh->units,
+ thresh->ucr_thresh,
+ thresh->unc_thresh,
+ thresh->unr_thresh,
+ thresh->lcr_thresh,
+ thresh->lnc_thresh,
+ thresh->lnr_thresh);
+ } else {
+ printf("%-23s: %.2f %s\n", thresh->name, fvalue, thresh->units);
}
- if (!ret) {
- printf("Wrong sensor number!\n");
- print_usage();
- exit(-1);
- }
}
static void
-print_sensor_reading(uint8_t fru, uint8_t *sensor_list, int sensor_cnt) {
+calculate_sensor_reading(uint8_t fru, uint8_t *sensor_list, int sensor_cnt, int num, bool threshold) {
int i;
+ uint8_t snr_num;
float fvalue;
- char name[24];
- char units[64];
+ char path[64];
+ thresh_sensor_t thresh;
for (i = 0; i < sensor_cnt; i++) {
- /* Clear the variable */
- sprintf(name, "");
- sprintf(units, "");
+ snr_num = sensor_list[i];
- pal_get_sensor_name(fru, sensor_list[i], name);
- pal_get_sensor_units(fru, sensor_list[i], units);
+ /* If calculation is for a single sensor, ignore all others. */
+ if (num && snr_num != num) {
+ continue;
+ }
- if (pal_sensor_read(fru, sensor_list[i], &fvalue) < 0) {
+ if (threshold) {
+ if (sdr_get_snr_thresh(fru, snr_num, 0, &thresh))
+ syslog(LOG_ERR, "sdr_init_snr_thresh failed for FRU %d num: 0x%X", fru, snr_num);
+ } else {
+ sdr_get_sensor_name(fru, sensor_list[i], thresh.name);
+ sdr_get_sensor_units(fru, sensor_list[i], thresh.units);
+ }
- printf("pal_sensor_read failed: fru: %d num: 0x%X name: %-23s\n",
- fru, sensor_list[i], name);
+ usleep(50);
+
+ if (pal_sensor_read(fru, snr_num, &fvalue) < 0) {
+ printf("pal_sensor_read failed: FRU: %d num: 0x%X name: %-23s\n",
+ fru, sensor_list[i], thresh.name, thresh.units);
+ continue;
} else {
- printf("%-23s: %.2f %s\n", name, fvalue, units);
+ print_sensor_reading(fvalue, &thresh, threshold);
}
}
}
@@ -99,25 +101,32 @@ print_sensor_reading(uint8_t fru, uint8_t *sensor_list, int sensor_cnt) {
int
main(int argc, char **argv) {
+ int i;
int ret;
int sensor_cnt;
uint8_t *sensor_list;
uint8_t fru;
- uint8_t num;
+ uint8_t num = 0;
+ bool threshold = false;
- if (argc < 2 || argc > 3) {
+ if (argc < 2 || argc > 4) {
print_usage();
exit(-1);
}
- if (argc == 3) {
- errno = 0;
- num = (uint8_t) strtol(argv[2], NULL, 0);
- if (errno) {
- printf("Sensor number format incorrect.\n");
- print_usage();
- exit(-1);
+ i = 3; /* Starting at argument 3*/
+ while (argc > 2 && i <= argc) {
+ if (!(strcmp(argv[i-1], "--threshold"))) {
+ threshold = true;
+ } else {
+ errno = 0;
+ num = (uint8_t) strtol(argv[i-1], NULL, 0);
+ if (errno) {
+ print_usage();
+ exit(-1);
+ }
}
+ i++;
}
@@ -131,42 +140,24 @@ main(int argc, char **argv) {
fru = 1;
while (fru <= MAX_NUM_FRUS) {
- if (fru == FRU_NIC) {
- printf("\nsensor-util does not support nic\n");
- exit(-1);
- }
-
ret = pal_get_fru_sensor_list(fru, &sensor_list, &sensor_cnt);
if (ret < 0) {
return ret;
}
- if (num) {
- print_single_sensor_reading(fru, sensor_list, sensor_cnt, num);
- } else {
- print_sensor_reading(fru, sensor_list, sensor_cnt);
- }
+ calculate_sensor_reading(fru, sensor_list, sensor_cnt, num, threshold);
fru++;
printf("\n");
}
} else {
- if (fru == FRU_NIC) {
- printf("\nsensor-util does not support nic\n");
- //exit(-1);
- }
-
ret = pal_get_fru_sensor_list(fru, &sensor_list, &sensor_cnt);
if (ret < 0) {
return ret;
}
- if (num) {
- print_single_sensor_reading(fru, sensor_list, sensor_cnt, num);
- } else {
- print_sensor_reading(fru, sensor_list, sensor_cnt);
- }
+ calculate_sensor_reading(fru, sensor_list, sensor_cnt, num, threshold);
}
return 0;
OpenPOWER on IntegriCloud