diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2021-05-31 13:30:24 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-06-28 16:21:14 +0000 |
commit | 29f7ce6dc2e941bf00d1a0ee233a9b388a7bb0d5 (patch) | |
tree | 5551d7d5198c0e532fe13ff99c37ea5818e9974c /test | |
parent | b67eba19973a046ffdc87926d527f240bfee29d7 (diff) | |
download | chrome-ec-29f7ce6dc2e941bf00d1a0ee233a9b388a7bb0d5.tar.gz |
chgstv2: Add unit test for battery sustainer
This patch adds a unit test for the battery sustainer.
BUG=b:188457962
BRANCH=None
TEST=make run-sbs_charging_v2
Change-Id: Ica227cf4ee3f71a746150fb6a5f4e40ab8ca0720
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2987734
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/sbs_charging_v2.c | 82 |
1 files changed, 81 insertions, 1 deletions
diff --git a/test/sbs_charging_v2.c b/test/sbs_charging_v2.c index 7477c9d290..78e4b3fc30 100644 --- a/test/sbs_charging_v2.c +++ b/test/sbs_charging_v2.c @@ -19,11 +19,14 @@ #define WAIT_CHARGER_TASK 600 #define BATTERY_DETACH_DELAY 35000 +enum ec_charge_control_mode get_chg_ctrl_mode(void); + static int mock_chipset_state = CHIPSET_STATE_ON; static int is_shutdown; static int is_force_discharge; static int is_hibernated; static int override_voltage, override_current, override_usec; +static int display_soc; /* The simulation doesn't really hibernate, so we must reset this ourselves */ extern timestamp_t shutdown_target_time; @@ -114,10 +117,15 @@ static int charge_control(enum ec_charge_control_mode mode) { struct ec_params_charge_control params; params.mode = mode; - return test_send_host_command(EC_CMD_CHARGE_CONTROL, 1, ¶ms, + return test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, ¶ms, sizeof(params), NULL, 0); } +__override int charge_get_display_charge(void) +{ + return display_soc; +} + /* Setup init condition */ static void test_setup(int on_ac) { @@ -711,7 +719,78 @@ static int test_low_battery_hostevents(void) return EC_SUCCESS; } +static int test_battery_sustainer(void) +{ + struct ec_params_charge_control p; + struct ec_response_charge_control r; + int rv; + + test_setup(1); + + /* Enable sustainer */ + p.cmd = EC_CHARGE_CONTROL_CMD_SET; + p.mode = CHARGE_CONTROL_NORMAL; + p.sustain_soc.lower = 79; + p.sustain_soc.upper = 80; + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, + &p, sizeof(p), NULL, 0); + TEST_ASSERT(rv == EC_RES_SUCCESS); + + p.cmd = EC_CHARGE_CONTROL_CMD_GET; + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, + &p, sizeof(p), &r, sizeof(r)); + TEST_ASSERT(rv == EC_RES_SUCCESS); + TEST_ASSERT(r.sustain_soc.lower == 79); + TEST_ASSERT(r.sustain_soc.upper == 80); + + /* Check mode transition as the SoC changes. */ + + /* SoC < lower < upper */ + display_soc = 780; + wait_charging_state(); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL); + + /* lower < upper < SoC */ + display_soc = 810; + wait_charging_state(); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE); + /* Unplug AC. Sustainer gets deactivated. */ + gpio_set_level(GPIO_AC_PRESENT, 0); + wait_charging_state(); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL); + + /* Replug AC. Sustainer gets re-activated. */ + gpio_set_level(GPIO_AC_PRESENT, 1); + wait_charging_state(); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE); + + /* lower < SoC < upper */ + display_soc = 799; + wait_charging_state(); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE); + + /* SoC < lower < upper */ + display_soc = 789; + wait_charging_state(); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL); + + /* Disable sustainer */ + p.cmd = EC_CHARGE_CONTROL_CMD_SET; + p.mode = CHARGE_CONTROL_NORMAL; + p.sustain_soc.lower = -1; + p.sustain_soc.upper = -1; + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, + &p, sizeof(p), NULL, 0); + TEST_ASSERT(rv == EC_RES_SUCCESS); + + /* This time, mode will stay in NORMAL even when upper < SoC. */ + display_soc = 810; + wait_charging_state(); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL); + + return EC_SUCCESS; +} void run_test(int argc, char **argv) { @@ -724,6 +803,7 @@ void run_test(int argc, char **argv) RUN_TEST(test_hc_charge_state); RUN_TEST(test_hc_current_limit); RUN_TEST(test_low_battery_hostevents); + RUN_TEST(test_battery_sustainer); test_print_result(); } |