sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
freepad.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2007 Lukasz Bruun <mail@lukasz.dk>
3 *
4 * See the file LICENSE included with this distribution for licensing terms.
5 */
6
12
13#ifndef __FREEPAD_H__
14#define __FREEPAD_H__
15
16#include "irx.h"
17#include "types.h"
18
19#define MODNAME "freepad"
20#define M_PRINTF(format, args...) printf(MODNAME ": " format, ## args)
21#define M_KPRINTF(format, args...) Kprintf(MODNAME ": " format, ## args)
22
23#ifdef DEBUG
24#define D_PRINTF(format, args...) printf(MODNAME ": " format, ## args)
25#else
26#define D_PRINTF(a...) (void)0
27#endif
28
29#define PADMAN_THPRI_LO 46
30#define PADMAN_THPRI_HI 20
31
32#define SB_STAT *((volatile unsigned int*)0xBD000040)
33
34/*
35 * Pad states
36 */
37#define PAD_STATE_DISCONN 0x00
38#define PAD_STATE_FINDPAD 0x01
39#define PAD_STATE_FINDCTP1 0x02
40#define PAD_STATE_EXECCMD 0x05
41#define PAD_STATE_STABLE 0x06
42#define PAD_STATE_ERROR 0x07
43
44/*
45 * Pad request states
46 */
47#define PAD_RSTAT_COMPLETE 0x00
48#define PAD_RSTAT_FAILED 0x01
49#define PAD_RSTAT_BUSY 0x02
50
51/*
52 * Connected pad type
53 */
54#define PAD_TYPE_NEJICON 0x2
55#define PAD_TYPE_KONAMIGUN 0x3
56#define PAD_TYPE_DIGITAL 0x4
57#define PAD_TYPE_ANALOG 0x5
58#define PAD_TYPE_NAMCOGUN 0x6
59#define PAD_TYPE_DUALSHOCK 0x7
60
61#define PAD_MODEL_DUALSHOCK 0x1
62#define PAD_MODEL_DUALSHOCK2 0x3
63
64#define MODE_CONFIG_NO_PAD 0x0
65#define MODE_CONFIG_QUERY_PAD 0x1
66#define MODE_CONFIG_READY 0x2
67
68// PAD Tasks
69#define TASK_NONE 0
70#define TASK_UPDATE_PAD 1
71#define TASK_QUERY_PAD 2
72#define TASK_PORT_CLOSE 3
73#define TASK_SET_MAIN_MODE 4
74#define TASK_SET_ACT_ALIGN 5
75#define TASK_SET_BUTTON_INFO 6
76#define TASK_SET_VREF_PARAM 7
77
78// Main event flags
79#define EF_UPDATE_PAD 0x0001
80#define EF_QUERY_PAD 0x0002
81
82#define EF_SET_MAIN_MODE 0x0008
83#define EF_SET_ACT_ALIGN 0x0010
84#define EF_SET_SET_BUTTON_INFO 0x0020
85#define EF_SET_VREF_PARAM 0x0040
86#define EF_PAD_TRANSFER_START 0x0080
87#define EF_PAD_TRANSFER_DONE 0x0100
88#define EF_TASK_DONE 0x0200
89#define EF_PORT_CLOSE 0x0400
90#define EF_EXIT_THREAD 0x1000
91
92// Vblank event flags
93#define EF_VB_TRANSFER 0x0001
94#define EF_VB_TRANSFER_DONE 0x0004
95#define EF_VB_WAIT_THREAD_EXIT 0x0008
96
97// Global Types
98typedef struct
99{
100 int padEnd;
101 int eventflag;
102 int init;
103 int stopTransfer;
104 int tid_1;
105 int tid_2;
107
108typedef struct
109{
110 u8 data[32];
111 u32 actDirData[2];
112 u32 actAlignData[2];
113 u32 actData[4];
114 u32 combData[4];
115 u32 modeTable[2];
116 u32 frame;
117 u32 findPadRetries;
118 u32 length;
119 u8 modeConfig;
120 u8 modeCurId;
121 u8 model;
122 u8 buttonDataReady;
123 u8 nrOfModes;
124 u8 modeCurOffs;
125 u8 nrOfActuators;
126 u8 numActComb;
127 u8 val_c6;
128 u8 mode;
129 u8 lock;
130 u8 actDirSize;
131 u8 state;
132 u8 reqState;
133 u8 currentTask;
134 u8 runTask;
135 u8 stat70bit;
136 u8 padding[11];
138
139typedef struct
140{
141 u32 frame;
142 u8 state;
143 u8 reqState;
144 u8 ok;
145 u8 unkn7;
146 u8 data[32];
147 u32 length;
148 u8 request;
150 u8 CTP;
155 u8 errorCount;
156 u8 unk49[15];
158
159typedef struct
160{
161 ee_paddata_t ee_pdata __attribute__((aligned(4)));
162 ee_old_paddata_t ee_old_pdata __attribute__((aligned(4)));
163 u8 modeConfig;
164 u8 modeCurId;
165 u8 model;
166 u8 numModes;
167 u8 modeCurOffs;
168 u8 numActuators;
169 u8 numActComb;
170 u8 disconnected;
171 union {
172 u8 data[4][4];
173 u32 data32[4];
174 } actData;
175 union {
176 u8 data[4][4];
177 u32 data32[4];
178 } combData;
179 union {
180 u16 data[4];
181 u32 data32[2];
182 } modeTable;
183 u8 buttonInfo[4];
184 u8 buttonMask[4];
185 u8 modeParam[12];
186 u16 val_c4; // unused
187 u16 val_c6;
188 u8 inbuffer[32];
189 u8 outbuffer[32];
190 u8 buttonStatus[32];
191 u32 buttonDataReady;
192 u8 mode;
193 u8 lock;
194 union {
195 u8 data[8];
196 u32 data32[8 / sizeof(u32)];
197 } ee_actDirectData;
198 s16 ee_actDirectSize;
199 union {
200 u8 data[8];
201 u32 data32[8 / sizeof(u32)];
202 } ee_actAlignData;
203 u16 state;
204 u16 reqState;
205 u32 frame;
206 u32 padarea_ee_addr;
207 u32 findPadRetries;
208 s32 updatepadTid;
209 s32 querypadTid;
210 s32 unused158; // probably unused thread id
211 s32 setmainmodeTid;
212 s32 setactalignTid;
213 s32 setbuttoninfoTid;
214 s32 setvrefparamTid;
215 int eventflag;
216 u16 port;
217 u16 slot;
218 u32 currentTask;
219 u32 runTask;
220 u32 taskTid;
221 u32 stat70bit;
222 u32 val_184; // Set, but unused
223} padState_t;
224
225// Internal functions
226extern void WaitClearEvent(int eventflag, u32 bits, int mode, u32 *resbits_out);
227extern int VblankStart(void *arg);
228extern int VblankEnd(void *arg);
229
230// Exported/RPC functions
231extern s32 padInit(void * ee_addr);
232extern s32 padEnd(void);
233extern s32 padPortClose(s32 port, s32 slot, s32 wait);
234extern s32 padPortOpen(s32 port, s32 slot, s32 pad_area_ee_addr, u32 *buf);
235extern u32 padSetMainMode(u32 port, u32 slot, u32 mode, u32 lock);
236extern u32 padSetActDirect(u32 port, u32 slot, u8 *actData);
237extern u32 padSetActAlign(u32 port, u32 slot, const u8 *actData);
238extern u32 padGetButtonMask(u32 port, u32 slot);
239extern u32 padSetButtonInfo(u32 port, u32 slot, u32 info);
240extern u32 padSetVrefParam(u32 port, u32 slot, const u8 *vparam);
241extern s32 padInfoAct(u32 port, u32 slot, s32 act, u32 val);
242extern s32 padInfoComb(u32 port, u32 slot, s32 listno, u32 offs);
243extern s32 padInfoMode(u32 port, u32 slot, s32 term, u32 offs);
244extern u32 padGetPortMax(void);
245extern u32 padGetSlotMax(u32 port);
246extern u32 padGetModVersion(void);
247
248#endif
int padGetPortMax(void)
Definition libpad.c:744
int padPortOpen(int port, int slot, void *padArea)
Definition libpad.c:465
int padInfoMode(int port, int slot, int infoMode, int index)
Definition libpad.c:808
unsigned char padInfoAct(int port, int slot, int actuator, int cmd)
Definition libpad.c:975
int padGetModVersion()
Definition libpad.c:795
int padInit(int mode)
Definition libpad.c:307
int padSetActDirect(int port, int slot, const char actAlign[6])
Definition libpad.c:1059
int padPortClose(int port, int slot)
Definition libpad.c:577
int padEnd(void)
Definition libpad.c:434
int padSetMainMode(int port, int slot, int mode, int lock)
Definition libpad.c:869
int padGetSlotMax(int port)
Definition libpad.c:769
int padSetActAlign(int port, int slot, const char actAlign[6])
Definition libpad.c:1028