diff options
author | Tom Hughes <tomhughes@chromium.org> | 2022-09-21 14:10:01 -0700 |
---|---|---|
committer | Tom Hughes <tomhughes@chromium.org> | 2022-09-22 12:49:33 -0700 |
commit | 2bcf863b492fe7ed8105c853814dba6ed32ba719 (patch) | |
tree | fcf6ce5810f9ff9e3c8cce434812dd75492269ed /zephyr/test/drivers/default/src/console_cmd/charge_state.c | |
parent | e5fb0b9ba488614b5684e640530f00821ab7b943 (diff) | |
parent | 28712dae9d7ed1e694f7622cc083afa71090d4d5 (diff) | |
download | chrome-ec-firmware-fpmcu-bloonchipper-release.tar.gz |
Merge remote-tracking branch cros/main into firmware-fpmcu-bloonchipper-releasefirmware-fpmcu-bloonchipper-release
Generated by: ./util/update_release_branch.py --board bloonchipper
--relevant_paths_file ./util/fingerprint-relevant-paths.txt firmware-
fpmcu-bloonchipper-release
Relevant changes:
git log --oneline e5fb0b9ba4..28712dae9d -- board/hatch_fp
board/bloonchipper common/fpsensor docs/fingerprint driver/fingerprint
util/getversion.sh
ded9307b79 util/getversion.sh: Fix version when not in a git repo
956055e692 board: change Google USB vendor info
71b2ef709d Update license boilerplate text in source code files
33e11afda0 Revert "fpsensor: Build fpsensor source file with C++"
c8d0360723 fpsensor: Build fpsensor source file with C++
bc113abd53 fpsensor: Fix g++ compiler error
150a58a0dc fpsensor: Fix fp_set_sensor_mode return type
b33b5ce85b fpsensor: Remove nested designators for C++ compatibility
2e864b2539 tree-wide: const-ify argv for console commands
56d8b360f9 test: Add test for get ikm failure when seed not set
3a3d6c3690 test: Add test for fpsensor trivial key failure
233e6bbd08 fpsensor_crypto: Abstract calls to hmac_SHA256
0a041b285b docs/fingerprint: Typo correction
c03fab67e2 docs/fingerprint: Fix the path of fputils.py
0b5d4baf5a util/getversion.sh: Fix empty file list handling
6e128fe760 FPMCU dev board environment with Satlab
3eb29b6aa5 builtin: Move ssize_t to sys/types.h
345d62ebd1 docs/fingerprint: Update power numbers for latest dartmonkey release
c25ffdb316 common: Conditionally support printf %l and %i modifiers
9a3c514b45 test: Add a test to check if the debugger is connected
54e603413f Move standard library tests to their own file
43fa6b4bf8 docs/fingerprint: Update power numbers for latest bloonchipper release
25536f9a84 driver/fingerprint/fpc/bep/fpc_sensor_spi.c: Format with clang-format
4face99efd driver/fingerprint/fpc/libfp/fpc_sensor_pal.h: Format with clang-format
738de2b575 trng: Rename rand to trng_rand
14b8270edd docs/fingerprint: Update dragonclaw power numbers
0b268f93d1 driver/fingerprint/fpc/libfp/fpc_private.c: Format with clang-format
f80da163f2 driver/fingerprint/fpc/libfp/fpc_private.h: Format with clang-format
5e9c85c9b1 driver/fingerprint/fpc/libfp/fpc_sensor_pal.c: Format with clang-format
c1f9dd3cf8 driver/fingerprint/fpc/libfp/fpc_bio_algorithm.h: Format with clang-format
eb1e1bed8d driver/fingerprint/fpc/libfp/fpc1145_private.h: Format with clang-format
6e7b611821 driver/fingerprint/fpc/bep/fpc_bio_algorithm.h: Format with clang-format
e0589cd5e2 driver/fingerprint/fpc/bep/fpc1035_private.h: Format with clang-format
7905e556a0 common/fpsensor/fpsensor_crypto.c: Format with clang-format
21289d170c driver/fingerprint/fpc/bep/fpc1025_private.h: Format with clang-format
98a20f937e common/fpsensor/fpsensor_state.c: Format with clang-format
a2d255d8af common/fpsensor/fpsensor.c: Format with clang-format
73055eeb3f driver/fingerprint/fpc/bep/fpc_private.c: Format with clang-format
0f7b5cb509 common/fpsensor/fpsensor_private.h: Format with clang-format
1ceade6e65 driver/fingerprint/fpc/bep/fpc_private.h: Format with clang-format
dc3e9008b8 board/hatch_fp/board.h: Format with clang-format
dca9d74321 Revert "trng: Rename rand to trng_rand"
a6b0b3554f trng: Rename rand to trng_rand
28d0b75b70 third_party/boringssl: Remove unused header
BRANCH=None
BUG=b:246424843 b:234181908 b:244781166 b:234181908 b:244387210
BUG=b:242720240 chromium:1098010 b:180945056 b:236025198 b:234181908
BUG=b:234181908 b:237344361 b:131913998 b:236386294 b:234143158
BUG=b:234781655 b:215613183 b:242720910
TEST=`make -j buildall`
TEST=./test/run_device_tests.py --board bloonchipper
Test "aes": PASSED
Test "cec": PASSED
Test "cortexm_fpu": PASSED
Test "crc": PASSED
Test "flash_physical": PASSED
Test "flash_write_protect": PASSED
Test "fpsensor_hw": PASSED
Test "fpsensor_spi_ro": PASSED
Test "fpsensor_spi_rw": PASSED
Test "fpsensor_uart_ro": PASSED
Test "fpsensor_uart_rw": PASSED
Test "mpu_ro": PASSED
Test "mpu_rw": PASSED
Test "mutex": PASSED
Test "pingpong": PASSED
Test "printf": PASSED
Test "queue": PASSED
Test "rollback_region0": PASSED
Test "rollback_region1": PASSED
Test "rollback_entropy": PASSED
Test "rtc": PASSED
Test "sha256": PASSED
Test "sha256_unrolled": PASSED
Test "static_if": PASSED
Test "stdlib": PASSED
Test "system_is_locked_wp_on": PASSED
Test "system_is_locked_wp_off": PASSED
Test "timer_dos": PASSED
Test "utils": PASSED
Test "utils_str": PASSED
Test "stm32f_rtc": PASSED
Test "panic_data_bloonchipper_v2.0.4277": PASSED
Test "panic_data_bloonchipper_v2.0.5938": PASSED
Force-Relevant-Builds: all
Signed-off-by: Tom Hughes <tomhughes@chromium.org>
Change-Id: I264ad0ffe7afcd507a1e483c6e934a9c4fea47c3
Diffstat (limited to 'zephyr/test/drivers/default/src/console_cmd/charge_state.c')
-rw-r--r-- | zephyr/test/drivers/default/src/console_cmd/charge_state.c | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/zephyr/test/drivers/default/src/console_cmd/charge_state.c b/zephyr/test/drivers/default/src/console_cmd/charge_state.c new file mode 100644 index 0000000000..d5dc9fe415 --- /dev/null +++ b/zephyr/test/drivers/default/src/console_cmd/charge_state.c @@ -0,0 +1,282 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include <zephyr/shell/shell.h> +#include <zephyr/ztest.h> + +#include "charge_state.h" +#include "charge_state_v2.h" +#include "console.h" +#include "ec_commands.h" +#include "test/drivers/test_state.h" +#include "test/drivers/utils.h" + +ZTEST_USER(console_cmd_charge_state, test_idle_too_few_args) +{ + int rv; + + rv = shell_execute_cmd(get_ec_shell(), "chgstate idle"); + zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d", + EC_ERROR_PARAM_COUNT, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_idle_arg_not_a_bool) +{ + int rv; + + /* + * There are many strings that will fail parse_bool(), just test one to + * test the code path in the command, other tests for parse_bool are + * done in the respective unit test. + */ + rv = shell_execute_cmd(get_ec_shell(), "chgstate idle g"); + zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d", + EC_ERROR_PARAM2, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_idle_on__no_ac) +{ + int rv; + + rv = shell_execute_cmd(get_ec_shell(), "chgstate idle on"); + zassert_equal(rv, EC_ERROR_NOT_POWERED, "Expected %d, but got %d", + EC_ERROR_NOT_POWERED, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_discharge_on__no_ac) +{ + int rv; + + rv = shell_execute_cmd(get_ec_shell(), "chgstate discharge on"); + zassert_equal(rv, EC_ERROR_NOT_POWERED, "Expected %d, but got %d", + EC_ERROR_NOT_POWERED, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_discharge_too_few_args) +{ + int rv; + + rv = shell_execute_cmd(get_ec_shell(), "chgstate discharge"); + zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d", + EC_ERROR_PARAM_COUNT, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_discharge_arg_not_a_bool) +{ + int rv; + + /* + * There are many strings that will fail parse_bool(), just test one to + * test the code path in the command, other tests for parse_bool are + * done in the respective unit test. + */ + rv = shell_execute_cmd(get_ec_shell(), "chgstate discharge g"); + zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d", + EC_ERROR_PARAM2, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_debug_too_few_args) +{ + int rv; + + rv = shell_execute_cmd(get_ec_shell(), "chgstate debug"); + zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d", + EC_ERROR_PARAM_COUNT, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_debug_arg_not_bool) +{ + int rv; + + /* + * There are many strings that will fail parse_bool(), just test one to + * test the code path in the command, other tests for parse_bool are + * done in the respective unit test. + */ + rv = shell_execute_cmd(get_ec_shell(), "chgstate debug g"); + zassert_equal(rv, EC_ERROR_PARAM2, "Expected %d, but got %d", + EC_ERROR_PARAM2, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_debug_on) +{ + zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate debug on"), + NULL); +} + +ZTEST_USER(console_cmd_charge_state, test_debug_on_show_charging_progress) +{ + /* + * Force reset the previous display charge so the charge state task + * prints on the next iteration. + */ + reset_prev_disp_charge(); + charging_progress_displayed(); + + /* Enable debug printing */ + zassume_ok(shell_execute_cmd(get_ec_shell(), "chgstate debug on"), + NULL); + + /* Sleep at least 1 full iteration of the charge state loop */ + k_sleep(K_USEC(CHARGE_MAX_SLEEP_USEC + 1)); + + zassert_true(charging_progress_displayed(), NULL); +} + +ZTEST_USER(console_cmd_charge_state, test_sustain_too_few_args__2_args) +{ + int rv; + + rv = shell_execute_cmd(get_ec_shell(), "chgstate sustain"); + zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d", + EC_ERROR_PARAM_COUNT, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_sustain_too_few_args__3_args) +{ + int rv; + + rv = shell_execute_cmd(get_ec_shell(), "chgstate sustain 5"); + zassert_equal(rv, EC_ERROR_PARAM_COUNT, "Expected %d, but got %d", + EC_ERROR_PARAM_COUNT, rv); +} + +ZTEST_USER(console_cmd_charge_state, test_sustain_invalid_params) +{ + /* Verify that lower bound is less than upper bound */ + zassert_equal(shell_execute_cmd(get_ec_shell(), + "chgstate sustain 50 30"), + EC_ERROR_INVAL, NULL); + + /* Verify that lower bound is at least 0 (when upper bound is given) */ + zassert_equal(shell_execute_cmd(get_ec_shell(), + "chgstate sustain -5 30"), + EC_ERROR_INVAL, NULL); + + /* Verify that upper bound is at most 100 */ + zassert_equal(shell_execute_cmd(get_ec_shell(), + "chgstate sustain 50 101"), + EC_ERROR_INVAL, NULL); +} + +struct console_cmd_charge_state_fixture { + struct tcpci_partner_data source_5v_3a; + struct tcpci_src_emul_data source_ext; + const struct emul *tcpci_emul; + const struct emul *charger_emul; +}; + +static void *console_cmd_charge_state_setup(void) +{ + static struct console_cmd_charge_state_fixture fixture; + + /* Get references for the emulators */ + fixture.tcpci_emul = EMUL_GET_USBC_BINDING(0, tcpc); + fixture.charger_emul = EMUL_GET_USBC_BINDING(0, chg); + + /* Initialized the source to supply 5V and 3A */ + tcpci_partner_init(&fixture.source_5v_3a, PD_REV20); + fixture.source_5v_3a.extensions = tcpci_src_emul_init( + &fixture.source_ext, &fixture.source_5v_3a, NULL); + fixture.source_ext.pdo[1] = + PDO_FIXED(5000, 3000, PDO_FIXED_UNCONSTRAINED); + + return &fixture; +} + +static void console_cmd_charge_state_after(void *data) +{ + struct console_cmd_charge_state_fixture *fixture = data; + + disconnect_source_from_port(fixture->tcpci_emul, fixture->charger_emul); + shell_execute_cmd(get_ec_shell(), "chgstate debug off"); + shell_execute_cmd(get_ec_shell(), "chgstate sustain -1 -1"); +} + +ZTEST_SUITE(console_cmd_charge_state, drivers_predicate_post_main, + console_cmd_charge_state_setup, NULL, + console_cmd_charge_state_after, NULL); + +ZTEST_USER_F(console_cmd_charge_state, test_idle_on_from_normal) +{ + /* Connect a source so we start charging */ + connect_source_to_port(&fixture->source_5v_3a, &fixture->source_ext, 1, + fixture->tcpci_emul, fixture->charger_emul); + + /* Verify that we're in "normal" mode */ + zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL); + + /* Move to idle */ + zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate idle on"), NULL); + zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_IDLE, NULL); +} + +ZTEST_USER_F(console_cmd_charge_state, test_normal_from_idle) +{ + /* Connect a source so we start charging */ + connect_source_to_port(&fixture->source_5v_3a, &fixture->source_ext, 1, + fixture->tcpci_emul, fixture->charger_emul); + + /* Verify that we're in "normal" mode */ + zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL); + + /* Move to idle */ + zassume_ok(shell_execute_cmd(get_ec_shell(), "chgstate idle on"), NULL); + zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_IDLE, NULL); + + /* Move back to normal */ + zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate idle off"), + NULL); + zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL); +} + +ZTEST_USER_F(console_cmd_charge_state, test_discharge_on) +{ + /* Connect a source so we start charging */ + connect_source_to_port(&fixture->source_5v_3a, &fixture->source_ext, 1, + fixture->tcpci_emul, fixture->charger_emul); + + /* Verify that we're in "normal" mode */ + zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL); + + /* Enable discharge */ + zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate discharge on"), + NULL); + zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_DISCHARGE, NULL); +} + +ZTEST_USER_F(console_cmd_charge_state, test_discharge_off) +{ + /* Connect a source so we start charging */ + connect_source_to_port(&fixture->source_5v_3a, &fixture->source_ext, 1, + fixture->tcpci_emul, fixture->charger_emul); + + /* Verify that we're in "normal" mode */ + zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL); + + /* Enable discharge */ + zassume_ok(shell_execute_cmd(get_ec_shell(), "chgstate discharge on"), + NULL); + zassume_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_DISCHARGE, NULL); + + /* Disable discharge */ + zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate discharge off"), + NULL); + zassert_equal(get_chg_ctrl_mode(), CHARGE_CONTROL_NORMAL, NULL); +} + +ZTEST_USER(console_cmd_charge_state, test_sustain) +{ + struct ec_response_charge_control charge_control_values; + + /* Verify that lower bound is less than upper bound */ + zassert_ok(shell_execute_cmd(get_ec_shell(), "chgstate sustain 30 50"), + NULL); + + charge_control_values = host_cmd_charge_control( + CHARGE_CONTROL_NORMAL, EC_CHARGE_CONTROL_CMD_GET); + zassert_equal(charge_control_values.sustain_soc.lower, 30, NULL); + zassert_equal(charge_control_values.sustain_soc.upper, 50, NULL); +} |