]> Chaos Git - corbenik/ctrulib.git/commitdiff
Implement some services from gsp::Lcd.
authorthedax <daxtsu@gmail.com>
Wed, 30 Sep 2015 21:41:27 +0000 (17:41 -0400)
committerthedax <daxtsu@gmail.com>
Wed, 30 Sep 2015 22:21:49 +0000 (18:21 -0400)
http://www.3dbrew.org/wiki/GSP_Services

libctru/include/3ds/services/gsp.h
libctru/source/services/gsp.c

index e65245d5bfe46a6b3888bbd9720f2c43e050647d..e80effcfaef83ab21345472a68524ab3a2735b26 100644 (file)
@@ -51,6 +51,9 @@ typedef enum
 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);
@@ -79,3 +82,7 @@ Result GSPGPU_RegisterInterruptRelayQueue(Handle *handle, Handle eventHandle, u3
 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);
index 4dcfadf94d23ddf682b093918010524397a9582b..881a8effd47c76792d97432bccc187ee93d321bc 100644 (file)
@@ -12,6 +12,7 @@
 #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
@@ -431,3 +432,37 @@ Result GSPGPU_SubmitGxCommand(u32* sharedGspCmdBuf, u32 gxCommand[0x8], Handle*
        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
+}