From a6ec549ed68ba9ea2a13963cd713831c47701a5e Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Sat, 28 Aug 2021 01:04:13 +0200 Subject: [PATCH] sensors: Add support for pwm sensors Add print_chip_pwm for displaying SENSORS_FEATURE_PWM. --- prog/sensors/chips.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index 0eb07418..c50f9a97 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -754,6 +754,59 @@ static void print_chip_humidity(const sensors_chip_name *name, free(label); } +static void print_chip_pwm(const sensors_chip_name *name, + const sensors_feature *feature, + int label_size) +{ + const sensors_subfeature *sfio, *sffreq, *sfenable, *sfmode; + char *label; + double val; + + if (!(label = sensors_get_label(name, feature))) { + fprintf(stderr, "ERROR: Can't get label of feature %s!\n", + feature->name); + return; + } + print_label(label, label_size); + free(label); + + sfio = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_PWM_IO); + if (sfio && !get_input_value(name, sfio, &val)) + printf(" %3.0f%%", val / 2.55); + else + printf(" N/A"); + + sffreq = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_PWM_FREQ); + sfmode = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_PWM_MODE); + if (sffreq || sfmode) { + printf(" ("); + if (sffreq) + printf("freq = %.0f Hz", get_value(name, sffreq)); + + if (sfmode) { + if (!get_input_value(name, sfmode, &val)) + printf("%smode = %s", sffreq ? ", " : "", + (int) val ? "pwm" : "dc"); + else + printf("%smode = N/A", sffreq ? ", " : ""); + } + + printf(")"); + } + + sfenable = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_PWM_ENABLE); + + if (sfenable && !get_input_value(name, sfenable, &val) && + (int) val == 1) + printf(" MANUAL CONTROL"); + + printf("\n"); +} + static void print_chip_beep_enable(const sensors_chip_name *name, const sensors_feature *feature, int label_size) @@ -894,6 +947,9 @@ void print_chip(const sensors_chip_name *name) case SENSORS_FEATURE_HUMIDITY: print_chip_humidity(name, feature, label_size); break; + case SENSORS_FEATURE_PWM: + print_chip_pwm(name, feature, label_size); + break; default: continue; }