summaryrefslogtreecommitdiff
path: root/test/sbs_charging_v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/sbs_charging_v2.c')
-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 f8a425c5cd..6b7bf04ca4 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, 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)
@@ -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;
}