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:
parent
e726e53da6
commit
934a5a5808
11 changed files with 413 additions and 34 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue