Move button and lcd files to the target tree. uisimulator/sdl has no code anymore
[kugel-rb.git] / firmware / target / hosted / sdl / button-sdl.c
bloba32872d68a77368748af3f2849bfd6b70b861fcb
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2002 by Felix Arends
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include <math.h>
23 #include "sim-ui-defines.h"
24 #include "lcd-charcells.h"
25 #include "lcd-remote.h"
26 #include "config.h"
27 #include "button.h"
28 #include "kernel.h"
29 #include "backlight.h"
30 #include "misc.h"
31 #include "sim_tasks.h"
32 #include "button-sdl.h"
33 #include "backlight.h"
35 #include "debug.h"
37 #ifdef HAVE_TOUCHSCREEN
38 #include "touchscreen.h"
39 static int mouse_coords = 0;
40 #endif
41 /* how long until repeat kicks in */
42 #define REPEAT_START 6
44 /* the speed repeat starts at */
45 #define REPEAT_INTERVAL_START 4
47 /* speed repeat finishes at */
48 #define REPEAT_INTERVAL_FINISH 2
50 #ifdef HAVE_TOUCHSCREEN
51 #define USB_KEY SDLK_c /* SDLK_u is taken by BUTTON_MIDLEFT */
52 #else
53 #define USB_KEY SDLK_u
54 #endif
56 #if defined(IRIVER_H100_SERIES) || defined (IRIVER_H300_SERIES)
57 int _remote_type=REMOTETYPE_H100_LCD;
59 int remote_type(void)
61 return _remote_type;
63 #endif
65 static int xy2button(int x, int y);
67 struct event_queue button_queue;
69 static int btn = 0; /* Hopefully keeps track of currently pressed keys... */
71 #ifdef HAS_BUTTON_HOLD
72 bool hold_button_state = false;
73 bool button_hold(void) {
74 return hold_button_state;
76 #endif
78 #ifdef HAS_REMOTE_BUTTON_HOLD
79 bool remote_hold_button_state = false;
80 bool remote_button_hold(void) {
81 return remote_hold_button_state;
83 #endif
84 static void button_event(int key, bool pressed);
85 extern bool debug_wps;
86 extern bool mapping;
87 static void gui_message_loop(void)
89 SDL_Event event;
90 static int x,y,xybutton = 0;
92 if (SDL_PollEvent(&event))
94 switch(event.type)
96 case SDL_KEYDOWN:
97 button_event(event.key.keysym.sym, true);
98 break;
99 case SDL_KEYUP:
100 button_event(event.key.keysym.sym, false);
101 case SDL_MOUSEBUTTONDOWN:
102 switch ( event.button.button ) {
103 #ifdef HAVE_SCROLLWHEEL
104 case SDL_BUTTON_WHEELUP:
105 button_event( SDLK_UP, true );
106 break;
107 case SDL_BUTTON_WHEELDOWN:
108 button_event( SDLK_DOWN, true );
109 break;
110 #endif
111 case SDL_BUTTON_LEFT:
112 case SDL_BUTTON_MIDDLE:
113 if ( mapping && background ) {
114 x = event.button.x;
115 y = event.button.y;
117 if ( background ) {
118 xybutton = xy2button( event.button.x, event.button.y );
119 if( xybutton )
120 button_event( xybutton, true );
122 break;
123 default:
124 break;
127 if (debug_wps && event.button.button == 1)
129 if ( background )
130 #ifdef HAVE_REMOTE
131 if ( event.button.y < UI_REMOTE_POSY ) /* Main Screen */
132 printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 );
133 else
134 printf("Mouse at: (%d, %d)\n", event.button.x - UI_REMOTE_POSX -1 , event.button.y - UI_REMOTE_POSY - 1 );
135 #else
136 printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 );
137 #endif
138 else
139 if ( event.button.y/display_zoom < LCD_HEIGHT ) /* Main Screen */
140 printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom );
141 #ifdef HAVE_REMOTE
142 else
143 printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom - LCD_HEIGHT );
144 #endif
146 break;
147 case SDL_MOUSEBUTTONUP:
148 switch ( event.button.button ) {
149 /* The scrollwheel button up events are ignored as they are queued immediately */
150 case SDL_BUTTON_LEFT:
151 case SDL_BUTTON_MIDDLE:
152 if ( mapping && background ) {
153 printf(" { SDLK_, %d, %d, %d, \"\" },\n", x,
154 #define SQUARE(x) ((x)*(x))
155 y, (int)sqrt( SQUARE(x-(int)event.button.x)
156 + SQUARE(y-(int)event.button.y)) );
158 if ( background && xybutton ) {
159 button_event( xybutton, false );
160 xybutton = 0;
162 #ifdef HAVE_TOUCHSCREEN
163 else {
164 button_event(BUTTON_TOUCHSCREEN, false);
166 #endif
167 break;
168 default:
169 break;
171 break;
174 case SDL_QUIT:
176 printf("EXIT\n");
177 exit(EXIT_SUCCESS);
178 break;
180 default:
181 /*printf("Unhandled event\n"); */
182 break;
187 static void button_event(int key, bool pressed)
189 int new_btn = 0;
190 static bool usb_connected = false;
191 if (usb_connected && key != USB_KEY)
192 return;
193 switch (key)
196 #ifdef HAVE_TOUCHSCREEN
197 case BUTTON_TOUCHSCREEN:
198 switch (touchscreen_get_mode())
200 case TOUCHSCREEN_POINT:
201 new_btn = BUTTON_TOUCHSCREEN;
202 break;
203 case TOUCHSCREEN_BUTTON:
205 static int touchscreen_buttons[3][3] = {
206 {BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT},
207 {BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT},
208 {BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT},
210 int px_x = ((mouse_coords&0xffff0000)>>16);
211 int px_y = ((mouse_coords&0x0000ffff));
212 new_btn = touchscreen_buttons[px_y/(LCD_HEIGHT/3)][px_x/(LCD_WIDTH/3)];
213 break;
216 break;
217 case SDLK_KP7:
218 case SDLK_7:
219 new_btn = BUTTON_TOPLEFT;
220 break;
221 case SDLK_KP8:
222 case SDLK_8:
223 case SDLK_UP:
224 new_btn = BUTTON_TOPMIDDLE;
225 break;
226 case SDLK_KP9:
227 case SDLK_9:
228 new_btn = BUTTON_TOPRIGHT;
229 break;
230 case SDLK_KP4:
231 case SDLK_u:
232 case SDLK_LEFT:
233 new_btn = BUTTON_MIDLEFT;
234 break;
235 case SDLK_KP5:
236 case SDLK_i:
237 new_btn = BUTTON_CENTER;
238 break;
239 case SDLK_KP6:
240 case SDLK_o:
241 case SDLK_RIGHT:
242 new_btn = BUTTON_MIDRIGHT;
243 break;
244 case SDLK_KP1:
245 case SDLK_j:
246 new_btn = BUTTON_BOTTOMLEFT;
247 break;
248 case SDLK_KP2:
249 case SDLK_k:
250 case SDLK_DOWN:
251 new_btn = BUTTON_BOTTOMMIDDLE;
252 break;
253 case SDLK_KP3:
254 case SDLK_l:
255 new_btn = BUTTON_BOTTOMRIGHT;
256 break;
257 case SDLK_F4:
258 if(pressed)
260 touchscreen_set_mode(touchscreen_get_mode() == TOUCHSCREEN_POINT ? TOUCHSCREEN_BUTTON : TOUCHSCREEN_POINT);
261 printf("Touchscreen mode: %s\n", touchscreen_get_mode() == TOUCHSCREEN_POINT ? "TOUCHSCREEN_POINT" : "TOUCHSCREEN_BUTTON");
263 break;
265 #endif
266 case USB_KEY:
267 if (!pressed)
269 usb_connected = !usb_connected;
270 if (usb_connected)
271 queue_post(&button_queue, SYS_USB_CONNECTED, 0);
272 else
273 queue_post(&button_queue, SYS_USB_DISCONNECTED, 0);
275 return;
277 #ifdef HAS_BUTTON_HOLD
278 case SDLK_h:
279 if(pressed)
281 hold_button_state = !hold_button_state;
282 DEBUGF("Hold button is %s\n", hold_button_state?"ON":"OFF");
284 return;
285 #endif
287 #ifdef HAS_REMOTE_BUTTON_HOLD
288 case SDLK_j:
289 if(pressed)
291 remote_hold_button_state = !remote_hold_button_state;
292 DEBUGF("Remote hold button is %s\n",
293 remote_hold_button_state?"ON":"OFF");
295 return;
296 #endif
298 #if CONFIG_KEYPAD == GIGABEAT_PAD
299 case SDLK_KP4:
300 case SDLK_LEFT:
301 new_btn = BUTTON_LEFT;
302 break;
303 case SDLK_KP6:
304 case SDLK_RIGHT:
305 new_btn = BUTTON_RIGHT;
306 break;
307 case SDLK_KP8:
308 case SDLK_UP:
309 new_btn = BUTTON_UP;
310 break;
311 case SDLK_KP2:
312 case SDLK_DOWN:
313 new_btn = BUTTON_DOWN;
314 break;
315 case SDLK_KP_PLUS:
316 case SDLK_F8:
317 new_btn = BUTTON_POWER;
318 break;
319 case SDLK_ESCAPE:
320 new_btn = BUTTON_POWER;
321 break;
322 case SDLK_KP_ENTER:
323 case SDLK_RETURN:
324 case SDLK_a:
325 new_btn = BUTTON_A;
326 break;
327 case SDLK_KP5:
328 case SDLK_SPACE:
329 new_btn = BUTTON_SELECT;
330 break;
331 case SDLK_KP_PERIOD:
332 case SDLK_INSERT:
333 new_btn = BUTTON_MENU;
334 break;
335 case SDLK_KP9:
336 new_btn = BUTTON_VOL_UP;
337 break;
338 case SDLK_KP3:
339 new_btn = BUTTON_VOL_DOWN;
340 break;
342 #elif CONFIG_KEYPAD == GIGABEAT_S_PAD
343 case SDLK_KP4:
344 case SDLK_LEFT:
345 new_btn = BUTTON_LEFT;
346 break;
347 case SDLK_KP6:
348 case SDLK_RIGHT:
349 new_btn = BUTTON_RIGHT;
350 break;
351 case SDLK_KP8:
352 case SDLK_UP:
353 new_btn = BUTTON_UP;
354 break;
355 case SDLK_KP2:
356 case SDLK_DOWN:
357 new_btn = BUTTON_DOWN;
358 break;
359 case SDLK_F8:
360 case SDLK_ESCAPE:
361 new_btn = BUTTON_POWER;
362 break;
363 case SDLK_KP_PLUS:
364 case SDLK_KP_ENTER:
365 case SDLK_RETURN:
366 new_btn = BUTTON_PLAY;
367 break;
368 case SDLK_KP7:
369 new_btn = BUTTON_BACK;
370 break;
371 case SDLK_KP5:
372 case SDLK_SPACE:
373 new_btn = BUTTON_SELECT;
374 break;
375 case SDLK_KP9:
376 case SDLK_KP_PERIOD:
377 case SDLK_INSERT:
378 new_btn = BUTTON_MENU;
379 break;
381 #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
382 case SDLK_KP4:
383 case SDLK_LEFT:
384 new_btn = BUTTON_LEFT;
385 break;
386 case SDLK_KP6:
387 case SDLK_RIGHT:
388 new_btn = BUTTON_RIGHT;
389 break;
390 case SDLK_KP8:
391 case SDLK_UP:
392 new_btn = BUTTON_UP;
393 break;
394 case SDLK_KP2:
395 case SDLK_DOWN:
396 new_btn = BUTTON_DOWN;
397 break;
398 case SDLK_KP_PLUS:
399 case SDLK_F8:
400 new_btn = BUTTON_PLAY;
401 break;
402 case SDLK_ESCAPE:
403 new_btn = BUTTON_POWER;
404 break;
405 case SDLK_KP_ENTER:
406 case SDLK_RETURN:
407 case SDLK_a:
408 new_btn = BUTTON_POWER;
409 break;
410 case SDLK_KP_DIVIDE:
411 case SDLK_F1:
412 new_btn = BUTTON_REC;
413 break;
414 case SDLK_KP5:
415 case SDLK_SPACE:
416 new_btn = BUTTON_SELECT;
417 break;
419 #elif CONFIG_KEYPAD == IAUDIO_M3_PAD
420 case SDLK_KP4:
421 new_btn = BUTTON_LEFT;
422 break;
423 case SDLK_LEFT:
424 new_btn = BUTTON_RC_REW;
425 break;
426 case SDLK_KP6:
427 new_btn = BUTTON_RIGHT;
428 break;
429 case SDLK_RIGHT:
430 new_btn = BUTTON_RC_FF;
431 break;
432 case SDLK_KP8:
433 new_btn = BUTTON_VOL_UP;
434 break;
435 case SDLK_UP:
436 new_btn = BUTTON_RC_VOL_UP;
437 break;
438 case SDLK_KP2:
439 new_btn = BUTTON_VOL_DOWN;
440 break;
441 case SDLK_DOWN:
442 new_btn = BUTTON_RC_VOL_DOWN;
443 break;
444 case SDLK_KP_PERIOD:
445 new_btn = BUTTON_MODE;
446 break;
447 case SDLK_INSERT:
448 new_btn = BUTTON_RC_MODE;
449 break;
450 case SDLK_KP_DIVIDE:
451 new_btn = BUTTON_REC;
452 break;
453 case SDLK_F1:
454 new_btn = BUTTON_RC_REC;
455 break;
456 case SDLK_KP5:
457 new_btn = BUTTON_PLAY;
458 break;
459 case SDLK_SPACE:
460 new_btn = BUTTON_RC_PLAY;
461 break;
462 case SDLK_KP_ENTER:
463 case SDLK_RETURN:
464 new_btn = BUTTON_RC_MENU;
465 break;
467 #elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
468 || (CONFIG_KEYPAD == IPOD_4G_PAD)
469 case SDLK_KP4:
470 case SDLK_LEFT:
471 new_btn = BUTTON_LEFT;
472 break;
473 case SDLK_KP6:
474 case SDLK_RIGHT:
475 new_btn = BUTTON_RIGHT;
476 break;
477 case SDLK_KP8:
478 case SDLK_UP:
479 new_btn = BUTTON_SCROLL_BACK;
480 break;
481 case SDLK_KP2:
482 case SDLK_DOWN:
483 new_btn = BUTTON_SCROLL_FWD;
484 break;
485 case SDLK_KP_PLUS:
486 case SDLK_F8:
487 new_btn = BUTTON_PLAY;
488 break;
489 case SDLK_KP5:
490 case SDLK_SPACE:
491 new_btn = BUTTON_SELECT;
492 break;
493 case SDLK_KP_PERIOD:
494 case SDLK_INSERT:
495 new_btn = BUTTON_MENU;
496 break;
498 #elif CONFIG_KEYPAD == IRIVER_H10_PAD
499 case SDLK_KP4:
500 case SDLK_LEFT:
501 new_btn = BUTTON_LEFT;
502 break;
503 case SDLK_KP6:
504 case SDLK_RIGHT:
505 new_btn = BUTTON_RIGHT;
506 break;
507 case SDLK_KP8:
508 case SDLK_UP:
509 new_btn = BUTTON_SCROLL_UP;
510 break;
511 case SDLK_KP2:
512 case SDLK_DOWN:
513 new_btn = BUTTON_SCROLL_DOWN;
514 break;
515 case SDLK_KP_PLUS:
516 case SDLK_F8:
517 new_btn = BUTTON_POWER;
518 break;
519 case SDLK_ESCAPE:
520 new_btn = BUTTON_POWER;
521 break;
522 case SDLK_KP_DIVIDE:
523 case SDLK_F1:
524 new_btn = BUTTON_REW;
525 break;
526 case SDLK_KP_MULTIPLY:
527 case SDLK_F2:
528 new_btn = BUTTON_FF;
529 break;
530 case SDLK_KP5:
531 case SDLK_SPACE:
532 new_btn = BUTTON_PLAY;
533 break;
535 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
536 case SDLK_t:
537 if(pressed)
538 switch(_remote_type)
540 case REMOTETYPE_UNPLUGGED:
541 _remote_type=REMOTETYPE_H100_LCD;
542 DEBUGF("Changed remote type to H100\n");
543 break;
544 case REMOTETYPE_H100_LCD:
545 _remote_type=REMOTETYPE_H300_LCD;
546 DEBUGF("Changed remote type to H300\n");
547 break;
548 case REMOTETYPE_H300_LCD:
549 _remote_type=REMOTETYPE_H300_NONLCD;
550 DEBUGF("Changed remote type to H300 NON-LCD\n");
551 break;
552 case REMOTETYPE_H300_NONLCD:
553 _remote_type=REMOTETYPE_UNPLUGGED;
554 DEBUGF("Changed remote type to none\n");
555 break;
557 break;
558 case SDLK_KP4:
559 case SDLK_LEFT:
560 new_btn = BUTTON_LEFT;
561 break;
562 case SDLK_KP6:
563 case SDLK_RIGHT:
564 new_btn = BUTTON_RIGHT;
565 break;
566 case SDLK_KP8:
567 case SDLK_UP:
568 new_btn = BUTTON_UP;
569 break;
570 case SDLK_KP2:
571 case SDLK_DOWN:
572 new_btn = BUTTON_DOWN;
573 break;
574 case SDLK_KP_PLUS:
575 case SDLK_F8:
576 new_btn = BUTTON_ON;
577 break;
578 case SDLK_KP_ENTER:
579 case SDLK_RETURN:
580 case SDLK_a:
581 new_btn = BUTTON_OFF;
582 break;
583 case SDLK_KP_DIVIDE:
584 case SDLK_F1:
585 new_btn = BUTTON_REC;
586 break;
587 case SDLK_KP5:
588 case SDLK_SPACE:
589 new_btn = BUTTON_SELECT;
590 break;
591 case SDLK_KP_PERIOD:
592 case SDLK_INSERT:
593 new_btn = BUTTON_MODE;
594 break;
596 #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
597 case SDLK_KP4:
598 case SDLK_LEFT:
599 new_btn = BUTTON_LEFT;
600 break;
601 case SDLK_KP6:
602 case SDLK_RIGHT:
603 new_btn = BUTTON_RIGHT;
604 break;
605 case SDLK_KP8:
606 case SDLK_UP:
607 new_btn = BUTTON_UP;
608 break;
609 case SDLK_KP2:
610 case SDLK_DOWN:
611 new_btn = BUTTON_DOWN;
612 break;
613 case SDLK_KP_PLUS:
614 case SDLK_F8:
615 new_btn = BUTTON_PLAY;
616 break;
617 case SDLK_KP_ENTER:
618 case SDLK_RETURN:
619 case SDLK_a:
620 new_btn = BUTTON_EQ;
621 break;
622 case SDLK_KP5:
623 case SDLK_SPACE:
624 new_btn = BUTTON_SELECT;
625 break;
626 case SDLK_KP_PERIOD:
627 case SDLK_INSERT:
628 new_btn = BUTTON_MODE;
629 break;
631 #elif CONFIG_KEYPAD == ONDIO_PAD
632 case SDLK_KP4:
633 case SDLK_LEFT:
634 new_btn = BUTTON_LEFT;
635 break;
636 case SDLK_KP6:
637 case SDLK_RIGHT:
638 new_btn = BUTTON_RIGHT;
639 break;
640 case SDLK_KP8:
641 case SDLK_UP:
642 new_btn = BUTTON_UP;
643 break;
644 case SDLK_KP2:
645 case SDLK_DOWN:
646 new_btn = BUTTON_DOWN;
647 break;
648 case SDLK_KP_ENTER:
649 case SDLK_RETURN:
650 case SDLK_a:
651 new_btn = BUTTON_OFF;
652 break;
653 case SDLK_KP_PERIOD:
654 case SDLK_INSERT:
655 new_btn = BUTTON_MENU;
656 break;
658 #elif CONFIG_KEYPAD == PLAYER_PAD
659 case SDLK_KP4:
660 case SDLK_LEFT:
661 new_btn = BUTTON_LEFT;
662 break;
663 case SDLK_KP6:
664 case SDLK_RIGHT:
665 new_btn = BUTTON_RIGHT;
666 break;
667 case SDLK_KP8:
668 case SDLK_UP:
669 new_btn = BUTTON_PLAY;
670 break;
671 case SDLK_KP2:
672 case SDLK_DOWN:
673 new_btn = BUTTON_STOP;
674 break;
675 case SDLK_KP_PLUS:
676 case SDLK_F8:
677 new_btn = BUTTON_ON;
678 break;
679 case SDLK_KP_PERIOD:
680 case SDLK_INSERT:
681 new_btn = BUTTON_MENU;
682 break;
684 #elif CONFIG_KEYPAD == RECORDER_PAD
685 case SDLK_KP4:
686 case SDLK_LEFT:
687 new_btn = BUTTON_LEFT;
688 break;
689 case SDLK_KP6:
690 case SDLK_RIGHT:
691 new_btn = BUTTON_RIGHT;
692 break;
693 case SDLK_KP8:
694 case SDLK_UP:
695 new_btn = BUTTON_UP;
696 break;
697 case SDLK_KP2:
698 case SDLK_DOWN:
699 new_btn = BUTTON_DOWN;
700 break;
701 case SDLK_KP_PLUS:
702 case SDLK_F8:
703 new_btn = BUTTON_ON;
704 break;
705 case SDLK_KP_ENTER:
706 case SDLK_RETURN:
707 case SDLK_a:
708 new_btn = BUTTON_OFF;
709 break;
710 case SDLK_KP_DIVIDE:
711 case SDLK_F1:
712 new_btn = BUTTON_F1;
713 break;
714 case SDLK_KP_MULTIPLY:
715 case SDLK_F2:
716 new_btn = BUTTON_F2;
717 break;
718 case SDLK_KP_MINUS:
719 case SDLK_F3:
720 new_btn = BUTTON_F3;
721 break;
722 case SDLK_KP5:
723 case SDLK_SPACE:
724 new_btn = BUTTON_PLAY;
725 break;
727 #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
728 case SDLK_KP4:
729 case SDLK_LEFT:
730 new_btn = BUTTON_LEFT;
731 break;
732 case SDLK_KP6:
733 case SDLK_RIGHT:
734 new_btn = BUTTON_RIGHT;
735 break;
736 case SDLK_KP8:
737 case SDLK_UP:
738 new_btn = BUTTON_UP;
739 break;
740 case SDLK_KP2:
741 case SDLK_DOWN:
742 new_btn = BUTTON_DOWN;
743 break;
744 case SDLK_KP_PLUS:
745 case SDLK_F8:
746 new_btn = BUTTON_ON;
747 break;
748 case SDLK_KP_ENTER:
749 case SDLK_RETURN:
750 case SDLK_a:
751 new_btn = BUTTON_OFF;
752 break;
753 case SDLK_KP_DIVIDE:
754 case SDLK_F1:
755 new_btn = BUTTON_F1;
756 break;
757 case SDLK_KP_MULTIPLY:
758 case SDLK_F2:
759 new_btn = BUTTON_F2;
760 break;
761 case SDLK_KP_MINUS:
762 case SDLK_F3:
763 new_btn = BUTTON_F3;
764 break;
765 case SDLK_KP5:
766 case SDLK_SPACE:
767 new_btn = BUTTON_SELECT;
768 break;
770 #elif CONFIG_KEYPAD == SANSA_E200_PAD
771 case SDLK_KP4:
772 case SDLK_LEFT:
773 new_btn = BUTTON_LEFT;
774 break;
775 case SDLK_KP6:
776 case SDLK_RIGHT:
777 new_btn = BUTTON_RIGHT;
778 break;
779 case SDLK_KP8:
780 case SDLK_UP:
781 new_btn = BUTTON_SCROLL_BACK;
782 break;
783 case SDLK_KP2:
784 case SDLK_DOWN:
785 new_btn = BUTTON_SCROLL_FWD;
786 break;
787 case SDLK_KP9:
788 case SDLK_PAGEUP:
789 new_btn = BUTTON_UP;
790 break;
791 case SDLK_KP3:
792 case SDLK_PAGEDOWN:
793 new_btn = BUTTON_DOWN;
794 break;
795 case SDLK_KP1:
796 case SDLK_HOME:
797 new_btn = BUTTON_POWER;
798 break;
799 case SDLK_KP7:
800 case SDLK_END:
801 new_btn = BUTTON_REC;
802 break;
803 case SDLK_KP5:
804 case SDLK_SPACE:
805 new_btn = BUTTON_SELECT;
806 break;
808 #elif CONFIG_KEYPAD == SANSA_C200_PAD
809 case SDLK_KP4:
810 case SDLK_LEFT:
811 new_btn = BUTTON_LEFT;
812 break;
813 case SDLK_KP6:
814 case SDLK_RIGHT:
815 new_btn = BUTTON_RIGHT;
816 break;
817 case SDLK_KP8:
818 case SDLK_UP:
819 new_btn = BUTTON_UP;
820 break;
821 case SDLK_KP2:
822 case SDLK_DOWN:
823 new_btn = BUTTON_DOWN;
824 break;
825 case SDLK_KP3:
826 new_btn = BUTTON_POWER;
827 break;
828 case SDLK_KP1:
829 new_btn = BUTTON_REC;
830 break;
831 case SDLK_KP5:
832 case SDLK_KP_ENTER:
833 case SDLK_RETURN:
834 new_btn = BUTTON_SELECT;
835 break;
836 case SDLK_KP7:
837 new_btn = BUTTON_VOL_DOWN;
838 break;
839 case SDLK_KP9:
840 new_btn = BUTTON_VOL_UP;
841 break;
843 #elif CONFIG_KEYPAD == MROBE500_PAD
844 case SDLK_F9:
845 new_btn = BUTTON_RC_HEART;
846 break;
847 case SDLK_F10:
848 new_btn = BUTTON_RC_MODE;
849 break;
850 case SDLK_F11:
851 new_btn = BUTTON_RC_VOL_DOWN;
852 break;
853 case SDLK_F12:
854 new_btn = BUTTON_RC_VOL_UP;
855 break;
856 case SDLK_MINUS:
857 case SDLK_LESS:
858 case SDLK_LEFTBRACKET:
859 case SDLK_KP_DIVIDE:
860 new_btn = BUTTON_LEFT;
861 break;
862 case SDLK_PLUS:
863 case SDLK_GREATER:
864 case SDLK_RIGHTBRACKET:
865 case SDLK_KP_MULTIPLY:
866 new_btn = BUTTON_RIGHT;
867 break;
868 case SDLK_PAGEUP:
869 new_btn = BUTTON_RC_PLAY;
870 break;
871 case SDLK_PAGEDOWN:
872 new_btn = BUTTON_RC_DOWN;
873 break;
874 case SDLK_F8:
875 case SDLK_ESCAPE:
876 new_btn = BUTTON_POWER;
877 break;
878 #elif CONFIG_KEYPAD == MROBE100_PAD
879 case SDLK_F9:
880 new_btn = BUTTON_RC_HEART;
881 break;
882 case SDLK_F10:
883 new_btn = BUTTON_RC_MODE;
884 break;
885 case SDLK_F11:
886 new_btn = BUTTON_RC_VOL_DOWN;
887 break;
888 case SDLK_F12:
889 new_btn = BUTTON_RC_VOL_UP;
890 break;
891 case SDLK_LEFT:
892 new_btn = BUTTON_RC_FF;
893 break;
894 case SDLK_RIGHT:
895 new_btn = BUTTON_RC_REW;
896 break;
897 case SDLK_UP:
898 new_btn = BUTTON_RC_PLAY;
899 break;
900 case SDLK_DOWN:
901 new_btn = BUTTON_RC_DOWN;
902 break;
903 case SDLK_KP1:
904 new_btn = BUTTON_DISPLAY;
905 break;
906 case SDLK_KP7:
907 new_btn = BUTTON_MENU;
908 break;
909 case SDLK_KP9:
910 new_btn = BUTTON_PLAY;
911 break;
912 case SDLK_KP4:
913 new_btn = BUTTON_LEFT;
914 break;
915 case SDLK_KP6:
916 new_btn = BUTTON_RIGHT;
917 break;
918 case SDLK_KP8:
919 new_btn = BUTTON_UP;
920 break;
921 case SDLK_KP2:
922 new_btn = BUTTON_DOWN;
923 break;
924 case SDLK_KP5:
925 case SDLK_SPACE:
926 new_btn = BUTTON_SELECT;
927 break;
928 case SDLK_KP_MULTIPLY:
929 case SDLK_F8:
930 case SDLK_ESCAPE:
931 new_btn = BUTTON_POWER;
932 break;
934 #elif CONFIG_KEYPAD == COWON_D2_PAD
935 case SDLK_KP_MULTIPLY:
936 case SDLK_F8:
937 case SDLK_ESCAPE:
938 case SDLK_BACKSPACE:
939 case SDLK_DELETE:
940 new_btn = BUTTON_POWER;
941 break;
942 case SDLK_KP_PLUS:
943 case SDLK_EQUALS:
944 new_btn = BUTTON_PLUS;
945 break;
946 case SDLK_KP_MINUS:
947 case SDLK_MINUS:
948 new_btn = BUTTON_MINUS;
949 break;
950 case SDLK_KP_ENTER:
951 case SDLK_RETURN:
952 case SDLK_SPACE:
953 case SDLK_INSERT:
954 new_btn = BUTTON_MENU;
955 break;
956 #elif CONFIG_KEYPAD == IAUDIO67_PAD
957 case SDLK_UP:
958 new_btn = BUTTON_RIGHT;
959 break;
960 case SDLK_DOWN:
961 new_btn = BUTTON_LEFT;
962 break;
963 case SDLK_LEFT:
964 new_btn = BUTTON_STOP;
965 break;
966 case SDLK_RETURN:
967 case SDLK_KP_ENTER:
968 case SDLK_RIGHT:
969 new_btn = BUTTON_PLAY;
970 break;
971 case SDLK_PLUS:
972 new_btn = BUTTON_VOLUP;
973 break;
974 case SDLK_MINUS:
975 new_btn = BUTTON_VOLDOWN;
976 break;
977 case SDLK_SPACE:
978 new_btn = BUTTON_MENU;
979 break;
980 case SDLK_BACKSPACE:
981 new_btn = BUTTON_POWER;
982 break;
983 #elif CONFIG_KEYPAD == CREATIVEZVM_PAD
984 case SDLK_KP1:
985 new_btn = BUTTON_BACK;
986 break;
987 case SDLK_KP3:
988 new_btn = BUTTON_MENU;
989 break;
990 case SDLK_KP7:
991 new_btn = BUTTON_CUSTOM;
992 break;
993 case SDLK_KP9:
994 new_btn = BUTTON_PLAY;
995 break;
996 case SDLK_KP4:
997 case SDLK_LEFT:
998 new_btn = BUTTON_LEFT;
999 break;
1000 case SDLK_KP6:
1001 case SDLK_RIGHT:
1002 new_btn = BUTTON_RIGHT;
1003 break;
1004 case SDLK_KP8:
1005 case SDLK_UP:
1006 new_btn = BUTTON_UP;
1007 break;
1008 case SDLK_KP2:
1009 case SDLK_DOWN:
1010 new_btn = BUTTON_DOWN;
1011 break;
1012 case SDLK_KP5:
1013 case SDLK_SPACE:
1014 new_btn = BUTTON_SELECT;
1015 break;
1016 case SDLK_KP_MULTIPLY:
1017 case SDLK_F8:
1018 case SDLK_ESCAPE:
1019 new_btn = BUTTON_POWER;
1020 break;
1021 #elif CONFIG_KEYPAD == CREATIVEZV_PAD
1022 case SDLK_KP1:
1023 new_btn = BUTTON_PREV;
1024 break;
1025 case SDLK_KP3:
1026 new_btn = BUTTON_NEXT;
1027 break;
1028 case SDLK_KP7:
1029 new_btn = BUTTON_BACK;
1030 break;
1031 case SDLK_p:
1032 new_btn = BUTTON_PLAY;
1033 break;
1034 case SDLK_KP9:
1035 new_btn = BUTTON_MENU;
1036 break;
1037 case SDLK_KP4:
1038 case SDLK_LEFT:
1039 new_btn = BUTTON_LEFT;
1040 break;
1041 case SDLK_KP6:
1042 case SDLK_RIGHT:
1043 new_btn = BUTTON_RIGHT;
1044 break;
1045 case SDLK_KP8:
1046 case SDLK_UP:
1047 new_btn = BUTTON_UP;
1048 break;
1049 case SDLK_KP2:
1050 case SDLK_DOWN:
1051 new_btn = BUTTON_DOWN;
1052 break;
1053 case SDLK_KP5:
1054 case SDLK_SPACE:
1055 new_btn = BUTTON_SELECT;
1056 break;
1057 case SDLK_KP_MULTIPLY:
1058 case SDLK_F8:
1059 case SDLK_ESCAPE:
1060 new_btn = BUTTON_POWER;
1061 break;
1062 case SDLK_z:
1063 new_btn = BUTTON_VOL_DOWN;
1064 break;
1065 case SDLK_s:
1066 new_btn = BUTTON_VOL_UP;
1068 #elif CONFIG_KEYPAD == MEIZU_M6SL_PAD
1069 case SDLK_KP1:
1070 new_btn = BUTTON_PREV;
1071 break;
1072 case SDLK_KP3:
1073 new_btn = BUTTON_NEXT;
1074 break;
1075 case SDLK_KP_ENTER:
1076 case SDLK_RETURN:
1077 case SDLK_a:
1078 new_btn = BUTTON_PLAY;
1079 break;
1080 case SDLK_KP_PERIOD:
1081 case SDLK_INSERT:
1082 new_btn = BUTTON_MENU;
1083 break;
1084 case SDLK_KP8:
1085 case SDLK_UP:
1086 new_btn = BUTTON_UP;
1087 break;
1088 case SDLK_KP2:
1089 case SDLK_DOWN:
1090 new_btn = BUTTON_DOWN;
1091 break;
1092 case SDLK_KP5:
1093 case SDLK_SPACE:
1094 new_btn = BUTTON_SELECT;
1095 break;
1096 #elif CONFIG_KEYPAD == SANSA_FUZE_PAD
1097 case SDLK_KP4:
1098 case SDLK_LEFT:
1099 new_btn = BUTTON_LEFT;
1100 break;
1101 case SDLK_KP6:
1102 case SDLK_RIGHT:
1103 new_btn = BUTTON_RIGHT;
1104 break;
1105 case SDLK_KP8:
1106 case SDLK_UP:
1107 new_btn = BUTTON_SCROLL_BACK;
1108 break;
1109 case SDLK_KP2:
1110 case SDLK_DOWN:
1111 new_btn = BUTTON_SCROLL_FWD;
1112 break;
1113 case SDLK_PAGEUP:
1114 case SDLK_KP9:
1115 new_btn = BUTTON_UP;
1116 break;
1117 case SDLK_PAGEDOWN:
1118 case SDLK_KP3:
1119 new_btn = BUTTON_DOWN;
1120 break;
1121 case SDLK_KP_MINUS:
1122 case SDLK_KP1:
1123 new_btn = BUTTON_POWER;
1124 break;
1125 case SDLK_KP_MULTIPLY:
1126 new_btn = BUTTON_HOME;
1127 break;
1128 case SDLK_KP5:
1129 case SDLK_SPACE:
1130 case SDLK_KP_ENTER:
1131 case SDLK_RETURN:
1132 new_btn = BUTTON_SELECT;
1133 break;
1134 #elif CONFIG_KEYPAD == SANSA_CLIP_PAD
1135 case SDLK_KP4:
1136 case SDLK_LEFT:
1137 new_btn = BUTTON_LEFT;
1138 break;
1139 case SDLK_KP6:
1140 case SDLK_RIGHT:
1141 new_btn = BUTTON_RIGHT;
1142 break;
1143 case SDLK_KP8:
1144 case SDLK_UP:
1145 new_btn = BUTTON_UP;
1146 break;
1147 case SDLK_KP2:
1148 case SDLK_DOWN:
1149 new_btn = BUTTON_DOWN;
1150 break;
1152 case SDLK_INSERT:
1153 case SDLK_KP_MULTIPLY:
1154 new_btn = BUTTON_HOME;
1155 break;
1156 case SDLK_SPACE:
1157 case SDLK_KP5:
1158 new_btn = BUTTON_SELECT;
1159 break;
1160 case SDLK_PAGEDOWN:
1161 case SDLK_KP3:
1162 new_btn = BUTTON_VOL_DOWN;
1163 break;
1164 case SDLK_PAGEUP:
1165 case SDLK_KP9:
1166 new_btn = BUTTON_VOL_UP;
1167 break;
1168 case SDLK_ESCAPE:
1169 case SDLK_KP1:
1170 new_btn = BUTTON_POWER;
1171 break;
1172 #elif CONFIG_KEYPAD == SANSA_M200_PAD
1173 case SDLK_KP4:
1174 case SDLK_LEFT:
1175 new_btn = BUTTON_LEFT;
1176 break;
1177 case SDLK_KP6:
1178 case SDLK_RIGHT:
1179 new_btn = BUTTON_RIGHT;
1180 break;
1181 case SDLK_KP8:
1182 case SDLK_UP:
1183 new_btn = BUTTON_UP;
1184 break;
1185 case SDLK_KP2:
1186 case SDLK_DOWN:
1187 new_btn = BUTTON_DOWN;
1188 break;
1189 case SDLK_PLUS:
1190 new_btn = BUTTON_POWER;
1191 break;
1192 case SDLK_KP5:
1193 new_btn = BUTTON_SELECT;
1194 break;
1195 case SDLK_KP7:
1196 new_btn = BUTTON_VOL_DOWN;
1197 break;
1198 case SDLK_KP9:
1199 new_btn = BUTTON_VOL_UP;
1200 break;
1201 #elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
1202 case SDLK_KP4:
1203 case SDLK_LEFT:
1204 new_btn = BUTTON_LEFT;
1205 break;
1206 case SDLK_KP6:
1207 case SDLK_RIGHT:
1208 new_btn = BUTTON_RIGHT;
1209 break;
1210 case SDLK_KP8:
1211 case SDLK_UP:
1212 new_btn = BUTTON_UP;
1213 break;
1214 case SDLK_KP2:
1215 case SDLK_DOWN:
1216 new_btn = BUTTON_DOWN;
1217 break;
1218 case SDLK_KP1:
1219 new_btn = BUTTON_MENU;
1220 break;
1221 case SDLK_KP5:
1222 case SDLK_SPACE:
1223 new_btn = BUTTON_PLAY;
1224 break;
1225 case SDLK_KP7:
1226 new_btn = BUTTON_PREV;
1227 break;
1228 case SDLK_KP9:
1229 new_btn = BUTTON_NEXT;
1230 break;
1231 case SDLK_KP_ENTER:
1232 case SDLK_RETURN:
1233 new_btn = BUTTON_POWER;
1234 break;
1235 case SDLK_PAGEUP:
1236 new_btn = BUTTON_VOL_UP;
1237 break;
1238 case SDLK_PAGEDOWN:
1239 new_btn = BUTTON_VOL_DOWN;
1240 break;
1241 #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
1242 case SDLK_KP4:
1243 case SDLK_LEFT:
1244 new_btn = BUTTON_LEFT;
1245 break;
1246 case SDLK_KP6:
1247 case SDLK_RIGHT:
1248 new_btn = BUTTON_RIGHT;
1249 break;
1250 case SDLK_KP8:
1251 case SDLK_UP:
1252 new_btn = BUTTON_UP;
1253 break;
1254 case SDLK_KP2:
1255 case SDLK_DOWN:
1256 new_btn = BUTTON_DOWN;
1257 break;
1258 case SDLK_KP5:
1259 case SDLK_SPACE:
1260 new_btn = BUTTON_SELECT;
1261 break;
1262 case SDLK_KP7:
1263 case SDLK_ESCAPE:
1264 new_btn = BUTTON_POWER;
1265 break;
1266 case SDLK_KP1:
1267 new_btn = BUTTON_PLAYLIST;
1268 break;
1269 case SDLK_KP9:
1270 new_btn = BUTTON_VOL_UP;
1271 break;
1272 case SDLK_KP3:
1273 new_btn = BUTTON_VOL_DOWN;
1274 break;
1275 case SDLK_KP_MINUS:
1276 new_btn = BUTTON_MENU;
1277 break;
1278 case SDLK_KP_PLUS:
1279 new_btn = BUTTON_VIEW;
1280 break;
1281 #elif CONFIG_KEYPAD == ONDAVX747_PAD
1282 case SDLK_ESCAPE:
1283 new_btn = BUTTON_POWER;
1284 break;
1285 case SDLK_KP_PLUS:
1286 case SDLK_PLUS:
1287 case SDLK_GREATER:
1288 case SDLK_RIGHTBRACKET:
1289 case SDLK_KP_MULTIPLY:
1290 new_btn = BUTTON_VOL_UP;
1291 break;
1292 case SDLK_KP_MINUS:
1293 case SDLK_MINUS:
1294 case SDLK_LESS:
1295 case SDLK_LEFTBRACKET:
1296 case SDLK_KP_DIVIDE:
1297 new_btn = BUTTON_VOL_DOWN;
1298 break;
1299 case SDLK_KP_ENTER:
1300 case SDLK_RETURN:
1301 new_btn = BUTTON_MENU;
1302 break;
1303 #elif CONFIG_KEYPAD == ONDAVX777_PAD
1304 case SDLK_ESCAPE:
1305 new_btn = BUTTON_POWER;
1306 break;
1307 #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
1308 case SDLK_KP4:
1309 case SDLK_LEFT:
1310 new_btn = BUTTON_LEFT;
1311 break;
1312 case SDLK_KP6:
1313 case SDLK_RIGHT:
1314 new_btn = BUTTON_RIGHT;
1315 break;
1316 case SDLK_KP8:
1317 case SDLK_UP:
1318 new_btn = BUTTON_UP;
1319 break;
1320 case SDLK_KP2:
1321 case SDLK_DOWN:
1322 new_btn = BUTTON_DOWN;
1323 break;
1324 case SDLK_KP5:
1325 case SDLK_KP_ENTER:
1326 new_btn = BUTTON_PLAY;
1327 break;
1328 case SDLK_KP9:
1329 case SDLK_PAGEUP:
1330 new_btn = BUTTON_FFWD;
1331 break;
1332 #ifdef SAMSUNG_YH820
1333 case SDLK_KP7:
1334 #else
1335 case SDLK_KP3:
1336 #endif
1337 case SDLK_PAGEDOWN:
1338 new_btn = BUTTON_REW;
1339 break;
1340 case SDLK_KP_PLUS:
1341 new_btn = BUTTON_REC;
1342 break;
1343 #elif CONFIG_KEYPAD == MINI2440_PAD
1344 case SDLK_LEFT:
1345 new_btn = BUTTON_LEFT;
1346 break;
1347 case SDLK_RIGHT:
1348 new_btn = BUTTON_RIGHT;
1349 break;
1350 case SDLK_UP:
1351 new_btn = BUTTON_UP;
1352 break;
1353 case SDLK_DOWN:
1354 new_btn = BUTTON_DOWN;
1355 break;
1356 case SDLK_F8:
1357 case SDLK_ESCAPE:
1358 new_btn = BUTTON_POWER;
1359 break;
1360 case SDLK_KP_ENTER:
1361 case SDLK_RETURN:
1362 case SDLK_a:
1363 new_btn = BUTTON_A;
1364 break;
1365 case SDLK_SPACE:
1366 new_btn = BUTTON_SELECT;
1367 break;
1368 case SDLK_KP_PERIOD:
1369 case SDLK_INSERT:
1370 new_btn = BUTTON_MENU;
1371 break;
1372 case SDLK_KP_PLUS:
1373 new_btn = BUTTON_VOL_UP;
1374 break;
1375 case SDLK_KP_MINUS:
1376 new_btn = BUTTON_VOL_DOWN;
1377 break;
1378 #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
1379 case SDLK_KP4:
1380 case SDLK_LEFT:
1381 new_btn = BUTTON_PREV;
1382 break;
1383 case SDLK_KP6:
1384 case SDLK_RIGHT:
1385 new_btn = BUTTON_NEXT;
1386 break;
1387 case SDLK_KP8:
1388 case SDLK_UP:
1389 new_btn = BUTTON_UP;
1390 break;
1391 case SDLK_KP2:
1392 case SDLK_DOWN:
1393 new_btn = BUTTON_DOWN;
1394 break;
1395 case SDLK_KP7:
1396 new_btn = BUTTON_MENU;
1397 break;
1398 case SDLK_KP9:
1399 new_btn = BUTTON_PLAY;
1400 break;
1401 case SDLK_KP5:
1402 new_btn = BUTTON_OK;
1403 break;
1404 case SDLK_KP_DIVIDE:
1405 new_btn = BUTTON_CANCEL;
1406 break;
1407 case SDLK_KP_PLUS:
1408 new_btn = BUTTON_POWER;
1409 break;
1410 case SDLK_KP_MULTIPLY:
1411 new_btn = BUTTON_REC;
1412 break;
1414 #elif CONFIG_KEYPAD == MPIO_HD200_PAD
1415 case SDLK_UP:
1416 new_btn = BUTTON_PREV;
1417 break;
1418 case SDLK_DOWN:
1419 new_btn = BUTTON_NEXT;
1420 break;
1421 case SDLK_SPACE:
1422 new_btn = BUTTON_SELECT;
1423 break;
1424 case SDLK_RETURN:
1425 new_btn = BUTTON_PLAY;
1426 break;
1427 case SDLK_LEFT:
1428 new_btn = BUTTON_VOL_DOWN;
1429 break;
1430 case SDLK_RIGHT:
1431 new_btn = BUTTON_VOL_UP;
1432 break;
1433 case SDLK_ESCAPE:
1434 new_btn = BUTTON_REC;
1435 break;
1437 #else
1438 #error No keymap defined!
1439 #endif /* CONFIG_KEYPAD */
1440 case SDLK_KP0:
1441 case SDLK_F5:
1442 if(pressed)
1444 sim_trigger_screendump();
1445 return;
1447 break;
1450 /* Call to make up for scrollwheel target implementation. This is
1451 * not handled in the main button.c driver, but on the target
1452 * implementation (look at button-e200.c for example if you are trying to
1453 * figure out why using button_get_data needed a hack before).
1455 #if defined(BUTTON_SCROLL_FWD) && defined(BUTTON_SCROLL_BACK)
1456 if((new_btn == BUTTON_SCROLL_FWD || new_btn == BUTTON_SCROLL_BACK) &&
1457 pressed)
1459 /* Clear these buttons from the data - adding them to the queue is
1460 * handled in the scrollwheel drivers for the targets. They do not
1461 * store the scroll forward/back buttons in their button data for
1462 * the button_read call.
1464 #ifdef HAVE_BACKLIGHT
1465 backlight_on();
1466 #endif
1467 #ifdef HAVE_BUTTON_LIGHT
1468 buttonlight_on();
1469 #endif
1470 queue_post(&button_queue, new_btn, 1<<24);
1471 new_btn &= ~(BUTTON_SCROLL_FWD | BUTTON_SCROLL_BACK);
1473 #endif
1475 if (pressed)
1476 btn |= new_btn;
1477 else
1478 btn &= ~new_btn;
1480 #if defined(HAVE_BUTTON_DATA) && defined(HAVE_TOUCHSCREEN)
1481 int button_read_device(int* data)
1483 *data = mouse_coords;
1484 #else
1485 int button_read_device(void)
1487 #endif
1488 #ifdef HAS_BUTTON_HOLD
1489 int hold_button = button_hold();
1491 #ifdef HAVE_BACKLIGHT
1492 /* light handling */
1493 static int hold_button_old = false;
1494 if (hold_button != hold_button_old)
1496 hold_button_old = hold_button;
1497 backlight_hold_changed(hold_button);
1499 #endif
1501 if (hold_button)
1502 return BUTTON_NONE;
1503 else
1504 #endif
1505 gui_message_loop();
1507 return btn;
1511 #ifdef HAVE_TOUCHSCREEN
1512 extern bool debug_wps;
1513 void mouse_tick_task(void)
1515 static int last_check = 0;
1516 int x,y;
1517 if (TIME_BEFORE(current_tick, last_check+(HZ/10)))
1518 return;
1519 last_check = current_tick;
1520 if (SDL_GetMouseState(&x, &y) & SDL_BUTTON(SDL_BUTTON_LEFT))
1522 if(background)
1524 x -= UI_LCD_POSX;
1525 y -= UI_LCD_POSY;
1527 if(x<0 || y<0 || x>SIM_LCD_WIDTH || y>SIM_LCD_HEIGHT)
1528 return;
1531 mouse_coords = (x<<16)|y;
1532 button_event(BUTTON_TOUCHSCREEN, true);
1533 if (debug_wps)
1534 printf("Mouse at: (%d, %d)\n", x, y);
1537 #endif
1539 void button_init_device(void)
1541 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
1542 #ifdef HAVE_TOUCHSCREEN
1543 tick_add_task(mouse_tick_task);
1544 #endif
1547 /* Button maps: simulated key, x, y, radius, name */
1548 /* Run sim with --mapping to get coordinates */
1549 /* or --debugbuttons to check */
1550 /* The First matching button is returned */
1551 struct button_map {
1552 int button, x, y, radius;
1553 char *description;
1556 #ifdef SANSA_FUZE
1557 struct button_map bm[] = {
1558 { SDLK_KP8, 70, 265, 35, "Scroll Back" },
1559 { SDLK_KP9, 141, 255, 31, "Play" },
1560 { SDLK_KP_MULTIPLY, 228, 267, 18, "Home" },
1561 { SDLK_LEFT, 69, 329, 31, "Left" },
1562 { SDLK_SPACE, 141, 330, 20, "Select" },
1563 { SDLK_RIGHT, 214, 331, 23, "Right" },
1564 { SDLK_KP3, 142, 406, 30, "Menu" },
1565 { SDLK_DOWN, 221, 384, 24, "Scroll Fwd" },
1566 { SDLK_KP_MINUS, 270, 299, 25, "Power" },
1567 { SDLK_h, 269, 358, 26, "Hold" },
1568 { 0, 0, 0, 0, "None" }
1570 #elif defined (SANSA_CLIP)
1571 struct button_map bm[] = {
1572 { SDLK_KP_MULTIPLY, 165, 158, 17, "Home" },
1573 { SDLK_KP5, 102, 230, 29, "Select" },
1574 { SDLK_KP8, 100, 179, 25, "Play" },
1575 { SDLK_KP4, 53, 231, 21, "Left" },
1576 { SDLK_KP6, 147, 232, 19, "Right" },
1577 { SDLK_KP2, 105, 275, 22, "Menu" },
1578 { 0, 0, 0, 0, "None" }
1580 #elif defined (SANSA_C200) || defined(SANSA_C200V2)
1581 struct button_map bm[] = {
1583 { SDLK_KP7, 84, 7, 21, "Vol Down" },
1584 { SDLK_KP9, 158, 7, 20, "Vol Up" },
1585 { SDLK_KP1, 173, 130, 27, "Record" },
1586 { SDLK_KP5, 277, 75, 21, "Select" },
1587 { SDLK_KP4, 233, 75, 24, "Left" },
1588 { SDLK_KP6, 313, 74, 18, "Right" },
1589 { SDLK_KP8, 276, 34, 15, "Play" },
1590 { SDLK_KP2, 277, 119, 17, "Down" },
1591 { SDLK_KP3, 314, 113, 19, "Menu" },
1592 { 0, 0, 0, 0, "None" }
1594 #elif defined (SANSA_E200V2) || defined(SANSA_E200)
1595 struct button_map bm[] = {
1596 { SDLK_KP7, 5, 92, 18, "Record" },
1597 { SDLK_KP9, 128, 295, 43, "Play" },
1598 { SDLK_KP4, 42, 380, 33, "Left" },
1599 { SDLK_KP5, 129, 378, 36, "Select" },
1600 { SDLK_KP6, 218, 383, 30, "Right" },
1601 { SDLK_KP3, 129, 461, 29, "Down" },
1602 { SDLK_KP1, 55, 464, 20, "Menu" },
1603 { SDLK_KP8, 92, 338, 17, "Scroll Back" },
1604 { SDLK_KP2, 167, 342, 17, "Scroll Fwd" },
1605 { 0, 0, 0, 0, "None" }
1607 #elif defined (SANSA_M200V4)
1608 struct button_map bm[] = {
1609 { SDLK_KP_PLUS, 54, 14, 16, "Power" },
1610 { SDLK_KP7, 96, 13, 12, "Vol Down" },
1611 { SDLK_KP9, 139, 14, 14, "Vol Up" },
1612 { SDLK_KP5, 260, 82, 20, "Select" },
1613 { SDLK_KP8, 258, 35, 30, "Play" },
1614 { SDLK_KP4, 214, 84, 25, "Left" },
1615 { SDLK_KP6, 300, 83, 24, "Right" },
1616 { SDLK_KP2, 262, 125, 28, "Repeat" },
1617 { SDLK_h, 113, 151, 21, "Hold" },
1618 { 0, 0, 0, 0, "None" }
1620 #elif defined (IPOD_VIDEO)
1621 struct button_map bm[] = {
1622 { SDLK_KP_PERIOD, 174, 350, 35, "Menu" },
1623 { SDLK_KP8, 110, 380, 33, "Scroll Back" },
1624 { SDLK_KP2, 234, 377, 34, "Scroll Fwd" },
1625 { SDLK_KP4, 78, 438, 47, "Left" },
1626 { SDLK_KP5, 172, 435, 43, "Select" },
1627 { SDLK_KP6, 262, 438, 52, "Right" },
1628 { SDLK_KP_PLUS, 172, 519, 43, "Play" },
1629 { 0, 0, 0 , 0, "None" }
1631 #elif defined (IPOD_MINI) || defined(IPOD_MINI2G)
1632 struct button_map bm[] = {
1633 { SDLK_KP5, 92, 267, 29, "Select" },
1634 { SDLK_KP4, 31, 263, 37, "Left" },
1635 { SDLK_KP6, 150, 268, 33, "Right" },
1636 { SDLK_KP_PERIOD, 93, 209, 30, "Menu" },
1637 { SDLK_KP_PLUS, 93, 324, 25, "Play" },
1638 { SDLK_KP8, 53, 220, 29, "Scroll Back" },
1639 { SDLK_KP2, 134, 219, 31, "Scroll Fwd" },
1640 { 0, 0, 0 , 0, "None" }
1642 #elif defined (IPOD_3G)
1643 struct button_map bm[] = {
1644 { SDLK_KP5, 108, 296, 26, "Select" },
1645 { SDLK_KP8, 70, 255, 26, "Scroll Back" },
1646 { SDLK_KP2, 149, 256, 28, "Scroll Fwd" },
1647 { SDLK_KP4, 27, 186, 22, "Left" },
1648 { SDLK_KP_PERIOD, 82, 185, 22, "Menu" },
1649 { SDLK_KP_PERIOD, 133, 185, 21, "Play" },
1650 { SDLK_KP6, 189, 188, 21, "Right" },
1651 { 0, 0, 0 , 0, "None" }
1653 #elif defined (IPOD_4G)
1654 struct button_map bm[] = {
1655 { SDLK_KP5, 96, 269, 27, "Select" },
1656 { SDLK_KP4, 39, 267, 30, "Left" },
1657 { SDLK_KP6, 153, 270, 27, "Right" },
1658 { SDLK_KP_PERIOD, 96, 219, 30, "Menu" },
1659 { SDLK_KP_PLUS, 95, 326, 27, "Play" },
1660 { SDLK_KP8, 57, 233, 29, "Scroll Back" },
1661 { SDLK_KP2, 132, 226, 29, "Scroll Fwd" },
1662 { 0, 0, 0 , 0, "None" }
1664 #elif defined (IPOD_COLOR)
1665 struct button_map bm[] = {
1666 { SDLK_KP5, 128, 362, 35, "Select" },
1667 { SDLK_KP4, 55, 358, 38, "Left" },
1668 { SDLK_KP6, 203, 359, 39, "Right" },
1669 { SDLK_KP_PERIOD, 128, 282, 34, "Menu" },
1670 { SDLK_KP_PLUS, 129, 439, 41, "Play" },
1671 { SDLK_KP8, 76, 309, 34, "Scroll Back" },
1672 { SDLK_KP2, 182, 311, 45, "Scroll Fwd" },
1673 { 0, 0, 0 , 0, "None" }
1675 #elif defined (IPOD_1G2G)
1676 struct button_map bm[] = {
1677 { SDLK_KP5, 112, 265, 31, "Select" },
1678 { SDLK_KP8, 74, 224, 28, "Scroll Back" },
1679 { SDLK_KP2, 146, 228, 28, "Scroll Fwd" },
1680 /* Dummy button to make crescent shape */
1681 { SDLK_y, 112, 265, 76, "None" },
1682 { SDLK_KP8, 74, 224, 28, "Scroll Back" },
1683 { SDLK_KP2, 146, 228, 28, "Scroll Fwd" },
1684 { SDLK_KP6, 159, 268, 64, "Right" },
1685 { SDLK_KP4, 62, 266, 62, "Left" },
1686 { SDLK_KP_PERIOD, 111, 216, 64, "Menu" },
1687 { SDLK_KP_PLUS, 111, 326, 55, "Down" },
1688 { 0, 0, 0 , 0, "None" }
1690 #elif defined (IPOD_NANO)
1691 struct button_map bm[] = {
1692 { SDLK_KP5, 98, 316, 37, "Select" },
1693 { SDLK_KP4, 37, 312, 28, "Left" },
1694 { SDLK_KP6, 160, 313, 25, "Right" },
1695 { SDLK_KP_PERIOD,102, 256, 23, "Menu" },
1696 { SDLK_KP_PLUS, 99, 378, 28, "Play" },
1697 { SDLK_KP8, 58, 272, 24, "Scroll Back" },
1698 { SDLK_KP2, 141, 274, 22, "Scroll Fwd" },
1699 { 0, 0, 0 , 0, "None" }
1701 #elif defined (IPOD_NANO2G)
1702 struct button_map bm[] = {
1703 { SDLK_KP5, 118, 346, 37, "Select" },
1704 { SDLK_KP4, 51, 345, 28, "Left" },
1705 { SDLK_KP6, 180, 346, 26, "Right" },
1706 { SDLK_KP_PERIOD, 114, 286, 23, "Menu" },
1707 { SDLK_KP_PLUS, 115, 412, 27, "Down" },
1708 { SDLK_KP8, 67, 303, 28, "Scroll Back" },
1709 { SDLK_KP2, 163, 303, 27, "Scroll Fwd" },
1710 { 0, 0, 0 , 0, "None" }
1712 #elif defined (COWON_D2)
1713 struct button_map bm[] = {
1714 { SDLK_DELETE, 51, 14, 17, "Power" },
1715 { SDLK_h, 138, 14, 16, "Hold" },
1716 { SDLK_MINUS, 320, 14, 10, "Minus" },
1717 { SDLK_INSERT, 347, 13, 13, "Menu" },
1718 { SDLK_KP_PLUS, 374, 14, 12, "Plus" },
1719 { 0, 0, 0, 0, "None" }
1721 #elif defined (IAUDIO_M3)
1722 struct button_map bm[] = {
1723 { SDLK_KP5, 256, 72, 29, "Play" },
1724 { SDLK_KP6, 255, 137, 28, "Right" },
1725 { SDLK_KP4, 257, 201, 26, "Left" },
1726 { SDLK_KP8, 338, 31, 27, "Up" },
1727 { SDLK_KP2, 339, 92, 23, "Down" },
1728 { SDLK_KP_PERIOD, 336, 50, 23, "Mode" },
1729 { SDLK_KP_DIVIDE, 336, 147, 23, "Rec" },
1730 { SDLK_h, 336, 212, 30, "Hold" },
1731 /* remote */
1732 { SDLK_SPACE, 115, 308, 20, "RC Play" },
1733 { SDLK_RIGHT, 85, 308, 20, "RC Rew" },
1734 { SDLK_LEFT, 143, 308, 20, "RC FF" },
1735 { SDLK_UP, 143, 498, 20, "RC Up" },
1736 { SDLK_DOWN, 85, 498, 20, "RC Down" },
1737 { SDLK_INSERT, 212, 308, 30, "RC Mode" },
1738 { SDLK_F1, 275, 308, 25, "RC Rec" },
1739 { SDLK_KP_ENTER, 115, 498, 20, "RC Menu" },
1740 { 0, 0, 0, 0, "None" }
1742 #elif defined (IAUDIO_M5)
1743 struct button_map bm[] = {
1744 { SDLK_KP_ENTER, 333, 41, 17, "Enter" },
1745 { SDLK_h, 334, 74, 21, "Hold" },
1746 { SDLK_KP_DIVIDE, 333, 142, 24, "Record" },
1747 { SDLK_KP_PLUS, 332, 213, 20, "Play" },
1748 { SDLK_KP5, 250, 291, 19, "Select" },
1749 { SDLK_KP8, 249, 236, 32, "Up" },
1750 { SDLK_KP4, 194, 292, 29, "Left" },
1751 { SDLK_KP6, 297, 290, 27, "Right" },
1752 { SDLK_KP2, 252, 335, 28, "Down" },
1753 { 0, 0, 0, 0, "None" }
1755 #elif defined (IAUDIO_7)
1756 struct button_map bm[] = {
1757 { 0, 0, 0, 0, "None" }
1759 #elif defined (IAUDIO_X5)
1760 struct button_map bm[] = {
1761 { SDLK_KP_ENTER, 275, 38, 17, "Power" },
1762 { SDLK_h, 274, 83, 16, "Hold" },
1763 { SDLK_KP_DIVIDE, 276, 128, 22, "Record" },
1764 { SDLK_KP_PLUS, 274, 186, 22, "Play" },
1765 { SDLK_KP5, 200, 247, 16, "Select" },
1766 { SDLK_KP8, 200, 206, 16, "Up" },
1767 { SDLK_KP4, 163, 248, 19, "Left" },
1768 { SDLK_KP6, 225, 247, 24, "Right" },
1769 { SDLK_KP2, 199, 279, 20, "Down" },
1770 { 0, 0, 0, 0, "None" }
1772 #elif defined (ARCHOS_PLAYER)
1773 struct button_map bm[] = {
1774 { SDLK_KP_PLUS, 79, 252, 23, "On" },
1775 { SDLK_KP_PERIOD, 81, 310, 20, "Menu" },
1776 { SDLK_KP8, 154, 237, 28, "Play" },
1777 { SDLK_KP4, 121, 282, 23, "Left" },
1778 { SDLK_KP6, 187, 282, 22, "Right" },
1779 { SDLK_KP2, 157, 312, 20, "Down" },
1780 { 0, 0, 0, 0, "None" }
1782 #elif defined (ARCHOS_RECORDER)
1783 struct button_map bm[] = {
1784 { SDLK_F1, 94, 205, 22, "F1" },
1785 { SDLK_F2, 136, 204, 21, "F2" },
1786 { SDLK_F3, 174, 204, 24, "F3" },
1787 { SDLK_KP_PLUS, 75, 258, 19, "On" },
1788 { SDLK_KP_ENTER, 76, 307, 15, "Off" },
1789 { SDLK_KP5, 151, 290, 20, "Select" },
1790 { SDLK_KP8, 152, 251, 23, "Up" },
1791 { SDLK_KP4, 113, 288, 26, "Left" },
1792 { SDLK_KP6, 189, 291, 23, "Right" },
1793 { SDLK_KP2, 150, 327, 27, "Down" },
1794 { 0, 0, 0, 0, "None" }
1796 #elif defined (ARCHOS_FMRECORDER) || defined (ARCHOS_RECORDERV2)
1797 struct button_map bm[] = {
1798 { SDLK_F1, 88, 210, 28, "F1" },
1799 { SDLK_F2, 144, 212, 28, "F2" },
1800 { SDLK_F3, 197, 212, 28, "F3" },
1801 { SDLK_KP5, 144, 287, 21, "Select" },
1802 { SDLK_KP_PLUS, 86, 320, 13, "Menu" },
1803 { SDLK_KP_ENTER, 114, 347, 13, "Stop" },
1804 { SDLK_y, 144, 288, 31, "None" },
1805 { SDLK_KP8, 144, 259, 25, "Up" },
1806 { SDLK_KP2, 144, 316, 31, "Down" },
1807 { SDLK_KP6, 171, 287, 32, "Right" },
1808 { SDLK_KP4, 117, 287, 31, "Left" },
1809 { 0, 0, 0, 0, "None" }
1811 #elif defined (ARCHOS_ONDIOSP) || defined (ARCHOS_ONDIOFM)
1812 struct button_map bm[] = {
1813 { SDLK_KP_ENTER, 75, 23, 30, "Enter" },
1814 { SDLK_KP8, 75, 174, 33, "KP8" },
1815 { SDLK_KP4, 26, 186, 48, "KP4" },
1816 { SDLK_KP6, 118, 196, 32, "KP6" },
1817 { SDLK_KP2, 75, 234, 16, "KP2" },
1818 { SDLK_KP_PERIOD, 54, 250, 24, "Period" },
1819 { 0, 0, 0, 0, "None" }
1821 #elif defined (IRIVER_H10)
1822 struct button_map bm[] = {
1823 { SDLK_KP_PLUS, 38, 70, 37, "Power" },
1824 { SDLK_KP4, 123, 194, 26, "Cancel" },
1825 { SDLK_KP6, 257, 195, 34, "Select" },
1826 { SDLK_KP8, 190, 221, 28, "Up" },
1827 { SDLK_KP2, 192, 320, 27, "Down" },
1828 { SDLK_KP_DIVIDE, 349, 49, 20, "Rew" },
1829 { SDLK_KP5, 349, 96, 20, "Play" },
1830 { SDLK_KP_MULTIPLY, 350, 141, 23, "FF" },
1831 { 0, 0, 0, 0, "None" }
1833 #elif defined (IRIVER_H10_5GB)
1834 struct button_map bm[] = {
1835 { SDLK_KP_PLUS, 34, 76, 23, "Power" },
1836 { SDLK_KP4, 106, 222, 28, "Cancel" },
1837 { SDLK_KP6, 243, 220, 31, "Select" },
1838 { SDLK_KP8, 176, 254, 34, "Up" },
1839 { SDLK_KP2, 175, 371, 35, "Down" },
1840 { SDLK_KP_DIVIDE, 319, 63, 26, "Rew" },
1841 { SDLK_KP5, 320, 124, 26, "Play" },
1842 { SDLK_KP_MULTIPLY, 320, 181, 32, "FF" },
1843 { 0, 0, 0, 0, "None" }
1845 #elif defined (IRIVER_H120) || defined (IRIVER_H100)
1846 struct button_map bm[] = {
1847 { SDLK_KP_DIVIDE, 46, 162, 13, "Record" },
1848 { SDLK_KP_PLUS, 327, 36, 16, "Play" },
1849 { SDLK_KP_ENTER, 330, 99, 18, "Stop" },
1850 { SDLK_KP_PERIOD, 330, 163, 18, "AB" },
1851 { SDLK_KP5, 186, 227, 27, "5" },
1852 { SDLK_KP8, 187, 185, 19, "8" },
1853 { SDLK_KP4, 142, 229, 23, "4" },
1854 { SDLK_KP6, 231, 229, 22, "6" },
1855 { SDLK_KP2, 189, 272, 28, "2" },
1856 /* Remote Buttons */
1857 { SDLK_KP_ENTER, 250, 404, 20, "Stop" },
1858 { SDLK_SPACE, 285, 439, 29, "Space" },
1859 { SDLK_h, 336, 291, 24, "Hold" },
1860 { 0, 0, 0, 0, "None" }
1862 #elif defined (IRIVER_H300)
1863 struct button_map bm[] = {
1864 { SDLK_KP_PLUS, 56, 335, 20, "Play" },
1865 { SDLK_KP8, 140, 304, 29, "Up" },
1866 { SDLK_KP_DIVIDE, 233, 331, 23, "Record" },
1867 { SDLK_KP_ENTER, 54, 381, 24, "Stop" },
1868 { SDLK_KP4, 100, 353, 17, "Left" },
1869 { SDLK_KP5, 140, 351, 19, "Navi" },
1870 { SDLK_KP6, 185, 356, 19, "Right" },
1871 { SDLK_KP_PERIOD, 230, 380, 20, "AB" },
1872 { SDLK_KP2, 142, 402, 24, "Down" },
1873 { SDLK_KP_ENTER, 211, 479, 21, "Stop" },
1874 { SDLK_KP_PLUS, 248, 513, 29, "Play" },
1875 { 0, 0, 0, 0, "None" }
1877 #elif defined (MROBE_500)
1878 struct button_map bm[] = {
1879 { SDLK_KP9, 171, 609, 9, "Play" },
1880 { SDLK_KP4, 158, 623, 9, "Left" },
1881 { SDLK_KP6, 184, 622, 9, "Right" },
1882 { SDLK_KP7, 171, 638, 11, "Menu" },
1883 { 0, 0, 0, 0, "None" }
1885 #elif defined (MROBE_100)
1886 struct button_map bm[] = {
1887 { SDLK_KP7, 80, 233, 30, "Menu" },
1888 { SDLK_KP8, 138, 250, 19, "Up" },
1889 { SDLK_KP9, 201, 230, 27, "Play" },
1890 { SDLK_KP4, 63, 305, 25, "Left" },
1891 { SDLK_KP5, 125, 309, 28, "Select" },
1892 { SDLK_KP6, 200, 307, 35, "Right" },
1893 { SDLK_KP1, 52, 380, 32, "Display" },
1894 { SDLK_KP2, 125, 363, 30, "Down" },
1895 { SDLK_KP9, 168, 425, 10, "Play" },
1896 { SDLK_KP4, 156, 440, 11, "Left" },
1897 { SDLK_KP6, 180, 440, 13, "Right" },
1898 { SDLK_KP7, 169, 452, 10, "Menu" },
1899 { SDLK_KP_MULTIPLY, 222, 15, 16, "Power" },
1900 { 0, 0, 0, 0, "None" }
1902 #elif defined (GIGABEAT_F)
1903 struct button_map bm[] = {
1904 { SDLK_KP_PLUS, 361, 187, 22, "Power" },
1905 { SDLK_KP_PERIOD, 361, 270, 17, "Menu" },
1906 { SDLK_KP9, 365, 345, 26, "Vol Up" },
1907 { SDLK_KP3, 363, 433, 25, "Vol Down" },
1908 { SDLK_KP_ENTER, 365, 520, 19, "A" },
1909 { SDLK_KP8, 167, 458, 35, "Up" },
1910 { SDLK_KP4, 86, 537, 29, "Left" },
1911 { SDLK_KP5, 166, 536, 30, "Select" },
1912 { SDLK_KP6, 248, 536, 30, "Right" },
1913 { SDLK_KP2, 169, 617, 28, "Down" },
1914 { 0, 0, 0, 0, "None" }
1916 #elif defined (GIGABEAT_S)
1917 struct button_map bm[] = {
1918 { SDLK_KP_PLUS, 416, 383, 23, "Play" },
1919 { SDLK_KP7, 135, 442, 46, "Back" },
1920 { SDLK_KP9, 288, 447, 35, "Menu" },
1921 { SDLK_KP8, 214, 480, 32, "Up" },
1922 { SDLK_KP4, 128, 558, 33, "Left" },
1923 { SDLK_KP5, 214, 556, 34, "Select" },
1924 { SDLK_KP6, 293, 558, 35, "Right" },
1925 { SDLK_KP2, 214, 637, 38, "Down" },
1926 { 0, 0, 0, 0, "None" }
1928 #elif defined (SAMSUNG_YH820)
1929 struct button_map bm[] = {
1930 { SDLK_KP_PLUS, 330, 53, 23, "Record" },
1931 { SDLK_KP7, 132, 208, 21, "Left" },
1932 { SDLK_KP5, 182, 210, 18, "Play" },
1933 { SDLK_KP9, 234, 211, 22, "Right" },
1934 { SDLK_KP8, 182, 260, 15, "Up" },
1935 { SDLK_KP4, 122, 277, 29, "Menu" },
1936 { SDLK_KP6, 238, 276, 25, "Select" },
1937 { SDLK_KP2, 183, 321, 24, "Down" },
1938 { 0, 0, 0, 0, "None" }
1940 #elif defined (SAMSUNG_YH920) || defined (SAMSUNG_YH925)
1941 struct button_map bm[] = {
1942 { SDLK_KP9, 370, 32, 15, "FF" },
1943 { SDLK_KP5, 369, 84, 25, "Play" },
1944 { SDLK_KP5, 367, 125, 27, "Play" },
1945 { SDLK_KP3, 369, 188, 17, "Rew" },
1946 { SDLK_KP_PLUS, 370, 330, 30, "Record" },
1947 { SDLK_KP4, 146, 252, 32, "Menu" },
1948 { SDLK_KP8, 204, 226, 27, "Up" },
1949 { SDLK_KP6, 257, 250, 34, "Select" },
1950 { SDLK_KP2, 205, 294, 35, "Down" },
1951 { 0, 0, 0, 0, "None" }
1953 #elif defined (ONDA_VX747) || defined (ONDA_VX747P)
1954 struct button_map bm[] = {
1955 { SDLK_MINUS, 113, 583, 28, "Minus" },
1956 { SDLK_PLUS, 227, 580, 28, "Plus" },
1957 { SDLK_RETURN, 171, 583, 34, "Menu" },
1958 { 0, 0, 0, 0, "None" }
1960 #elif defined (PHILIPS_SA9200)
1961 struct button_map bm[] = {
1962 { SDLK_KP_ENTER, 25, 155, 33, "Power" },
1963 { SDLK_PAGEUP, 210, 98, 31, "Vol Up" },
1964 { SDLK_PAGEDOWN, 210, 168, 34, "Vol Down" },
1965 { SDLK_KP7, 40, 249, 26, "Prev" },
1966 { SDLK_KP8, 110, 247, 22, "Up" },
1967 { SDLK_KP9, 183, 249, 31, "Next" },
1968 { SDLK_KP4, 45, 305, 25, "Left" },
1969 { SDLK_KP5, 111, 304, 24, "Play" },
1970 { SDLK_KP6, 183, 304, 21, "Right" },
1971 { SDLK_KP1, 43, 377, 21, "Menu" },
1972 { SDLK_KP2, 112, 371, 24, "Down" },
1973 { 0, 0, 0, 0, "None" }
1975 #elif defined (CREATIVE_ZVM) || defined (CREATIVE_ZVM60GB) || \
1976 defined (CREATIVE_ZV)
1977 struct button_map bm[] = {
1978 { SDLK_KP7, 52, 414, 35, "Custom" },
1979 { SDLK_KP8, 185, 406, 55, "Up" },
1980 { SDLK_KP9, 315, 421, 46, "Play" },
1981 { SDLK_KP4, 122, 500, 41, "Left" },
1982 { SDLK_KP6, 247, 493, 49, "Right" },
1983 { SDLK_KP1, 58, 577, 49, "Back" },
1984 { SDLK_KP2, 186, 585, 46, "Down" },
1985 { SDLK_KP3, 311, 569, 47, "Menu" },
1986 { 0, 0, 0, 0, "None" }
1988 #elif defined (MPIO_HD200)
1989 struct button_map bm[] = {
1990 { SDLK_ESCAPE, 369, 257, 20, "Rec" },
1991 { SDLK_RETURN, 369, 305, 20, "Play/Stop" },
1992 { SDLK_UP, 353, 168, 10, "Rew" },
1993 { SDLK_DOWN, 353, 198, 10, "FF" },
1994 { SDLK_SPACE, 353, 186, 10, "Select" },
1995 { SDLK_LEFT, 123, 67, 20, "Vol Down" },
1996 { SDLK_RIGHT, 206, 67, 20, "Vol Up" },
1997 { SDLK_h, 369, 402, 30, "Hold" },
1998 { 0, 0, 0, 0, "None" }
2000 #else
2001 struct button_map bm[] = {
2002 { 0, 0, 0, 0, ""}
2004 #endif
2006 static int xy2button( int x, int y)
2008 int i;
2009 extern bool debug_buttons;
2011 for ( i = 0; bm[i].button; i++ )
2012 /* check distance from center of button < radius */
2013 if ( ( (x-bm[i].x)*(x-bm[i].x) ) + ( ( y-bm[i].y)*(y-bm[i].y) ) < bm[i].radius*bm[i].radius ) {
2014 if (debug_buttons)
2015 printf("Button: %s\n", bm[i].description );
2016 return bm[i].button;
2018 return 0;