summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2021-08-06 09:15:58 -0700
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-13 17:33:05 +0000
commit36681560c82a428968ec85914559966ae2f6fc51 (patch)
tree8570306c74c45608546ba74df0564ed2a37cff8c
parentbcb73a6355d21c87ef63ea0a14f0490229da8a24 (diff)
downloadchrome-ec-36681560c82a428968ec85914559966ae2f6fc51.tar.gz
chgstv2/sustainer: Add tests for full battery and AC
Currently, unit tests do not check whether the battery sustainer can be enabled when the battery is already full or when the AC is already present. This patch adds tests which check the battery sustainer can be enabled when the battery is already full or when the AC is already present. BUG=b:188457962 BRANCH=None TEST=run-sbs_charging_v2 Change-Id: I4ec9785554d126baca0b60e889c4a2dabbfb628a Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3869646 Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r--common/charge_state_v2.c2
-rw-r--r--test/sbs_charging_v2.c78
2 files changed, 64 insertions, 16 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index 5b111e6baa..0b2f359143 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -1189,7 +1189,7 @@ static void show_charging_progress(void)
}
/* Calculate if battery is full based on whether it is accepting charge */
-static int calc_is_full(void)
+test_mockable int calc_is_full(void)
{
static int __bss_slow ret;
diff --git a/test/sbs_charging_v2.c b/test/sbs_charging_v2.c
index 03676ec942..03c423e56e 100644
--- a/test/sbs_charging_v2.c
+++ b/test/sbs_charging_v2.c
@@ -27,6 +27,7 @@ static int is_force_discharge;
static int is_hibernated;
static int override_voltage, override_current, override_usec;
static int display_soc;
+static int is_full;
/* The simulation doesn't really hibernate, so we must reset this ourselves */
extern timestamp_t shutdown_warning_time;
@@ -37,6 +38,7 @@ static void reset_mocks(void)
is_shutdown = is_force_discharge = is_hibernated = 0;
override_voltage = override_current = override_usec = 0;
shutdown_warning_time.val = 0ULL;
+ is_full = 0;
}
void chipset_force_shutdown(enum chipset_shutdown_reason reason)
@@ -110,10 +112,14 @@ static int wait_charging_state(void)
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, 2, &params,
- sizeof(params), NULL, 0);
+ struct ec_params_charge_control p;
+
+ p.cmd = EC_CHARGE_CONTROL_CMD_SET;
+ p.mode = mode;
+ p.sustain_soc.lower = -1;
+ p.sustain_soc.upper = -1;
+ return test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, &p, sizeof(p),
+ NULL, 0);
}
__override int charge_get_display_charge(void)
@@ -121,6 +127,11 @@ __override int charge_get_display_charge(void)
return display_soc;
}
+__override int calc_is_full(void)
+{
+ return is_full;
+}
+
/* Setup init condition */
static void test_setup(int on_ac)
{
@@ -710,49 +721,86 @@ static int test_battery_sustainer(void)
/* Check mode transition as the SoC changes. */
- /* SoC < lower < upper */
+ ccprintf("Test SoC < lower < upper.\n");
display_soc = 780;
wait_charging_state();
TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+ ccprintf("Pass.\n");
- /* lower < upper < SoC */
+ ccprintf("Test lower < upper < SoC.\n");
display_soc = 810;
wait_charging_state();
TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE);
+ ccprintf("Pass.\n");
- /* Unplug AC. Sustainer gets deactivated. */
+ ccprintf("Test unplug AC.\n");
gpio_set_level(GPIO_AC_PRESENT, 0);
wait_charging_state();
TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+ ccprintf("Pass.\n");
- /* Replug AC. Sustainer gets re-activated. */
+ ccprintf("Test replug AC.\n");
gpio_set_level(GPIO_AC_PRESENT, 1);
wait_charging_state();
TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE);
+ ccprintf("Pass.\n");
- /* lower < SoC < upper */
+ ccprintf("Test lower < SoC < upper.\n");
display_soc = 799;
wait_charging_state();
TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE);
+ ccprintf("Pass.\n");
- /* SoC < lower < upper */
+ ccprintf("Test SoC < lower < upper.\n");
display_soc = 789;
wait_charging_state();
TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+ ccprintf("Pass.\n");
+
+ ccprintf("Test disable sustainer.\n");
+ charge_control(CHARGE_CONTROL_NORMAL);
+ display_soc = 810;
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+ ccprintf("Pass.\n");
- /* Disable sustainer */
+ ccprintf("Test enable sustainer when battery is full.\n");
+ display_soc = 1000;
+ is_full = 1;
+ wait_charging_state();
+ /* Enable sustainer. */
p.cmd = EC_CHARGE_CONTROL_CMD_SET;
p.mode = CHARGE_CONTROL_NORMAL;
- p.sustain_soc.lower = -1;
- p.sustain_soc.upper = -1;
+ 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);
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE);
+ ccprintf("Pass.\n");
- /* This time, mode will stay in NORMAL even when upper < SoC. */
+ /* Disable sustainer, unplug AC, upper < SoC < 100. */
+ charge_control(CHARGE_CONTROL_NORMAL);
display_soc = 810;
+ is_full = 0;
+ gpio_set_level(GPIO_AC_PRESENT, 0);
wait_charging_state();
- TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+
+ ccprintf("Test enable sustainer when AC is present.\n");
+ gpio_set_level(GPIO_AC_PRESENT, 1);
+ wait_charging_state();
+ /* 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);
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE);
+ ccprintf("Pass.\n");
return EC_SUCCESS;
}