summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/SOURCES3
-rw-r--r--firmware/export/config.h1
-rw-r--r--firmware/export/config/application.h4
-rw-r--r--firmware/target/hosted/android/app/android_keyevents.h97
-rwxr-xr-xfirmware/target/hosted/android/app/android_keyevents.sh9
-rw-r--r--firmware/target/hosted/android/app/button-application.c24
-rw-r--r--firmware/target/hosted/android/app/button-target.h43
-rw-r--r--firmware/target/hosted/android/button-android.c42
8 files changed, 193 insertions, 30 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index f27a7dd140..19e51ac948 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -1708,6 +1708,9 @@ target/hosted/android/button-android.c
1708target/hosted/android/kernel-android.c 1708target/hosted/android/kernel-android.c
1709target/hosted/android/pcm-android.c 1709target/hosted/android/pcm-android.c
1710target/hosted/android/system-android.c 1710target/hosted/android/system-android.c
1711#ifdef APPLICATION
1712target/hosted/android/app/button-application.c
1713#endif
1711drivers/audio/android.c 1714drivers/audio/android.c
1712thread.c 1715thread.c
1713#endif 1716#endif
diff --git a/firmware/export/config.h b/firmware/export/config.h
index 3b59004549..409c9d9965 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -128,6 +128,7 @@
128#define PHILIPS_HDD6330_PAD 42 128#define PHILIPS_HDD6330_PAD 42
129#define PBELL_VIBE500_PAD 43 129#define PBELL_VIBE500_PAD 43
130#define MPIO_HD200_PAD 44 130#define MPIO_HD200_PAD 44
131#define ANDROID_PAD 45
131 132
132/* CONFIG_REMOTE_KEYPAD */ 133/* CONFIG_REMOTE_KEYPAD */
133#define H100_REMOTE 1 134#define H100_REMOTE 1
diff --git a/firmware/export/config/application.h b/firmware/export/config/application.h
index 71ee62356b..6a87d5f62a 100644
--- a/firmware/export/config/application.h
+++ b/firmware/export/config/application.h
@@ -75,7 +75,11 @@
75/* Define this if you do software codec */ 75/* Define this if you do software codec */
76#define CONFIG_CODEC SWCODEC 76#define CONFIG_CODEC SWCODEC
77 77
78#ifdef ANDROID
79#define CONFIG_KEYPAD ANDROID_PAD
80#else
78#define CONFIG_KEYPAD COWON_D2_PAD 81#define CONFIG_KEYPAD COWON_D2_PAD
82#endif
79 83
80#if (CONFIG_PLATFORM & PLATFORM_SDL) 84#if (CONFIG_PLATFORM & PLATFORM_SDL)
81/* Use SDL audio/pcm in a SDL app build */ 85/* Use SDL audio/pcm in a SDL app build */
diff --git a/firmware/target/hosted/android/app/android_keyevents.h b/firmware/target/hosted/android/app/android_keyevents.h
new file mode 100644
index 0000000000..82c525f396
--- /dev/null
+++ b/firmware/target/hosted/android/app/android_keyevents.h
@@ -0,0 +1,97 @@
1/* Ripped from http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/view/KeyEvent.java;hb=HEAD */
2#define KEYCODE_UNKNOWN 0
3#define KEYCODE_SOFT_LEFT 1
4#define KEYCODE_SOFT_RIGHT 2
5#define KEYCODE_HOME 3
6#define KEYCODE_BACK 4
7#define KEYCODE_CALL 5
8#define KEYCODE_ENDCALL 6
9#define KEYCODE_0 7
10#define KEYCODE_1 8
11#define KEYCODE_2 9
12#define KEYCODE_3 10
13#define KEYCODE_4 11
14#define KEYCODE_5 12
15#define KEYCODE_6 13
16#define KEYCODE_7 14
17#define KEYCODE_8 15
18#define KEYCODE_9 16
19#define KEYCODE_STAR 17
20#define KEYCODE_POUND 18
21#define KEYCODE_DPAD_UP 19
22#define KEYCODE_DPAD_DOWN 20
23#define KEYCODE_DPAD_LEFT 21
24#define KEYCODE_DPAD_RIGHT 22
25#define KEYCODE_DPAD_CENTER 23
26#define KEYCODE_VOLUME_UP 24
27#define KEYCODE_VOLUME_DOWN 25
28#define KEYCODE_POWER 26
29#define KEYCODE_CAMERA 27
30#define KEYCODE_CLEAR 28
31#define KEYCODE_A 29
32#define KEYCODE_B 30
33#define KEYCODE_C 31
34#define KEYCODE_D 32
35#define KEYCODE_E 33
36#define KEYCODE_F 34
37#define KEYCODE_G 35
38#define KEYCODE_H 36
39#define KEYCODE_I 37
40#define KEYCODE_J 38
41#define KEYCODE_K 39
42#define KEYCODE_L 40
43#define KEYCODE_M 41
44#define KEYCODE_N 42
45#define KEYCODE_O 43
46#define KEYCODE_P 44
47#define KEYCODE_Q 45
48#define KEYCODE_R 46
49#define KEYCODE_S 47
50#define KEYCODE_T 48
51#define KEYCODE_U 49
52#define KEYCODE_V 50
53#define KEYCODE_W 51
54#define KEYCODE_X 52
55#define KEYCODE_Y 53
56#define KEYCODE_Z 54
57#define KEYCODE_COMMA 55
58#define KEYCODE_PERIOD 56
59#define KEYCODE_ALT_LEFT 57
60#define KEYCODE_ALT_RIGHT 58
61#define KEYCODE_SHIFT_LEFT 59
62#define KEYCODE_SHIFT_RIGHT 60
63#define KEYCODE_TAB 61
64#define KEYCODE_SPACE 62
65#define KEYCODE_SYM 63
66#define KEYCODE_EXPLORER 64
67#define KEYCODE_ENVELOPE 65
68#define KEYCODE_ENTER 66
69#define KEYCODE_DEL 67
70#define KEYCODE_GRAVE 68
71#define KEYCODE_MINUS 69
72#define KEYCODE_EQUALS 70
73#define KEYCODE_LEFT_BRACKET 71
74#define KEYCODE_RIGHT_BRACKET 72
75#define KEYCODE_BACKSLASH 73
76#define KEYCODE_SEMICOLON 74
77#define KEYCODE_APOSTROPHE 75
78#define KEYCODE_SLASH 76
79#define KEYCODE_AT 77
80#define KEYCODE_NUM 78
81#define KEYCODE_HEADSETHOOK 79
82#define KEYCODE_FOCUS 80
83#define KEYCODE_PLUS 81
84#define KEYCODE_MENU 82
85#define KEYCODE_NOTIFICATION 83
86#define KEYCODE_SEARCH 84
87#define KEYCODE_MEDIA_PLAY_PAUSE 85
88#define KEYCODE_MEDIA_STOP 86
89#define KEYCODE_MEDIA_NEXT 87
90#define KEYCODE_MEDIA_PREVIOUS 88
91#define KEYCODE_MEDIA_REWIND 89
92#define KEYCODE_MEDIA_FAST_FORWARD 90
93#define KEYCODE_MUTE 91
94#define KEYCODE_PAGE_UP 92
95#define KEYCODE_PAGE_DOWN 93
96#define KEYCODE_PICTSYMBOLS 94
97#define KEYCODE_SWITCH_CHARSET 95
diff --git a/firmware/target/hosted/android/app/android_keyevents.sh b/firmware/target/hosted/android/app/android_keyevents.sh
new file mode 100755
index 0000000000..cd654ad01e
--- /dev/null
+++ b/firmware/target/hosted/android/app/android_keyevents.sh
@@ -0,0 +1,9 @@
1#!/bin/sh
2# Simple script that converts Android's KEYCODE_* ints to preprocessor #defines
3
4URL="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/view/KeyEvent.java;hb=HEAD"
5
6echo "Processing $URL..."
7(echo "/* Ripped from $URL */";
8 curl $URL | grep "public static final int KEYCODE" | sed 's/^.*public static final int \(KEYCODE_.*\) *= *\([0-9]*\).*$/#define \1 \2/'
9) > `dirname $0`/android_keyevents.h
diff --git a/firmware/target/hosted/android/app/button-application.c b/firmware/target/hosted/android/app/button-application.c
index a27f769718..47798a6096 100644
--- a/firmware/target/hosted/android/app/button-application.c
+++ b/firmware/target/hosted/android/app/button-application.c
@@ -17,13 +17,31 @@
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied. 18 * KIND, either express or implied.
19 * 19 *
20 ***************************************************9*************************/ 20 *****************************************************************************/
21 21
22 22
23#include "button.h" 23#include "button.h"
24#include "android_keyevents.h"
24 25
25int key_to_button(int keyboard_key) 26int key_to_button(int keyboard_key)
26{ 27{
27 (void)keyboard_key; 28 switch (keyboard_key)
28 return BUTTON_NONE; 29 {
30 default:
31 return BUTTON_NONE;
32 case KEYCODE_BACK:
33 return BUTTON_BACK;
34 case KEYCODE_DPAD_UP:
35 return BUTTON_DPAD_UP;
36 case KEYCODE_DPAD_DOWN:
37 return BUTTON_DPAD_DOWN;
38 case KEYCODE_DPAD_LEFT:
39 return BUTTON_DPAD_LEFT;
40 case KEYCODE_DPAD_RIGHT:
41 return BUTTON_DPAD_RIGHT;
42 case KEYCODE_DPAD_CENTER:
43 return BUTTON_DPAD_CENTER;
44 case KEYCODE_MENU:
45 return BUTTON_MENU;
46 }
29} 47}
diff --git a/firmware/target/hosted/android/app/button-target.h b/firmware/target/hosted/android/app/button-target.h
index 329ed651af..6c7bd271e9 100644
--- a/firmware/target/hosted/android/app/button-target.h
+++ b/firmware/target/hosted/android/app/button-target.h
@@ -30,35 +30,32 @@ void button_init_device(void);
30int button_read_device(int *data); 30int button_read_device(int *data);
31 31
32/* Main unit's buttons */ 32/* Main unit's buttons */
33#define BUTTON_POWER 0x00000001 33#define BUTTON_MENU 0x00000001
34#define BUTTON_PLUS 0x00000002 34#define BUTTON_BACK 0x00000002
35#define BUTTON_MINUS 0x00000004 35#define BUTTON_DPAD_LEFT 0x00000004
36#define BUTTON_MENU 0x00000008 36#define BUTTON_DPAD_RIGHT 0x00000008
37#define BUTTON_DPAD_UP 0x00000010
38#define BUTTON_DPAD_DOWN 0x00000020
39#define BUTTON_DPAD_CENTER 0x00000040
37 40
38/* Compatibility hacks for flipping. Needs a somewhat better fix. */ 41/* Compatibility hacks for flipping. Needs a somewhat better fix. */
39#define BUTTON_LEFT BUTTON_MIDLEFT 42#define BUTTON_LEFT BUTTON_DPAD_LEFT
40#define BUTTON_RIGHT BUTTON_MIDRIGHT 43#define BUTTON_RIGHT BUTTON_DPAD_RIGHT
41#define BUTTON_UP BUTTON_TOPMIDDLE 44#define BUTTON_UP BUTTON_DPAD_UP
42#define BUTTON_DOWN BUTTON_BOTTOMMIDDLE 45#define BUTTON_DOWN BUTTON_DPAD_DOWN
43 46
44/* Touch Screen Area Buttons */ 47/* Touch Screen Area Buttons */
45#define BUTTON_TOPLEFT 0x00000010 48#define BUTTON_TOPLEFT 0x00001000
46#define BUTTON_TOPMIDDLE 0x00000020 49#define BUTTON_TOPMIDDLE 0x00002000
47#define BUTTON_TOPRIGHT 0x00000040 50#define BUTTON_TOPRIGHT 0x00004000
48#define BUTTON_MIDLEFT 0x00000080 51#define BUTTON_MIDLEFT 0x00008000
49#define BUTTON_CENTER 0x00000100 52#define BUTTON_CENTER 0x00010000
50#define BUTTON_MIDRIGHT 0x00000200 53#define BUTTON_MIDRIGHT 0x00020000
51#define BUTTON_BOTTOMLEFT 0x00000400 54#define BUTTON_BOTTOMLEFT 0x00040000
52#define BUTTON_BOTTOMMIDDLE 0x00000800 55#define BUTTON_BOTTOMMIDDLE 0x00080000
53#define BUTTON_BOTTOMRIGHT 0x00001000 56#define BUTTON_BOTTOMRIGHT 0x00100000
54
55#define BUTTON_MAIN 0x1FFF
56 57
57/* No remote */ 58/* No remote */
58#define BUTTON_REMOTE 0 59#define BUTTON_REMOTE 0
59
60/* Software power-off */
61#define POWEROFF_BUTTON BUTTON_POWER
62#define POWEROFF_COUNT 10
63 60
64#endif /* _BUTTON_TARGET_H_ */ 61#endif /* _BUTTON_TARGET_H_ */
diff --git a/firmware/target/hosted/android/button-android.c b/firmware/target/hosted/android/button-android.c
index 1172880908..50e347e714 100644
--- a/firmware/target/hosted/android/button-android.c
+++ b/firmware/target/hosted/android/button-android.c
@@ -22,12 +22,15 @@
22 22
23#include <jni.h> 23#include <jni.h>
24#include <stdbool.h> 24#include <stdbool.h>
25#include "button.h"
26#include "buttonmap.h"
25#include "config.h" 27#include "config.h"
26#include "kernel.h" 28#include "kernel.h"
27#include "system.h" 29#include "system.h"
28#include "touchscreen.h" 30#include "touchscreen.h"
29 31
30static int last_y, last_x; 32static int last_y, last_x;
33static int last_btns;
31 34
32static enum { 35static enum {
33 STATE_UNKNOWN, 36 STATE_UNKNOWN,
@@ -35,7 +38,6 @@ static enum {
35 STATE_DOWN, 38 STATE_DOWN,
36} last_state = STATE_UNKNOWN; 39} last_state = STATE_UNKNOWN;
37 40
38
39/* 41/*
40 * this writes in an interrupt-like fashion the last pixel coordinates 42 * this writes in an interrupt-like fashion the last pixel coordinates
41 * that the user pressed on the screen */ 43 * that the user pressed on the screen */
@@ -64,13 +66,45 @@ Java_org_rockbox_RockboxFramebuffer_touchHandler(JNIEnv*env, jobject this,
64 last_state = STATE_UP; 66 last_state = STATE_UP;
65} 67}
66 68
69/*
70 * this writes in an interrupt-like fashion the button events that the user
71 * generated by pressing/releasing them to a variable */
72JNIEXPORT bool JNICALL
73Java_org_rockbox_RockboxFramebuffer_buttonHandler(JNIEnv*env, jobject this,
74 int keycode, bool state)
75{
76 (void)env;
77 (void)this;
78
79 int button = key_to_button(keycode);
80
81 if (button == BUTTON_NONE)
82 return false;
83
84 if (state)
85 last_btns |= button;
86 else
87 last_btns &= ~button;
88
89 return true;
90}
91
67void button_init_device(void) 92void button_init_device(void)
68{ 93{
69} 94}
70 95
71int button_read_device(int *data) 96int button_read_device(int *data)
72{ 97{
73 /* get grid button/coordinates based on the current touchscreen mode */ 98 int btn = last_btns;
74 int btn = touchscreen_to_pixels(last_x, last_y, data); 99 /* Get grid button/coordinates based on the current touchscreen mode
75 return (last_state == STATE_DOWN ? btn : 0); 100 *
101 * Caveat: the caller seemingly depends on *data always being filled with
102 * the last known touchscreen position, so always call
103 * touchscreen_to_pixels() */
104 int touch = touchscreen_to_pixels(last_x, last_y, data);
105
106 if (last_state == STATE_DOWN)
107 btn |= touch;
108
109 return btn;
76} 110}