diff options
Diffstat (limited to 'firmware/drivers/button.c')
-rw-r--r-- | firmware/drivers/button.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index 3967dfcc1a..000c4789a5 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c | |||
@@ -73,7 +73,11 @@ bool phones_present = false; | |||
73 | /* speed repeat finishes at, in ticks */ | 73 | /* speed repeat finishes at, in ticks */ |
74 | #define REPEAT_INTERVAL_FINISH 5 | 74 | #define REPEAT_INTERVAL_FINISH 5 |
75 | 75 | ||
76 | #ifdef HAVE_BUTTON_DATA | ||
77 | static int button_read(int *data); | ||
78 | #else | ||
76 | static int button_read(void); | 79 | static int button_read(void); |
80 | #endif | ||
77 | 81 | ||
78 | static void button_tick(void) | 82 | static void button_tick(void) |
79 | { | 83 | { |
@@ -90,6 +94,11 @@ static void button_tick(void) | |||
90 | #endif | 94 | #endif |
91 | int diff; | 95 | int diff; |
92 | int btn; | 96 | int btn; |
97 | #ifdef HAVE_BUTTON_DATA | ||
98 | int data = 0; | ||
99 | #else | ||
100 | const int data = 0; | ||
101 | #endif | ||
93 | 102 | ||
94 | #ifdef HAS_SERIAL_REMOTE | 103 | #ifdef HAS_SERIAL_REMOTE |
95 | /* Post events for the remote control */ | 104 | /* Post events for the remote control */ |
@@ -117,7 +126,11 @@ static void button_tick(void) | |||
117 | } | 126 | } |
118 | #endif | 127 | #endif |
119 | 128 | ||
129 | #ifdef HAVE_BUTTON_DATA | ||
130 | btn = button_read(&data); | ||
131 | #else | ||
120 | btn = button_read(); | 132 | btn = button_read(); |
133 | #endif | ||
121 | 134 | ||
122 | /* Find out if a key has been released */ | 135 | /* Find out if a key has been released */ |
123 | diff = btn ^ lastbtn; | 136 | diff = btn ^ lastbtn; |
@@ -127,17 +140,17 @@ static void button_tick(void) | |||
127 | #ifdef HAVE_REMOTE_LCD | 140 | #ifdef HAVE_REMOTE_LCD |
128 | if(diff & BUTTON_REMOTE) | 141 | if(diff & BUTTON_REMOTE) |
129 | if(!skip_remote_release) | 142 | if(!skip_remote_release) |
130 | queue_post(&button_queue, BUTTON_REL | diff, 0); | 143 | queue_post(&button_queue, BUTTON_REL | diff, data); |
131 | else | 144 | else |
132 | skip_remote_release = false; | 145 | skip_remote_release = false; |
133 | else | 146 | else |
134 | #endif | 147 | #endif |
135 | if(!skip_release) | 148 | if(!skip_release) |
136 | queue_post(&button_queue, BUTTON_REL | diff, 0); | 149 | queue_post(&button_queue, BUTTON_REL | diff, data); |
137 | else | 150 | else |
138 | skip_release = false; | 151 | skip_release = false; |
139 | #else | 152 | #else |
140 | queue_post(&button_queue, BUTTON_REL | diff, 0); | 153 | queue_post(&button_queue, BUTTON_REL | diff, data); |
141 | #endif | 154 | #endif |
142 | } | 155 | } |
143 | else | 156 | else |
@@ -212,7 +225,7 @@ static void button_tick(void) | |||
212 | * to avoid afterscroll effects. */ | 225 | * to avoid afterscroll effects. */ |
213 | if (queue_empty(&button_queue)) | 226 | if (queue_empty(&button_queue)) |
214 | { | 227 | { |
215 | queue_post(&button_queue, BUTTON_REPEAT | btn, 0); | 228 | queue_post(&button_queue, BUTTON_REPEAT | btn, data); |
216 | #ifdef HAVE_BACKLIGHT | 229 | #ifdef HAVE_BACKLIGHT |
217 | #ifdef HAVE_REMOTE_LCD | 230 | #ifdef HAVE_REMOTE_LCD |
218 | skip_remote_release = false; | 231 | skip_remote_release = false; |
@@ -232,7 +245,7 @@ static void button_tick(void) | |||
232 | || (remote_type()==REMOTETYPE_H300_NONLCD) | 245 | || (remote_type()==REMOTETYPE_H300_NONLCD) |
233 | #endif | 246 | #endif |
234 | ) | 247 | ) |
235 | queue_post(&button_queue, btn, 0); | 248 | queue_post(&button_queue, btn, data); |
236 | else | 249 | else |
237 | skip_remote_release = true; | 250 | skip_remote_release = true; |
238 | } | 251 | } |
@@ -243,11 +256,11 @@ static void button_tick(void) | |||
243 | || (btn&BUTTON_REMOTE) | 256 | || (btn&BUTTON_REMOTE) |
244 | #endif | 257 | #endif |
245 | ) | 258 | ) |
246 | queue_post(&button_queue, btn, 0); | 259 | queue_post(&button_queue, btn, data); |
247 | else | 260 | else |
248 | skip_release = true; | 261 | skip_release = true; |
249 | #else /* no backlight, nothing to skip */ | 262 | #else /* no backlight, nothing to skip */ |
250 | queue_post(&button_queue, btn, 0); | 263 | queue_post(&button_queue, btn, data); |
251 | #endif | 264 | #endif |
252 | post = false; | 265 | post = false; |
253 | } | 266 | } |
@@ -356,13 +369,22 @@ intptr_t button_get_data(void) | |||
356 | 369 | ||
357 | void button_init(void) | 370 | void button_init(void) |
358 | { | 371 | { |
372 | #ifdef HAVE_BUTTON_DATA | ||
373 | int temp; | ||
374 | #endif | ||
359 | /* hardware inits */ | 375 | /* hardware inits */ |
360 | button_init_device(); | 376 | button_init_device(); |
361 | 377 | ||
362 | queue_init(&button_queue, true); | 378 | queue_init(&button_queue, true); |
363 | 379 | ||
380 | #ifdef HAVE_BUTTON_DATA | ||
381 | button_read(&temp); | ||
382 | lastbtn = button_read(&temp); | ||
383 | #else | ||
364 | button_read(); | 384 | button_read(); |
365 | lastbtn = button_read(); | 385 | lastbtn = button_read(); |
386 | #endif | ||
387 | |||
366 | tick_add_task(button_tick); | 388 | tick_add_task(button_tick); |
367 | reset_poweroff_timer(); | 389 | reset_poweroff_timer(); |
368 | 390 | ||
@@ -457,9 +479,15 @@ void set_remote_backlight_filter_keypress(bool value) | |||
457 | /* | 479 | /* |
458 | * Get button pressed from hardware | 480 | * Get button pressed from hardware |
459 | */ | 481 | */ |
482 | #ifdef HAVE_BUTTON_DATA | ||
483 | static int button_read(int *data) | ||
484 | { | ||
485 | int btn = button_read_device(data); | ||
486 | #else | ||
460 | static int button_read(void) | 487 | static int button_read(void) |
461 | { | 488 | { |
462 | int btn = button_read_device(); | 489 | int btn = button_read_device(); |
490 | #endif | ||
463 | int retval; | 491 | int retval; |
464 | 492 | ||
465 | #ifdef HAVE_LCD_BITMAP | 493 | #ifdef HAVE_LCD_BITMAP |
@@ -469,9 +497,11 @@ static int button_read(void) | |||
469 | 497 | ||
470 | /* Filter the button status. It is only accepted if we get the same | 498 | /* Filter the button status. It is only accepted if we get the same |
471 | status twice in a row. */ | 499 | status twice in a row. */ |
500 | #ifndef HAVE_TOUCHPAD | ||
472 | if (btn != last_read) | 501 | if (btn != last_read) |
473 | retval = lastbtn; | 502 | retval = lastbtn; |
474 | else | 503 | else |
504 | #endif | ||
475 | retval = btn; | 505 | retval = btn; |
476 | last_read = btn; | 506 | last_read = btn; |
477 | 507 | ||