summaryrefslogtreecommitdiff
path: root/firmware/drivers/button.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2007-03-26 16:55:17 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2007-03-26 16:55:17 +0000
commit66258a30a407e7ea4600fc2242438ecbd084d5ea (patch)
treeb5fc767011c814a0fde9811731096f11b9f8c9b9 /firmware/drivers/button.c
parent6c487eb5d115e77ae31b22f24b692bb2df3b90b6 (diff)
downloadrockbox-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.c21
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);