summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/button.c18
-rw-r--r--firmware/drivers/button.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index 878f041c78..d709b012de 100644
--- a/firmware/drivers/button.c
+++ b/firmware/drivers/button.c
@@ -149,6 +149,24 @@ int button_get(bool block)
149 return BUTTON_NONE; 149 return BUTTON_NONE;
150} 150}
151 151
152int button_get_w_tmo(int ticks)
153{
154 struct event ev;
155 unsigned int timeout = current_tick + ticks;
156
157 while (TIME_BEFORE( current_tick, timeout ))
158 {
159 if(!queue_empty(&button_queue))
160 {
161 queue_wait(&button_queue, &ev);
162 return ev.id;
163 }
164 yield();
165 }
166
167 return BUTTON_NONE;
168}
169
152int button_set_repeat(int newmask) 170int button_set_repeat(int newmask)
153{ 171{
154 int oldmask = repeat_mask; 172 int oldmask = repeat_mask;
diff --git a/firmware/drivers/button.h b/firmware/drivers/button.h
index 22d648caf6..035fedd739 100644
--- a/firmware/drivers/button.h
+++ b/firmware/drivers/button.h
@@ -26,6 +26,7 @@ extern struct event_queue button_queue;
26 26
27void button_init (void); 27void button_init (void);
28int button_get (bool block); 28int button_get (bool block);
29int button_get_w_tmo(int ticks);
29int button_set_repeat(int newmask); 30int button_set_repeat(int newmask);
30int button_set_release(int newmask); 31int button_set_release(int newmask);
31 32