sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
libmouse.c
Go to the documentation of this file.
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright 2001-2004, ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
11
15
16#include <stdio.h>
17#include <tamtypes.h>
18#include <sifrpc.h>
19#include <kernel.h>
20#include <string.h>
21#include <iopcontrol.h>
22#include "libmouse.h"
23
24static SifRpcClientData_t mouseif __attribute__((aligned(64)));
25static union {
26 char buffer[128];
27 u32 mode;
28 u32 accel;
29 u32 thres;
30 struct mbounds {
31 s32 minx, maxx;
32 s32 miny, maxy;
33 } bounds;
34 struct {
35 s32 x, y;
36 } pos;
37 u32 data;
38 u32 time;
39} buffer __attribute__((aligned(64)));
40
41int PS2MouseInit(void)
42
43{
44 if (HasIopRebootedSinceLastCall())
45 memset(&mouseif, 0, sizeof(mouseif));
46
47 if(mouseif.server)
48 {
49 printf("PS2Mouse Library already initialised\n");
50 return 0;
51 }
52
53 do {
54 if (sceSifBindRpc(&mouseif, PS2MOUSE_BIND_RPC_ID, 0) < 0) {
55 return -1;
56 }
57 nopdelay();
58 } while(!mouseif.server);
59
60 return 1;
61}
62
63int PS2MouseRead(PS2MouseData *data)
64
65{
66 u8* uncached = UNCACHED_SEG(buffer.buffer);
67
68 if(!data)
69 {
70 return -1;
71 }
72
73 if (sceSifCallRpc(&mouseif, PS2MOUSE_READ, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
74 return -1;
75
76
77 memcpy(data, uncached, sizeof(PS2MouseData));
78 // printf("MouseRead %d %d %d %d\n", data->x, data->y, data->wheel, data->buttons);
79
80 return 1;
81}
82
83int PS2MouseSetReadMode(u32 readMode)
84
85{
86 buffer.mode = readMode;
87 if (sceSifCallRpc(&mouseif, PS2MOUSE_SETREADMODE, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
88 return -1;
89
90 return 1;
91}
92
94
95{
96 u32 *uncached = (u32 *) UNCACHED_SEG(&buffer.mode);
97
98 if (sceSifCallRpc(&mouseif, PS2MOUSE_GETREADMODE, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
99 return 0xFF;
100
101 return uncached[0];
102}
103
104int PS2MouseSetThres(u32 thres)
105
106{
107 buffer.thres = thres;
108 if (sceSifCallRpc(&mouseif, PS2MOUSE_SETTHRES, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
109 return -1;
110
111 return 1;
112}
113
114u32 PS2MouseGetThres()
115
116{
117 u32* uncached = (u32 *) UNCACHED_SEG(&buffer.thres);
118 if (sceSifCallRpc(&mouseif, PS2MOUSE_GETTHRES, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
119 return 0;
120
121 return uncached[0];
122}
123
124int PS2MouseSetAccel(float accel)
125
126{
127 u32 accel_fixed;
128
129 if(accel < 0) return -1;
130
131 accel_fixed = (u32) (accel * 65536.0);
132 buffer.accel = accel_fixed;
133 if (sceSifCallRpc(&mouseif, PS2MOUSE_SETACCEL, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
134 return -1;
135
136 return 1;
137}
138
139float PS2MouseGetAccel()
140
141{
142 u32* uncached = (u32 *) UNCACHED_SEG(&buffer.accel);
143 u32 accel_fixed;
144
145 if (sceSifCallRpc(&mouseif, PS2MOUSE_GETACCEL, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
146 return -1;
147
148 accel_fixed = uncached[0];
149
150 return ((float) accel_fixed) / 65536.0 ;
151}
152
153int PS2MouseSetBoundary(int minx, int maxx, int miny, int maxy)
154
155{
156 buffer.bounds.minx = minx;
157 buffer.bounds.maxx = maxx;
158 buffer.bounds.miny = miny;
159 buffer.bounds.maxy = maxy;
160
161 if (sceSifCallRpc(&mouseif, PS2MOUSE_SETBOUNDARY, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
162 return -1;
163
164 return 1;
165}
166
167int PS2MouseGetBoundary(int *minx, int *maxx, int *miny, int *maxy)
168
169{
170 struct mbounds* uncached = (struct mbounds *) UNCACHED_SEG(&buffer.bounds);
171
172 if (sceSifCallRpc(&mouseif, PS2MOUSE_GETBOUNDARY, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
173 return -1;
174
175 *minx = uncached->minx;
176 *maxx = uncached->maxx;
177 *miny = uncached->miny;
178 *maxy = uncached->maxy;
179
180 return 1;
181}
182
183int PS2MouseSetPosition(int x, int y)
184
185{
186 buffer.pos.x = x;
187 buffer.pos.y = y;
188
189 if (sceSifCallRpc(&mouseif, PS2MOUSE_SETPOSITION, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
190 return -1;
191
192 return 1;
193}
194
195int PS2MouseReset()
196
197{
198 if (sceSifCallRpc(&mouseif, PS2MOUSE_RESET, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
199 return -1;
200
201 return 1;
202}
203
204u32 PS2MouseEnum()
205
206{
207 u32* uncached = (u32 *) UNCACHED_SEG(&buffer.data);
208
209 if (sceSifCallRpc(&mouseif, PS2MOUSE_ENUM, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
210 return -1;
211
212 return uncached[0];
213}
214
215u32 PS2MouseGetVersion()
216
217{
218 u32* uncached = (u32 *) UNCACHED_SEG(&buffer.data);
219
220 if (sceSifCallRpc(&mouseif, PS2MOUSE_GETVERSION, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
221 return -1;
222
223 return uncached[0];
224}
225
226int PS2MouseSetDblClickTime(u32 msec)
227
228{
229 buffer.time = msec;
230
231 if (sceSifCallRpc(&mouseif, PS2MOUSE_SETDBLCLICKTIME, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
232 return -1;
233
234 return 1;
235}
236
237u32 PS2MouseGetDblClickTIme()
238
239{
240 u32* uncached = (u32 *) UNCACHED_SEG(&buffer.time);
241
242 if (sceSifCallRpc(&mouseif, PS2MOUSE_GETDBLCLICKTIME, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
243 return -1;
244
245 return uncached[0];
246}
247
int PS2MouseRead(PS2MouseData *)
Definition libmouse.c:63
int PS2MouseSetReadMode(u32 readMode)
Definition libmouse.c:83
int PS2MouseInit(void)
Definition libmouse.c:41
u32 PS2MouseGetReadMode()
Definition libmouse.c:93