summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2015-01-20 23:18:30 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-01-30 03:28:30 +0000
commit7489e0ded41413780962046cb3b473500943fba7 (patch)
tree2dcf529bb9c41caeec074c7a36b8fb50f1d1ddc3
parentfab110efe4f57e1a1a5f18119c5f65c551e01813 (diff)
downloadchrome-ec-7489e0ded41413780962046cb3b473500943fba7.tar.gz
ectool: more compact PD event log format
Use one line per entry and display the real time for the events. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=samus BUG=chrome-os-partner:33248 TEST=ectool --name=cros_pd pdlog and see a nice log like: 2015-01-20 15:14:02.974 P0 Disconnected 2015-01-20 15:14:05.676 P0 SNK Charger Type-C 4958mV max 5000mV / 500mA 2015-01-20 15:14:11.810 P1 SRC 2015-01-20 15:14:14.460 P0 Disconnected 2015-01-20 15:14:17.277 P0 SNK Charger Type-C 5185mV max 5000mV / 3000mA 2015-01-20 15:14:17.287 P0 SNK Charger PD 5015mV max 20000mV / 3000mA 2015-01-20 15:14:17.383 P0 SNK Charger PD 20198mV max 20000mV / 3000mA --- END OF LOG --- Reviewed-on: https://chromium-review.googlesource.com/242082 Reviewed-by: Alec Berg <alecaberg@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org> Commit-Queue: Alec Berg <alecaberg@chromium.org> (cherry picked from commit 194bde63670528c456bcc3b5701d64fd01f8fc1d) Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Original-Change-Id: Ibf189cdb9e5d9ba74cb1fb241a2945439dfb50f7 Reviewed-on: https://chromium-review.googlesource.com/242201 Tested-by: Duncan Laurie <dlaurie@chromium.org> Commit-Queue: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Duncan Laurie <dlaurie@chromium.org> (cherry picked from commit a21630e898caad8e9d500ed52c9dd8f628e735fa) Signed-off-by: Todd Broch <tbroch@chromium.org> Change-Id: I9d9171d80f3e1a4041d6f78ac0d6f3177d9476ca Reviewed-on: https://chromium-review.googlesource.com/244229 Reviewed-by: Alec Berg <alecaberg@chromium.org> Tested-by: Todd Broch <tbroch@chromium.org> Commit-Queue: Todd Broch <tbroch@chromium.org>
-rw-r--r--util/ectool.c85
1 files changed, 54 insertions, 31 deletions
diff --git a/util/ectool.c b/util/ectool.c
index 52b9eedf31..f98a98a943 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -11,6 +11,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
#include "battery.h"
@@ -3147,60 +3148,57 @@ int cmd_usb_pd(int argc, char *argv[])
static void print_pd_power_info(struct ec_response_usb_pd_power_info *r)
{
- printf("Power role: ");
-
switch (r->role) {
case USB_PD_PORT_POWER_DISCONNECTED:
- printf("Disconnected\n");
+ printf("Disconnected");
break;
case USB_PD_PORT_POWER_SOURCE:
- printf("Source\n");
+ printf("SRC");
break;
case USB_PD_PORT_POWER_SINK:
- printf("Sink\n");
+ printf("SNK");
break;
case USB_PD_PORT_POWER_SINK_NOT_CHARGING:
- printf("Sink (not charging)\n");
+ printf("SNK (not charging)");
break;
default:
- printf("Unknown\n");
+ printf("Unknown");
}
- if (r->role != USB_PD_PORT_POWER_DISCONNECTED) {
- printf(" %s\n", r->dualrole ?
- "Dual-role device" : "Dedicated charger");
+ if ((r->role == USB_PD_PORT_POWER_DISCONNECTED) ||
+ (r->role == USB_PD_PORT_POWER_SOURCE)) {
+ printf("\n");
+ return;
}
- printf(" Charger type: ");
+ printf(r->dualrole ? " DRP" : " Charger");
switch (r->type) {
case USB_CHG_TYPE_PD:
- printf("PD\n");
+ printf(" PD");
break;
case USB_CHG_TYPE_C:
- printf("Type-c\n");
+ printf(" Type-C");
break;
case USB_CHG_TYPE_PROPRIETARY:
- printf("Proprietary\n");
+ printf(" Proprietary");
break;
case USB_CHG_TYPE_BC12_DCP:
- printf("BC1.2 DCP\n");
+ printf(" DCP");
break;
case USB_CHG_TYPE_BC12_CDP:
- printf("BC1.2 CDP\n");
+ printf(" CDP");
break;
case USB_CHG_TYPE_BC12_SDP:
- printf("BC1.2 SDP\n");
+ printf(" SDP");
break;
case USB_CHG_TYPE_OTHER:
- printf("Other\n");
+ printf(" Other");
break;
- default:
- printf("None\n");
}
- printf(" Max charging voltage: %dmV\n", r->meas.voltage_max);
- printf(" Current charging voltage: %dmV\n", r->meas.voltage_now);
- printf(" Max input current: %dmA\n", r->meas.current_max);
- printf(" Max input power: %dmW\n", r->max_power / 1000);
+ printf(" %dmV max %dmV / %dmA",
+ r->meas.voltage_now, r->meas.voltage_max, r->meas.current_max);
+ if (r->max_power)
+ printf(" / %dmW", r->max_power / 1000);
printf("\n");
}
@@ -3225,7 +3223,7 @@ int cmd_usb_pd_power(int argc, char *argv[])
if (rv < 0)
return rv;
- printf("Port %d:\n", i);
+ printf("Port %d: ", i);
print_pd_power_info(r);
}
@@ -5421,8 +5419,14 @@ int cmd_pd_log(int argc, char *argv[])
} u;
struct ec_response_usb_pd_power_info pinfo;
int rv;
+ unsigned long long milliseconds;
+ unsigned seconds;
+ time_t now;
+ struct tm ltime;
+ char time_str[64];
while (1) {
+ now = time(NULL);
rv = ec_command(EC_CMD_PD_GET_LOG_ENTRY, 0,
NULL, 0, &u, sizeof(u));
if (rv < 0)
@@ -5433,16 +5437,22 @@ int cmd_pd_log(int argc, char *argv[])
break;
}
- printf("Port: %d, %"PRIu64" ms ago : ",
- PD_LOG_PORT(u.r.size_port),
- (uint64_t)(u.r.timestamp << PD_LOG_TIMESTAMP_SHIFT)
- / 1000);
+ /* the timestamp is in 1024th of seconds */
+ milliseconds = ((uint64_t)u.r.timestamp <<
+ PD_LOG_TIMESTAMP_SHIFT) / 1000;
+ /* the timestamp is the number of milliseconds in the past */
+ seconds = (milliseconds + 999) / 1000;
+ milliseconds -= seconds * 1000;
+ now -= seconds;
+ localtime_r(&now, &ltime);
+ strftime(time_str, sizeof(time_str), "%F %T", &ltime);
+ printf("%s.%03lld P%d ", time_str, -milliseconds,
+ PD_LOG_PORT(u.r.size_port));
if (u.r.type == PD_EVENT_MCU_CHARGE) {
if (u.r.data & CHARGE_FLAGS_OVERRIDE)
printf("override ");
if (u.r.data & CHARGE_FLAGS_DELAYED_OVERRIDE)
printf("pending_override ");
- printf("\n");
memcpy(&pinfo.meas, u.r.payload,
sizeof(struct usb_chg_measures));
pinfo.dualrole = !!(u.r.data & CHARGE_FLAGS_DUAL_ROLE);
@@ -5451,8 +5461,21 @@ int cmd_pd_log(int argc, char *argv[])
>> CHARGE_FLAGS_TYPE_SHIFT;
pinfo.max_power = 0;
print_pd_power_info(&pinfo);
+ } else if (u.r.type == PD_EVENT_ACC_RW_FAIL) {
+ printf("RW signature check failed\n");
+ } else if (u.r.type == PD_EVENT_PS_FAULT) {
+ static const char * const fault_names[] = {
+ "---", "OCP", "fast OCP", "OVP", "Discharge"
+ };
+ const char *fault = u.r.data < ARRAY_SIZE(fault_names) ?
+ fault_names[u.r.data] : "???";
+ printf("Power supply fault: %s\n", fault);
} else { /* Unknown type */
- printf(" event %02x\n", u.r.type);
+ int i;
+ printf("Event %02x (%04x) [", u.r.type, u.r.data);
+ for (i = 0; i < PD_LOG_SIZE(u.r.size_port); i++)
+ printf("%02x ", u.r.payload[i]);
+ printf("]\n");
}
}