nicer handling of button_flip(), swap stored value, too, and avoid race condition
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4184 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
74976c1484
commit
fa3f60ff1c
1 changed files with 21 additions and 11 deletions
|
@ -34,6 +34,7 @@
|
||||||
struct event_queue button_queue;
|
struct event_queue button_queue;
|
||||||
|
|
||||||
long last_keypress;
|
long last_keypress;
|
||||||
|
static int lastbtn;
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
static bool flipped; /* bottons can be flipped to match the LCD flip */
|
static bool flipped; /* bottons can be flipped to match the LCD flip */
|
||||||
#endif
|
#endif
|
||||||
|
@ -59,7 +60,6 @@ static void button_tick(void)
|
||||||
{
|
{
|
||||||
static int tick = 0;
|
static int tick = 0;
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
static int lastbtn = 0;
|
|
||||||
static int repeat_speed = REPEAT_INTERVAL_START;
|
static int repeat_speed = REPEAT_INTERVAL_START;
|
||||||
static int repeat_count = 0;
|
static int repeat_count = 0;
|
||||||
static bool repeat = false;
|
static bool repeat = false;
|
||||||
|
@ -214,22 +214,13 @@ void button_init()
|
||||||
PBIOR &= ~(PBDR_BTN_ON|PBDR_BTN_OFF); /* Inputs */
|
PBIOR &= ~(PBDR_BTN_ON|PBDR_BTN_OFF); /* Inputs */
|
||||||
#endif
|
#endif
|
||||||
queue_init(&button_queue);
|
queue_init(&button_queue);
|
||||||
|
lastbtn = 0;
|
||||||
tick_add_task(button_tick);
|
tick_add_task(button_tick);
|
||||||
last_keypress = current_tick;
|
last_keypress = current_tick;
|
||||||
flipped = false;
|
flipped = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* set the flip attribute
|
|
||||||
* better only call this when the queue is empty
|
|
||||||
*/
|
|
||||||
void button_set_flip(bool flip)
|
|
||||||
{
|
|
||||||
flipped = flip;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* helper function to swap UP/DOWN, LEFT/RIGHT, F1/F3
|
* helper function to swap UP/DOWN, LEFT/RIGHT, F1/F3
|
||||||
*/
|
*/
|
||||||
|
@ -258,6 +249,23 @@ static int button_flip(int button)
|
||||||
return newbutton;
|
return newbutton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set the flip attribute
|
||||||
|
* better only call this when the queue is empty
|
||||||
|
*/
|
||||||
|
void button_set_flip(bool flip)
|
||||||
|
{
|
||||||
|
if (flip != flipped) /* not the curent setting */
|
||||||
|
{
|
||||||
|
cli(); /* avoid race condition with the button_tick() */
|
||||||
|
lastbtn = button_flip(lastbtn);
|
||||||
|
flipped = flip;
|
||||||
|
sti();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get button pressed from hardware
|
* Get button pressed from hardware
|
||||||
*/
|
*/
|
||||||
|
@ -347,6 +355,7 @@ void button_init(void)
|
||||||
/* set port pins as input */
|
/* set port pins as input */
|
||||||
PAIOR &= ~0x820;
|
PAIOR &= ~0x820;
|
||||||
queue_init(&button_queue);
|
queue_init(&button_queue);
|
||||||
|
lastbtn = 0;
|
||||||
tick_add_task(button_tick);
|
tick_add_task(button_tick);
|
||||||
|
|
||||||
last_keypress = current_tick;
|
last_keypress = current_tick;
|
||||||
|
@ -383,6 +392,7 @@ void button_init(void)
|
||||||
PAIOR &= ~0x4000; //PA14 for stop button
|
PAIOR &= ~0x4000; //PA14 for stop button
|
||||||
|
|
||||||
queue_init(&button_queue);
|
queue_init(&button_queue);
|
||||||
|
lastbtn = 0;
|
||||||
tick_add_task(button_tick);
|
tick_add_task(button_tick);
|
||||||
|
|
||||||
last_keypress = current_tick;
|
last_keypress = current_tick;
|
||||||
|
|
Loading…
Reference in a new issue