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
This commit is contained in:
Karl Kurbjun 2009-04-16 03:10:01 +00:00
parent 3c85268f18
commit 493d3a03b3

View file

@ -7,7 +7,7 @@
* \/ \/ \/ \/ \/ * \/ \/ \/ \/ \/
* $Id$ * $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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -42,6 +42,7 @@
/* but always the same one for the session? */ /* but always the same one for the session? */
static short last_x, last_y, last_z1, last_z2; /* for the touch screen */ static short last_x, last_y, last_z1, last_z2; /* for the touch screen */
static bool touch_available = false; static bool touch_available = false;
static bool hold_button = false;
static struct touch_calibration_point topleft, bottomright; static struct touch_calibration_point topleft, bottomright;
@ -125,7 +126,7 @@ void button_init_device(void)
inline bool button_hold(void) inline bool button_hold(void)
{ {
return false; return hold_button;
} }
#define TOUCH_MARGIN 8 #define TOUCH_MARGIN 8
@ -133,8 +134,9 @@ char r_buffer[5];
int r_button = BUTTON_NONE; int r_button = BUTTON_NONE;
int button_read_device(int *data) int button_read_device(int *data)
{ {
int retval, calbuf; int retval, button1_location, button2_location;
static int oldbutton = BUTTON_NONE; static int oldbutton = BUTTON_NONE;
static bool oldhold = false;
static long last_touch = 0; static long last_touch = 0;
@ -187,25 +189,48 @@ int button_read_device(int *data)
retval=uart1_gets_queue(r_buffer, 5); 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; break;
} }
calbuf++; button1_location++;
if(calbuf==5) if(button1_location==5)
calbuf=0; button1_location=0;
if(button1_location==4)
button2_location=0;
else
button2_location=button1_location+1;
if(retval>=0) if(retval>=0)
{ {
uart1_clear_queue(); uart1_clear_queue();
r_button |= r_buffer[calbuf]; r_button |= r_buffer[button1_location];
oldbutton=r_button; oldbutton=r_button;
hold_button=((r_buffer[button2_location]&0x80)?true:false);
} }
else else
{ {
r_button=oldbutton; 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; return r_button;
} }