From 42f5973177df838c65b76eb96646a8b5df2a533b Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Mon, 13 Apr 2009 17:10:52 +0000 Subject: Few Fuze/e200v2 button fixes. Don't read the scrollwheel when the hold button is active and rename a variable to describe better what it is for. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20701 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/as3525/kernel-as3525.c | 7 +++++-- firmware/target/arm/as3525/sansa-e200v2/button-e200v2.c | 14 ++++++++++---- firmware/target/arm/as3525/sansa-e200v2/button-target.h | 1 + firmware/target/arm/as3525/sansa-fuze/button-fuze.c | 13 ++++++++++--- firmware/target/arm/as3525/sansa-fuze/button-target.h | 2 +- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/firmware/target/arm/as3525/kernel-as3525.c b/firmware/target/arm/as3525/kernel-as3525.c index 986ceb3189..fd3b219e64 100644 --- a/firmware/target/arm/as3525/kernel-as3525.c +++ b/firmware/target/arm/as3525/kernel-as3525.c @@ -25,8 +25,8 @@ #include "timer-target.h" #ifdef HAVE_SCROLLWHEEL +#include "button-target.h" /* The scrollwheel is polled every 5 ms (the tick tasks only every 10) */ -extern void button_read_dbop(void); static volatile int poll_scrollwheel = 0; void INT_TIMER2(void) @@ -34,7 +34,10 @@ void INT_TIMER2(void) if (!poll_scrollwheel) call_tick_tasks(); /* Run through the list of tick tasks */ else - button_read_dbop(); + { + if (!button_hold()) + button_read_dbop(); + } poll_scrollwheel ^= 1; TIMER2_INTCLR = 0; /* clear interrupt */ diff --git a/firmware/target/arm/as3525/sansa-e200v2/button-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/button-e200v2.c index 021110c7c6..bc92995094 100644 --- a/firmware/target/arm/as3525/sansa-e200v2/button-e200v2.c +++ b/firmware/target/arm/as3525/sansa-e200v2/button-e200v2.c @@ -55,7 +55,7 @@ static void scrollwheel(short dbop_din) unsigned btn = BUTTON_NONE; /* old wheel values */ static unsigned old_wheel_value = 0; - static unsigned wheel_repeat = BUTTON_NONE; + static unsigned old_btn = BUTTON_NONE; /* getting BUTTON_REPEAT works like this: Remember when the btn value was * posted to the button_queue last, and if it was recent enough, generate @@ -77,7 +77,13 @@ static void scrollwheel(short dbop_din) { 2, 0, 3, 1 }, /* Clockwise rotation */ { 1, 3, 0, 2 }, /* Counter-clockwise */ }; - + + if(hold_button) + { + repeat = counter = 0; + return; + } + wheel_value = dbop_din & (1<<13|1<<14); wheel_value >>= 13; @@ -88,10 +94,10 @@ static void scrollwheel(short dbop_din) if (btn != BUTTON_NONE) { - if (btn != wheel_repeat) + if (btn != old_btn) { /* direction reversals nullify repeats */ - wheel_repeat = btn; + old_btn = btn; repeat = counter = 0; } if (btn != BUTTON_NONE) diff --git a/firmware/target/arm/as3525/sansa-e200v2/button-target.h b/firmware/target/arm/as3525/sansa-e200v2/button-target.h index a9aa663202..e09743d89c 100644 --- a/firmware/target/arm/as3525/sansa-e200v2/button-target.h +++ b/firmware/target/arm/as3525/sansa-e200v2/button-target.h @@ -30,6 +30,7 @@ bool button_hold(void); void button_init_device(void); int button_read_device(void); +short button_read_dbop(void); /* Sandisk Sansa E200 button codes */ diff --git a/firmware/target/arm/as3525/sansa-fuze/button-fuze.c b/firmware/target/arm/as3525/sansa-fuze/button-fuze.c index f532a96431..afbba78074 100644 --- a/firmware/target/arm/as3525/sansa-fuze/button-fuze.c +++ b/firmware/target/arm/as3525/sansa-fuze/button-fuze.c @@ -56,7 +56,7 @@ static void scrollwheel(short dbop_din) unsigned btn = BUTTON_NONE; /* old wheel values */ static unsigned old_wheel_value = 0; - static unsigned wheel_repeat = BUTTON_NONE; + static unsigned old_btn = BUTTON_NONE; /* getting BUTTON_REPEAT works like this: We increment repeat by 2 if the * wheel was turned, and decrement it by 1 each tick, @@ -76,6 +76,13 @@ static void scrollwheel(short dbop_din) { 2, 0, 3, 1 }, /* Clockwise rotation */ { 1, 3, 0, 2 }, /* Counter-clockwise */ }; + + if(hold_button) + { + repeat = counter = 0; + return; + } + wheel_value = dbop_din & (1<<13|1<<14); wheel_value >>= 13; @@ -86,10 +93,10 @@ static void scrollwheel(short dbop_din) if (btn != BUTTON_NONE) { - if (btn != wheel_repeat) + if (btn != old_btn) { /* direction reversals nullify repeats */ - wheel_repeat = btn; + old_btn = btn; repeat = counter = 0; } if (btn != BUTTON_NONE) diff --git a/firmware/target/arm/as3525/sansa-fuze/button-target.h b/firmware/target/arm/as3525/sansa-fuze/button-target.h index 75ce3d060e..5b5b1e097f 100644 --- a/firmware/target/arm/as3525/sansa-fuze/button-target.h +++ b/firmware/target/arm/as3525/sansa-fuze/button-target.h @@ -30,7 +30,7 @@ void button_init_device(void); bool button_hold(void); int button_read_device(void); - +short button_read_dbop(void); /* Sandisk Sansa Fuze button codes */ /* Main unit's buttons */ -- cgit v1.2.3