From 6702143a16aec46c42c51a04e786b452b7a8b037 Mon Sep 17 00:00:00 2001 From: Maximilian Ehlers Date: Wed, 29 Mar 2023 20:31:47 +0200 Subject: [PATCH] Adds the ability to go back to the home menu with Rosalina Signed-off-by: Maximilian Ehlers --- sysmodules/rosalina/include/menus.h | 1 + sysmodules/rosalina/source/menus.c | 31 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/sysmodules/rosalina/include/menus.h b/sysmodules/rosalina/include/menus.h index 3b7a662a6..8ebb91a2c 100644 --- a/sysmodules/rosalina/include/menus.h +++ b/sysmodules/rosalina/include/menus.h @@ -37,6 +37,7 @@ void RosalinaMenu_ChangeScreenBrightness(void); void RosalinaMenu_ShowCredits(void); void RosalinaMenu_ProcessList(void); void RosalinaMenu_SaveSettings(void); +void RosalinaMenu_HomeMenu(void); void RosalinaMenu_PowerOff(void); void RosalinaMenu_Reboot(void); void RosalinaMenu_Cheats(void); diff --git a/sysmodules/rosalina/source/menus.c b/sysmodules/rosalina/source/menus.c index 48e627c34..7f7f589ac 100644 --- a/sysmodules/rosalina/source/menus.c +++ b/sysmodules/rosalina/source/menus.c @@ -55,6 +55,7 @@ Menu rosalinaMenu = { { "New 3DS menu...", MENU, .menu = &N3DSMenu, .visibility = &menuCheckN3ds }, { "Miscellaneous options...", MENU, .menu = &miscellaneousMenu }, { "Save settings", METHOD, .method = &RosalinaMenu_SaveSettings }, + { "Go to Home", METHOD, .method = &RosalinaMenu_HomeMenu}, { "Power off", METHOD, .method = &RosalinaMenu_PowerOff }, { "Reboot", METHOD, .method = &RosalinaMenu_Reboot }, { "Credits", METHOD, .method = &RosalinaMenu_ShowCredits }, @@ -349,6 +350,36 @@ void RosalinaMenu_PowerOff(void) // Soft shutdown. while(!menuShouldExit); } +void RosalinaMenu_HomeMenu(void) // Trigger Home Button press +{ + Draw_Lock(); + Draw_ClearFramebuffer(); + Draw_FlushFramebuffer(); + Draw_Unlock(); + + do + { + srvPublishToSubscriber(0x204, 0); + + Draw_Lock(); + Draw_ClearFramebuffer(); + Draw_DrawString(10, 30, COLOR_WHITE, "Exit Rosalina to get back to the Home Menu."); + Draw_DrawString(10, 40, COLOR_WHITE, "Press A to confirm"); + Draw_FlushFramebuffer(); + Draw_Unlock(); + + u32 pressed = waitInputWithTimeout(1000); + + if(pressed & KEY_A) + { + return; + } + else if(pressed & KEY_B) + return; + } + while(!menuShouldExit); +} + #define TRY(expr) if(R_FAILED(res = (expr))) goto end;