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