1
0
Fork 0
forked from len0rd/rockbox

Android port: add support for hardware keys

* Forward Java KeyEvents to C layer and translate them to Rockbox BUTTON_*.
 * Add a basic Android keymap

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27832 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Maurus Cuelenaere 2010-08-16 20:12:06 +00:00
parent e726e53da6
commit 934a5a5808
11 changed files with 413 additions and 34 deletions

View file

@ -22,12 +22,15 @@
#include <jni.h>
#include <stdbool.h>
#include "button.h"
#include "buttonmap.h"
#include "config.h"
#include "kernel.h"
#include "system.h"
#include "touchscreen.h"
static int last_y, last_x;
static int last_btns;
static enum {
STATE_UNKNOWN,
@ -35,7 +38,6 @@ static enum {
STATE_DOWN,
} last_state = STATE_UNKNOWN;
/*
* this writes in an interrupt-like fashion the last pixel coordinates
* that the user pressed on the screen */
@ -64,13 +66,45 @@ Java_org_rockbox_RockboxFramebuffer_touchHandler(JNIEnv*env, jobject this,
last_state = STATE_UP;
}
/*
* this writes in an interrupt-like fashion the button events that the user
* generated by pressing/releasing them to a variable */
JNIEXPORT bool JNICALL
Java_org_rockbox_RockboxFramebuffer_buttonHandler(JNIEnv*env, jobject this,
int keycode, bool state)
{
(void)env;
(void)this;
int button = key_to_button(keycode);
if (button == BUTTON_NONE)
return false;
if (state)
last_btns |= button;
else
last_btns &= ~button;
return true;
}
void button_init_device(void)
{
}
int button_read_device(int *data)
{
/* get grid button/coordinates based on the current touchscreen mode */
int btn = touchscreen_to_pixels(last_x, last_y, data);
return (last_state == STATE_DOWN ? btn : 0);
int btn = last_btns;
/* Get grid button/coordinates based on the current touchscreen mode
*
* Caveat: the caller seemingly depends on *data always being filled with
* the last known touchscreen position, so always call
* touchscreen_to_pixels() */
int touch = touchscreen_to_pixels(last_x, last_y, data);
if (last_state == STATE_DOWN)
btn |= touch;
return btn;
}