[lm-sensors] [PATCH 2/2] libsensors: Add support for current sensors
Hans de Goede
j.w.r.degoede at hhs.nl
Wed Oct 22 14:47:39 CEST 2008
Jean Delvare wrote:
> Add support for current sensors.
> ---
> The code for function print_chip_curr() is duplicated directly from
> print_chip_in() with IN subfeature names replaced by their CURR
> counterparts and V changed to A.
>
> Applies on top of the previous patch. I'd appreciate review and testing
> of this patch. Vincent, this should show you the current values you
> were missing so far.
>
> doc/libsensors-API.txt | 9 ++++++
> lib/sensors.h | 9 ++++++
> lib/sysfs.c | 16 ++++++++++-
> prog/sensors/chips.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 102 insertions(+), 1 deletion(-)
>
I've reviewed this and it looks good.
Regards,
Hans
> --- lm-sensors-3.orig/lib/sensors.h 2008-10-22 12:03:36.000000000 +0200
> +++ lm-sensors-3/lib/sensors.h 2008-10-22 12:06:50.000000000 +0200
> @@ -134,6 +134,7 @@ typedef enum sensors_feature_type {
> SENSORS_FEATURE_TEMP = 0x02,
> SENSORS_FEATURE_POWER = 0x03,
> SENSORS_FEATURE_ENERGY = 0x04,
> + SENSORS_FEATURE_CURR = 0x05,
> SENSORS_FEATURE_VID = 0x10,
> SENSORS_FEATURE_BEEP_ENABLE = 0x18,
> SENSORS_FEATURE_UNKNOWN = INT_MAX,
> @@ -182,6 +183,14 @@ typedef enum sensors_subfeature_type {
>
> SENSORS_SUBFEATURE_ENERGY_INPUT = SENSORS_FEATURE_ENERGY << 8,
>
> + SENSORS_SUBFEATURE_CURR_INPUT = SENSORS_FEATURE_CURR << 8,
> + SENSORS_SUBFEATURE_CURR_MIN,
> + SENSORS_SUBFEATURE_CURR_MAX,
> + SENSORS_SUBFEATURE_CURR_ALARM = (SENSORS_FEATURE_CURR << 8) | 0x80,
> + SENSORS_SUBFEATURE_CURR_MIN_ALARM,
> + SENSORS_SUBFEATURE_CURR_MAX_ALARM,
> + SENSORS_SUBFEATURE_CURR_BEEP,
> +
> SENSORS_SUBFEATURE_VID = SENSORS_FEATURE_VID << 8,
>
> SENSORS_SUBFEATURE_BEEP_ENABLE = SENSORS_FEATURE_BEEP_ENABLE << 8,
> --- lm-sensors-3.orig/lib/sysfs.c 2008-10-22 12:03:36.000000000 +0200
> +++ lm-sensors-3/lib/sysfs.c 2008-10-22 12:06:50.000000000 +0200
> @@ -138,7 +138,7 @@ char sensors_sysfs_mount[NAME_MAX];
>
> #define MAX_SENSORS_PER_TYPE 20
> #define MAX_SUBFEATURES 8
> -#define MAX_SENSOR_TYPES 5
> +#define MAX_SENSOR_TYPES 6
> /* Room for all 5 types (in, fan, temp, power, energy) with all their
> subfeatures + VID + misc features */
> #define ALL_POSSIBLE_SUBFEATURES \
> @@ -153,6 +153,7 @@ int get_type_scaling(sensors_subfeature_
> switch (type & 0xFF80) {
> case SENSORS_SUBFEATURE_IN_INPUT:
> case SENSORS_SUBFEATURE_TEMP_INPUT:
> + case SENSORS_SUBFEATURE_CURR_INPUT:
> return 1000;
> case SENSORS_SUBFEATURE_FAN_INPUT:
> return 1;
> @@ -184,6 +185,7 @@ char *get_feature_name(sensors_feature_t
> case SENSORS_FEATURE_TEMP:
> case SENSORS_FEATURE_POWER:
> case SENSORS_FEATURE_ENERGY:
> + case SENSORS_FEATURE_CURR:
> underscore = strchr(sfname, '_');
> name = strndup(sfname, underscore - sfname);
> break;
> @@ -259,6 +261,16 @@ static const struct subfeature_type_matc
> { NULL, 0 }
> };
>
> +static const struct subfeature_type_match curr_matches[] = {
> + { "input", SENSORS_SUBFEATURE_CURR_INPUT },
> + { "min", SENSORS_SUBFEATURE_CURR_MIN },
> + { "max", SENSORS_SUBFEATURE_CURR_MAX },
> + { "alarm", SENSORS_SUBFEATURE_CURR_ALARM },
> + { "min_alarm", SENSORS_SUBFEATURE_CURR_MIN_ALARM },
> + { "max_alarm", SENSORS_SUBFEATURE_CURR_MAX_ALARM },
> + { NULL, 0 }
> +};
> +
> static const struct subfeature_type_match cpu_matches[] = {
> { "vid", SENSORS_SUBFEATURE_VID },
> { NULL, 0 }
> @@ -270,6 +282,7 @@ static struct feature_type_match matches
> { "fan%d%c", fan_matches },
> { "cpu%d%c", cpu_matches },
> { "power%d%c", power_matches },
> + { "curr%d%c", curr_matches },
> { "energy%d%c", energy_matches },
> };
>
> @@ -360,6 +373,7 @@ static int sensors_read_dynamic_chip(sen
> case SENSORS_SUBFEATURE_TEMP_INPUT:
> case SENSORS_SUBFEATURE_POWER_AVERAGE:
> case SENSORS_SUBFEATURE_ENERGY_INPUT:
> + case SENSORS_SUBFEATURE_CURR_INPUT:
> nr--;
> break;
> }
> --- lm-sensors-3.orig/prog/sensors/chips.c 2008-10-22 12:04:38.000000000 +0200
> +++ lm-sensors-3/prog/sensors/chips.c 2008-10-22 12:06:50.000000000 +0200
> @@ -578,6 +578,72 @@ static void print_chip_beep_enable(const
> free(label);
> }
>
> +static void print_chip_curr(const sensors_chip_name *name,
> + const sensors_feature *feature,
> + int label_size)
> +{
> + const sensors_subfeature *sf, *sfmin, *sfmax;
> + double alarm_max, alarm_min;
> + char *label;
> +
> + 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);
> +
> + sf = sensors_get_subfeature(name, feature,
> + SENSORS_SUBFEATURE_CURR_INPUT);
> + if (sf)
> + printf("%+6.2f A", get_value(name, sf));
> + else
> + printf(" N/A");
> +
> + sfmin = sensors_get_subfeature(name, feature,
> + SENSORS_SUBFEATURE_CURR_MIN);
> + sfmax = sensors_get_subfeature(name, feature,
> + SENSORS_SUBFEATURE_CURR_MAX);
> + if (sfmin && sfmax)
> + printf(" (min = %+6.2f A, max = %+6.2f A)",
> + get_value(name, sfmin),
> + get_value(name, sfmax));
> + else if (sfmin)
> + printf(" (min = %+6.2f A)",
> + get_value(name, sfmin));
> + else if (sfmax)
> + printf(" (max = %+6.2f A)",
> + get_value(name, sfmax));
> +
> + sf = sensors_get_subfeature(name, feature,
> + SENSORS_SUBFEATURE_CURR_ALARM);
> + sfmin = sensors_get_subfeature(name, feature,
> + SENSORS_SUBFEATURE_CURR_MIN_ALARM);
> + sfmax = sensors_get_subfeature(name, feature,
> + SENSORS_SUBFEATURE_CURR_MAX_ALARM);
> + if (sfmin || sfmax) {
> + alarm_max = sfmax ? get_value(name, sfmax) : 0;
> + alarm_min = sfmin ? get_value(name, sfmin) : 0;
> +
> + if (alarm_min || alarm_max) {
> + printf(" ALARM (");
> +
> + if (alarm_min)
> + printf("MIN");
> + if (alarm_max)
> + printf("%sMAX", (alarm_min) ? ", " : "");
> +
> + printf(")");
> + }
> + } else if (sf) {
> + printf(" %s",
> + get_value(name, sf) ? "ALARM" : "");
> + }
> +
> + printf("\n");
> +}
> +
> void print_chip(const sensors_chip_name *name)
> {
> const sensors_feature *feature;
> @@ -609,6 +675,9 @@ void print_chip(const sensors_chip_name
> case SENSORS_FEATURE_ENERGY:
> print_chip_energy(name, feature, label_size);
> break;
> + case SENSORS_FEATURE_CURR:
> + print_chip_curr(name, feature, label_size);
> + break;
> default:
> continue;
> }
> --- lm-sensors-3.orig/doc/libsensors-API.txt 2008-10-22 12:06:42.000000000 +0200
> +++ lm-sensors-3/doc/libsensors-API.txt 2008-10-22 12:07:02.000000000 +0200
> @@ -11,6 +11,15 @@ given new feature.
> enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT
> enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST
> enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT_LOWEST
> +* Added support for current sensors
> + enum sensors_feature_type SENSORS_FEATURE_CURR
> + enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_INPUT
> + enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MIN
> + enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MAX
> + enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_ALARM
> + enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MIN_ALARM
> + enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MAX_ALARM
> + enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_BEEP
>
> 0x401 lm-sensors 3.0.2 to 3.0.3
> * Added bus type "virtual":
>
>
More information about the lm-sensors
mailing list