From f893d21f05195456971d111f08a859a4c57e2e3c Mon Sep 17 00:00:00 2001 From: Pk11 Date: Mon, 10 Jan 2022 23:17:39 -0600 Subject: [PATCH] Don't allow installing when battery is low --- arm7/src/main.c | 8 ++++++++ arm9/src/install.c | 7 +++++++ arm9/src/main.c | 13 +++++++++++-- arm9/src/main.h | 2 ++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/arm7/src/main.c b/arm7/src/main.c index 68c3043..140317d 100644 --- a/arm7/src/main.c +++ b/arm7/src/main.c @@ -179,6 +179,14 @@ int main() { if ( 0 == (REG_KEYINPUT & (KEY_SELECT | KEY_START | KEY_L | KEY_R))) { exitflag = true; } + + int batteryStatus; + if (isDSiMode() || REG_SCFG_EXT != 0) + batteryStatus = i2cReadRegister(I2C_PM, I2CREGPM_BATTERY); + else + batteryStatus = (readPowerManagement(PM_BATTERY_REG) & 1) ? 0x3 : 0xF; + fifoSendValue32(FIFO_USER_03, batteryStatus); + swiWaitForVBlank(); } diff --git a/arm9/src/install.c b/arm9/src/install.c index 1973981..020ccb6 100644 --- a/arm9/src/install.c +++ b/arm9/src/install.c @@ -286,6 +286,13 @@ bool install(char* fpath, bool systemTitle) { bool result = false; + //check battery level + while (batteryLevel < 7 && !charging) + { + if (choiceBox("\x1B[47mBattery is too low!\nPlease plug in the console.\n\nContinue?") == NO) + return false; + } + //confirmation message { char str[] = "Are you sure you want to install\n"; diff --git a/arm9/src/main.c b/arm9/src/main.c index 44a0cad..09a3fb2 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -9,6 +9,8 @@ bool programEnd = false; bool sdnandMode = true; bool arm7Exiting = false; +bool charging = false; +u8 batteryLevel = 0; PrintConsole topScreen; PrintConsole bottomScreen; @@ -92,7 +94,7 @@ static int _mainMenu(int cursor) return result; } -void fifoHandler(u32 value32, void* userdata) +void fifoHandlerPower(u32 value32, void* userdata) { if (value32 == 0x54495845) // 'EXIT' { @@ -101,6 +103,12 @@ void fifoHandler(u32 value32, void* userdata) } } +void fifoHandlerBattery(u32 value32, void* userdata) +{ + batteryLevel = value32 & 0xF; + charging = (value32 & BIT(7)) != 0; +} + int main(int argc, char **argv) { srand(time(0)); @@ -146,7 +154,8 @@ int main(int argc, char **argv) //main menu int cursor = 0; - fifoSetValue32Handler(FIFO_USER_01, fifoHandler, NULL); + fifoSetValue32Handler(FIFO_USER_01, fifoHandlerPower, NULL); + fifoSetValue32Handler(FIFO_USER_03, fifoHandlerBattery, NULL); while (!programEnd) { diff --git a/arm9/src/main.h b/arm9/src/main.h index 7981596..539a22d 100644 --- a/arm9/src/main.h +++ b/arm9/src/main.h @@ -7,6 +7,8 @@ extern bool programEnd; extern bool sdnandMode; +extern bool charging; +extern u8 batteryLevel; void installMenu(); void titleMenu();