diff options
| author | Karl Kurbjun <kkurbjun@gmail.com> | 2009-04-16 03:10:01 +0000 |
|---|---|---|
| committer | Karl Kurbjun <kkurbjun@gmail.com> | 2009-04-16 03:10:01 +0000 |
| commit | 493d3a03b3733b2c529d04a168c1915217f5c0e9 (patch) | |
| tree | f33adf2da6c7409ef226ad6faeb359a0a516f76a | |
| parent | 3c85268f1857d5515b9ddd4ce64fa66cfa6bf955 (diff) | |
| download | rockbox-493d3a03b3733b2c529d04a168c1915217f5c0e9.zip rockbox-493d3a03b3733b2c529d04a168c1915217f5c0e9.tar.gz rockbox-493d3a03b3733b2c529d04a168c1915217f5c0e9.tar.bz2 rockbox-493d3a03b3733b2c529d04a168c1915217f5c0e9.tar.xz | |
M:Robe 500: Add support for hold button on the remote.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20712 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c index 00096ce..daa53f7 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c @@ -7,7 +7,7 @@ * \/ \/ \/ \/ \/ * $Id$ * - * Copyright (C) 2007 by Karl Kurbjun + * Copyright (C) 2007, 2009 by Karl Kurbjun * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -42,6 +42,7 @@ /* but always the same one for the session? */ static short last_x, last_y, last_z1, last_z2; /* for the touch screen */ static bool touch_available = false; +static bool hold_button = false; static struct touch_calibration_point topleft, bottomright; @@ -125,7 +126,7 @@ void button_init_device(void) inline bool button_hold(void) { - return false; + return hold_button; } #define TOUCH_MARGIN 8 @@ -133,8 +134,9 @@ char r_buffer[5]; int r_button = BUTTON_NONE; int button_read_device(int *data) { - int retval, calbuf; + int retval, button1_location, button2_location; static int oldbutton = BUTTON_NONE; + static bool oldhold = false; static long last_touch = 0; @@ -187,24 +189,47 @@ int button_read_device(int *data) retval=uart1_gets_queue(r_buffer, 5); - for(calbuf=0;calbuf<4;calbuf++) + for(button1_location=0;button1_location<4;button1_location++) { - if((r_buffer[calbuf]&0xF0)==0xF0 && (r_buffer[calbuf+1]&0xF0)!=0xF0) + if((r_buffer[button1_location]&0xF0)==0xF0 + && (r_buffer[button1_location+1]&0xF0)!=0xF0) break; } - calbuf++; - if(calbuf==5) - calbuf=0; + button1_location++; + if(button1_location==5) + button1_location=0; + + if(button1_location==4) + button2_location=0; + else + button2_location=button1_location+1; + if(retval>=0) { uart1_clear_queue(); - r_button |= r_buffer[calbuf]; + r_button |= r_buffer[button1_location]; oldbutton=r_button; + hold_button=((r_buffer[button2_location]&0x80)?true:false); } else { r_button=oldbutton; } + +#ifndef BOOTLOADER + /* give BL notice if HB state chaged */ + if (hold_button != oldhold) + { + backlight_hold_changed(hold_button); + oldhold=hold_button; + } +#endif + + if (hold_button) + { + r_button=BUTTON_NONE; + oldbutton=r_button; + } return r_button; } |