From 2e55f1c9b0b700c68cce856b9dd923357e2d3fe0 Mon Sep 17 00:00:00 2001 From: Thom Johansen Date: Thu, 22 Dec 2005 00:01:36 +0000 Subject: Button driver would insert erronous events when wheel position overflowed, this fixes it. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8277 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/button.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'firmware/drivers') diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index 983941c048..0aea47ea8f 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -143,10 +143,16 @@ static int ipod_4g_button_read(void) backlight_on(); if (old_wheel_value != -1) { wheel_delta = new_wheel_value - old_wheel_value; - wheel_delta_abs = wheel_delta < 0 ? -wheel_delta : wheel_delta; - - wheel_delta = new_wheel_value - old_wheel_value; - + wheel_delta_abs = wheel_delta < 0 ? -wheel_delta + : wheel_delta; + + if (wheel_delta_abs > 48) { + if (old_wheel_value > new_wheel_value) + /* wrapped around the top going clockwise */ + wheel_delta += 96; + else if (old_wheel_value < new_wheel_value) + /* wrapped around the top going counterclockwise */ wheel_delta -= 96; + } /* TODO: these thresholds should most definitely be settings, and we're probably going to want a more advanced scheme than this anyway. */ @@ -189,8 +195,6 @@ static int ipod_4g_button_read(void) return btn; } - - void ipod_4g_button_int(void) { PP5020_CPU_HI_INT_CLR = PP5020_I2C_MASK; -- cgit v1.2.3