Result gspInit();
void gspExit();
+Result gspLcdInit();
+void gspLcdExit();
+
Result gspInitEventHandler(Handle gspEvent, vu8* gspSharedMem, u8 gspThreadId);
void gspExitEventHandler();
void gspWaitForEvent(GSP_Event id, bool nextEvent);
Result GSPGPU_UnregisterInterruptRelayQueue(Handle* handle);
Result GSPGPU_TriggerCmdReqQueue(Handle *handle);
Result GSPGPU_SubmitGxCommand(u32* sharedGspCmdBuf, u32 gxCommand[0x8], Handle* handle);
+
+// 1 = top, 2 = bottom, 3 = both
+Result GSPLCD_PowerOffBacklight(u32 screen);
+Result GSPLCD_PowerOnBacklight(u32 screen);
#define GSP_EVENT_STACK_SIZE 0x1000
Handle gspGpuHandle=0;
+Handle gspLcdHandle=0;
Handle gspEvents[GSPEVENT_MAX];
vu32 gspEventCounts[GSPEVENT_MAX];
u64 gspEventStack[GSP_EVENT_STACK_SIZE/sizeof(u64)]; //u64 so that it's 8-byte aligned
if(totalCommands==1)return GSPGPU_TriggerCmdReqQueue(handle);
return 0;
}
+
+Result gspLcdInit()\r
+{\r
+ return srvGetServiceHandle(&gspLcdHandle, "gsp::Lcd");\r
+}\r
+\r
+void gspLcdExit()\r
+{\r
+ if(gspLcdHandle)svcCloseHandle(gspLcdHandle);\r
+}
+
+Result GSPLCD_PowerOffBacklight(u32 screen)\r
+{\r
+ u32 *cmdbuf = getThreadCommandBuffer();\r
+\r
+ cmdbuf[0] = 0x00120040;\r
+ cmdbuf[1] = screen;\r
+\r
+ Result ret = svcSendSyncRequest(gspLcdHandle);\r
+\r
+ return ret;\r
+}\r
+\r
+Result GSPLCD_PowerOnBacklight(u32 screen)\r
+{\r
+ u32 *cmdbuf = getThreadCommandBuffer();\r
+\r
+ cmdbuf[0] = 0x00110040;\r
+ cmdbuf[1] = screen;\r
+\r
+ Result ret = svcSendSyncRequest(gspLcdHandle);\r
+\r
+ return ret;\r
+}