]> Chaos Git - corbenik/ctrulib.git/commitdiff
basic HID implementation
authorsmea <smealum@gmail.com>
Sun, 19 Jan 2014 12:33:28 +0000 (13:33 +0100)
committersmea <smealum@gmail.com>
Sun, 19 Jan 2014 12:33:28 +0000 (13:33 +0100)
libctru/include/ctr/GSP.h
libctru/include/ctr/HID.h [new file with mode: 0644]
libctru/include/ctr/svc.h
libctru/source/GSP.c
libctru/source/HID.c [new file with mode: 0644]
libctru/source/svc.s

index b3bae75da15de0054dcf176d158620a2da9069c3..8f71224464476d4ff384548a852b3ee040ebd39e 100644 (file)
@@ -3,6 +3,7 @@
 
 void GSPGPU_AcquireRight(Handle handle, u8 flags);
 void GSPGPU_SetLcdForceBlack(Handle handle, u8 flags);
+void GSPGPU_FlushDataCache(Handle handle, u8* adr, u32 size);
 void GSPGPU_WriteHWRegs(Handle handle, u32 regAddr, u8* data, u8 size);
 void GSPGPU_ReadHWRegs(Handle handle, u32 regAddr, u8* data, u8 size);
 void GSPGPU_RegisterInterruptRelayQueue(Handle handle, Handle eventHandle, u32 flags, Handle* outMemHandle, u8* threadID);
diff --git a/libctru/include/ctr/HID.h b/libctru/include/ctr/HID.h
new file mode 100644 (file)
index 0000000..1dae35b
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef HID_H
+#define HID_H
+
+#define CPAD_X(v) ((s16)((v)&0xFFFF))
+#define CPAD_Y(v) ((s16)(((v>>16))&0xFFFF))
+
+#define TOUCH_X(v) ((u16)((v)&0xFFFF))
+#define TOUCH_Y(v) ((u16)(((v>>16))&0xFFFF))
+
+typedef enum
+{
+       PAD_A = (1<<0),
+       PAD_B = (1<<1),
+       PAD_SELECT = (1<<2),
+       PAD_START = (1<<3),
+       PAD_RIGHT = (1<<4),
+       PAD_LEFT = (1<<5),
+       PAD_UP = (1<<6),
+       PAD_DOWN = (1<<7),
+       PAD_R = (1<<8),
+       PAD_L = (1<<9),
+       PAD_X = (1<<10),
+       PAD_Y = (1<<11)
+}PAD_KEY;
+
+void HIDUSER_GetInfo(Handle handle, Handle* outMemHandle);
+void HIDUSER_Init(Handle handle);
+
+#endif
index a692befa136112e701c3b4d3e49854c697457b05..cbf109e76b4fbdb2dfaf136edc2b0f3ae4ab7496 100644 (file)
@@ -2,6 +2,7 @@
 #define SVC_H
 
        u32* svc_getData(void);
+       void svc_exitProcess(void);
        void svc_sleepThread(s64 ns);
        Result svc_controlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions); //(outaddr is usually the same as the input addr0)
        Result svc_createEvent(Handle* event, u8 resettype);
index 9413f2dd813fc3851cb4a45d1b9b0de52a233a85..3e6656aae3fb02e12f6bcd585fa64ec0b30b06d4 100644 (file)
@@ -24,6 +24,17 @@ void GSPGPU_SetLcdForceBlack(Handle handle, u8 flags)
        svc_sendSyncRequest(handle); //check return value...
 }
 
+void GSPGPU_FlushDataCache(Handle handle, u8* adr, u32 size)
+{
+       u32* svcData=svc_getData();
+       svcData[0]=0x80082; //request header code
+       svcData[1]=(u32)adr;
+       svcData[2]=size;
+       svcData[3]=0x0;
+       svcData[4]=0xffff8001;
+       svc_sendSyncRequest(handle); //check return value...
+}
+
 void GSPGPU_WriteHWRegs(Handle handle, u32 regAddr, u8* data, u8 size)
 {
        if(size>0x80 || !data)return;
diff --git a/libctru/source/HID.c b/libctru/source/HID.c
new file mode 100644 (file)
index 0000000..45e8c4d
--- /dev/null
@@ -0,0 +1,21 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctr/types.h>
+#include <ctr/HID.h>
+#include <ctr/svc.h>
+
+void HIDUSER_GetInfo(Handle handle, Handle* outMemHandle)
+{
+       u32* svcData=svc_getData();
+       svcData[0]=0xa0000; //request header code
+       svc_sendSyncRequest(handle); //check return value...
+       if(outMemHandle)*outMemHandle=svcData[3];
+}
+
+void HIDUSER_Init(Handle handle)
+{
+       u32* svcData=svc_getData();
+       svcData[0]=0x110000; //request header code
+       svc_sendSyncRequest(handle); //check return value...
+}
index a7cca5ddace9e80df6a158f69ea003cedde928a3..c0e821a1971515ab4132a200dc06f96998799900 100644 (file)
@@ -23,6 +23,12 @@ svc_controlMemory:
        add sp, sp, #4
        bx lr
 
+.global svc_exitProcess
+.type svc_exitProcess, %function
+svc_exitProcess:
+       svc 0x03
+       bx lr
+
 .global svc_sleepThread
 .type svc_sleepThread, %function
 svc_sleepThread: