summaryrefslogtreecommitdiff
path: root/firmware/target/hosted/sdl/button-sdl.c
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-05-15 21:02:47 +0000
committerThomas Martitz <kugel@rockbox.org>2010-05-15 21:02:47 +0000
commit3d0cee8abbaf764958743e8a7851eee94e60a913 (patch)
treea96b1ec825003a71643a7da4707c300f64824f82 /firmware/target/hosted/sdl/button-sdl.c
parentdcf442e61f21fb2aef5ce7de0547f733557b156e (diff)
downloadrockbox-3d0cee8abbaf764958743e8a7851eee94e60a913.tar.gz
rockbox-3d0cee8abbaf764958743e8a7851eee94e60a913.zip
- Move uisimulator/sdl/*.[ch] into the target tree, under firmware/target/hosted/sdl, uisdl.c is split up across button-sdl.c and system-sdl.c.
- Refactor the program startup. main() is now in main.c like on target, and the implicit application thread will now act as our main thread (previously a separate one was created for this in thread initialization). This is part of Rockbox as an application and is the first step to make an application port from the uisimulator. In a further step the sim bits from the sdl build will be separated out. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26065 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/hosted/sdl/button-sdl.c')
-rw-r--r--firmware/target/hosted/sdl/button-sdl.c2018
1 files changed, 2018 insertions, 0 deletions
diff --git a/firmware/target/hosted/sdl/button-sdl.c b/firmware/target/hosted/sdl/button-sdl.c
new file mode 100644
index 0000000000..51ba8cff92
--- /dev/null
+++ b/firmware/target/hosted/sdl/button-sdl.c
@@ -0,0 +1,2018 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Felix Arends
11 *
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.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
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"
34
35#include "debug.h"
36
37#ifdef HAVE_TOUCHSCREEN
38#include "touchscreen.h"
39static int mouse_coords = 0;
40#endif
41/* how long until repeat kicks in */
42#define REPEAT_START 6
43
44/* the speed repeat starts at */
45#define REPEAT_INTERVAL_START 4
46
47/* speed repeat finishes at */
48#define REPEAT_INTERVAL_FINISH 2
49
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
55
56#if defined(IRIVER_H100_SERIES) || defined (IRIVER_H300_SERIES)
57int _remote_type=REMOTETYPE_H100_LCD;
58
59int remote_type(void)
60{
61 return _remote_type;
62}
63#endif
64
65static int xy2button(int x, int y);
66
67struct event_queue button_queue;
68
69static int btn = 0; /* Hopefully keeps track of currently pressed keys... */
70
71#ifdef HAS_BUTTON_HOLD
72bool hold_button_state = false;
73bool button_hold(void) {
74 return hold_button_state;
75}
76#endif
77
78#ifdef HAS_REMOTE_BUTTON_HOLD
79bool remote_hold_button_state = false;
80bool remote_button_hold(void) {
81 return remote_hold_button_state;
82}
83#endif
84static void button_event(int key, bool pressed);
85extern bool debug_wps;
86extern bool mapping;
87static void gui_message_loop(void)
88{
89 SDL_Event event;
90 static int x,y,xybutton = 0;
91
92 if (SDL_PollEvent(&event))
93 {
94 switch(event.type)
95 {
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;
116 }
117 if ( background ) {
118 xybutton = xy2button( event.button.x, event.button.y );
119 if( xybutton )
120 button_event( xybutton, true );
121 }
122 break;
123 default:
124 break;
125 }
126
127 if (debug_wps && event.button.button == 1)
128 {
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
145 }
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)) );
157 }
158 if ( background && xybutton ) {
159 button_event( xybutton, false );
160 xybutton = 0;
161 }
162#ifdef HAVE_TOUCHSCREEN
163 else {
164 button_event(BUTTON_TOUCHSCREEN, false);
165 }
166#endif
167 break;
168 default:
169 break;
170 }
171 break;
172
173
174 case SDL_QUIT:
175 {
176 exit(EXIT_SUCCESS);
177 break;
178 }
179 default:
180 /*printf("Unhandled event\n"); */
181 break;
182 }
183 }
184}
185
186static void button_event(int key, bool pressed)
187{
188 int new_btn = 0;
189 static bool usb_connected = false;
190 if (usb_connected && key != USB_KEY)
191 return;
192 switch (key)
193 {
194
195#ifdef HAVE_TOUCHSCREEN
196 case BUTTON_TOUCHSCREEN:
197 switch (touchscreen_get_mode())
198 {
199 case TOUCHSCREEN_POINT:
200 new_btn = BUTTON_TOUCHSCREEN;
201 break;
202 case TOUCHSCREEN_BUTTON:
203 {
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},
208 };
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;
213 }
214 }
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)
258 {
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");
261 }
262 break;
263
264#endif
265 case USB_KEY:
266 if (!pressed)
267 {
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);
273 }
274 return;
275
276#ifdef HAS_BUTTON_HOLD
277 case SDLK_h:
278 if(pressed)
279 {
280 hold_button_state = !hold_button_state;
281 DEBUGF("Hold button is %s\n", hold_button_state?"ON":"OFF");
282 }
283 return;
284#endif
285
286#ifdef HAS_REMOTE_BUTTON_HOLD
287 case SDLK_j:
288 if(pressed)
289 {
290 remote_hold_button_state = !remote_hold_button_state;
291 DEBUGF("Remote hold button is %s\n",
292 remote_hold_button_state?"ON":"OFF");
293 }
294 return;
295#endif
296
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;
340
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;
379
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;
417
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;
465
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;
496
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;
533
534#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
535 case SDLK_t:
536 if(pressed)
537 switch(_remote_type)
538 {
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;
555 }
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;
594
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;
629
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;
656
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;
682
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;
725
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;
768
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;
806
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;
841
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;
932
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;
1066
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;
1150
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;
1412
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;
1435
1436#else
1437#error No keymap defined!
1438#endif /* CONFIG_KEYPAD */
1439 case SDLK_KP0:
1440 case SDLK_F5:
1441 if(pressed)
1442 {
1443 sim_trigger_screendump();
1444 return;
1445 }
1446 break;
1447 }
1448
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).
1453 */
1454#if defined(BUTTON_SCROLL_FWD) && defined(BUTTON_SCROLL_BACK)
1455 if((new_btn == BUTTON_SCROLL_FWD || new_btn == BUTTON_SCROLL_BACK) &&
1456 pressed)
1457 {
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.
1462 */
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);
1471 }
1472#endif
1473
1474 if (pressed)
1475 btn |= new_btn;
1476 else
1477 btn &= ~new_btn;
1478}
1479#if defined(HAVE_BUTTON_DATA) && defined(HAVE_TOUCHSCREEN)
1480int button_read_device(int* data)
1481{
1482 *data = mouse_coords;
1483#else
1484int button_read_device(void)
1485{
1486#endif
1487#ifdef HAS_BUTTON_HOLD
1488 int hold_button = button_hold();
1489
1490#ifdef HAVE_BACKLIGHT
1491 /* light handling */
1492 static int hold_button_old = false;
1493 if (hold_button != hold_button_old)
1494 {
1495 hold_button_old = hold_button;
1496 backlight_hold_changed(hold_button);
1497 }
1498#endif
1499
1500 if (hold_button)
1501 return BUTTON_NONE;
1502 else
1503#endif
1504 gui_message_loop();
1505
1506 return btn;
1507}
1508
1509
1510#ifdef HAVE_TOUCHSCREEN
1511extern bool debug_wps;
1512void mouse_tick_task(void)
1513{
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))
1520 {
1521 if(background)
1522 {
1523 x -= UI_LCD_POSX;
1524 y -= UI_LCD_POSY;
1525
1526 if(x<0 || y<0 || x>SIM_LCD_WIDTH || y>SIM_LCD_HEIGHT)
1527 return;
1528 }
1529
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);
1534 }
1535}
1536#endif
1537
1538void button_init_device(void)
1539{
1540 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
1541#ifdef HAVE_TOUCHSCREEN
1542 tick_add_task(mouse_tick_task);
1543#endif
1544}
1545
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 */
1550struct button_map {
1551 int button, x, y, radius;
1552 char *description;
1553};
1554
1555#ifdef SANSA_FUZE
1556struct 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" }
1568};
1569#elif defined (SANSA_CLIP)
1570struct 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" }
1578};
1579#elif defined (SANSA_C200) || defined(SANSA_C200V2)
1580struct button_map bm[] = {
1581
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" }
1592};
1593#elif defined (SANSA_E200V2) || defined(SANSA_E200)
1594struct 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" }
1605};
1606#elif defined (SANSA_M200V4)
1607struct 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" }
1618};
1619#elif defined (IPOD_VIDEO)
1620struct 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" }
1629};
1630#elif defined (IPOD_MINI) || defined(IPOD_MINI2G)
1631struct 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" }
1640};
1641#elif defined (IPOD_3G)
1642struct 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" }
1651};
1652#elif defined (IPOD_4G)
1653struct 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" }
1662};
1663#elif defined (IPOD_COLOR)
1664struct 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" }
1673};
1674#elif defined (IPOD_1G2G)
1675struct 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" }
1688};
1689#elif defined (IPOD_NANO)
1690struct 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" }
1699};
1700#elif defined (IPOD_NANO2G)
1701struct 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" }
1710};
1711#elif defined (COWON_D2)
1712struct 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" }
1719};
1720#elif defined (IAUDIO_M3)
1721struct 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" }
1740};
1741#elif defined (IAUDIO_M5)
1742struct 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" }
1753};
1754#elif defined (IAUDIO_7)
1755struct button_map bm[] = {
1756 { 0, 0, 0, 0, "None" }
1757};
1758#elif defined (IAUDIO_X5)
1759struct 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" }
1770};
1771#elif defined (ARCHOS_PLAYER)
1772struct 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" }
1780};
1781#elif defined (ARCHOS_RECORDER)
1782struct 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" }
1794};
1795#elif defined (ARCHOS_FMRECORDER) || defined (ARCHOS_RECORDERV2)
1796struct 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" }
1809};
1810#elif defined (ARCHOS_ONDIOSP) || defined (ARCHOS_ONDIOFM)
1811struct 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" }
1819};
1820#elif defined (IRIVER_H10)
1821struct 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" }
1831};
1832#elif defined (IRIVER_H10_5GB)
1833struct 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" }
1843};
1844#elif defined (IRIVER_H120) || defined (IRIVER_H100)
1845struct 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" }
1860};
1861#elif defined (IRIVER_H300)
1862struct 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" }
1875};
1876#elif defined (MROBE_500)
1877struct 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" }
1883};
1884#elif defined (MROBE_100)
1885struct 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" }
1900};
1901#elif defined (GIGABEAT_F)
1902struct 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" }
1914};
1915#elif defined (GIGABEAT_S)
1916struct 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" }
1926};
1927#elif defined (SAMSUNG_YH820)
1928struct 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" }
1938};
1939#elif defined (SAMSUNG_YH920) || defined (SAMSUNG_YH925)
1940struct 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" }
1951};
1952#elif defined (ONDA_VX747) || defined (ONDA_VX747P)
1953struct 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" }
1958};
1959#elif defined (PHILIPS_SA9200)
1960struct 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" }
1973};
1974#elif defined (CREATIVE_ZVM) || defined (CREATIVE_ZVM60GB) || \
1975 defined (CREATIVE_ZV)
1976struct 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" }
1986};
1987#elif defined (MPIO_HD200)
1988struct 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" }
1998};
1999#else
2000struct button_map bm[] = {
2001 { 0, 0, 0, 0, ""}
2002};
2003#endif
2004
2005static int xy2button( int x, int y)
2006{
2007 int i;
2008 extern bool debug_buttons;
2009
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;
2016 }
2017 return 0;
2018}