diff options
Diffstat (limited to 'firmware/drivers/button.c')
-rw-r--r-- | firmware/drivers/button.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index c0cd046db6..cfe98e298a 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c | |||
@@ -34,6 +34,9 @@ | |||
34 | struct event_queue button_queue; | 34 | struct event_queue button_queue; |
35 | 35 | ||
36 | long last_keypress; | 36 | long last_keypress; |
37 | #ifdef HAVE_RECORDER_KEYPAD | ||
38 | static bool flipped; /* bottons can be flipped to match the LCD flip */ | ||
39 | #endif | ||
37 | 40 | ||
38 | /* how often we check to see if a button is pressed */ | 41 | /* how often we check to see if a button is pressed */ |
39 | #define POLL_FREQUENCY HZ/20 | 42 | #define POLL_FREQUENCY HZ/20 |
@@ -212,6 +215,47 @@ void button_init() | |||
212 | #endif | 215 | #endif |
213 | queue_init(&button_queue); | 216 | queue_init(&button_queue); |
214 | tick_add_task(button_tick); | 217 | tick_add_task(button_tick); |
218 | last_keypress = current_tick; | ||
219 | flipped = false; | ||
220 | } | ||
221 | |||
222 | |||
223 | /* | ||
224 | * set the flip attribute | ||
225 | * better only call this when the queue is empty | ||
226 | */ | ||
227 | void button_set_flip(bool flip) | ||
228 | { | ||
229 | flipped = flip; | ||
230 | } | ||
231 | |||
232 | |||
233 | /* | ||
234 | * helper function to swap UP/DOWN, LEFT/RIGHT, F1/F3 | ||
235 | */ | ||
236 | static int button_flip(int button) | ||
237 | { | ||
238 | int newbutton; | ||
239 | |||
240 | newbutton = button & | ||
241 | ~(BUTTON_UP | BUTTON_DOWN | ||
242 | | BUTTON_LEFT | BUTTON_RIGHT | ||
243 | | BUTTON_F1 | BUTTON_F3); | ||
244 | |||
245 | if (button & BUTTON_UP) | ||
246 | newbutton |= BUTTON_DOWN; | ||
247 | if (button & BUTTON_DOWN) | ||
248 | newbutton |= BUTTON_UP; | ||
249 | if (button & BUTTON_LEFT) | ||
250 | newbutton |= BUTTON_RIGHT; | ||
251 | if (button & BUTTON_RIGHT) | ||
252 | newbutton |= BUTTON_LEFT; | ||
253 | if (button & BUTTON_F1) | ||
254 | newbutton |= BUTTON_F3; | ||
255 | if (button & BUTTON_F3) | ||
256 | newbutton |= BUTTON_F1; | ||
257 | |||
258 | return newbutton; | ||
215 | } | 259 | } |
216 | 260 | ||
217 | /* | 261 | /* |
@@ -276,6 +320,9 @@ static int button_read(void) | |||
276 | #endif | 320 | #endif |
277 | } | 321 | } |
278 | } | 322 | } |
323 | |||
324 | if (btn && flipped) | ||
325 | return button_flip(btn); /* swap upside down */ | ||
279 | 326 | ||
280 | return btn; | 327 | return btn; |
281 | } | 328 | } |