[lm-sensors] [PATCH 2/3 v3] sensors: Print energy and power meters

Darrick J. Wong djwong at us.ibm.com
Mon Apr 14 23:50:02 CEST 2008


Display power and energy meters in sensors.  Essentially unchanged
since v2.

Signed-off-by: Darrick J. Wong <djwong at us.ibm.com>

Index: lm-sensors-3.0.0/prog/sensors/chips.c
===================================================================
--- lm-sensors-3.0.0.orig/prog/sensors/chips.c	2008-04-14 09:24:55.000000000 -0700
+++ lm-sensors-3.0.0/prog/sensors/chips.c	2008-04-14 09:25:58.000000000 -0700
@@ -401,6 +401,85 @@
 	printf("\n");
 }
 
+static void print_chip_power(const sensors_chip_name *name,
+			     const sensors_feature *feature,
+			     int label_size)
+{
+	int need_space = 0;
+	const sensors_subfeature *sf, *sfmin, *sfmax, *sfint;
+	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_POWER_AVERAGE);
+	if (sf)
+		printf("%6.2f W", get_value(name, sf));
+	else
+		printf("     N/A");
+
+	sfmin = sensors_get_subfeature(name, feature,
+				      SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST);
+	sfmax = sensors_get_subfeature(name, feature,
+				       SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST);
+	sfint = sensors_get_subfeature(name, feature,
+				     SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL);
+	if (sfmin || sfmax || sfint) {
+		printf("  (");
+
+		if (sfmin) {
+			printf("min = %6.2f W", get_value(name, sfmin));
+			need_space = 1;
+		}
+
+		if (sfmax) {
+			printf("%smax = %6.2f W", (need_space ? ", " : ""),
+			       get_value(name, sfmax));
+			need_space = 1;
+		}
+
+		if (sfint) {
+			printf("%sinterval = %6.2f s", (need_space ? ", " : ""),
+			       get_value(name, sfint));
+			need_space = 1;
+		}
+		printf(")");
+	}
+
+	printf("\n");
+}
+
+static void print_chip_energy(const sensors_chip_name *name,
+			      const sensors_feature *feature,
+			      int label_size)
+{
+	const sensors_subfeature *sf;
+	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_ENERGY_INPUT);
+	if (sf)
+		printf("%6.2f J", get_value(name, sf));
+	else
+		printf("     N/A");
+
+	printf("\n");
+}
+
 static void print_chip_vid(const sensors_chip_name *name,
 			   const sensors_feature *feature,
 			   int label_size)
@@ -468,6 +547,12 @@
 		case SENSORS_FEATURE_BEEP_ENABLE:
 			print_chip_beep_enable(name, feature, label_size);
 			break;
+		case SENSORS_FEATURE_POWER:
+			print_chip_power(name, feature, label_size);
+			break;
+		case SENSORS_FEATURE_ENERGY:
+			print_chip_energy(name, feature, label_size);
+			break;
 		default:
 			continue;
 		}




More information about the lm-sensors mailing list