summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuigi Semenzato <semenzato@chromium.org>2012-07-20 10:57:29 -0700
committerGerrit <chrome-bot@google.com>2012-07-24 17:02:25 -0700
commit8c4ce35fbe3494916ca974913206ac181cb6b11f (patch)
tree58744f78b3157d9d670fb0b7f754d4aaea3f8c83
parent319d433d6864945c19103f0a779467f66d599c67 (diff)
downloadchrome-ec-8c4ce35fbe3494916ca974913206ac181cb6b11f.tar.gz
Add "all" command for sensor temperatures and sensor info.
This change makes it easier and less costly for the metrics daemon to collect sensor temperatures. BUG=chrome-os-partner:11631 TEST=manually verified that it works as expected Signed-off-by: Luigi Semenzato <semenzato@google.com> Change-Id: Iee7ca971f53d65f07589173322b55b0d87ab5363 Reviewed-on: https://gerrit.chromium.org/gerrit/28026 Reviewed-by: Randall Spangler <rspangler@chromium.org> Commit-Ready: Luigi Semenzato <semenzato@chromium.org> Tested-by: Luigi Semenzato <semenzato@chromium.org>
-rw-r--r--util/ectool.c69
1 files changed, 57 insertions, 12 deletions
diff --git a/util/ectool.c b/util/ectool.c
index a304c84076..e15bd8a0ec 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -668,6 +668,23 @@ int cmd_serial_test(int argc, char *argv[])
}
+int read_mapped_temperature(int id)
+{
+ int rv;
+
+ if (id < EC_TEMP_SENSOR_ENTRIES)
+ rv = read_mapped_mem8(EC_MEMMAP_TEMP_SENSOR + id);
+ else if (read_mapped_mem8(EC_MEMMAP_THERMAL_VERSION) >= 2)
+ rv = read_mapped_mem8(EC_MEMMAP_TEMP_SENSOR_B +
+ id - EC_TEMP_SENSOR_ENTRIES);
+ else {
+ /* Sensor in second bank, but second bank isn't supported */
+ rv = EC_TEMP_SENSOR_NOT_PRESENT;
+ }
+ return rv;
+}
+
+
int cmd_temperature(int argc, char *argv[])
{
int rv;
@@ -675,8 +692,30 @@ int cmd_temperature(int argc, char *argv[])
char *e;
if (argc != 2) {
- fprintf(stderr, "Usage: %s <sensorid>\n", argv[0]);
- return -1;
+ fprintf(stderr, "Usage: %s <sensorid> | all\n", argv[0]);
+ return -1;
+ }
+
+ if (strcmp(argv[1], "all") == 0) {
+ for (id = 0;
+ id < EC_TEMP_SENSOR_ENTRIES + EC_TEMP_SENSOR_B_ENTRIES;
+ id++) {
+ rv = read_mapped_temperature(id);
+ switch (rv) {
+ case EC_TEMP_SENSOR_NOT_PRESENT:
+ break;
+ case EC_TEMP_SENSOR_ERROR:
+ fprintf(stderr, "Sensor %d error\n", id);
+ break;
+ case EC_TEMP_SENSOR_NOT_POWERED:
+ fprintf(stderr, "Sensor %d disabled\n", id);
+ break;
+ default:
+ printf("%d: %d\n", id,
+ rv + EC_TEMP_SENSOR_OFFSET);
+ }
+ }
+ return 0;
}
id = strtol(argv[1], &e, 0);
@@ -692,15 +731,7 @@ int cmd_temperature(int argc, char *argv[])
}
printf("Reading temperature...");
- if (id < EC_TEMP_SENSOR_ENTRIES)
- rv = read_mapped_mem8(EC_MEMMAP_TEMP_SENSOR + id);
- else if (read_mapped_mem8(EC_MEMMAP_THERMAL_VERSION) >= 2)
- rv = read_mapped_mem8(EC_MEMMAP_TEMP_SENSOR_B +
- id - EC_TEMP_SENSOR_ENTRIES);
- else {
- /* Sensor in second bank, but second bank isn't supported */
- rv = EC_TEMP_SENSOR_NOT_PRESENT;
- }
+ rv = read_mapped_temperature(id);
switch (rv) {
case EC_TEMP_SENSOR_NOT_PRESENT:
@@ -727,10 +758,24 @@ int cmd_temp_sensor_info(int argc, char *argv[])
char *e;
if (argc != 2) {
- fprintf(stderr, "Usage: %s <sensorid>\n", argv[0]);
+ fprintf(stderr, "Usage: %s <sensorid> | all\n", argv[0]);
return -1;
}
+ if (strcmp(argv[1], "all") == 0) {
+ for (p.id = 0;
+ p.id < EC_TEMP_SENSOR_ENTRIES + EC_TEMP_SENSOR_B_ENTRIES;
+ p.id++) {
+ rv = ec_command(EC_CMD_TEMP_SENSOR_GET_INFO, 0,
+ &p, sizeof(p), &r, sizeof(r));
+ if (rv < 0)
+ continue;
+ printf("%d: %d %s\n", p.id, r.sensor_type,
+ r.sensor_name);
+ }
+ return 0;
+ }
+
p.id = strtol(argv[1], &e, 0);
if (e && *e) {
fprintf(stderr, "Bad sensor ID.\n");