diff --git a/libctru/include/3ds/services/gspgpu.h b/libctru/include/3ds/services/gspgpu.h index 8c359a6..6636c46 100644 --- a/libctru/include/3ds/services/gspgpu.h +++ b/libctru/include/3ds/services/gspgpu.h @@ -218,3 +218,8 @@ Result GSPGPU_UnregisterInterruptRelayQueue(void); /// Triggers a handling of commands written to shared memory. Result GSPGPU_TriggerCmdReqQueue(void); +/** + * @brief Sets 3D_LEDSTATE to the input state value. + * @param disable False = 3D LED enable, true = 3D LED disable. + */ +Result GSPGPU_SetLedForceOff(bool disable); \ No newline at end of file diff --git a/libctru/include/3ds/services/gsplcd.h b/libctru/include/3ds/services/gsplcd.h index fdb219e..f044da9 100644 --- a/libctru/include/3ds/services/gsplcd.h +++ b/libctru/include/3ds/services/gsplcd.h @@ -19,6 +19,12 @@ Result gspLcdInit(void); /// Exits GSPLCD. void gspLcdExit(void); +/// Powers on both backlights. +Result GSPLCD_PowerOnAllBacklights(void); + +/// Powers off both backlights. +Result GSPLCD_PowerOffAllBacklights(void); + /** * @brief Powers on the backlight. * @param screen Screen to power on. @@ -31,6 +37,12 @@ Result GSPLCD_PowerOnBacklight(u32 screen); */ Result GSPLCD_PowerOffBacklight(u32 screen); +/** + * @brief Sets 3D_LEDSTATE to the input state value. + * @param disable False = 3D LED enable, true = 3D LED disable. + */ +Result GSPLCD_SetLedForceOff(bool disable); + /** * @brief Gets the LCD screens' vendors. Stubbed on old 3ds. * @param vendor Pointer to output the screen vendors to. diff --git a/libctru/source/services/gspgpu.c b/libctru/source/services/gspgpu.c index 8d86689..1247267 100644 --- a/libctru/source/services/gspgpu.c +++ b/libctru/source/services/gspgpu.c @@ -430,3 +430,15 @@ Result GSPGPU_RestoreVramSysArea(void) return cmdbuf[1]; } +Result GSPGPU_SetLedForceOff(bool disable) +{ + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x1C,1,0); // 0x1C0040 + cmdbuf[1] = disable & 0xFF; + + Result ret=0; + if (R_FAILED(ret = svcSendSyncRequest(gspGpuHandle))) return ret; + + return cmdbuf[1]; +} \ No newline at end of file diff --git a/libctru/source/services/gsplcd.c b/libctru/source/services/gsplcd.c index 0183e56..06ab178 100644 --- a/libctru/source/services/gsplcd.c +++ b/libctru/source/services/gsplcd.c @@ -26,6 +26,30 @@ void gspLcdExit(void) svcCloseHandle(gspLcdHandle); } +Result GSPLCD_PowerOnAllBacklights(void) +{ + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x0F,0,0); // 0x0F0000 + + Result ret=0; + if (R_FAILED(ret = svcSendSyncRequest(gspLcdHandle))) return ret; + + return cmdbuf[1]; +} + +Result GSPLCD_PowerOffAllBacklights(void) +{ + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x10,0,0); // 0x100000 + + Result ret=0; + if (R_FAILED(ret = svcSendSyncRequest(gspLcdHandle))) return ret; + + return cmdbuf[1]; +} + Result GSPLCD_PowerOnBacklight(u32 screen) { u32 *cmdbuf = getThreadCommandBuffer(); @@ -52,6 +76,19 @@ Result GSPLCD_PowerOffBacklight(u32 screen) return cmdbuf[1]; } +Result GSPLCD_SetLedForceOff(bool disable) +{ + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x13,1,0); // 0x130040 + cmdbuf[1] = disable & 0xFF; + + Result ret=0; + if (R_FAILED(ret = svcSendSyncRequest(gspLcdHandle))) return ret; + + return cmdbuf[1]; +} + Result GSPLCD_GetVendors(u8 *vendors) { u32 *cmdbuf = getThreadCommandBuffer();