diff options
Diffstat (limited to 'firmware/drivers')
-rw-r--r-- | firmware/drivers/button.c | 18 | ||||
-rw-r--r-- | firmware/drivers/button.h | 1 |
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 | ||
152 | int 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 | |||
152 | int button_set_repeat(int newmask) | 170 | int 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 | ||
27 | void button_init (void); | 27 | void button_init (void); |
28 | int button_get (bool block); | 28 | int button_get (bool block); |
29 | int button_get_w_tmo(int ticks); | ||
29 | int button_set_repeat(int newmask); | 30 | int button_set_repeat(int newmask); |
30 | int button_set_release(int newmask); | 31 | int button_set_release(int newmask); |
31 | 32 | ||