diff options
| author | Thom Johansen <thomj@rockbox.org> | 2005-12-22 00:01:36 +0000 |
|---|---|---|
| committer | Thom Johansen <thomj@rockbox.org> | 2005-12-22 00:01:36 +0000 |
| commit | 2e55f1c9b0b700c68cce856b9dd923357e2d3fe0 (patch) | |
| tree | c285b02abf49517c995cd05598443c2b3298ddd6 | |
| parent | f9295a6a65d7a57c463d183f75a4d06c0c9fb5bc (diff) | |
| download | rockbox-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.c | 16 |
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; |