From bcad84154ba7cb71549a624de4ffa721a9a182ac Mon Sep 17 00:00:00 2001 From: Joel16 Date: Sun, 17 Dec 2017 01:06:35 -0600 Subject: [PATCH] Read brightness from HW Regs Should now work on o3ds/2ds as well. --- source/hardware.c | 25 +++++++++++++++++++------ source/main.c | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/source/hardware.c b/source/hardware.c index a2baf45..a5d09fe 100644 --- a/source/hardware.c +++ b/source/hardware.c @@ -2,6 +2,9 @@ #include "hardware.h" +#define REG_LCD_TOP_SCREEN (u32)0x202200 +#define REG_LCD_BOTTOM_SCREEN (u32)0x202A00 + char * getCardSlotStatus(void) { bool isInserted = false; @@ -37,14 +40,24 @@ char * getBrightness(u32 screen) { u32 brightness = 0; static char level[5]; - - if(R_SUCCEEDED(gspLcdInit())) + + if (R_SUCCEEDED(gspInit())) { - if (R_SUCCEEDED(GSPLCD_GetBrightness(screen, &brightness))) - gspLcdExit(); + if (screen == GSPLCD_SCREEN_TOP) + { + if (R_SUCCEEDED(GSPGPU_ReadHWRegs(REG_LCD_TOP_SCREEN + 0x40, &brightness, 4))) + gspExit(); + } + else if (screen = GSPLCD_SCREEN_BOTTOM) + { + if (R_SUCCEEDED(GSPGPU_ReadHWRegs(REG_LCD_BOTTOM_SCREEN + 0x40, &brightness, 4))) + gspExit(); + } + else + gspExit(); } - - snprintf(level, 4, "%d", (int)brightness); + + snprintf(level, 0x4, "%d", (int)brightness); return level; } \ No newline at end of file diff --git a/source/main.c b/source/main.c index 1e08d91..fbde732 100644 --- a/source/main.c +++ b/source/main.c @@ -250,7 +250,7 @@ int main(int argc, char *argv[]) printf("\x1b[36;1m*\x1b[0m CTR Size: \x1b[36;1m%s\x1b[0m / \x1b[36;1m%s\x1b[0m \n", ctrFreeSize, ctrTotalSize); printf("\x1b[26;0H"); - printf("\x1b[36;1m*\x1b[0m Brightness level: \x1b[36;1m%s\x1b[0m \n", getBrightness(1)); + printf("\x1b[36;1m*\x1b[0m Brightness level: \x1b[36;1m%s\x1b[0m \n", getBrightness(GSPLCD_SCREEN_TOP)); printf("\x1b[27;0H"); wifiPercent = (osGetWifiStrength() * 33.3333333333);