PS2SDK
PS2 Homebrew Libraries
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 <iopcontrol.h>
22 #include "libmouse.h"
23 
24 static SifRpcClientData_t mouseif __attribute__((aligned(64)));
25 static 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 
41 int PS2MouseInit(void)
42 
43 {
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 
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 
83 int 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 
104 int 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 
114 u32 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 
124 int 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 
139 float 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 
153 int 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 
167 int 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 
183 int 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 
195 int 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 
204 u32 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 
215 u32 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 
226 int 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 
237 u32 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 
kernel.h
PS2MouseSetReadMode
int PS2MouseSetReadMode(u32 readMode)
Definition: libmouse.c:83
PS2MouseRead
int PS2MouseRead(PS2MouseData *data)
Definition: libmouse.c:63
iopcontrol.h
PS2MouseInit
int PS2MouseInit(void)
Definition: libmouse.c:41
PS2MouseGetReadMode
u32 PS2MouseGetReadMode()
Definition: libmouse.c:93
_mouse_data
Definition: ps2mouse.h:21
tamtypes.h
HasIopRebootedSinceLastCall
static int HasIopRebootedSinceLastCall(void)
Definition: iopcontrol.h:47
stdio.h
t_SifRpcClientData
Definition: sifrpc-common.h:134
__attribute__
Definition: gif_registers.h:38
mbounds
Definition: libmouse.c:29
libmouse.h