From 49f1ec8e8ad0b4c06df01fcdd4b18037fbe3ebcc Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Sun, 31 Oct 2010 15:32:57 +0000 Subject: Add support multimedia keys/buttons to the core, and adapt Rockbox on android for it (multimedia buttons are found on wired headsets and the lock screen in cyanogenmod). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28421 a1c6a512-1295-4272-9138-f99709370657 --- .../target/hosted/android/app/button-application.c | 21 +++++++++++++++++++++ firmware/target/hosted/android/app/button-target.h | 1 + firmware/target/hosted/android/button-android.c | 19 +++++++++++++++---- 3 files changed, 37 insertions(+), 4 deletions(-) (limited to 'firmware/target') diff --git a/firmware/target/hosted/android/app/button-application.c b/firmware/target/hosted/android/app/button-application.c index 47798a6096..a7d75ef172 100644 --- a/firmware/target/hosted/android/app/button-application.c +++ b/firmware/target/hosted/android/app/button-application.c @@ -45,3 +45,24 @@ int key_to_button(int keyboard_key) return BUTTON_MENU; } } + +unsigned multimedia_to_button(int keyboard_key) +{ + switch (keyboard_key) + { + case KEYCODE_MEDIA_PLAY_PAUSE: + return BUTTON_MULTIMEDIA_PLAYPAUSE; + case KEYCODE_MEDIA_STOP: + return BUTTON_MULTIMEDIA_STOP; + case KEYCODE_MEDIA_NEXT: + return BUTTON_MULTIMEDIA_NEXT; + case KEYCODE_MEDIA_PREVIOUS: + return BUTTON_MULTIMEDIA_PREV; + case KEYCODE_MEDIA_REWIND: + return BUTTON_MULTIMEDIA_REW; + case KEYCODE_MEDIA_FAST_FORWARD: + return BUTTON_MULTIMEDIA_FFWD; + default: + return 0; + } +} diff --git a/firmware/target/hosted/android/app/button-target.h b/firmware/target/hosted/android/app/button-target.h index 6c7bd271e9..ca306d4fef 100644 --- a/firmware/target/hosted/android/app/button-target.h +++ b/firmware/target/hosted/android/app/button-target.h @@ -28,6 +28,7 @@ #undef button_init_device void button_init_device(void); int button_read_device(int *data); +unsigned multimedia_to_button(int keyboard_key); /* Main unit's buttons */ #define BUTTON_MENU 0x00000001 diff --git a/firmware/target/hosted/android/button-android.c b/firmware/target/hosted/android/button-android.c index c072e3e38b..9bf15c25a2 100644 --- a/firmware/target/hosted/android/button-android.c +++ b/firmware/target/hosted/android/button-android.c @@ -28,7 +28,7 @@ #include "kernel.h" #include "system.h" #include "touchscreen.h" - +#include "debug.h" static int last_y, last_x; static int last_btns; static long last_button_tick; @@ -44,7 +44,7 @@ static enum { * began or stopped the touch action + where (pixel coordinates) */ JNIEXPORT void JNICALL Java_org_rockbox_RockboxFramebuffer_touchHandler(JNIEnv*env, jobject this, - bool down, int x, int y) + jboolean down, jint x, jint y) { (void)env; (void)this; @@ -63,12 +63,23 @@ Java_org_rockbox_RockboxFramebuffer_touchHandler(JNIEnv*env, jobject this, * generated by pressing/releasing them to a variable */ JNIEXPORT bool JNICALL Java_org_rockbox_RockboxFramebuffer_buttonHandler(JNIEnv*env, jobject this, - int keycode, bool state) + jint keycode, jboolean state) { (void)env; (void)this; - int button = key_to_button(keycode); + unsigned button = 0; + + if (!state) + button = multimedia_to_button((int)keycode); + + if (button) + { /* multimeida buttons are handled differently */ + queue_post(&button_queue, button, 0); + return true; + } + + button = key_to_button(keycode); if (button == BUTTON_NONE) return false; -- cgit v1.2.3