mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-10 01:21:49 +00:00
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>
This commit is contained in:
@@ -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,10 +692,32 @@ int cmd_temperature(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 (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);
|
||||
if (e && *e) {
|
||||
fprintf(stderr, "Bad sensor ID.\n");
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user