summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2021-08-06 09:15:58 -0700
committerCommit Bot <commit-bot@chromium.org>2021-08-09 17:34:59 +0000
commit8a9102efc3506b14b0ce275d0e2a05653587cfc5 (patch)
treea63c756193919153c4fab0e50e3f191090c65066 /test
parentb82517a459d8e9394a1ea4a2a0148232c61f45e5 (diff)
downloadchrome-ec-8a9102efc3506b14b0ce275d0e2a05653587cfc5.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/+/3078401 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Diffstat (limited to 'test')
-rw-r--r--test/sbs_charging_v2.c78
1 files changed, 63 insertions, 15 deletions
diff --git a/test/sbs_charging_v2.c b/test/sbs_charging_v2.c
index 20722b563a..714cf89124 100644
--- a/test/sbs_charging_v2.c
+++ b/test/sbs_charging_v2.c
@@ -28,6 +28,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_target_time;
@@ -38,6 +39,7 @@ static void reset_mocks(void)
is_shutdown = is_force_discharge = is_hibernated = 0;
override_voltage = override_current = override_usec = 0;
shutdown_target_time.val = 0ULL;
+ is_full = 0;
}
int board_cut_off_battery(void)
@@ -131,10 +133,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, 1, &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)
@@ -142,6 +148,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)
{
@@ -761,49 +772,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;
}