diff options
Diffstat (limited to 'firmware/target/arm/as3525')
-rw-r--r-- | firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c index f454867cfc..060933d0ac 100644 --- a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c +++ b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c | |||
@@ -34,7 +34,6 @@ static bool hold_button = false; | |||
34 | #define TIMER_TICK (KERNEL_TIMER_FREQ/HZ)/* how long a tick lasts */ | 34 | #define TIMER_TICK (KERNEL_TIMER_FREQ/HZ)/* how long a tick lasts */ |
35 | #define TIMER_MS (TIMER_TICK/(1000/HZ))/* how long a ms lasts */ | 35 | #define TIMER_MS (TIMER_TICK/(1000/HZ))/* how long a ms lasts */ |
36 | 36 | ||
37 | #define WHEEL_LOOP_INTERVAL ( 3*TIMER_MS) /* 3 ms */ | ||
38 | #define WHEEL_REPEAT_INTERVAL (300*TIMER_MS) /* 300ms */ | 37 | #define WHEEL_REPEAT_INTERVAL (300*TIMER_MS) /* 300ms */ |
39 | #define WHEEL_FAST_ON_INTERVAL ( 20*TIMER_MS) /* 20ms */ | 38 | #define WHEEL_FAST_ON_INTERVAL ( 20*TIMER_MS) /* 20ms */ |
40 | #define WHEEL_FAST_OFF_INTERVAL ( 60*TIMER_MS) /* 60ms */ | 39 | #define WHEEL_FAST_OFF_INTERVAL ( 60*TIMER_MS) /* 60ms */ |
@@ -77,18 +76,6 @@ static void scrollwheel(unsigned int wheel_value) | |||
77 | { 1, 3, 0, 2 }, /* Counter-clockwise */ | 76 | { 1, 3, 0, 2 }, /* Counter-clockwise */ |
78 | }; | 77 | }; |
79 | 78 | ||
80 | int repeat = 1; /* assume repeat */ | ||
81 | long time = TIMER2_VALUE + current_tick*TIMER_TICK; /* to timer unit */ | ||
82 | long v = (time - last_wheel_post); | ||
83 | if (v < WHEEL_LOOP_INTERVAL) /* avoid too frequent updates */ | ||
84 | return ; | ||
85 | |||
86 | /* interpolate velocity in timer_freq/timer_unit == 1/s */ | ||
87 | if (v) v = TIMER_FREQ / v; | ||
88 | |||
89 | /* accumulate velocities over time with each v */ | ||
90 | wheel_velocity = (7*wheel_velocity + v) / 8; | ||
91 | |||
92 | unsigned int btn = BUTTON_NONE; | 79 | unsigned int btn = BUTTON_NONE; |
93 | 80 | ||
94 | if (old_wheel_value == wheel_tbl[0][wheel_value]) | 81 | if (old_wheel_value == wheel_tbl[0][wheel_value]) |
@@ -102,6 +89,16 @@ static void scrollwheel(unsigned int wheel_value) | |||
102 | return; | 89 | return; |
103 | } | 90 | } |
104 | 91 | ||
92 | int repeat = 1; /* assume repeat */ | ||
93 | long time = (TIMER_TICK - TIMER2_VALUE) + current_tick*TIMER_TICK; /* to timer unit */ | ||
94 | long v = (time - last_wheel_post); | ||
95 | |||
96 | /* interpolate velocity in timer_freq/timer_unit == 1/s */ | ||
97 | if (v) v = TIMER_FREQ / v; | ||
98 | |||
99 | /* accumulate velocities over time with each v */ | ||
100 | wheel_velocity = (7*wheel_velocity + v) / 8; | ||
101 | |||
105 | if (btn != wheel_repeat) | 102 | if (btn != wheel_repeat) |
106 | { | 103 | { |
107 | /* direction reversals nullify all fast mode states */ | 104 | /* direction reversals nullify all fast mode states */ |