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