summaryrefslogtreecommitdiff
path: root/firmware/drivers/button.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/button.c')
-rw-r--r--firmware/drivers/button.c48
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
77static int button_read(int *data);
78#else
76static int button_read(void); 79static int button_read(void);
80#endif
77 81
78static void button_tick(void) 82static 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
357void button_init(void) 370void 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
483static int button_read(int *data)
484{
485 int btn = button_read_device(data);
486#else
460static int button_read(void) 487static 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