diff options
Diffstat (limited to 'firmware/target')
5 files changed, 185 insertions, 30 deletions
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 | |||
4 | URL="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/view/KeyEvent.java;hb=HEAD" | ||
5 | |||
6 | echo "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 | ||
25 | int key_to_button(int keyboard_key) | 26 | int 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); | |||
30 | int button_read_device(int *data); | 30 | int 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 | ||
30 | static int last_y, last_x; | 32 | static int last_y, last_x; |
33 | static int last_btns; | ||
31 | 34 | ||
32 | static enum { | 35 | static 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 */ | ||
72 | JNIEXPORT bool JNICALL | ||
73 | Java_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 | |||
67 | void button_init_device(void) | 92 | void button_init_device(void) |
68 | { | 93 | { |
69 | } | 94 | } |
70 | 95 | ||
71 | int button_read_device(int *data) | 96 | int 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 | } |