Fix further tabs
[kugel-rb.git] / uisimulator / sdl / button.c
blob2fbc41e373586a0695a97ca7c0df4509d7db78e1
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 "uisdl.h"
23 #include "lcd-charcells.h"
24 #include "lcd-remote.h"
25 #include "config.h"
26 #include "button.h"
27 #include "kernel.h"
28 #include "backlight.h"
29 #include "misc.h"
30 #include "sim_tasks.h"
31 #include "button-sdl.h"
33 #include "debug.h"
35 #ifdef HAVE_TOUCHSCREEN
36 #include "touchscreen.h"
37 static int mouse_coords = 0;
38 #endif
39 /* how long until repeat kicks in */
40 #define REPEAT_START 6
42 /* the speed repeat starts at */
43 #define REPEAT_INTERVAL_START 4
45 /* speed repeat finishes at */
46 #define REPEAT_INTERVAL_FINISH 2
48 #if defined(IRIVER_H100_SERIES) || defined (IRIVER_H300_SERIES)
49 int _remote_type=REMOTETYPE_H100_LCD;
51 int remote_type(void)
53 return _remote_type;
55 #endif
57 struct event_queue button_queue;
59 static int btn = 0; /* Hopefully keeps track of currently pressed keys... */
61 #ifdef HAS_BUTTON_HOLD
62 bool hold_button_state = false;
63 bool button_hold(void) {
64 return hold_button_state;
66 #endif
68 #ifdef HAS_REMOTE_BUTTON_HOLD
69 bool remote_hold_button_state = false;
70 bool remote_button_hold(void) {
71 return remote_hold_button_state;
73 #endif
75 void button_event(int key, bool pressed)
77 int new_btn = 0;
78 static bool usb_connected = false;
79 if (usb_connected && key != SDLK_u)
80 return;
81 switch (key)
84 #ifdef HAVE_TOUCHSCREEN
85 case BUTTON_TOUCHSCREEN:
86 switch (touchscreen_get_mode())
88 case TOUCHSCREEN_POINT:
89 new_btn = BUTTON_TOUCHSCREEN;
90 break;
91 case TOUCHSCREEN_BUTTON:
93 static int touchscreen_buttons[3][3] = {
94 {BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT},
95 {BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT},
96 {BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT},
98 int px_x = ((mouse_coords&0xffff0000)>>16);
99 int px_y = ((mouse_coords&0x0000ffff));
100 new_btn = touchscreen_buttons[px_y/(LCD_HEIGHT/3)][px_x/(LCD_WIDTH/3)];
101 break;
104 break;
105 case SDLK_KP7:
106 new_btn = BUTTON_TOPLEFT;
107 break;
108 case SDLK_KP8:
109 new_btn = BUTTON_TOPMIDDLE;
110 break;
111 case SDLK_KP9:
112 new_btn = BUTTON_TOPRIGHT;
113 break;
114 case SDLK_KP4:
115 new_btn = BUTTON_MIDLEFT;
116 break;
117 case SDLK_KP5:
118 new_btn = BUTTON_CENTER;
119 break;
120 case SDLK_KP6:
121 new_btn = BUTTON_MIDRIGHT;
122 break;
123 case SDLK_KP1:
124 new_btn = BUTTON_BOTTOMLEFT;
125 break;
126 case SDLK_KP2:
127 new_btn = BUTTON_BOTTOMMIDDLE;
128 break;
129 case SDLK_KP3:
130 new_btn = BUTTON_BOTTOMRIGHT;
131 break;
132 case SDLK_F4:
133 if(pressed)
135 touchscreen_set_mode(touchscreen_get_mode() == TOUCHSCREEN_POINT ? TOUCHSCREEN_BUTTON : TOUCHSCREEN_POINT);
136 printf("Touchscreen mode: %s\n", touchscreen_get_mode() == TOUCHSCREEN_POINT ? "TOUCHSCREEN_POINT" : "TOUCHSCREEN_BUTTON");
138 break;
140 #endif
141 case SDLK_u:
142 if (!pressed)
144 usb_connected = !usb_connected;
145 if (usb_connected)
146 queue_post(&button_queue, SYS_USB_CONNECTED, 0);
147 else
148 queue_post(&button_queue, SYS_USB_DISCONNECTED, 0);
150 return;
152 #ifdef HAS_BUTTON_HOLD
153 case SDLK_h:
154 if(pressed)
156 hold_button_state = !hold_button_state;
157 DEBUGF("Hold button is %s\n", hold_button_state?"ON":"OFF");
159 return;
160 #endif
162 #ifdef HAS_REMOTE_BUTTON_HOLD
163 case SDLK_j:
164 if(pressed)
166 remote_hold_button_state = !remote_hold_button_state;
167 DEBUGF("Remote hold button is %s\n",
168 remote_hold_button_state?"ON":"OFF");
170 return;
171 #endif
173 #if CONFIG_KEYPAD == GIGABEAT_PAD
174 case SDLK_KP4:
175 case SDLK_LEFT:
176 new_btn = BUTTON_LEFT;
177 break;
178 case SDLK_KP6:
179 case SDLK_RIGHT:
180 new_btn = BUTTON_RIGHT;
181 break;
182 case SDLK_KP8:
183 case SDLK_UP:
184 new_btn = BUTTON_UP;
185 break;
186 case SDLK_KP2:
187 case SDLK_DOWN:
188 new_btn = BUTTON_DOWN;
189 break;
190 case SDLK_KP_PLUS:
191 case SDLK_F8:
192 new_btn = BUTTON_POWER;
193 break;
194 case SDLK_ESCAPE:
195 new_btn = BUTTON_POWER;
196 break;
197 case SDLK_KP_ENTER:
198 case SDLK_RETURN:
199 case SDLK_a:
200 new_btn = BUTTON_A;
201 break;
202 case SDLK_KP5:
203 case SDLK_SPACE:
204 new_btn = BUTTON_SELECT;
205 break;
206 case SDLK_KP_PERIOD:
207 case SDLK_INSERT:
208 new_btn = BUTTON_MENU;
209 break;
210 case SDLK_KP9:
211 new_btn = BUTTON_VOL_UP;
212 break;
213 case SDLK_KP3:
214 new_btn = BUTTON_VOL_DOWN;
215 break;
217 #elif CONFIG_KEYPAD == GIGABEAT_S_PAD
218 case SDLK_KP4:
219 case SDLK_LEFT:
220 new_btn = BUTTON_LEFT;
221 break;
222 case SDLK_KP6:
223 case SDLK_RIGHT:
224 new_btn = BUTTON_RIGHT;
225 break;
226 case SDLK_KP8:
227 case SDLK_UP:
228 new_btn = BUTTON_UP;
229 break;
230 case SDLK_KP2:
231 case SDLK_DOWN:
232 new_btn = BUTTON_DOWN;
233 break;
234 case SDLK_F8:
235 case SDLK_ESCAPE:
236 new_btn = BUTTON_POWER;
237 break;
238 case SDLK_KP_PLUS:
239 case SDLK_KP_ENTER:
240 case SDLK_RETURN:
241 new_btn = BUTTON_PLAY;
242 break;
243 case SDLK_KP7:
244 new_btn = BUTTON_BACK;
245 break;
246 case SDLK_KP5:
247 case SDLK_SPACE:
248 new_btn = BUTTON_SELECT;
249 break;
250 case SDLK_KP9:
251 case SDLK_KP_PERIOD:
252 case SDLK_INSERT:
253 new_btn = BUTTON_MENU;
254 break;
256 #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
257 case SDLK_KP4:
258 case SDLK_LEFT:
259 new_btn = BUTTON_LEFT;
260 break;
261 case SDLK_KP6:
262 case SDLK_RIGHT:
263 new_btn = BUTTON_RIGHT;
264 break;
265 case SDLK_KP8:
266 case SDLK_UP:
267 new_btn = BUTTON_UP;
268 break;
269 case SDLK_KP2:
270 case SDLK_DOWN:
271 new_btn = BUTTON_DOWN;
272 break;
273 case SDLK_KP_PLUS:
274 case SDLK_F8:
275 new_btn = BUTTON_PLAY;
276 break;
277 case SDLK_ESCAPE:
278 new_btn = BUTTON_POWER;
279 break;
280 case SDLK_KP_ENTER:
281 case SDLK_RETURN:
282 case SDLK_a:
283 new_btn = BUTTON_POWER;
284 break;
285 case SDLK_KP_DIVIDE:
286 case SDLK_F1:
287 new_btn = BUTTON_REC;
288 break;
289 case SDLK_KP5:
290 case SDLK_SPACE:
291 new_btn = BUTTON_SELECT;
292 break;
294 #elif CONFIG_KEYPAD == IAUDIO_M3_PAD
295 case SDLK_KP4:
296 case SDLK_LEFT:
297 new_btn = BUTTON_LEFT;
298 break;
299 case SDLK_KP6:
300 case SDLK_RIGHT:
301 new_btn = BUTTON_RIGHT;
302 break;
303 case SDLK_KP8:
304 case SDLK_UP:
305 new_btn = BUTTON_VOL_UP;
306 break;
307 case SDLK_KP2:
308 case SDLK_DOWN:
309 new_btn = BUTTON_VOL_DOWN;
310 break;
311 case SDLK_KP_PERIOD:
312 case SDLK_INSERT:
313 new_btn = BUTTON_MODE;
314 break;
315 case SDLK_KP_DIVIDE:
316 case SDLK_F1:
317 new_btn = BUTTON_REC;
318 break;
319 case SDLK_KP5:
320 case SDLK_SPACE:
321 new_btn = BUTTON_PLAY;
322 break;
324 #elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
325 || (CONFIG_KEYPAD == IPOD_4G_PAD)
326 case SDLK_KP4:
327 case SDLK_LEFT:
328 new_btn = BUTTON_LEFT;
329 break;
330 case SDLK_KP6:
331 case SDLK_RIGHT:
332 new_btn = BUTTON_RIGHT;
333 break;
334 case SDLK_KP8:
335 case SDLK_UP:
336 new_btn = BUTTON_SCROLL_BACK;
337 break;
338 case SDLK_KP2:
339 case SDLK_DOWN:
340 new_btn = BUTTON_SCROLL_FWD;
341 break;
342 case SDLK_KP_PLUS:
343 case SDLK_F8:
344 new_btn = BUTTON_PLAY;
345 break;
346 case SDLK_KP5:
347 case SDLK_SPACE:
348 new_btn = BUTTON_SELECT;
349 break;
350 case SDLK_KP_PERIOD:
351 case SDLK_INSERT:
352 new_btn = BUTTON_MENU;
353 break;
355 #elif CONFIG_KEYPAD == IRIVER_H10_PAD
356 case SDLK_KP4:
357 case SDLK_LEFT:
358 new_btn = BUTTON_LEFT;
359 break;
360 case SDLK_KP6:
361 case SDLK_RIGHT:
362 new_btn = BUTTON_RIGHT;
363 break;
364 case SDLK_KP8:
365 case SDLK_UP:
366 new_btn = BUTTON_SCROLL_UP;
367 break;
368 case SDLK_KP2:
369 case SDLK_DOWN:
370 new_btn = BUTTON_SCROLL_DOWN;
371 break;
372 case SDLK_KP_PLUS:
373 case SDLK_F8:
374 new_btn = BUTTON_POWER;
375 break;
376 case SDLK_ESCAPE:
377 new_btn = BUTTON_POWER;
378 break;
379 case SDLK_KP_DIVIDE:
380 case SDLK_F1:
381 new_btn = BUTTON_REW;
382 break;
383 case SDLK_KP_MULTIPLY:
384 case SDLK_F2:
385 new_btn = BUTTON_FF;
386 break;
387 case SDLK_KP5:
388 case SDLK_SPACE:
389 new_btn = BUTTON_PLAY;
390 break;
392 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
393 case SDLK_t:
394 if(pressed)
395 switch(_remote_type)
397 case REMOTETYPE_UNPLUGGED:
398 _remote_type=REMOTETYPE_H100_LCD;
399 DEBUGF("Changed remote type to H100\n");
400 break;
401 case REMOTETYPE_H100_LCD:
402 _remote_type=REMOTETYPE_H300_LCD;
403 DEBUGF("Changed remote type to H300\n");
404 break;
405 case REMOTETYPE_H300_LCD:
406 _remote_type=REMOTETYPE_H300_NONLCD;
407 DEBUGF("Changed remote type to H300 NON-LCD\n");
408 break;
409 case REMOTETYPE_H300_NONLCD:
410 _remote_type=REMOTETYPE_UNPLUGGED;
411 DEBUGF("Changed remote type to none\n");
412 break;
414 break;
415 case SDLK_KP4:
416 case SDLK_LEFT:
417 new_btn = BUTTON_LEFT;
418 break;
419 case SDLK_KP6:
420 case SDLK_RIGHT:
421 new_btn = BUTTON_RIGHT;
422 break;
423 case SDLK_KP8:
424 case SDLK_UP:
425 new_btn = BUTTON_UP;
426 break;
427 case SDLK_KP2:
428 case SDLK_DOWN:
429 new_btn = BUTTON_DOWN;
430 break;
431 case SDLK_KP_PLUS:
432 case SDLK_F8:
433 new_btn = BUTTON_ON;
434 break;
435 case SDLK_KP_ENTER:
436 case SDLK_RETURN:
437 case SDLK_a:
438 new_btn = BUTTON_OFF;
439 break;
440 case SDLK_KP_DIVIDE:
441 case SDLK_F1:
442 new_btn = BUTTON_REC;
443 break;
444 case SDLK_KP5:
445 case SDLK_SPACE:
446 new_btn = BUTTON_SELECT;
447 break;
448 case SDLK_KP_PERIOD:
449 case SDLK_INSERT:
450 new_btn = BUTTON_MODE;
451 break;
453 #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
454 case SDLK_KP4:
455 case SDLK_LEFT:
456 new_btn = BUTTON_LEFT;
457 break;
458 case SDLK_KP6:
459 case SDLK_RIGHT:
460 new_btn = BUTTON_RIGHT;
461 break;
462 case SDLK_KP8:
463 case SDLK_UP:
464 new_btn = BUTTON_UP;
465 break;
466 case SDLK_KP2:
467 case SDLK_DOWN:
468 new_btn = BUTTON_DOWN;
469 break;
470 case SDLK_KP_PLUS:
471 case SDLK_F8:
472 new_btn = BUTTON_PLAY;
473 break;
474 case SDLK_KP_ENTER:
475 case SDLK_RETURN:
476 case SDLK_a:
477 new_btn = BUTTON_EQ;
478 break;
479 case SDLK_KP5:
480 case SDLK_SPACE:
481 new_btn = BUTTON_SELECT;
482 break;
483 case SDLK_KP_PERIOD:
484 case SDLK_INSERT:
485 new_btn = BUTTON_MODE;
486 break;
488 #elif CONFIG_KEYPAD == ONDIO_PAD
489 case SDLK_KP4:
490 case SDLK_LEFT:
491 new_btn = BUTTON_LEFT;
492 break;
493 case SDLK_KP6:
494 case SDLK_RIGHT:
495 new_btn = BUTTON_RIGHT;
496 break;
497 case SDLK_KP8:
498 case SDLK_UP:
499 new_btn = BUTTON_UP;
500 break;
501 case SDLK_KP2:
502 case SDLK_DOWN:
503 new_btn = BUTTON_DOWN;
504 break;
505 case SDLK_KP_ENTER:
506 case SDLK_RETURN:
507 case SDLK_a:
508 new_btn = BUTTON_OFF;
509 break;
510 case SDLK_KP_PERIOD:
511 case SDLK_INSERT:
512 new_btn = BUTTON_MENU;
513 break;
515 #elif CONFIG_KEYPAD == PLAYER_PAD
516 case SDLK_KP4:
517 case SDLK_LEFT:
518 new_btn = BUTTON_LEFT;
519 break;
520 case SDLK_KP6:
521 case SDLK_RIGHT:
522 new_btn = BUTTON_RIGHT;
523 break;
524 case SDLK_KP8:
525 case SDLK_UP:
526 new_btn = BUTTON_PLAY;
527 break;
528 case SDLK_KP2:
529 case SDLK_DOWN:
530 new_btn = BUTTON_STOP;
531 break;
532 case SDLK_KP_PLUS:
533 case SDLK_F8:
534 new_btn = BUTTON_ON;
535 break;
536 case SDLK_KP_PERIOD:
537 case SDLK_INSERT:
538 new_btn = BUTTON_MENU;
539 break;
541 #elif CONFIG_KEYPAD == RECORDER_PAD
542 case SDLK_KP4:
543 case SDLK_LEFT:
544 new_btn = BUTTON_LEFT;
545 break;
546 case SDLK_KP6:
547 case SDLK_RIGHT:
548 new_btn = BUTTON_RIGHT;
549 break;
550 case SDLK_KP8:
551 case SDLK_UP:
552 new_btn = BUTTON_UP;
553 break;
554 case SDLK_KP2:
555 case SDLK_DOWN:
556 new_btn = BUTTON_DOWN;
557 break;
558 case SDLK_KP_PLUS:
559 case SDLK_F8:
560 new_btn = BUTTON_ON;
561 break;
562 case SDLK_KP_ENTER:
563 case SDLK_RETURN:
564 case SDLK_a:
565 new_btn = BUTTON_OFF;
566 break;
567 case SDLK_KP_DIVIDE:
568 case SDLK_F1:
569 new_btn = BUTTON_F1;
570 break;
571 case SDLK_KP_MULTIPLY:
572 case SDLK_F2:
573 new_btn = BUTTON_F2;
574 break;
575 case SDLK_KP_MINUS:
576 case SDLK_F3:
577 new_btn = BUTTON_F3;
578 break;
579 case SDLK_KP5:
580 case SDLK_SPACE:
581 new_btn = BUTTON_PLAY;
582 break;
584 #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
585 case SDLK_KP4:
586 case SDLK_LEFT:
587 new_btn = BUTTON_LEFT;
588 break;
589 case SDLK_KP6:
590 case SDLK_RIGHT:
591 new_btn = BUTTON_RIGHT;
592 break;
593 case SDLK_KP8:
594 case SDLK_UP:
595 new_btn = BUTTON_UP;
596 break;
597 case SDLK_KP2:
598 case SDLK_DOWN:
599 new_btn = BUTTON_DOWN;
600 break;
601 case SDLK_KP_PLUS:
602 case SDLK_F8:
603 new_btn = BUTTON_ON;
604 break;
605 case SDLK_KP_ENTER:
606 case SDLK_RETURN:
607 case SDLK_a:
608 new_btn = BUTTON_OFF;
609 break;
610 case SDLK_KP_DIVIDE:
611 case SDLK_F1:
612 new_btn = BUTTON_F1;
613 break;
614 case SDLK_KP_MULTIPLY:
615 case SDLK_F2:
616 new_btn = BUTTON_F2;
617 break;
618 case SDLK_KP_MINUS:
619 case SDLK_F3:
620 new_btn = BUTTON_F3;
621 break;
622 case SDLK_KP5:
623 case SDLK_SPACE:
624 new_btn = BUTTON_SELECT;
625 break;
627 #elif CONFIG_KEYPAD == SANSA_E200_PAD
628 case SDLK_KP4:
629 case SDLK_LEFT:
630 new_btn = BUTTON_LEFT;
631 break;
632 case SDLK_KP6:
633 case SDLK_RIGHT:
634 new_btn = BUTTON_RIGHT;
635 break;
636 case SDLK_KP8:
637 case SDLK_UP:
638 new_btn = BUTTON_SCROLL_BACK;
639 break;
640 case SDLK_KP2:
641 case SDLK_DOWN:
642 new_btn = BUTTON_SCROLL_FWD;
643 break;
644 case SDLK_KP9:
645 case SDLK_PAGEUP:
646 new_btn = BUTTON_UP;
647 break;
648 case SDLK_KP3:
649 case SDLK_PAGEDOWN:
650 new_btn = BUTTON_DOWN;
651 break;
652 case SDLK_KP1:
653 case SDLK_HOME:
654 new_btn = BUTTON_POWER;
655 break;
656 case SDLK_KP7:
657 case SDLK_END:
658 new_btn = BUTTON_REC;
659 break;
660 case SDLK_KP5:
661 case SDLK_SPACE:
662 new_btn = BUTTON_SELECT;
663 break;
665 #elif CONFIG_KEYPAD == SANSA_C200_PAD
666 case SDLK_KP4:
667 case SDLK_LEFT:
668 new_btn = BUTTON_LEFT;
669 break;
670 case SDLK_KP6:
671 case SDLK_RIGHT:
672 new_btn = BUTTON_RIGHT;
673 break;
674 case SDLK_KP8:
675 case SDLK_UP:
676 new_btn = BUTTON_UP;
677 break;
678 case SDLK_KP2:
679 case SDLK_DOWN:
680 new_btn = BUTTON_DOWN;
681 break;
682 case SDLK_KP3:
683 new_btn = BUTTON_POWER;
684 break;
685 case SDLK_KP1:
686 new_btn = BUTTON_REC;
687 break;
688 case SDLK_KP5:
689 case SDLK_KP_ENTER:
690 case SDLK_RETURN:
691 new_btn = BUTTON_SELECT;
692 break;
693 case SDLK_KP7:
694 new_btn = BUTTON_VOL_DOWN;
695 break;
696 case SDLK_KP9:
697 new_btn = BUTTON_VOL_UP;
698 break;
700 #elif CONFIG_KEYPAD == MROBE500_PAD
701 case SDLK_F9:
702 new_btn = BUTTON_RC_HEART;
703 break;
704 case SDLK_F10:
705 new_btn = BUTTON_RC_MODE;
706 break;
707 case SDLK_F11:
708 new_btn = BUTTON_RC_VOL_DOWN;
709 break;
710 case SDLK_F12:
711 new_btn = BUTTON_RC_VOL_UP;
712 break;
713 case SDLK_LEFT:
714 new_btn = BUTTON_LEFT;
715 break;
716 case SDLK_RIGHT:
717 new_btn = BUTTON_RIGHT;
718 break;
719 case SDLK_UP:
720 new_btn = BUTTON_RC_PLAY;
721 break;
722 case SDLK_DOWN:
723 new_btn = BUTTON_RC_DOWN;
724 break;
725 case SDLK_F8:
726 case SDLK_ESCAPE:
727 new_btn = BUTTON_POWER;
728 break;
729 #elif CONFIG_KEYPAD == MROBE100_PAD
730 case SDLK_F9:
731 new_btn = BUTTON_RC_HEART;
732 break;
733 case SDLK_F10:
734 new_btn = BUTTON_RC_MODE;
735 break;
736 case SDLK_F11:
737 new_btn = BUTTON_RC_VOL_DOWN;
738 break;
739 case SDLK_F12:
740 new_btn = BUTTON_RC_VOL_UP;
741 break;
742 case SDLK_LEFT:
743 new_btn = BUTTON_RC_FF;
744 break;
745 case SDLK_RIGHT:
746 new_btn = BUTTON_RC_REW;
747 break;
748 case SDLK_UP:
749 new_btn = BUTTON_RC_PLAY;
750 break;
751 case SDLK_DOWN:
752 new_btn = BUTTON_RC_DOWN;
753 break;
754 case SDLK_KP1:
755 new_btn = BUTTON_DISPLAY;
756 break;
757 case SDLK_KP7:
758 new_btn = BUTTON_MENU;
759 break;
760 case SDLK_KP9:
761 new_btn = BUTTON_PLAY;
762 break;
763 case SDLK_KP4:
764 new_btn = BUTTON_LEFT;
765 break;
766 case SDLK_KP6:
767 new_btn = BUTTON_RIGHT;
768 break;
769 case SDLK_KP8:
770 new_btn = BUTTON_UP;
771 break;
772 case SDLK_KP2:
773 new_btn = BUTTON_DOWN;
774 break;
775 case SDLK_KP5:
776 case SDLK_SPACE:
777 new_btn = BUTTON_SELECT;
778 break;
779 case SDLK_KP_MULTIPLY:
780 case SDLK_F8:
781 case SDLK_ESCAPE:
782 new_btn = BUTTON_POWER;
783 break;
785 #elif CONFIG_KEYPAD == COWON_D2_PAD
786 case SDLK_ESCAPE:
787 new_btn = BUTTON_POWER;
788 break;
789 case SDLK_KP_PLUS:
790 new_btn = BUTTON_PLUS;
791 break;
792 case SDLK_KP_MINUS:
793 new_btn = BUTTON_MINUS;
794 break;
795 case SDLK_KP_ENTER:
796 new_btn = BUTTON_MENU;
797 break;
798 #elif CONFIG_KEYPAD == IAUDIO67_PAD
799 case SDLK_UP:
800 new_btn = BUTTON_RIGHT;
801 break;
802 case SDLK_DOWN:
803 new_btn = BUTTON_LEFT;
804 break;
805 case SDLK_LEFT:
806 new_btn = BUTTON_STOP;
807 break;
808 case SDLK_RETURN:
809 case SDLK_KP_ENTER:
810 case SDLK_RIGHT:
811 new_btn = BUTTON_PLAY;
812 break;
813 case SDLK_PLUS:
814 new_btn = BUTTON_VOLUP;
815 break;
816 case SDLK_MINUS:
817 new_btn = BUTTON_VOLDOWN;
818 break;
819 case SDLK_SPACE:
820 new_btn = BUTTON_MENU;
821 break;
822 case SDLK_BACKSPACE:
823 new_btn = BUTTON_POWER;
824 break;
825 #elif CONFIG_KEYPAD == CREATIVEZVM_PAD
826 case SDLK_KP1:
827 new_btn = BUTTON_BACK;
828 break;
829 case SDLK_KP3:
830 new_btn = BUTTON_MENU;
831 break;
832 case SDLK_KP7:
833 new_btn = BUTTON_CUSTOM;
834 break;
835 case SDLK_KP9:
836 new_btn = BUTTON_PLAY;
837 break;
838 case SDLK_KP4:
839 case SDLK_LEFT:
840 new_btn = BUTTON_LEFT;
841 break;
842 case SDLK_KP6:
843 case SDLK_RIGHT:
844 new_btn = BUTTON_RIGHT;
845 break;
846 case SDLK_KP8:
847 case SDLK_UP:
848 new_btn = BUTTON_UP;
849 break;
850 case SDLK_KP2:
851 case SDLK_DOWN:
852 new_btn = BUTTON_DOWN;
853 break;
854 case SDLK_KP5:
855 case SDLK_SPACE:
856 new_btn = BUTTON_SELECT;
857 break;
858 case SDLK_KP_MULTIPLY:
859 case SDLK_F8:
860 case SDLK_ESCAPE:
861 new_btn = BUTTON_POWER;
862 break;
863 #elif CONFIG_KEYPAD == CREATIVEZV_PAD
864 case SDLK_KP1:
865 new_btn = BUTTON_PREV;
866 break;
867 case SDLK_KP3:
868 new_btn = BUTTON_NEXT;
869 break;
870 case SDLK_KP7:
871 new_btn = BUTTON_BACK;
872 break;
873 case SDLK_p:
874 new_btn = BUTTON_PLAY;
875 break;
876 case SDLK_KP9:
877 new_btn = BUTTON_MENU;
878 break;
879 case SDLK_KP4:
880 case SDLK_LEFT:
881 new_btn = BUTTON_LEFT;
882 break;
883 case SDLK_KP6:
884 case SDLK_RIGHT:
885 new_btn = BUTTON_RIGHT;
886 break;
887 case SDLK_KP8:
888 case SDLK_UP:
889 new_btn = BUTTON_UP;
890 break;
891 case SDLK_KP2:
892 case SDLK_DOWN:
893 new_btn = BUTTON_DOWN;
894 break;
895 case SDLK_KP5:
896 case SDLK_SPACE:
897 new_btn = BUTTON_SELECT;
898 break;
899 case SDLK_KP_MULTIPLY:
900 case SDLK_F8:
901 case SDLK_ESCAPE:
902 new_btn = BUTTON_POWER;
903 break;
904 case SDLK_z:
905 new_btn = BUTTON_VOL_DOWN;
906 break;
907 case SDLK_s:
908 new_btn = BUTTON_VOL_UP;
910 #elif CONFIG_KEYPAD == MEIZU_M6SL_PAD
911 case SDLK_KP1:
912 new_btn = BUTTON_PREV;
913 break;
914 case SDLK_KP3:
915 new_btn = BUTTON_NEXT;
916 break;
917 case SDLK_KP_ENTER:
918 case SDLK_RETURN:
919 case SDLK_a:
920 new_btn = BUTTON_PLAY;
921 break;
922 case SDLK_KP_PERIOD:
923 case SDLK_INSERT:
924 new_btn = BUTTON_MENU;
925 break;
926 case SDLK_KP8:
927 case SDLK_UP:
928 new_btn = BUTTON_UP;
929 break;
930 case SDLK_KP2:
931 case SDLK_DOWN:
932 new_btn = BUTTON_DOWN;
933 break;
934 case SDLK_KP5:
935 case SDLK_SPACE:
936 new_btn = BUTTON_SELECT;
937 break;
938 #elif CONFIG_KEYPAD == SANSA_FUZE_PAD
939 case SDLK_KP4:
940 case SDLK_LEFT:
941 new_btn = BUTTON_LEFT;
942 break;
943 case SDLK_KP6:
944 case SDLK_RIGHT:
945 new_btn = BUTTON_RIGHT;
946 break;
947 case SDLK_KP8:
948 case SDLK_UP:
949 new_btn = BUTTON_SCROLL_BACK;
950 break;
951 case SDLK_KP2:
952 case SDLK_DOWN:
953 new_btn = BUTTON_SCROLL_FWD;
954 break;
955 case SDLK_PAGEUP:
956 case SDLK_KP9:
957 new_btn = BUTTON_UP;
958 break;
959 case SDLK_PAGEDOWN:
960 case SDLK_KP3:
961 new_btn = BUTTON_DOWN;
962 break;
963 case SDLK_KP_MINUS:
964 case SDLK_KP1:
965 new_btn = BUTTON_POWER;
966 break;
967 case SDLK_KP_MULTIPLY:
968 new_btn = BUTTON_HOME;
969 break;
970 case SDLK_KP5:
971 case SDLK_SPACE:
972 case SDLK_KP_ENTER:
973 case SDLK_RETURN:
974 new_btn = BUTTON_SELECT;
975 break;
976 #elif CONFIG_KEYPAD == SANSA_CLIP_PAD
977 case SDLK_KP4:
978 case SDLK_LEFT:
979 new_btn = BUTTON_LEFT;
980 break;
981 case SDLK_KP6:
982 case SDLK_RIGHT:
983 new_btn = BUTTON_RIGHT;
984 break;
985 case SDLK_KP8:
986 case SDLK_UP:
987 new_btn = BUTTON_UP;
988 break;
989 case SDLK_KP2:
990 case SDLK_DOWN:
991 new_btn = BUTTON_DOWN;
992 break;
994 case SDLK_INSERT:
995 case SDLK_KP_MULTIPLY:
996 new_btn = BUTTON_HOME;
997 break;
998 case SDLK_SPACE:
999 case SDLK_KP5:
1000 new_btn = BUTTON_SELECT;
1001 break;
1002 case SDLK_PAGEDOWN:
1003 case SDLK_KP3:
1004 new_btn = BUTTON_VOL_DOWN;
1005 break;
1006 case SDLK_PAGEUP:
1007 case SDLK_KP9:
1008 new_btn = BUTTON_VOL_UP;
1009 break;
1010 case SDLK_ESCAPE:
1011 case SDLK_KP1:
1012 new_btn = BUTTON_POWER;
1013 break;
1014 #elif CONFIG_KEYPAD == SANSA_M200_PAD
1015 case SDLK_KP4:
1016 case SDLK_LEFT:
1017 new_btn = BUTTON_LEFT;
1018 break;
1019 case SDLK_KP6:
1020 case SDLK_RIGHT:
1021 new_btn = BUTTON_RIGHT;
1022 break;
1023 case SDLK_KP8:
1024 case SDLK_UP:
1025 new_btn = BUTTON_UP;
1026 break;
1027 case SDLK_KP2:
1028 case SDLK_DOWN:
1029 new_btn = BUTTON_DOWN;
1030 break;
1031 case SDLK_PLUS:
1032 new_btn = BUTTON_POWER;
1033 break;
1034 case SDLK_KP5:
1035 new_btn = BUTTON_SELECT;
1036 break;
1037 case SDLK_KP7:
1038 new_btn = BUTTON_VOL_DOWN;
1039 break;
1040 case SDLK_KP9:
1041 new_btn = BUTTON_VOL_UP;
1042 break;
1043 #elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
1044 case SDLK_KP4:
1045 case SDLK_LEFT:
1046 new_btn = BUTTON_LEFT;
1047 break;
1048 case SDLK_KP6:
1049 case SDLK_RIGHT:
1050 new_btn = BUTTON_RIGHT;
1051 break;
1052 case SDLK_KP8:
1053 case SDLK_UP:
1054 new_btn = BUTTON_UP;
1055 break;
1056 case SDLK_KP2:
1057 case SDLK_DOWN:
1058 new_btn = BUTTON_DOWN;
1059 break;
1060 case SDLK_KP5:
1061 case SDLK_SPACE:
1062 new_btn = BUTTON_PLAY;
1063 break;
1064 case SDLK_KP7:
1065 new_btn = BUTTON_PREV;
1066 break;
1067 case SDLK_KP9:
1068 new_btn = BUTTON_NEXT;
1069 break;
1070 case SDLK_KP_ENTER:
1071 case SDLK_RETURN:
1072 new_btn = BUTTON_POWER;
1073 break;
1074 case SDLK_PAGEUP:
1075 new_btn = BUTTON_VOL_UP;
1076 break;
1077 case SDLK_PAGEDOWN:
1078 new_btn = BUTTON_VOL_DOWN;
1079 break;
1080 #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
1081 case SDLK_KP4:
1082 case SDLK_LEFT:
1083 new_btn = BUTTON_LEFT;
1084 break;
1085 case SDLK_KP6:
1086 case SDLK_RIGHT:
1087 new_btn = BUTTON_RIGHT;
1088 break;
1089 case SDLK_KP8:
1090 case SDLK_UP:
1091 new_btn = BUTTON_UP;
1092 break;
1093 case SDLK_KP2:
1094 case SDLK_DOWN:
1095 new_btn = BUTTON_DOWN;
1096 break;
1097 case SDLK_KP5:
1098 case SDLK_SPACE:
1099 new_btn = BUTTON_SELECT;
1100 break;
1101 case SDLK_KP7:
1102 case SDLK_ESCAPE:
1103 new_btn = BUTTON_POWER;
1104 break;
1105 case SDLK_KP1:
1106 new_btn = BUTTON_PLAYLIST;
1107 break;
1108 case SDLK_KP9:
1109 new_btn = BUTTON_VOL_UP;
1110 break;
1111 case SDLK_KP3:
1112 new_btn = BUTTON_VOL_DOWN;
1113 break;
1114 case SDLK_KP_MINUS:
1115 new_btn = BUTTON_MENU;
1116 break;
1117 case SDLK_KP_PLUS:
1118 new_btn = BUTTON_VIEW;
1119 break;
1120 #elif CONFIG_KEYPAD == ONDAVX747_PAD
1121 case SDLK_ESCAPE:
1122 new_btn = BUTTON_POWER;
1123 break;
1124 case SDLK_KP_PLUS:
1125 case SDLK_RIGHT:
1126 new_btn = BUTTON_VOL_UP;
1127 break;
1128 case SDLK_KP_MINUS:
1129 case SDLK_LEFT:
1130 new_btn = BUTTON_VOL_DOWN;
1131 break;
1132 case SDLK_KP_ENTER:
1133 case SDLK_RETURN:
1134 new_btn = BUTTON_MENU;
1135 break;
1136 #elif CONFIG_KEYPAD == ONDAVX777_PAD
1137 case SDLK_ESCAPE:
1138 new_btn = BUTTON_POWER;
1139 break;
1140 #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
1141 case SDLK_KP4:
1142 case SDLK_LEFT:
1143 new_btn = BUTTON_LEFT;
1144 break;
1145 case SDLK_KP6:
1146 case SDLK_RIGHT:
1147 new_btn = BUTTON_RIGHT;
1148 break;
1149 case SDLK_KP8:
1150 case SDLK_UP:
1151 new_btn = BUTTON_UP;
1152 break;
1153 case SDLK_KP2:
1154 case SDLK_DOWN:
1155 new_btn = BUTTON_DOWN;
1156 break;
1157 case SDLK_KP5:
1158 case SDLK_KP_ENTER:
1159 new_btn = BUTTON_PLAY;
1160 break;
1161 case SDLK_KP9:
1162 case SDLK_PAGEUP:
1163 new_btn = BUTTON_FFWD;
1164 break;
1165 #ifdef SAMSUNG_YH820
1166 case SDLK_KP7:
1167 #else
1168 case SDLK_KP3:
1169 #endif
1170 case SDLK_PAGEDOWN:
1171 new_btn = BUTTON_REW;
1172 break;
1173 case SDLK_KP_PLUS:
1174 new_btn = BUTTON_REC;
1175 break;
1176 #elif CONFIG_KEYPAD == MINI2440_PAD
1177 case SDLK_LEFT:
1178 new_btn = BUTTON_LEFT;
1179 break;
1180 case SDLK_RIGHT:
1181 new_btn = BUTTON_RIGHT;
1182 break;
1183 case SDLK_UP:
1184 new_btn = BUTTON_UP;
1185 break;
1186 case SDLK_DOWN:
1187 new_btn = BUTTON_DOWN;
1188 break;
1189 case SDLK_F8:
1190 case SDLK_ESCAPE:
1191 new_btn = BUTTON_POWER;
1192 break;
1193 case SDLK_KP_ENTER:
1194 case SDLK_RETURN:
1195 case SDLK_a:
1196 new_btn = BUTTON_A;
1197 break;
1198 case SDLK_SPACE:
1199 new_btn = BUTTON_SELECT;
1200 break;
1201 case SDLK_KP_PERIOD:
1202 case SDLK_INSERT:
1203 new_btn = BUTTON_MENU;
1204 break;
1205 case SDLK_KP_PLUS:
1206 new_btn = BUTTON_VOL_UP;
1207 break;
1208 case SDLK_KP_MINUS:
1209 new_btn = BUTTON_VOL_DOWN;
1210 break;
1211 #else
1212 #error No keymap defined!
1213 #endif /* CONFIG_KEYPAD */
1214 case SDLK_KP0:
1215 case SDLK_F5:
1216 if(pressed)
1218 sim_trigger_screendump();
1219 return;
1221 break;
1224 /* Call to make up for scrollwheel target implementation. This is
1225 * not handled in the main button.c driver, but on the target
1226 * implementation (look at button-e200.c for example if you are trying to
1227 * figure out why using button_get_data needed a hack before).
1229 #if defined(BUTTON_SCROLL_FWD) && defined(BUTTON_SCROLL_BACK)
1230 if((new_btn == BUTTON_SCROLL_FWD || new_btn == BUTTON_SCROLL_BACK) &&
1231 pressed)
1233 /* Clear these buttons from the data - adding them to the queue is
1234 * handled in the scrollwheel drivers for the targets. They do not
1235 * store the scroll forward/back buttons in their button data for
1236 * the button_read call.
1238 queue_post(&button_queue, new_btn, 1<<24);
1239 new_btn &= ~(BUTTON_SCROLL_FWD | BUTTON_SCROLL_BACK);
1241 #endif
1243 if (pressed)
1244 btn |= new_btn;
1245 else
1246 btn &= ~new_btn;
1248 #if defined(HAVE_BUTTON_DATA) && defined(HAVE_TOUCHSCREEN)
1249 int button_read_device(int* data)
1251 *data = mouse_coords;
1252 #else
1253 int button_read_device(void)
1255 #endif
1257 #ifdef HAS_BUTTON_HOLD
1258 int hold_button = button_hold();
1260 #ifdef HAVE_BACKLIGHT
1261 /* light handling */
1262 static int hold_button_old = false;
1263 if (hold_button != hold_button_old)
1265 hold_button_old = hold_button;
1266 backlight_hold_changed(hold_button);
1268 #endif
1270 if (hold_button)
1271 return BUTTON_NONE;
1272 #endif
1274 return btn;
1278 #ifdef HAVE_TOUCHSCREEN
1279 extern bool debug_wps;
1280 void mouse_tick_task(void)
1282 static int last_check = 0;
1283 int x,y;
1284 if (TIME_BEFORE(current_tick, last_check+(HZ/10)))
1285 return;
1286 last_check = current_tick;
1287 if (SDL_GetMouseState(&x, &y) & SDL_BUTTON(SDL_BUTTON_LEFT))
1289 if(background)
1291 x -= UI_LCD_POSX;
1292 y -= UI_LCD_POSY;
1294 if(x<0 || y<0 || x>SIM_LCD_WIDTH || y>SIM_LCD_HEIGHT)
1295 return;
1298 mouse_coords = (x<<16)|y;
1299 button_event(BUTTON_TOUCHSCREEN, true);
1300 if (debug_wps)
1301 printf("Mouse at: (%d, %d)\n", x, y);
1304 #endif
1306 void button_init_sdl(void)
1308 #ifdef HAVE_TOUCHSCREEN
1309 tick_add_task(mouse_tick_task);
1310 #endif