summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2005-12-22 00:01:36 +0000
committerThom Johansen <thomj@rockbox.org>2005-12-22 00:01:36 +0000
commit2e55f1c9b0b700c68cce856b9dd923357e2d3fe0 (patch)
treec285b02abf49517c995cd05598443c2b3298ddd6
parentf9295a6a65d7a57c463d183f75a4d06c0c9fb5bc (diff)
downloadrockbox-2e55f1c9b0b700c68cce856b9dd923357e2d3fe0.zip
rockbox-2e55f1c9b0b700c68cce856b9dd923357e2d3fe0.tar.gz
rockbox-2e55f1c9b0b700c68cce856b9dd923357e2d3fe0.tar.bz2
rockbox-2e55f1c9b0b700c68cce856b9dd923357e2d3fe0.tar.xz
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
-rw-r--r--firmware/drivers/button.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index 983941c..0aea47e 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;