Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- commit d100cff8c72292b8ab2408c7cdb815080be358df
- Author: Marcin Bukat <marcin.bukat@gmail.com>
- Date: Thu Nov 17 01:05:29 2011 +0100
- fix scrollstrip problems at driver level
- diff --git a/firmware/target/coldfire/mpio/hd300/button-hd300.c b/firmware/target/coldfire/mpio/hd300/button-hd300.c
- index 8239b54..ae0b1e1 100644
- --- a/firmware/target/coldfire/mpio/hd300/button-hd300.c
- +++ b/firmware/target/coldfire/mpio/hd300/button-hd300.c
- @@ -29,10 +29,17 @@
- #include "powermgmt.h"
- #define SLIDER_BASE_SENSITIVITY 8
- +#define SLIDER_REL_TIMEOUT HZ
- /* GPI7 H-L, GPI6 H-L, GPI7 L-H, GPI6 L-H */
- #define SLIDER_GPIO_MASK ((1<<15)|(1<<14)|(1<<7)|(1<<6))
- +static volatile struct scroll_state_t {
- + signed char dir;
- + long timeout;
- + bool rel;
- +} scroll;
- +
- static inline void disable_scrollstrip_interrupts(void)
- {
- and_l(~SLIDER_GPIO_MASK,&GPIO_INT_EN);
- @@ -89,10 +96,20 @@ void scrollstrip_isr(void)
- scroll_dir = scroll_state[prev_scroll_lines][new_scroll_lines];
- prev_scroll_lines = new_scroll_lines;
- -
- +
- + /* catch sequence error */
- + if (scroll_dir == BUTTON_NONE)
- + return;
- +
- + /* direction reversal */
- if (direction != scroll_dir)
- {
- - /* direction reversal */
- + /* post release event to the button queue */
- + if (queue_empty(&button_queue))
- + queue_post(&button_queue, direction|BUTTON_REL, 0);
- +
- + scroll.rel = true;
- +
- direction = scroll_dir;
- count = 0;
- ack_scrollstrip_interrupt();
- @@ -121,6 +138,10 @@ void scrollstrip_isr(void)
- if (queue_empty(&button_queue))
- queue_post(&button_queue, scroll_dir, 0);
- + scroll.dir = scroll_dir;
- + scroll.timeout = current_tick + SLIDER_REL_TIMEOUT;
- + scroll.rel = false;
- +
- ack_scrollstrip_interrupt();
- enable_scrollstrip_interrupts();
- }
- @@ -235,5 +256,15 @@ int button_read_device(void)
- } /* !button_hold() */
- + if (!scroll.rel)
- + if (TIME_AFTER(current_tick, scroll.timeout))
- + {
- + if (queue_empty(&button_queue))
- + {
- + queue_post(&button_queue, scroll.dir|BUTTON_REL, 0);
- + scroll.rel = true;
- + }
- + }
- +
- return btn;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement