Fix FAT mismatch if exited by holding POWER

This commit is contained in:
Pk11 2022-01-09 21:36:18 -06:00
parent 342c9b4b3b
commit 040ddd6db3
2 changed files with 34 additions and 9 deletions

View File

@ -27,11 +27,12 @@
distribution. distribution.
---------------------------------------------------------------------------------*/ ---------------------------------------------------------------------------------*/
#include <nds.h> #include "my_sdmmc.h"
//#include <dswifi7.h> //#include <dswifi7.h>
//#include <maxmod7.h> //#include <maxmod7.h>
#include "string.h" #include <nds.h>
#include "my_sdmmc.h" #include <string.h>
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void VblankHandler(void) { void VblankHandler(void) {
@ -47,11 +48,24 @@ void VcountHandler() {
} }
volatile bool exitflag = false; volatile bool exitflag = false;
volatile bool reboot = false;
// https://github.com/devkitPro/libnds/blob/154a21cc3d57716f773ff2b10f815511c1b8ba9f/source/common/interrupts.c#L51-L69
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
void powerButtonCB() { TWL_CODE void i2cIRQHandlerCustom() {
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
exitflag = true; int cause = (i2cReadRegister(I2C_PM, I2CREGPM_PWRIF) & 0x3) | (i2cReadRegister(I2C_GPIO, 0x02)<<2);
switch (cause & 3) {
case 1:
reboot = true;
exitflag = true;
break;
case 2:
reboot = false;
exitflag = true;
break;
}
} }
void set_ctr(u32* ctr){ void set_ctr(u32* ctr){
@ -96,6 +110,7 @@ int main() {
ledBlink(0); ledBlink(0);
irqInit(); irqInit();
irqSetAUX(IRQ_I2C, i2cIRQHandlerCustom);
// Start the RTC tracking IRQ // Start the RTC tracking IRQ
initClockIRQ(); initClockIRQ();
fifoInit(); fifoInit();
@ -159,8 +174,6 @@ int main() {
irqEnable( IRQ_VBLANK | IRQ_VCOUNT | IRQ_NETWORK); irqEnable( IRQ_VBLANK | IRQ_VCOUNT | IRQ_NETWORK);
setPowerButtonCB(powerButtonCB);
// Keep the ARM7 mostly idle // Keep the ARM7 mostly idle
while (!exitflag) { while (!exitflag) {
if ( 0 == (REG_KEYINPUT & (KEY_SELECT | KEY_START | KEY_L | KEY_R))) { if ( 0 == (REG_KEYINPUT & (KEY_SELECT | KEY_START | KEY_L | KEY_R))) {
@ -174,5 +187,12 @@ int main() {
fifoWaitValue32(FIFO_USER_02); fifoWaitValue32(FIFO_USER_02);
fifoCheckValue32(FIFO_USER_02); fifoCheckValue32(FIFO_USER_02);
if (reboot) {
i2cWriteRegister(I2C_PM, I2CREGPM_RESETFLAG, 1);
i2cWriteRegister(I2C_PM, I2CREGPM_PWRCNT, 1);
} else {
writePowerManagement(PM_CONTROL_REG,PM_SYSTEM_PWR);
}
return 0; return 0;
} }

View File

@ -8,6 +8,7 @@
bool programEnd = false; bool programEnd = false;
bool sdnandMode = true; bool sdnandMode = true;
bool arm7Exiting = false;
PrintConsole topScreen; PrintConsole topScreen;
PrintConsole bottomScreen; PrintConsole bottomScreen;
@ -51,7 +52,6 @@ static int _mainMenu(int cursor)
iprintf("\tTitle Manager for HiyaCFW\n"); iprintf("\tTitle Manager for HiyaCFW\n");
iprintf("\nversion %s\n", VERSION); iprintf("\nversion %s\n", VERSION);
iprintf("\n\n\x1B[41mWARNING:\x1B[47m This tool can write to\nyour internal NAND!\n\nThis always has a risk, albeit\nlow, of \x1B[41mbricking\x1B[47m your system\nand should be done with caution!\n"); iprintf("\n\n\x1B[41mWARNING:\x1B[47m This tool can write to\nyour internal NAND!\n\nThis always has a risk, albeit\nlow, of \x1B[41mbricking\x1B[47m your system\nand should be done with caution!\n");
iprintf("\nDo not exit by holding POWER,\ntap it or choose \"Shut Down\".\n");
iprintf("\x1b[22;0HJeff - 2018-2019"); iprintf("\x1b[22;0HJeff - 2018-2019");
iprintf("\x1b[23;0HPk11 - 2022"); iprintf("\x1b[23;0HPk11 - 2022");
@ -95,7 +95,10 @@ static int _mainMenu(int cursor)
void fifoHandler(u32 value32, void* userdata) void fifoHandler(u32 value32, void* userdata)
{ {
if (value32 == 0x54495845) // 'EXIT' if (value32 == 0x54495845) // 'EXIT'
{
programEnd = true; programEnd = true;
arm7Exiting = true;
}
} }
int main(int argc, char **argv) int main(int argc, char **argv)
@ -138,7 +141,6 @@ int main(int argc, char **argv)
} }
messageBox("\x1B[41mWARNING:\x1B[47m This tool can write to\nyour internal NAND!\n\nThis always has a risk, albeit\nlow, of \x1B[41mbricking\x1B[47m your system\nand should be done with caution!"); messageBox("\x1B[41mWARNING:\x1B[47m This tool can write to\nyour internal NAND!\n\nThis always has a risk, albeit\nlow, of \x1B[41mbricking\x1B[47m your system\nand should be done with caution!");
messageBox("Do not exit by holding POWER,\ntap it or choose \"Shut Down\".");
//main menu //main menu
int cursor = 0; int cursor = 0;
@ -194,6 +196,9 @@ int main(int argc, char **argv)
fifoSendValue32(FIFO_USER_02, 0x54495845); // 'EXIT' fifoSendValue32(FIFO_USER_02, 0x54495845); // 'EXIT'
while (arm7Exiting)
swiWaitForVBlank();
return 0; return 0;
} }