summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-05-15 16:34:14 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-05-15 16:34:14 +0000
commitd10bf7ab46e5b6e043507f7eee01b7dd42b87c7a (patch)
treed10f77f2d670454468e39af872306b0e812ec112
parent79cfc221a5f9a46f220875e5222e3143479f1c1f (diff)
downloadrockbox-d10bf7ab46e5b6e043507f7eee01b7dd42b87c7a.zip
rockbox-d10bf7ab46e5b6e043507f7eee01b7dd42b87c7a.tar.gz
rockbox-d10bf7ab46e5b6e043507f7eee01b7dd42b87c7a.tar.bz2
rockbox-d10bf7ab46e5b6e043507f7eee01b7dd42b87c7a.tar.xz
fuzev2: leave at least 3ms between scrollwheel events
fix insane acceleration git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26060 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
index 4486af9..f454867 100644
--- a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
+++ b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
@@ -34,6 +34,7 @@ static bool hold_button = false;
#define TIMER_TICK (KERNEL_TIMER_FREQ/HZ)/* how long a tick lasts */
#define TIMER_MS (TIMER_TICK/(1000/HZ))/* how long a ms lasts */
+#define WHEEL_LOOP_INTERVAL ( 3*TIMER_MS) /* 3 ms */
#define WHEEL_REPEAT_INTERVAL (300*TIMER_MS) /* 300ms */
#define WHEEL_FAST_ON_INTERVAL ( 20*TIMER_MS) /* 20ms */
#define WHEEL_FAST_OFF_INTERVAL ( 60*TIMER_MS) /* 60ms */
@@ -76,6 +77,18 @@ static void scrollwheel(unsigned int wheel_value)
{ 1, 3, 0, 2 }, /* Counter-clockwise */
};
+ int repeat = 1; /* assume repeat */
+ long time = TIMER2_VALUE + current_tick*TIMER_TICK; /* to timer unit */
+ long v = (time - last_wheel_post);
+ if (v < WHEEL_LOOP_INTERVAL) /* avoid too frequent updates */
+ return ;
+
+ /* interpolate velocity in timer_freq/timer_unit == 1/s */
+ if (v) v = TIMER_FREQ / v;
+
+ /* accumulate velocities over time with each v */
+ wheel_velocity = (7*wheel_velocity + v) / 8;
+
unsigned int btn = BUTTON_NONE;
if (old_wheel_value == wheel_tbl[0][wheel_value])
@@ -89,16 +102,6 @@ static void scrollwheel(unsigned int wheel_value)
return;
}
- int repeat = 1; /* assume repeat */
- long time = TIMER2_VALUE + current_tick*TIMER_TICK; /* to timer unit */
- long v = (time - last_wheel_post);
-
- /* interpolate velocity in timer_freq/timer_unit == 1/s */
- if (v) v = TIMER_FREQ / v;
-
- /* accumulate velocities over time with each v */
- wheel_velocity = (7*wheel_velocity + v) / 8;
-
if (btn != wheel_repeat)
{
/* direction reversals nullify all fast mode states */