Add battery run protection: require charger below 10%
All checks were successful
Build / Build (push) Successful in 10s
All checks were successful
Build / Build (push) Successful in 10s
- Add bq24193_charger_connected() for charger detection - Block install when battery < 10% and charger not plugged in - Show clear screen after charger detected before continuing - User can cancel with + and - to return to Hekate Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -18,6 +18,8 @@
|
||||
#include <mem/heap.h>
|
||||
#include <mem/minerva.h>
|
||||
#include <power/max77620.h>
|
||||
#include <power/max17050.h>
|
||||
#include <power/bq24193.h>
|
||||
#include <soc/bpmp.h>
|
||||
#include <soc/fuse.h>
|
||||
#include <soc/hw_init.h>
|
||||
@@ -376,6 +378,56 @@ void ipl_main(void) {
|
||||
// Determine installation mode
|
||||
install_mode_t mode = current.is_installed ? INSTALL_MODE_UPDATE : INSTALL_MODE_CLEAN;
|
||||
|
||||
// Battery run protection: below 10% requires charger
|
||||
#define BATT_LOW_THRESHOLD 10
|
||||
int batt_raw = 0;
|
||||
int batt_pct = 100;
|
||||
if (max17050_get_property(MAX17050_RepSOC, &batt_raw) == 0) {
|
||||
batt_pct = batt_raw >> 8; // RepSOC: high byte = percent
|
||||
}
|
||||
while (batt_pct < BATT_LOW_THRESHOLD && !bq24193_charger_connected()) {
|
||||
gfx_clear_grey(0x1B);
|
||||
gfx_con_setpos(0, 0);
|
||||
print_header();
|
||||
set_color(COLOR_RED);
|
||||
gfx_printf("Akkustand zu niedrig! (%d%%)\n\n", batt_pct);
|
||||
gfx_printf("Unter %d%% Akku darf die Installation nur\n", BATT_LOW_THRESHOLD);
|
||||
gfx_printf("mit angeschlossenem Ladegeraet durchgefuehrt werden.\n\n");
|
||||
set_color(COLOR_YELLOW);
|
||||
gfx_printf("Stecke das Ladegeraet an und warte...\n");
|
||||
gfx_printf("Oder druecke + und - zum Abbrechen.\n");
|
||||
set_color(COLOR_WHITE);
|
||||
jc_init_hw();
|
||||
while (btn_read() & BTN_POWER) { msleep(50); }
|
||||
bool user_cancelled = false;
|
||||
while (batt_pct < BATT_LOW_THRESHOLD && !bq24193_charger_connected() && !user_cancelled) {
|
||||
jc_gamepad_rpt_t *jc = joycon_poll();
|
||||
if (jc && jc->plus && jc->minus) {
|
||||
user_cancelled = true;
|
||||
break;
|
||||
}
|
||||
if (max17050_get_property(MAX17050_RepSOC, &batt_raw) == 0) {
|
||||
batt_pct = batt_raw >> 8;
|
||||
}
|
||||
msleep(200);
|
||||
}
|
||||
if (user_cancelled) {
|
||||
gfx_printf("\nAbgebrochen. Starte Hekate...\n");
|
||||
msleep(500);
|
||||
if (file_exists(PAYLOAD_PATH)) {
|
||||
launch_payload(PAYLOAD_PATH);
|
||||
} else {
|
||||
power_set_state(POWER_OFF_REBOOT);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Charger detected or battery OK - clear the low-battery screen before continuing
|
||||
gfx_clear_grey(0x1B);
|
||||
gfx_con_setpos(0, 0);
|
||||
print_header();
|
||||
|
||||
// Show information
|
||||
set_color(COLOR_CYAN);
|
||||
gfx_printf("Installationsmodus: %s\n", mode == INSTALL_MODE_UPDATE ? "Update" : "Saubere Installation");
|
||||
|
||||
Reference in New Issue
Block a user