diff options
| author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-10-22 07:01:59 +0000 |
|---|---|---|
| committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-10-22 07:01:59 +0000 |
| commit | 12d1ff912c1f1d292bf91f29f7896882360424aa (patch) | |
| tree | 968cdb858a05303a1474207244110c623bce5438 /firmware/drivers/button.c | |
| parent | e49ab427f035af3a3e6f15e56fc839836533f23e (diff) | |
| download | rockbox-12d1ff912c1f1d292bf91f29f7896882360424aa.zip rockbox-12d1ff912c1f1d292bf91f29f7896882360424aa.tar.gz rockbox-12d1ff912c1f1d292bf91f29f7896882360424aa.tar.bz2 rockbox-12d1ff912c1f1d292bf91f29f7896882360424aa.tar.xz | |
touchpad driver for the mrobe. nothing in apps/ uses it yet.
Changes to button driver: HAVE_BUTTON_DATA targets pass the button data straight back in the button_read_device() call
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15262 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/button.c')
| -rw-r--r-- | firmware/drivers/button.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index 3967dfc..000c478 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -73,7 +73,11 @@ bool phones_present = false; /* speed repeat finishes at, in ticks */ #define REPEAT_INTERVAL_FINISH 5 +#ifdef HAVE_BUTTON_DATA +static int button_read(int *data); +#else static int button_read(void); +#endif static void button_tick(void) { @@ -90,6 +94,11 @@ static void button_tick(void) #endif int diff; int btn; +#ifdef HAVE_BUTTON_DATA + int data = 0; +#else + const int data = 0; +#endif #ifdef HAS_SERIAL_REMOTE /* Post events for the remote control */ @@ -117,7 +126,11 @@ static void button_tick(void) } #endif +#ifdef HAVE_BUTTON_DATA + btn = button_read(&data); +#else btn = button_read(); +#endif /* Find out if a key has been released */ diff = btn ^ lastbtn; @@ -127,17 +140,17 @@ static void button_tick(void) #ifdef HAVE_REMOTE_LCD if(diff & BUTTON_REMOTE) if(!skip_remote_release) - queue_post(&button_queue, BUTTON_REL | diff, 0); + queue_post(&button_queue, BUTTON_REL | diff, data); else skip_remote_release = false; else #endif if(!skip_release) - queue_post(&button_queue, BUTTON_REL | diff, 0); + queue_post(&button_queue, BUTTON_REL | diff, data); else skip_release = false; #else - queue_post(&button_queue, BUTTON_REL | diff, 0); + queue_post(&button_queue, BUTTON_REL | diff, data); #endif } else @@ -212,7 +225,7 @@ static void button_tick(void) * to avoid afterscroll effects. */ if (queue_empty(&button_queue)) { - queue_post(&button_queue, BUTTON_REPEAT | btn, 0); + queue_post(&button_queue, BUTTON_REPEAT | btn, data); #ifdef HAVE_BACKLIGHT #ifdef HAVE_REMOTE_LCD skip_remote_release = false; @@ -232,7 +245,7 @@ static void button_tick(void) || (remote_type()==REMOTETYPE_H300_NONLCD) #endif ) - queue_post(&button_queue, btn, 0); + queue_post(&button_queue, btn, data); else skip_remote_release = true; } @@ -243,11 +256,11 @@ static void button_tick(void) || (btn&BUTTON_REMOTE) #endif ) - queue_post(&button_queue, btn, 0); + queue_post(&button_queue, btn, data); else skip_release = true; #else /* no backlight, nothing to skip */ - queue_post(&button_queue, btn, 0); + queue_post(&button_queue, btn, data); #endif post = false; } @@ -356,13 +369,22 @@ intptr_t button_get_data(void) void button_init(void) { +#ifdef HAVE_BUTTON_DATA + int temp; +#endif /* hardware inits */ button_init_device(); queue_init(&button_queue, true); - + +#ifdef HAVE_BUTTON_DATA + button_read(&temp); + lastbtn = button_read(&temp); +#else button_read(); lastbtn = button_read(); +#endif + tick_add_task(button_tick); reset_poweroff_timer(); @@ -457,9 +479,15 @@ void set_remote_backlight_filter_keypress(bool value) /* * Get button pressed from hardware */ +#ifdef HAVE_BUTTON_DATA +static int button_read(int *data) +{ + int btn = button_read_device(data); +#else static int button_read(void) { int btn = button_read_device(); +#endif int retval; #ifdef HAVE_LCD_BITMAP @@ -469,9 +497,11 @@ static int button_read(void) /* Filter the button status. It is only accepted if we get the same status twice in a row. */ +#ifndef HAVE_TOUCHPAD if (btn != last_read) - retval = lastbtn; + retval = lastbtn; else +#endif retval = btn; last_read = btn; |