diff options
| author | Miika Pekkarinen <miipekk@ihme.org> | 2007-03-26 16:55:17 +0000 |
|---|---|---|
| committer | Miika Pekkarinen <miipekk@ihme.org> | 2007-03-26 16:55:17 +0000 |
| commit | 66258a30a407e7ea4600fc2242438ecbd084d5ea (patch) | |
| tree | b5fc767011c814a0fde9811731096f11b9f8c9b9 /firmware/drivers/button.c | |
| parent | 6c487eb5d115e77ae31b22f24b692bb2df3b90b6 (diff) | |
| download | rockbox-66258a30a407e7ea4600fc2242438ecbd084d5ea.zip rockbox-66258a30a407e7ea4600fc2242438ecbd084d5ea.tar.gz rockbox-66258a30a407e7ea4600fc2242438ecbd084d5ea.tar.bz2 rockbox-66258a30a407e7ea4600fc2242438ecbd084d5ea.tar.xz | |
Make scheduler functions thread safe core wise. A big step towards playback running on COP (not yet possible because more protection on file system level is necessary).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12926 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/button.c')
| -rw-r--r-- | firmware/drivers/button.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index dcf77ff..889c7a6 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -37,6 +37,14 @@ #include "lcd-remote.h" #endif +#if 0 +/* Older than MAX_EVENT_AGE button events are going to be ignored. + * Used to prevent for example volume going up uncontrollable when events + * are getting queued and UI is lagging too much. + */ +#define MAX_EVENT_AGE HZ +#endif + struct event_queue button_queue; static long lastbtn; /* Last valid button status */ @@ -290,6 +298,14 @@ long button_get(bool block) if ( block || pending_count ) { queue_wait(&button_queue, &ev); + +#if 0 + /* Ignore if the event was too old and for simplicity, just + * wait for a new button_get() request. */ + if (current_tick - ev.tick > MAX_EVENT_AGE) + return BUTTON_NONE; +#endif + return ev.id; } @@ -318,6 +334,11 @@ void button_init(void) button_init_device(); queue_init(&button_queue, true); + + /* Enable less protection which would kill IRQ handler. Writing queue is + * no longer core-wise thread safe. */ + queue_set_irq_safe(&button_queue, true); + button_read(); lastbtn = button_read(); tick_add_task(button_tick); |