diff options
Diffstat (limited to 'common/recipes-core/sensor-util/files/sensor-util.c')
-rw-r--r-- | common/recipes-core/sensor-util/files/sensor-util.c | 137 |
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; |