forked from len0rd/rockbox
Added timer-interrupt polling and button queue
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@659 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
29f80283e9
commit
2549234bd7
1 changed files with 35 additions and 2 deletions
|
|
@ -20,9 +20,38 @@
|
||||||
* Archos Jukebox Recorder button functions
|
* Archos Jukebox Recorder button functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "sh7034.h"
|
#include "sh7034.h"
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
|
#include "kernel.h"
|
||||||
|
|
||||||
|
static struct event_queue button_queue;
|
||||||
|
|
||||||
|
#define POLL_FREQUENCY HZ/10
|
||||||
|
|
||||||
|
static int button_read(void);
|
||||||
|
|
||||||
|
static void button_tick(void)
|
||||||
|
{
|
||||||
|
static int counter=0;
|
||||||
|
|
||||||
|
/* only poll every X ticks */
|
||||||
|
if ( counter++ > POLL_FREQUENCY ) {
|
||||||
|
int btn = button_read();
|
||||||
|
queue_post(&button_queue, btn, NULL);
|
||||||
|
counter=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int button_get(void)
|
||||||
|
{
|
||||||
|
struct event ev;
|
||||||
|
|
||||||
|
if ( !queue_empty(&button_queue) )
|
||||||
|
queue_wait(&button_queue, &ev);
|
||||||
|
return ev.id;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
|
|
||||||
|
|
@ -73,6 +102,8 @@ void button_init()
|
||||||
#endif
|
#endif
|
||||||
last = BUTTON_NONE;
|
last = BUTTON_NONE;
|
||||||
count = 0;
|
count = 0;
|
||||||
|
queue_init(&button_queue);
|
||||||
|
tick_add_task(button_tick);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -119,7 +150,7 @@ static int get_raw_button (void)
|
||||||
* BUTTON_HELD bit is while the button is being held.
|
* BUTTON_HELD bit is while the button is being held.
|
||||||
* BUTTON_REL bit is set when button has been released.
|
* BUTTON_REL bit is set when button has been released.
|
||||||
*/
|
*/
|
||||||
int button_get(void)
|
static int button_read(void)
|
||||||
{
|
{
|
||||||
int btn = get_raw_button();
|
int btn = get_raw_button();
|
||||||
int ret;
|
int ret;
|
||||||
|
|
@ -162,9 +193,11 @@ void button_init(void)
|
||||||
{
|
{
|
||||||
/* set port pins as input */
|
/* set port pins as input */
|
||||||
PAIOR &= ~0x820;
|
PAIOR &= ~0x820;
|
||||||
|
queue_init(&button_queue);
|
||||||
|
tick_add_task(button_tick);
|
||||||
}
|
}
|
||||||
|
|
||||||
int button_get(void)
|
static int button_read(void)
|
||||||
{
|
{
|
||||||
int porta = PADR;
|
int porta = PADR;
|
||||||
int portc = PCDR;
|
int portc = PCDR;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue