Hopefully get all of the touchscreen drivers to act the same so release events get the appropriate data.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22314 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Karl Kurbjun 2009-08-14 23:08:50 +00:00
parent 65eaf60b35
commit 7ca4c7358d
3 changed files with 15 additions and 5 deletions

View file

@ -103,11 +103,12 @@ int button_read_device(int *data)
{ {
int btn = BUTTON_NONE; int btn = BUTTON_NONE;
int adc; int adc;
static int old_data = 0;
static bool hold_button = false; static bool hold_button = false;
bool hold_button_old; bool hold_button_old;
*data = 0; *data = old_data;
hold_button_old = hold_button; hold_button_old = hold_button;
hold_button = button_hold(); hold_button = button_hold();
@ -188,7 +189,7 @@ int button_read_device(int *data)
{ {
last_x = x; last_x = x;
last_y = y; last_y = y;
*data = touch_to_pixels(x, y); old_data = *data = touch_to_pixels(x, y);
btn |= touchscreen_to_pixels((*data&0xffff0000)>>16, btn |= touchscreen_to_pixels((*data&0xffff0000)>>16,
(*data&0x0000ffff), (*data&0x0000ffff),
data); data);
@ -197,12 +198,12 @@ int button_read_device(int *data)
last_touch = current_tick; last_touch = current_tick;
touch_available = false; touch_available = false;
} }
if (!(GPIOA & 0x4)) if (!(GPIOA & 0x4))
btn |= BUTTON_POWER; btn |= BUTTON_POWER;
if(btn & BUTTON_TOUCHSCREEN && !is_backlight_on(true)) if(btn & BUTTON_TOUCHSCREEN && !is_backlight_on(true))
*data = 0; old_data = *data = 0;
return btn; return btn;
} }

View file

@ -108,9 +108,13 @@ inline bool button_hold(void)
return hold_button; return hold_button;
} }
/* Since this is a touchscreen, the expectation in higher levels is that the
* previous touch location is maintained when a release occurs. This is
* intended to mimic a mouse or other similar pointing device.
*/
int button_read_device(int *data) int button_read_device(int *data)
{ {
static int old_data; static int old_data = 0;
int button_read = BUTTON_NONE; int button_read = BUTTON_NONE;
short touch_x, touch_y, touch_z1, touch_z2; short touch_x, touch_y, touch_z1, touch_z2;
static bool hold_button_old = false; static bool hold_button_old = false;

View file

@ -158,6 +158,9 @@ bool button_hold(void)
int button_read_device(int *data) int button_read_device(int *data)
{ {
int ret = 0; int ret = 0;
static int old_data = 0;
data = old_data;
/* Filter button events out if HOLD button is pressed at firmware/ level */ /* Filter button events out if HOLD button is pressed at firmware/ level */
if(button_hold()) if(button_hold())
@ -181,6 +184,8 @@ int button_read_device(int *data)
ret |= touchscreen_to_pixels(cur_touch >> 16, cur_touch & 0xFFFF, data); ret |= touchscreen_to_pixels(cur_touch >> 16, cur_touch & 0xFFFF, data);
if( UNLIKELY(!is_backlight_on(true)) ) if( UNLIKELY(!is_backlight_on(true)) )
*data = 0; *data = 0;
old_data = data;
} }
return ret; return ret;