From a0c604cb26eb64b430f6e551ff7f66f69946657f Mon Sep 17 00:00:00 2001 From: kopecdav Date: Tue, 15 Jul 2025 21:21:43 +0200 Subject: [PATCH] refactor(core/prodtest): refactor prodtest to soc target + remove obsolete pm-precharge command. [no changelog] --- core/embed/projects/prodtest/README.md | 35 +------ .../prodtest/cmd/prodtest_power_manager.c | 92 +++---------------- core/embed/projects/prodtest/main.c | 2 +- 3 files changed, 16 insertions(+), 113 deletions(-) diff --git a/core/embed/projects/prodtest/README.md b/core/embed/projects/prodtest/README.md index 6ab1e787ca..d776915457 100644 --- a/core/embed/projects/prodtest/README.md +++ b/core/embed/projects/prodtest/README.md @@ -744,45 +744,18 @@ pm-new-soc-estimate OK ``` -### pm-set-soc-limit -Sets the battery state of charge (SOC) limit. The SOC limit is a percentage value between 10 and 100. +### pm-set-soc-target +Sets the battery state of charge (SOC) target. The SOC limit is a percentage value between 10 and 100. The command returns `OK` if the operation is successful. ``` -pm-set-soc-limit 50 -# Set SOC limit to 50% +pm-set-soc-target 50 +# Set SOC target to 50% OK ``` -### pm-precharge -Enables the battery charging and precharge the battery to the 3.45V. Then it disables charging and terminates. -During the precharge, command will print out power manager report into the console. CTRL+C will terminate the precharge. - -Example: -``` -pm-precharge -# Precharging the device ... -# Precharging the device to 3.450 V -# Power manager report: -# Power state 5 -# USB connected -# WLC disconnected -# Battery voltage: 3.435 V -# Battery current: -191.700 mA -# Battery temperature: 31.541 C -# Battery SoC: 68.92 -# Battery SoC latched: 69.00 -# PMIC die temperature: 49.096 C -# WLC voltage: 0.000 V -# WLC current: 0.000 mA -# WLC die temperature: 0.000 C -# System voltage: 4.449 V -PROGRESS 5 USB_connected WLC_disconnected 3.435 -191.700 31.541 68.92 69.00 49.096 0.000 0.000 0.000 4.449 -OK -``` - ### pm-report Starts single or continuous reporting of power manager data, including voltage, current and temperature. diff --git a/core/embed/projects/prodtest/cmd/prodtest_power_manager.c b/core/embed/projects/prodtest/cmd/prodtest_power_manager.c index 1e1173978d..8bf0b00042 100644 --- a/core/embed/projects/prodtest/cmd/prodtest_power_manager.c +++ b/core/embed/projects/prodtest/cmd/prodtest_power_manager.c @@ -331,72 +331,9 @@ void prodtest_pm_event_monitor(cli_t* cli) { cli_ok(cli, ""); } -void prodtest_pm_precharge(cli_t* cli) { - if (cli_arg_count(cli) > 0) { - cli_error_arg_count(cli); - return; - } - - // This test considers that the device is connected via USB and placed at - // ambient temperature. The battery will be charged with constant current, - // and the precharge voltage is statically derived from the battery charging - // curve. - - // During charging, the voltage rises because of the relatively high charging - // current. When the test ends upon reaching the specified precharge voltage, - // the charging current is cut off, which can cause the battery voltage to - // fall slightly. - float precharge_voltage_V = 3.45f; - - // Disable SoC limit and enable charging - pm_set_soc_limit(100); - pm_charging_enable(); - - cli_trace(cli, "Precharging the device..."); - - while (true) { - pm_report_t report; - pm_status_t status = pm_get_report(&report); - - if (status != PM_OK) { - cli_error(cli, CLI_ERROR, "Failed to get power manager report"); - return; - } - - if (report.usb_connected == false) { - cli_error(cli, CLI_ERROR, "USB power source is not connected"); - return; - } - - cli_trace(cli, "Precharging the device to %d.%03d V", - (int)precharge_voltage_V, - (int)(precharge_voltage_V * 1000) % 1000); - - // Print power manager report. - prodtest_pm_report(cli); - - if (cli_aborted(cli)) { - cli_trace(cli, "aborted"); - break; - } - - // Check if the battery voltage is above the precharge voltag - if (report.battery_voltage_v >= precharge_voltage_V) { - // Target achieved - cli_trace(cli, "Battery voltage reached the target voltage."); - pm_charging_disable(); - break; - } - - systick_delay_ms(500); - } - - cli_ok(cli, ""); -} - -void prodtest_pm_set_soc_limit(cli_t* cli) { - uint32_t limit = 0; - if (!cli_arg_uint32(cli, "limit", &limit) || limit > 100 || limit < 10) { +void prodtest_pm_set_soc_target(cli_t* cli) { + uint32_t target = 0; + if (!cli_arg_uint32(cli, "limit", &target) || target > 100 || target < 10) { cli_error_arg(cli, "Expecting value in range 10-100"); return; } @@ -406,9 +343,9 @@ void prodtest_pm_set_soc_limit(cli_t* cli) { return; } - pm_set_soc_limit(limit); + pm_set_soc_target(target); - cli_trace(cli, "Set SOC limit to %d%%", limit); + cli_trace(cli, "Set SOC target to %d%%", target); cli_ok(cli, ""); } @@ -476,7 +413,7 @@ PRODTEST_CLI_CMD( PRODTEST_CLI_CMD( .name = "pm-fuel-gauge-monitor", .func = prodtest_pm_fuel_gauge_monitor, -.info = "Watch fuel gauge ", +.info = "Watch fuel gauge data", .args = "" ); @@ -488,23 +425,16 @@ PRODTEST_CLI_CMD( ); PRODTEST_CLI_CMD( - .name = "pm-precharge", - .func = prodtest_pm_precharge, - .info = "Precharge the device to specific voltage", - .args = "" -); - -PRODTEST_CLI_CMD( - .name = "pm-set-soc-limit", - .func = prodtest_pm_set_soc_limit, - .info = "Set limit for the battery SOC", - .args = "" + .name = "pm-set-soc-target", + .func = prodtest_pm_set_soc_target, + .info = "Set battery SoC charging target", + .args = "" ); PRODTEST_CLI_CMD( .name = "pm-new-soc-estimate", .func = prodtest_pm_new_soc_estimate, - .info = "Run new battery SoC initialization", + .info = "Reset battery SoC estimate", .args = "" ); diff --git a/core/embed/projects/prodtest/main.c b/core/embed/projects/prodtest/main.c index 4557b3bdcb..e6b2b95f41 100644 --- a/core/embed/projects/prodtest/main.c +++ b/core/embed/projects/prodtest/main.c @@ -210,7 +210,7 @@ static void drivers_init(void) { #endif #ifdef USE_POWER_MANAGER pm_init(true); - pm_set_soc_limit(70); + pm_set_soc_target(70); #endif display_init(DISPLAY_RESET_CONTENT);