basic HID implementation

This commit is contained in:
smea 2014-01-19 13:33:28 +01:00
parent 0a6669dc01
commit 345b7208cd
6 changed files with 69 additions and 0 deletions

View 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);

29
libctru/include/ctr/HID.h Normal file
View File

@ -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

View 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);

View 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;

21
libctru/source/HID.c Normal file
View File

@ -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...
}

View 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: