comparison src/video/fbcon/SDL_fbelo.c @ 1895:c121d94672cb

SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 10 Jul 2006 21:04:37 +0000
parents d910939febfa
children e27bdcc80744
comparison
equal deleted inserted replaced
1894:c69cee13dd76 1895:c121d94672cb
43 static int ELO_MAX_X = 3670; 43 static int ELO_MAX_X = 3670;
44 static int ELO_MIN_Y = 500; 44 static int ELO_MIN_Y = 500;
45 static int ELO_MAX_Y = 3540; 45 static int ELO_MAX_Y = 3540;
46 46
47 #define ELO_SNAP_SIZE 6 47 #define ELO_SNAP_SIZE 6
48 #define ELO_TOUCH_BYTE 'T' 48 #define ELO_TOUCH_BYTE 'T'
49 #define ELO_ID 'I' 49 #define ELO_ID 'I'
50 #define ELO_MODE 'M' 50 #define ELO_MODE 'M'
51 #define ELO_PARAMETER 'P' 51 #define ELO_PARAMETER 'P'
52 #define ELO_REPORT 'B' 52 #define ELO_REPORT 'B'
53 #define ELO_ACK 'A' 53 #define ELO_ACK 'A'
54 54
55 #define ELO_INIT_CHECKSUM 0xAA 55 #define ELO_INIT_CHECKSUM 0xAA
56 56
57 #define ELO_BTN_PRESS 0x01 57 #define ELO_BTN_PRESS 0x01
58 #define ELO_STREAM 0x02 58 #define ELO_STREAM 0x02
59 #define ELO_BTN_RELEASE 0x04 59 #define ELO_BTN_RELEASE 0x04
60 60
61 #define ELO_TOUCH_MODE 0x01 61 #define ELO_TOUCH_MODE 0x01
62 #define ELO_STREAM_MODE 0x02 62 #define ELO_STREAM_MODE 0x02
76 #define ELO_UNTOUCH_DELAY 5 76 #define ELO_UNTOUCH_DELAY 5
77 #define ELO_REPORT_DELAY 1 77 #define ELO_REPORT_DELAY 1
78 78
79 /* eloParsePacket 79 /* eloParsePacket
80 */ 80 */
81 int eloParsePacket(unsigned char* mousebuf, int* dx, int* dy, int* button_state) { 81 int
82 static int elo_button = 0; 82 eloParsePacket(unsigned char *mousebuf, int *dx, int *dy, int *button_state)
83 static int last_x = 0; 83 {
84 static int last_y = 0; 84 static int elo_button = 0;
85 int x,y; 85 static int last_x = 0;
86 86 static int last_y = 0;
87 /* Check if we have a touch packet */ 87 int x, y;
88 if (mousebuf[1] != ELO_TOUCH_BYTE) { 88
89 return 0; 89 /* Check if we have a touch packet */
90 } 90 if (mousebuf[1] != ELO_TOUCH_BYTE) {
91 91 return 0;
92 x = ((mousebuf[4] << 8) | mousebuf[3]); 92 }
93 y = ((mousebuf[6] << 8) | mousebuf[5]); 93
94 94 x = ((mousebuf[4] << 8) | mousebuf[3]);
95 if((SDL_abs(x - last_x) > ELO_SNAP_SIZE) || (SDL_abs(y - last_y) > ELO_SNAP_SIZE)) { 95 y = ((mousebuf[6] << 8) | mousebuf[5]);
96 *dx = ((mousebuf[4] << 8) | mousebuf[3]); 96
97 *dy = ((mousebuf[6] << 8) | mousebuf[5]); 97 if ((SDL_abs(x - last_x) > ELO_SNAP_SIZE)
98 } 98 || (SDL_abs(y - last_y) > ELO_SNAP_SIZE)) {
99 else { 99 *dx = ((mousebuf[4] << 8) | mousebuf[3]);
100 *dx = last_x; 100 *dy = ((mousebuf[6] << 8) | mousebuf[5]);
101 *dy = last_y; 101 } else {
102 } 102 *dx = last_x;
103 103 *dy = last_y;
104 last_x = *dx; 104 }
105 last_y = *dy; 105
106 106 last_x = *dx;
107 if ( (mousebuf[2] & 0x07) == ELO_BTN_PRESS ) { 107 last_y = *dy;
108 elo_button = 1; 108
109 } 109 if ((mousebuf[2] & 0x07) == ELO_BTN_PRESS) {
110 if ( (mousebuf[2] & 0x07) == ELO_BTN_RELEASE ) { 110 elo_button = 1;
111 elo_button = 0; 111 }
112 } 112 if ((mousebuf[2] & 0x07) == ELO_BTN_RELEASE) {
113 113 elo_button = 0;
114 *button_state = elo_button; 114 }
115 return 1; 115
116 *button_state = elo_button;
117 return 1;
116 } 118 }
117 119
118 /* Convert the raw coordinates from the ELO controller 120 /* Convert the raw coordinates from the ELO controller
119 to a screen position. 121 to a screen position.
120 */ 122 */
121 void eloConvertXY(_THIS, int *dx, int *dy) { 123 void
122 int input_x = *dx; 124 eloConvertXY(_THIS, int *dx, int *dy)
123 int input_y = *dy; 125 {
124 int width = ELO_MAX_X - ELO_MIN_X; 126 int input_x = *dx;
125 int height = ELO_MAX_Y - ELO_MIN_Y; 127 int input_y = *dy;
126 128 int width = ELO_MAX_X - ELO_MIN_X;
127 *dx = ((int)cache_vinfo.xres - ((int)cache_vinfo.xres * (input_x - ELO_MIN_X)) / width); 129 int height = ELO_MAX_Y - ELO_MIN_Y;
128 *dy = (cache_vinfo.yres * (input_y - ELO_MIN_Y)) / height; 130
131 *dx =
132 ((int) cache_vinfo.xres -
133 ((int) cache_vinfo.xres * (input_x - ELO_MIN_X)) / width);
134 *dy = (cache_vinfo.yres * (input_y - ELO_MIN_Y)) / height;
129 } 135 }
130 136
131 137
132 /* eloGetPacket 138 /* eloGetPacket
133 */ 139 */
134 int eloGetPacket(unsigned char* buffer, int* buffer_p, int* checksum, int fd) { 140 int
135 int num_bytes; 141 eloGetPacket(unsigned char *buffer, int *buffer_p, int *checksum, int fd)
136 int ok; 142 {
137 143 int num_bytes;
138 if(fd == 0) { 144 int ok;
139 num_bytes = ELO_PACKET_SIZE; 145
140 } 146 if (fd == 0) {
141 else { 147 num_bytes = ELO_PACKET_SIZE;
142 num_bytes = read(fd, 148 } else {
143 (char *) (buffer + *buffer_p), 149 num_bytes = read(fd,
144 ELO_PACKET_SIZE - *buffer_p); 150 (char *) (buffer + *buffer_p),
145 } 151 ELO_PACKET_SIZE - *buffer_p);
146 152 }
147 if (num_bytes < 0) { 153
148 #ifdef DEBUG_MOUSE 154 if (num_bytes < 0) {
149 fprintf(stderr, "System error while reading from Elographics touchscreen.\n"); 155 #ifdef DEBUG_MOUSE
150 #endif 156 fprintf(stderr,
151 return 0; 157 "System error while reading from Elographics touchscreen.\n");
152 } 158 #endif
153 159 return 0;
154 while (num_bytes) { 160 }
155 if ((*buffer_p == 0) && (buffer[0] != ELO_START_BYTE)) { 161
156 SDL_memcpy(&buffer[0], &buffer[1], num_bytes-1); 162 while (num_bytes) {
157 } 163 if ((*buffer_p == 0) && (buffer[0] != ELO_START_BYTE)) {
158 else { 164 SDL_memcpy(&buffer[0], &buffer[1], num_bytes - 1);
159 if (*buffer_p < ELO_PACKET_SIZE-1) { 165 } else {
160 *checksum = *checksum + buffer[*buffer_p]; 166 if (*buffer_p < ELO_PACKET_SIZE - 1) {
161 *checksum = *checksum % 256; 167 *checksum = *checksum + buffer[*buffer_p];
162 } 168 *checksum = *checksum % 256;
163 (*buffer_p)++; 169 }
164 } 170 (*buffer_p)++;
165 num_bytes--; 171 }
166 } 172 num_bytes--;
167 173 }
168 if (*buffer_p == ELO_PACKET_SIZE) { 174
169 ok = (*checksum == buffer[ELO_PACKET_SIZE-1]); 175 if (*buffer_p == ELO_PACKET_SIZE) {
170 *checksum = ELO_INIT_CHECKSUM; 176 ok = (*checksum == buffer[ELO_PACKET_SIZE - 1]);
171 *buffer_p = 0; 177 *checksum = ELO_INIT_CHECKSUM;
172 178 *buffer_p = 0;
173 if (!ok) { 179
174 return 0; 180 if (!ok) {
175 } 181 return 0;
176 182 }
177 return 1; 183
178 } 184 return 1;
179 else { 185 } else {
180 return 0; 186 return 0;
181 } 187 }
182 } 188 }
183 189
184 /* eloSendPacket 190 /* eloSendPacket
185 */ 191 */
186 192
187 int eloSendPacket(unsigned char* packet, int fd) 193 int
188 { 194 eloSendPacket(unsigned char *packet, int fd)
189 int i, result; 195 {
190 int sum = ELO_INIT_CHECKSUM; 196 int i, result;
191 197 int sum = ELO_INIT_CHECKSUM;
192 packet[0] = ELO_START_BYTE; 198
193 for (i = 0; i < ELO_PACKET_SIZE-1; i++) { 199 packet[0] = ELO_START_BYTE;
194 sum += packet[i]; 200 for (i = 0; i < ELO_PACKET_SIZE - 1; i++) {
195 sum &= 0xFF; 201 sum += packet[i];
196 } 202 sum &= 0xFF;
197 packet[ELO_PACKET_SIZE-1] = sum; 203 }
198 204 packet[ELO_PACKET_SIZE - 1] = sum;
199 result = write(fd, packet, ELO_PACKET_SIZE); 205
200 206 result = write(fd, packet, ELO_PACKET_SIZE);
201 if (result != ELO_PACKET_SIZE) { 207
202 #ifdef DEBUG_MOUSE 208 if (result != ELO_PACKET_SIZE) {
203 printf("System error while sending to Elographics touchscreen.\n"); 209 #ifdef DEBUG_MOUSE
204 #endif 210 printf("System error while sending to Elographics touchscreen.\n");
205 return 0; 211 #endif
206 } 212 return 0;
207 else { 213 } else {
208 return 1; 214 return 1;
209 } 215 }
210 } 216 }
211 217
212 218
213 /* eloWaitForInput 219 /* eloWaitForInput
214 */ 220 */
215 int eloWaitForInput(int fd, int timeout) 221 int
216 { 222 eloWaitForInput(int fd, int timeout)
217 fd_set readfds; 223 {
218 struct timeval to; 224 fd_set readfds;
219 int r; 225 struct timeval to;
220 226 int r;
221 FD_ZERO(&readfds); 227
222 FD_SET(fd, &readfds); 228 FD_ZERO(&readfds);
223 to.tv_sec = 0; 229 FD_SET(fd, &readfds);
224 to.tv_usec = timeout; 230 to.tv_sec = 0;
225 231 to.tv_usec = timeout;
226 r = select(FD_SETSIZE, &readfds, NULL, NULL, &to); 232
227 return r; 233 r = select(FD_SETSIZE, &readfds, NULL, NULL, &to);
234 return r;
228 } 235 }
229 236
230 /* eloWaitReply 237 /* eloWaitReply
231 */ 238 */
232 int eloWaitReply(unsigned char type, unsigned char *reply, int fd) { 239 int
233 int ok; 240 eloWaitReply(unsigned char type, unsigned char *reply, int fd)
234 int i, result; 241 {
235 int reply_p = 0; 242 int ok;
236 int sum = ELO_INIT_CHECKSUM; 243 int i, result;
237 244 int reply_p = 0;
238 i = ELO_MAX_TRIALS; 245 int sum = ELO_INIT_CHECKSUM;
239 do { 246
240 ok = 0; 247 i = ELO_MAX_TRIALS;
241 248 do {
242 result = eloWaitForInput(fd, ELO_MAX_WAIT); 249 ok = 0;
243 250
244 if (result > 0) { 251 result = eloWaitForInput(fd, ELO_MAX_WAIT);
245 ok = eloGetPacket(reply, &reply_p, &sum, fd); 252
246 253 if (result > 0) {
247 if (ok && reply[1] != type && type != ELO_PARAMETER) { 254 ok = eloGetPacket(reply, &reply_p, &sum, fd);
248 #ifdef DEBUG_MOUSE 255
249 fprintf(stderr, "Wrong reply received\n"); 256 if (ok && reply[1] != type && type != ELO_PARAMETER) {
250 #endif 257 #ifdef DEBUG_MOUSE
251 ok = 0; 258 fprintf(stderr, "Wrong reply received\n");
252 } 259 #endif
253 } 260 ok = 0;
254 else { 261 }
255 #ifdef DEBUG_MOUSE 262 } else {
256 fprintf(stderr, "No input!\n"); 263 #ifdef DEBUG_MOUSE
257 #endif 264 fprintf(stderr, "No input!\n");
258 } 265 #endif
259 266 }
260 if (result == 0) { 267
261 i--; 268 if (result == 0) {
262 } 269 i--;
263 } while(!ok && (i>0)); 270 }
264 271 }
265 return ok; 272 while (!ok && (i > 0));
273
274 return ok;
266 } 275 }
267 276
268 277
269 /* eloWaitAck 278 /* eloWaitAck
270 */ 279 */
271 280
272 int eloWaitAck(int fd) { 281 int
273 unsigned char packet[ELO_PACKET_SIZE]; 282 eloWaitAck(int fd)
274 int i, nb_errors; 283 {
275 284 unsigned char packet[ELO_PACKET_SIZE];
276 if (eloWaitReply(ELO_ACK, packet, fd)) { 285 int i, nb_errors;
277 for (i = 0, nb_errors = 0; i < 4; i++) { 286
278 if (packet[2 + i] != '0') { 287 if (eloWaitReply(ELO_ACK, packet, fd)) {
279 nb_errors++; 288 for (i = 0, nb_errors = 0; i < 4; i++) {
280 } 289 if (packet[2 + i] != '0') {
281 } 290 nb_errors++;
282 291 }
283 if (nb_errors != 0) { 292 }
284 #ifdef DEBUG_MOUSE 293
285 fprintf(stderr, "Elographics acknowledge packet reports %d errors\n", nb_errors); 294 if (nb_errors != 0) {
286 #endif 295 #ifdef DEBUG_MOUSE
287 } 296 fprintf(stderr,
288 return 1; 297 "Elographics acknowledge packet reports %d errors\n",
289 } 298 nb_errors);
290 else { 299 #endif
291 return 0; 300 }
292 } 301 return 1;
302 } else {
303 return 0;
304 }
293 } 305 }
294 306
295 307
296 /* eloSendQuery -- 308 /* eloSendQuery --
297 */ 309 */
298 int eloSendQuery(unsigned char *request, unsigned char* reply, int fd) { 310 int
299 int ok; 311 eloSendQuery(unsigned char *request, unsigned char *reply, int fd)
300 312 {
301 if (eloSendPacket(request, fd)) { 313 int ok;
302 ok = eloWaitReply(toupper(request[1]), reply, fd); 314
303 if (ok) { 315 if (eloSendPacket(request, fd)) {
304 ok = eloWaitAck(fd); 316 ok = eloWaitReply(toupper(request[1]), reply, fd);
305 } 317 if (ok) {
306 return ok; 318 ok = eloWaitAck(fd);
307 } 319 }
308 else { 320 return ok;
309 return 0; 321 } else {
310 } 322 return 0;
323 }
311 } 324 }
312 325
313 326
314 /* eloSendControl 327 /* eloSendControl
315 */ 328 */
316 int eloSendControl(unsigned char* control, int fd) { 329 int
317 if (eloSendPacket(control, fd)) { 330 eloSendControl(unsigned char *control, int fd)
318 return eloWaitAck(fd); 331 {
319 } 332 if (eloSendPacket(control, fd)) {
320 else { 333 return eloWaitAck(fd);
321 return 0; 334 } else {
322 } 335 return 0;
336 }
323 } 337 }
324 338
325 /* eloInitController 339 /* eloInitController
326 */ 340 */
327 int eloInitController(int fd) { 341 int
328 unsigned char req[ELO_PACKET_SIZE]; 342 eloInitController(int fd)
329 unsigned char reply[ELO_PACKET_SIZE]; 343 {
330 const char *buffer = NULL; 344 unsigned char req[ELO_PACKET_SIZE];
331 int result = 0; 345 unsigned char reply[ELO_PACKET_SIZE];
332 346 const char *buffer = NULL;
333 struct termios mouse_termios; 347 int result = 0;
334 348
335 /* try to read the calibration values */ 349 struct termios mouse_termios;
336 buffer = SDL_getenv("SDL_ELO_MIN_X"); 350
337 if(buffer) { 351 /* try to read the calibration values */
338 ELO_MIN_X = SDL_atoi(buffer); 352 buffer = SDL_getenv("SDL_ELO_MIN_X");
339 } 353 if (buffer) {
340 buffer = SDL_getenv("SDL_ELO_MAX_X"); 354 ELO_MIN_X = SDL_atoi(buffer);
341 if(buffer) { 355 }
342 ELO_MAX_X = SDL_atoi(buffer); 356 buffer = SDL_getenv("SDL_ELO_MAX_X");
343 } 357 if (buffer) {
344 buffer = SDL_getenv("SDL_ELO_MIN_Y"); 358 ELO_MAX_X = SDL_atoi(buffer);
345 if(buffer) { 359 }
346 ELO_MIN_Y = SDL_atoi(buffer); 360 buffer = SDL_getenv("SDL_ELO_MIN_Y");
347 } 361 if (buffer) {
348 buffer = SDL_getenv("SDL_ELO_MAX_Y"); 362 ELO_MIN_Y = SDL_atoi(buffer);
349 if(buffer) { 363 }
350 ELO_MAX_Y = SDL_atoi(buffer); 364 buffer = SDL_getenv("SDL_ELO_MAX_Y");
351 } 365 if (buffer) {
352 366 ELO_MAX_Y = SDL_atoi(buffer);
353 #ifdef DEBUG_MOUSE 367 }
354 fprintf( stderr, "ELO calibration values:\nmin_x: %i\nmax_x: %i\nmin_y: %i\nmax_y: %i\n", 368 #ifdef DEBUG_MOUSE
355 ELO_MIN_X, 369 fprintf(stderr,
356 ELO_MAX_X, 370 "ELO calibration values:\nmin_x: %i\nmax_x: %i\nmin_y: %i\nmax_y: %i\n",
357 ELO_MIN_Y, 371 ELO_MIN_X, ELO_MAX_X, ELO_MIN_Y, ELO_MAX_Y);
358 ELO_MAX_Y); 372 #endif
359 #endif 373
360 374 /* set comm params */
361 /* set comm params */ 375 SDL_memset(&mouse_termios, 0, sizeof(mouse_termios));
362 SDL_memset(&mouse_termios, 0, sizeof(mouse_termios)); 376 mouse_termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
363 mouse_termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; 377 mouse_termios.c_cc[VMIN] = 1;
364 mouse_termios.c_cc[VMIN] = 1; 378 result = tcsetattr(fd, TCSANOW, &mouse_termios);
365 result = tcsetattr(fd, TCSANOW, &mouse_termios); 379
366 380 if (result < 0) {
367 if (result < 0) { 381 #ifdef DEBUG_MOUSE
368 #ifdef DEBUG_MOUSE 382 fprintf(stderr, "Unable to configure Elographics touchscreen port\n");
369 fprintf( stderr, "Unable to configure Elographics touchscreen port\n"); 383 #endif
370 #endif 384 return 0;
371 return 0; 385 }
372 } 386
373 387 SDL_memset(req, 0, ELO_PACKET_SIZE);
374 SDL_memset(req, 0, ELO_PACKET_SIZE); 388 req[1] = tolower(ELO_PARAMETER);
375 req[1] = tolower(ELO_PARAMETER); 389 if (!eloSendQuery(req, reply, fd)) {
376 if (!eloSendQuery(req, reply, fd)) { 390 #ifdef DEBUG_MOUSE
377 #ifdef DEBUG_MOUSE 391 fprintf(stderr,
378 fprintf( stderr, "Not at the specified rate or model 2310, will continue\n"); 392 "Not at the specified rate or model 2310, will continue\n");
379 #endif 393 #endif
380 } 394 }
381 395
382 SDL_memset(req, 0, ELO_PACKET_SIZE); 396 SDL_memset(req, 0, ELO_PACKET_SIZE);
383 req[1] = tolower(ELO_ID); 397 req[1] = tolower(ELO_ID);
384 if (eloSendQuery(req, reply, fd)) { 398 if (eloSendQuery(req, reply, fd)) {
385 #ifdef DEBUG_MOUSE 399 #ifdef DEBUG_MOUSE
386 fprintf(stderr, "Ok, controller configured!\n"); 400 fprintf(stderr, "Ok, controller configured!\n");
387 #endif 401 #endif
388 } 402 } else {
389 else { 403 #ifdef DEBUG_MOUSE
390 #ifdef DEBUG_MOUSE 404 fprintf(stderr,
391 fprintf( stderr, "Unable to ask Elographics touchscreen identification\n"); 405 "Unable to ask Elographics touchscreen identification\n");
392 #endif 406 #endif
393 return 0; 407 return 0;
394 } 408 }
395 409
396 SDL_memset(req, 0, ELO_PACKET_SIZE); 410 SDL_memset(req, 0, ELO_PACKET_SIZE);
397 req[1] = ELO_MODE; 411 req[1] = ELO_MODE;
398 req[3] = ELO_TOUCH_MODE | ELO_STREAM_MODE | ELO_UNTOUCH_MODE; 412 req[3] = ELO_TOUCH_MODE | ELO_STREAM_MODE | ELO_UNTOUCH_MODE;
399 req[4] = ELO_TRACKING_MODE; 413 req[4] = ELO_TRACKING_MODE;
400 if (!eloSendControl(req, fd)) { 414 if (!eloSendControl(req, fd)) {
401 #ifdef DEBUG_MOUSE 415 #ifdef DEBUG_MOUSE
402 fprintf( stderr, "Unable to change Elographics touchscreen operating mode\n"); 416 fprintf(stderr,
403 #endif 417 "Unable to change Elographics touchscreen operating mode\n");
404 return 0; 418 #endif
405 } 419 return 0;
406 420 }
407 SDL_memset(req, 0, ELO_PACKET_SIZE); 421
408 req[1] = ELO_REPORT; 422 SDL_memset(req, 0, ELO_PACKET_SIZE);
409 req[2] = ELO_UNTOUCH_DELAY; 423 req[1] = ELO_REPORT;
410 req[3] = ELO_REPORT_DELAY; 424 req[2] = ELO_UNTOUCH_DELAY;
411 if (!eloSendControl(req, fd)) { 425 req[3] = ELO_REPORT_DELAY;
412 #ifdef DEBUG_MOUSE 426 if (!eloSendControl(req, fd)) {
413 fprintf( stderr, "Unable to change Elographics touchscreen reports timings\n"); 427 #ifdef DEBUG_MOUSE
414 #endif 428 fprintf(stderr,
415 return 0; 429 "Unable to change Elographics touchscreen reports timings\n");
416 } 430 #endif
417 431 return 0;
418 return 1; 432 }
419 } 433
420 434 return 1;
421 int eloReadPosition(_THIS, int fd, int* x, int* y, int* button_state, int* realx, int* realy) { 435 }
422 unsigned char buffer[ELO_PACKET_SIZE]; 436
423 int pointer = 0; 437 int
424 int checksum = ELO_INIT_CHECKSUM; 438 eloReadPosition(_THIS, int fd, int *x, int *y, int *button_state, int *realx,
425 439 int *realy)
426 while(pointer < ELO_PACKET_SIZE) { 440 {
427 if(eloGetPacket(buffer, &pointer, &checksum, fd)) { 441 unsigned char buffer[ELO_PACKET_SIZE];
428 break; 442 int pointer = 0;
429 } 443 int checksum = ELO_INIT_CHECKSUM;
430 } 444
431 445 while (pointer < ELO_PACKET_SIZE) {
432 if(!eloParsePacket(buffer, realx, realy, button_state)) { 446 if (eloGetPacket(buffer, &pointer, &checksum, fd)) {
433 return 0; 447 break;
434 } 448 }
435 449 }
436 *x = *realx; 450
437 *y = *realy; 451 if (!eloParsePacket(buffer, realx, realy, button_state)) {
438 452 return 0;
439 eloConvertXY(this, x, y); 453 }
440 454
441 return 1; 455 *x = *realx;
442 } 456 *y = *realy;
457
458 eloConvertXY(this, x, y);
459
460 return 1;
461 }
462
463 /* vi: set ts=4 sw=4 expandtab: */