diff --git a/include/arm11/menu/menu_util.h b/include/arm11/menu/menu_util.h index d0e4b1d..f6c7a75 100644 --- a/include/arm11/menu/menu_util.h +++ b/include/arm11/menu/menu_util.h @@ -26,3 +26,4 @@ u32 stringGetWidth(const char* str); void stringWordWrap(char* str, int llen); u32 ee_printf_line_center(const char *const fmt, ...); +void sleepmode(void); diff --git a/source/arm11/menu/menu.c b/source/arm11/menu/menu.c index 3875581..1515d33 100644 --- a/source/arm11/menu/menu.c +++ b/source/arm11/menu/menu.c @@ -176,15 +176,17 @@ GFX_waitForEvent(GFX_EVENT_PDC0, true); // VBlank if(hidGetPowerButton(true)) // handle power button - { power_off(); - } hidScanInput(); const u32 kDown = hidKeysDown(); // const u32 kHeld = hidKeysHeld(); - if ((kDown & KEY_A) && (curr_menu->entries[index].function == NULL)) + if (kDown & KEY_SHELL) + { + sleepmode(); + } + else if ((kDown & KEY_A) && (curr_menu->entries[index].function == NULL)) { // store previous menu and index for return if (menu_lvl < MENU_MAX_DEPTH) @@ -212,6 +214,13 @@ curr_menu = prev_menu[menu_lvl]; index = prev_index[menu_lvl]; } + else if ((kDown & KEY_HOME) && (menu_lvl > 0)) + { + // return to HOME menu + menu_lvl = 0; + curr_menu = prev_menu[0]; + index = prev_index[0]; + } else if (kDown & KEY_DDOWN) { // cursor down diff --git a/source/arm11/menu/menu_fsel.c b/source/arm11/menu/menu_fsel.c index 610dee0..f4c3238 100644 --- a/source/arm11/menu/menu_fsel.c +++ b/source/arm11/menu/menu_fsel.c @@ -377,14 +377,17 @@ dbutton_cooldown = 0; if(hidGetPowerButton(true)) // handle power button - { power_off(); - } hidScanInput(); const u32 kDown = hidKeysDown(); const u32 kHeld = hidKeysHeld(); - if (kDown & KEY_HOME) + + if (kDown & KEY_SHELL) + { + sleepmode(); + } + else if (kDown & KEY_HOME) { result = false; break; diff --git a/source/arm11/menu/menu_func.c b/source/arm11/menu/menu_func.c index ac29361..eda9dc0 100644 --- a/source/arm11/menu/menu_func.c +++ b/source/arm11/menu/menu_func.c @@ -155,6 +155,9 @@ GFX_waitForEvent(GFX_EVENT_PDC0, true); hidScanInput(); kHeldNew = hidKeysHeld(); + + if(hidGetPowerButton(true)) power_off(); + else if(hidKeysDown() & KEY_SHELL) sleepmode(); } while ((kHeld == kHeldNew) && (++vBlanks < 100)); // check keys diff --git a/source/arm11/menu/menu_util.c b/source/arm11/menu/menu_util.c index dc841c6..6a28bc5 100644 --- a/source/arm11/menu/menu_util.c +++ b/source/arm11/menu/menu_util.c @@ -19,6 +19,8 @@ #include #include #include "types.h" +#include "arm11/hardware/hid.h" +#include "arm11/hardware/i2c.h" #include "arm11/console.h" #include "arm11/fmt.h" @@ -128,3 +130,16 @@ return ee_printf("%*.*s%s\n", pad, pad, "", buf); } + +// only intended to be ran when the shell is closed +void sleepmode(void) +{ + i2cmcu_lcd_poweroff(); + while (true) { + GFX_waitForEvent(GFX_EVENT_PDC0, true); // VBlank + hidScanInput(); + if (hidKeysUp() & KEY_SHELL) break; + } + i2cmcu_lcd_poweron(); + i2cmcu_lcd_backlight_poweron(); +}