Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/android/src/org/rockbox/RockboxFramebuffer.java b/android/src/org/rockbox/RockboxFramebuffer.java
- index ca11de0..cb8b83f 100644
- --- a/android/src/org/rockbox/RockboxFramebuffer.java
- +++ b/android/src/org/rockbox/RockboxFramebuffer.java
- @@ -73,6 +73,21 @@ public class RockboxFramebuffer extends View
- Log.d("RockboxBootloader", (String) text);
- }
- + public boolean onTrackBallEvent(MotionEvent me)
- + {
- + LOG("onTrackBallEvent");
- + switch (me.getAction())
- + {
- + case MotionEvent.ACTION_MOVE:
- + buttonHandler(0, (int)me.getX(), (int)me.getY());
- + break;
- + case MotionEvent.ACTION_DOWN:
- + buttonHandler(1, 0, 0);
- + break;
- + }
- + return true;
- + }
- +
- public boolean onTouchEvent(MotionEvent me)
- {
- LOG("onTouchEvent");
- @@ -106,4 +121,5 @@ public class RockboxFramebuffer extends View
- public native void set_lcd_active(int active);
- public native void pixelHandler(int x, int y);
- public native void touchHandler(int down);
- + public native void buttonHandler(int press, int relative_x, int relative_y);
- }
- diff --git a/firmware/target/hosted/android/app/button-target.h b/firmware/target/hosted/android/app/button-target.h
- index 329ed65..73149a0 100644
- --- a/firmware/target/hosted/android/app/button-target.h
- +++ b/firmware/target/hosted/android/app/button-target.h
- @@ -30,27 +30,22 @@ void button_init_device(void);
- int button_read_device(int *data);
- /* Main unit's buttons */
- -#define BUTTON_POWER 0x00000001
- -#define BUTTON_PLUS 0x00000002
- -#define BUTTON_MINUS 0x00000004
- -#define BUTTON_MENU 0x00000008
- -
- -/* Compatibility hacks for flipping. Needs a somewhat better fix. */
- -#define BUTTON_LEFT BUTTON_MIDLEFT
- -#define BUTTON_RIGHT BUTTON_MIDRIGHT
- -#define BUTTON_UP BUTTON_TOPMIDDLE
- -#define BUTTON_DOWN BUTTON_BOTTOMMIDDLE
- +#define BUTTON_UP 0x00000001
- +#define BUTTON_DOWN 0x00000002
- +#define BUTTON_LEFT 0x00000004
- +#define BUTTON_RIGHT 0x00000008
- +#define BUTTON_SELECT 0x00000010
- /* Touch Screen Area Buttons */
- -#define BUTTON_TOPLEFT 0x00000010
- -#define BUTTON_TOPMIDDLE 0x00000020
- -#define BUTTON_TOPRIGHT 0x00000040
- -#define BUTTON_MIDLEFT 0x00000080
- -#define BUTTON_CENTER 0x00000100
- -#define BUTTON_MIDRIGHT 0x00000200
- -#define BUTTON_BOTTOMLEFT 0x00000400
- -#define BUTTON_BOTTOMMIDDLE 0x00000800
- -#define BUTTON_BOTTOMRIGHT 0x00001000
- +#define BUTTON_TOPLEFT 0x00000100
- +#define BUTTON_TOPMIDDLE 0x00000200
- +#define BUTTON_TOPRIGHT 0x00000400
- +#define BUTTON_MIDLEFT 0x00000800
- +#define BUTTON_CENTER 0x00001000
- +#define BUTTON_MIDRIGHT 0x00002000
- +#define BUTTON_BOTTOMLEFT 0x00004000
- +#define BUTTON_BOTTOMMIDDLE 0x00008000
- +#define BUTTON_BOTTOMRIGHT 0x00010000
- #define BUTTON_MAIN 0x1FFF
- diff --git a/firmware/target/hosted/android/button-android.c b/firmware/target/hosted/android/button-android.c
- index 1172880..2a5b653 100644
- --- a/firmware/target/hosted/android/button-android.c
- +++ b/firmware/target/hosted/android/button-android.c
- @@ -28,6 +28,7 @@
- #include "touchscreen.h"
- static int last_y, last_x;
- +static int last_button;
- static enum {
- STATE_UNKNOWN,
- @@ -64,13 +65,42 @@ Java_org_rockbox_RockboxFramebuffer_touchHandler(JNIEnv*env, jobject this,
- last_state = STATE_UP;
- }
- +/*
- + * this notifies us in an interrupt-like fashion when a hardware button is pressed */
- +JNIEXPORT void JNICALL
- +Java_org_rockbox_RockboxFramebuffer_butttonHandler(JNIEnv*env, jobject this,
- + int press, int relative_x, int relative_y)
- +{
- + if (press)
- + last_button = BUTTON_SELECT;
- + else if (relative_y > 0)
- + last_button = BUTTON_UP;
- + else if (relative_y < 0)
- + last_button = BUTTON_DOWN;
- + else if (relative_x > 0)
- + last_button = BUTTON_RIGHT;
- + else if (relative_x < 0)
- + last_button = BUTTON_LEFT;
- +}
- +
- void button_init_device(void)
- {
- + last_button = BUTTON_NONE;
- }
- 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;
- + if (last_button == BUTTON_NONE)
- + {
- + /* get grid button/coordinates based on the current touchscreen mode */
- + btn = touchscreen_to_pixels(last_x, last_y, data);
- + return (last_state == STATE_DOWN ? btn : 0);
- + }
- + else
- + {
- + btn = last_button;
- + last_button = BUTTON_NONE;
- + return btn;
- + }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement