diff options
author | Randall Spangler <rspangler@chromium.org> | 2013-02-12 16:48:00 -0800 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-02-12 18:10:14 -0800 |
commit | 695289cfe6724ad349a96d1f36ddf036b3df5daa (patch) | |
tree | 9605d1914efab5ee292b329ff5cbb6c696bbd4fd | |
parent | 9fde14da9b2e8d8944e66c5b8f4798e0c40be72e (diff) | |
download | chrome-ec-695289cfe6724ad349a96d1f36ddf036b3df5daa.tar.gz |
Add console command to fake battery state of chargetoolchain-3701.42.Bstabilize-3701.81.Bstabilize-3701.46.Bstabilize-3701.30.0bstabilize-3701.30.0release-R26-3701.B
The new 'battfake' command is really handy for testing low-battery
shutdown logic.
BUG=chrome-os-partner:17124
BRANCH=link
TEST=from EC console:
reboot
battfake -> using real battery level
power on system -> lightbar should be blue
battfake 5
lightbar turns red after a few seconds
UI shows battery is very low
(shows <5% due to different kernel math)
'ectool battery' from root shell shows present capacity ~5% of
design capacity
remove AC power
battfake 4
UI shows low-battery screen and shuts down (may take a minute)
battfake 50
power on system
UI shows battery at 45-55%
battfake 2 -> system shuts down immediately
battfake -1
power on system
UI shows actual battery level
Change-Id: I3180e321241c0f586f3baad2150fb6a2b2d2e242
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43151
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
-rw-r--r-- | common/charge_state.c | 46 | ||||
-rw-r--r-- | include/charge_state.h | 5 |
2 files changed, 49 insertions, 2 deletions
diff --git a/common/charge_state.c b/common/charge_state.c index f413d58c3a..c15fc0e7d1 100644 --- a/common/charge_state.c +++ b/common/charge_state.c @@ -40,6 +40,8 @@ static int state_machine_force_idle = 0; static unsigned user_current_limit = -1U; +static int fake_state_of_charge = -1; + /* Current power state context */ static struct power_state_context task_ctx; @@ -222,7 +224,9 @@ static int state_common(struct power_state_context *ctx) if (battery_desired_current(&batt->desired_current)) curr->error |= F_DESIRED_CURRENT; - if (battery_state_of_charge(&batt->state_of_charge)) + if (fake_state_of_charge >= 0) + batt->state_of_charge = fake_state_of_charge; + else if (battery_state_of_charge(&batt->state_of_charge)) curr->error |= F_BATTERY_STATE_OF_CHARGE; if (batt->state_of_charge != prev->batt.state_of_charge) { @@ -285,7 +289,11 @@ static int state_common(struct power_state_context *ctx) ctx->curr.error |= F_BATTERY_MODE; } - if (battery_remaining_capacity(&d)) + if (fake_state_of_charge >= 0) + *ctx->memmap_batt_cap = + fake_state_of_charge * + *(int *)host_get_memmap(EC_MEMMAP_BATT_LFCC) / 100; + else if (battery_remaining_capacity(&d)) ctx->curr.error |= F_BATTERY_CAPACITY; else *ctx->memmap_batt_cap = d; @@ -565,6 +573,12 @@ int charge_get_percent(void) return task_ctx.curr.batt.state_of_charge; } +int charge_want_shutdown(void) +{ + return (charge_get_state() == PWR_STATE_DISCHARGE) && + charge_get_percent() < BATTERY_LEVEL_SHUTDOWN; +} + static int enter_force_idle_mode(void) { if (!switch_get_ac_present()) @@ -864,3 +878,31 @@ static int charge_command_current_limit(struct host_cmd_handler_args *args) } DECLARE_HOST_COMMAND(EC_CMD_CHARGE_CURRENT_LIMIT, charge_command_current_limit, EC_VER_MASK(0)); + +/*****************************************************************************/ +/* Console commands */ + +static int command_battfake(int argc, char **argv) +{ + char *e; + int v; + + if (argc == 2) { + v = strtoi(argv[1], &e, 0); + if (*e || v < -1 || v > 100) + return EC_ERROR_PARAM1; + + fake_state_of_charge = v; + } + + if (fake_state_of_charge < 0) + ccprintf("Reporting real battery level\n"); + else + ccprintf("Reporting fake battery level %d%%\n", + fake_state_of_charge); + return EC_SUCCESS; +} +DECLARE_CONSOLE_COMMAND(battfake, command_battfake, + "percent (-1 = use real level)", + "Set fake battery level", + NULL); diff --git a/include/charge_state.h b/include/charge_state.h index 0a4cd869da..182a99f703 100644 --- a/include/charge_state.h +++ b/include/charge_state.h @@ -128,5 +128,10 @@ enum power_state charge_get_state(void); */ int charge_get_percent(void); +/** + * Return non-zero if discharging and battery so low we should shut down. + */ +int charge_want_shutdown(void); + #endif /* __CROS_EC_CHARGE_STATE_H */ |