From faa4a0d4f99bc3352d13512e6f91c2c097377a04 Mon Sep 17 00:00:00 2001 From: TuxSH <1922548+TuxSH@users.noreply.github.com> Date: Tue, 31 Jan 2023 17:14:18 +0000 Subject: [PATCH] rosalina: always try to display battery percentage Even when apps like 3dsident and mGBA open but never relinquish their mcu::HWC handle. --- sysmodules/rosalina/source/menu.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sysmodules/rosalina/source/menu.c b/sysmodules/rosalina/source/menu.c index 87dd33a..9ebc4a2 100644 --- a/sysmodules/rosalina/source/menu.c +++ b/sysmodules/rosalina/source/menu.c @@ -185,8 +185,14 @@ static Result menuUpdateMcuInfo(void) if (!isServiceUsable("mcu::HWC")) return -1; - res = mcuHwcInit(); + Handle *mcuHwcHandlePtr = mcuHwcGetSessionHandle(); + *mcuHwcHandlePtr = 0; + + res = srvGetServiceHandle(mcuHwcHandlePtr, "mcu::HWC"); + // Try to steal the handle if some other process is using the service (custom SVC) if (R_FAILED(res)) + res = svcControlService(SERVICEOP_STEAL_CLIENT_SESSION, mcuHwcHandlePtr, "mcu::HWC"); + if (res != 0) return res; // Read single-byte mcu regs 0x0A to 0x0D directly @@ -217,7 +223,7 @@ static Result menuUpdateMcuInfo(void) mcuFwVersion = SYSTEM_VERSION(major - 0x10, minor, 0); } - mcuHwcExit(); + svcCloseHandle(*mcuHwcHandlePtr); return res; } @@ -365,7 +371,7 @@ static void menuDraw(Menu *menu, u32 selected) else Draw_DrawFormattedString(SCREEN_BOT_WIDTH - 10 - SPACING_X * 15, 10, COLOR_WHITE, "%15s", ""); - if(R_SUCCEEDED(mcuInfoRes)) + if(mcuInfoRes == 0) { u32 voltageInt = (u32)batteryVoltage; u32 voltageFrac = (u32)(batteryVoltage * 100.0f) % 100u;