cnt++;
}
-Handle hidHandle;
-Handle hidMemHandle;
-
-void hidInit()
-{
- srv_getServiceHandle(NULL, &hidHandle, "hid:USER");
- HIDUSER_GetInfo(hidHandle, &hidMemHandle);
- svc_mapMemoryBlock(hidMemHandle, 0x10000000, 0x1, 0x10000000);
-
- HIDUSER_Init(hidHandle);
-}
-
-void hidExit()
-{
- svc_unmapMemoryBlock(hidMemHandle, 0x10000000);
- svc_closeHandle(hidMemHandle);
- svc_closeHandle(hidHandle);
-}
-
int main()
{
initSrv();
gspGpuInit();
- hidInit();
+ hidInit(NULL);
aptSetupEventHandler();
{
if(status==APP_RUNNING)
{
- u32 PAD=((u32*)0x10000000)[7];
+ u32 PAD=hidSharedMem[7];
u32 regData=PAD|0x01000000;
GSPGPU_WriteHWRegs(NULL, 0x202A04, (u8*)®Data, 4);
#ifndef HID_H
#define HID_H
+#define HID_SHAREDMEM_DEFAULT (0x10000000)
+
#define CPAD_X(v) ((s16)((v)&0xFFFF))
#define CPAD_Y(v) ((s16)(((v>>16))&0xFFFF))
PAD_Y = (1<<11)
}PAD_KEY;
-Result HIDUSER_GetInfo(Handle handle, Handle* outMemHandle);
-Result HIDUSER_Init(Handle handle);
+extern Handle hidMemHandle;
+extern vu32* hidSharedMem;
+
+void hidInit(u32* sharedMem);
+void hidExit();
+
+Result HIDUSER_GetInfo(Handle* handle, Handle* outMemHandle);
+Result HIDUSER_Init(Handle* handle);
#endif
#include <string.h>
#include <ctr/types.h>
#include <ctr/HID.h>
+#include <ctr/srv.h>
#include <ctr/svc.h>
-Result HIDUSER_GetInfo(Handle handle, Handle* outMemHandle)
+Handle hidHandle;
+Handle hidMemHandle;
+
+vu32* hidSharedMem;
+
+void hidInit(u32* sharedMem)
+{
+ if(!sharedMem)sharedMem=(u32*)HID_SHAREDMEM_DEFAULT;
+
+ srv_getServiceHandle(NULL, &hidHandle, "hid:USER");
+
+ HIDUSER_GetInfo(NULL, &hidMemHandle);
+ hidSharedMem=sharedMem;
+ svc_mapMemoryBlock(hidMemHandle, (u32)hidSharedMem, 0x1, 0x10000000);
+
+ HIDUSER_Init(NULL);
+}
+
+void hidExit()
+{
+ svc_unmapMemoryBlock(hidMemHandle, (u32)hidSharedMem);
+ svc_closeHandle(hidMemHandle);
+ svc_closeHandle(hidHandle);
+}
+
+Result HIDUSER_GetInfo(Handle* handle, Handle* outMemHandle)
{
+ if(!handle)handle=&hidHandle;
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xa0000; //request header code
Result ret=0;
- if((ret=svc_sendSyncRequest(handle)))return ret;
+ if((ret=svc_sendSyncRequest(*handle)))return ret;
if(outMemHandle)*outMemHandle=cmdbuf[3];
return cmdbuf[1];
}
-Result HIDUSER_Init(Handle handle)
+Result HIDUSER_Init(Handle* handle)
{
+ if(!handle)handle=&hidHandle;
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x110000; //request header code
Result ret=0;
- if((ret=svc_sendSyncRequest(handle)))return ret;
+ if((ret=svc_sendSyncRequest(*handle)))return ret;
return cmdbuf[1];
}
}
}
-Handle hidHandle;
-Handle hidMemHandle;
-
-void hidInit()
-{
- srv_getServiceHandle(NULL, &hidHandle, "hid:USER");
- HIDUSER_GetInfo(hidHandle, &hidMemHandle);
- svc_mapMemoryBlock(hidMemHandle, 0x10000000, 0x1, 0x10000000);
-
- HIDUSER_Init(hidHandle);
-}
-
-void hidExit()
-{
- svc_unmapMemoryBlock(hidMemHandle, 0x10000000);
- svc_closeHandle(hidMemHandle);
- svc_closeHandle(hidHandle);
-}
-
int main()
{
initSrv();
gspGpuInit();
- hidInit();
+ hidInit(NULL);
Handle fsuHandle;
srv_getServiceHandle(NULL, &fsuHandle, "fs:USER");
while(!aptGetStatus())
{
- u32 PAD=((u32*)0x10000000)[7];
+ u32 PAD=hidSharedMem[7];
renderEffect();
swapBuffers();
copyBuffer();