basic HID implementation
This commit is contained in:
parent
0a6669dc01
commit
345b7208cd
@ -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
29
libctru/include/ctr/HID.h
Normal 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
|
@ -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);
|
||||
|
@ -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
21
libctru/source/HID.c
Normal 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...
|
||||
}
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user