summaryrefslogtreecommitdiff
path: root/uisimulator/x11/button-x11.c
diff options
context:
space:
mode:
Diffstat (limited to 'uisimulator/x11/button-x11.c')
-rw-r--r--uisimulator/x11/button-x11.c321
1 files changed, 0 insertions, 321 deletions
diff --git a/uisimulator/x11/button-x11.c b/uisimulator/x11/button-x11.c
deleted file mode 100644
index 673f71ea7b..0000000000
--- a/uisimulator/x11/button-x11.c
+++ /dev/null
@@ -1,321 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Björn Stenberg
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#include <stdlib.h>
20#include "config.h"
21#include "button.h"
22#include "kernel.h"
23#include "debug.h"
24#include "backlight.h"
25#include "misc.h"
26
27#include "X11/keysym.h"
28
29extern int screenhack_handle_events(bool *release);
30
31struct event_queue button_queue;
32
33static int button_state = 0; /* keeps track of pressed keys */
34static long lastbtn; /* Last valid button status */
35
36/* how often we check to see if a button is pressed */
37#define POLL_FREQUENCY HZ/25
38
39/* how long until repeat kicks in */
40#define REPEAT_START 8
41
42/* the speed repeat starts at */
43#define REPEAT_INTERVAL_START 4
44
45/* speed repeat finishes at */
46#define REPEAT_INTERVAL_FINISH 2
47
48/* mostly copied from real button.c */
49void button_read (void);
50
51static void button_tick(void)
52{
53 static int tick = 0;
54 static int count = 0;
55 static int repeat_speed = REPEAT_INTERVAL_START;
56 static int repeat_count = 0;
57 static bool repeat = false;
58 static bool post = false;
59 int diff;
60 int btn;
61
62 /* only poll every X ticks */
63 if ( ++tick >= POLL_FREQUENCY )
64 {
65 button_read();
66 btn = button_state;
67
68 /* Find out if a key has been released */
69 diff = btn ^ lastbtn;
70 if(diff && (btn & diff) == 0)
71 {
72 queue_post(&button_queue, BUTTON_REL | diff, NULL);
73 }
74 else
75 {
76 if ( btn )
77 {
78 /* normal keypress */
79 if ( btn != lastbtn )
80 {
81 post = true;
82 repeat = false;
83 repeat_speed = REPEAT_INTERVAL_START;
84
85 }
86 else /* repeat? */
87 {
88 if ( repeat )
89 {
90 count--;
91 if (count == 0) {
92 post = true;
93 /* yes we have repeat */
94 repeat_speed--;
95 if (repeat_speed < REPEAT_INTERVAL_FINISH)
96 repeat_speed = REPEAT_INTERVAL_FINISH;
97 count = repeat_speed;
98
99 repeat_count++;
100
101 }
102 }
103 else
104 {
105 if (count++ > REPEAT_START)
106 {
107 post = true;
108 repeat = true;
109 repeat_count = 0;
110 /* initial repeat */
111 count = REPEAT_INTERVAL_START;
112 }
113 }
114 }
115 if ( post )
116 {
117 if (repeat)
118 {
119 if (queue_empty(&button_queue))
120 {
121 queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
122 post = false;
123 }
124 }
125 else
126 {
127 queue_post(&button_queue, btn, NULL);
128 post = false;
129 }
130#ifdef HAVE_REMOTE_LCD
131 if(btn & BUTTON_REMOTE)
132 remote_backlight_on();
133 else
134#endif
135 backlight_on();
136
137 }
138 }
139 else
140 {
141 repeat = false;
142 count = 0;
143 }
144 }
145 lastbtn = btn & ~(BUTTON_REL | BUTTON_REPEAT);
146 tick = 0;
147 }
148}
149
150/*
151 * Read X keys and translate to rockbox buttons
152 */
153
154void button_read (void)
155{
156 int k;
157 bool release = false; /* is this a release event */
158 int ev = screenhack_handle_events(&release);
159
160 switch (ev)
161 {
162 case XK_KP_Left:
163 case XK_Left:
164 case XK_KP_4:
165 k = BUTTON_LEFT;
166 break;
167
168 case XK_KP_Right:
169 case XK_Right:
170 case XK_KP_6:
171 k = BUTTON_RIGHT;
172 break;
173
174 case XK_KP_Up:
175 case XK_Up:
176 case XK_KP_8:
177#ifdef BUTTON_UP
178 k = BUTTON_UP;
179#elif defined BUTTON_PLAY
180 k = BUTTON_PLAY;
181#endif
182 break;
183
184 case XK_KP_Down:
185 case XK_Down:
186 case XK_KP_2:
187#ifdef BUTTON_DOWN
188 k = BUTTON_DOWN;
189#elif defined BUTTON_STOP
190 k = BUTTON_STOP;
191#endif
192 break;
193
194#ifdef BUTTON_ON
195 case XK_KP_Add:
196 case XK_Q:
197 case XK_q:
198 k = BUTTON_ON;
199 break;
200#endif
201
202#ifdef BUTTON_OFF
203 case XK_KP_Enter:
204 case XK_A:
205 case XK_a:
206 k = BUTTON_OFF;
207 break;
208#endif
209
210#ifdef BUTTON_F1
211 case XK_KP_Divide:
212 case XK_1:
213 k = BUTTON_F1;
214 break;
215
216 case XK_KP_Multiply:
217 case XK_2:
218 k = BUTTON_F2;
219 break;
220
221 case XK_KP_Subtract:
222 case XK_3:
223 k = BUTTON_F3;
224 break;
225#elif defined(BUTTON_REC)
226 case XK_KP_Divide:
227 case XK_1:
228 k = BUTTON_REC;
229 break;
230#endif
231
232 case XK_KP_Space:
233 case XK_KP_5:
234 case XK_KP_Begin:
235 case XK_space:
236#ifdef BUTTON_PLAY
237 k = BUTTON_PLAY;
238#elif defined(BUTTON_SELECT)
239 k = BUTTON_SELECT;
240#endif
241 break;
242
243#ifdef HAVE_LCD_BITMAP
244 case XK_5:
245 if(!release)
246 screen_dump();
247 break;
248#endif
249
250 case XK_KP_Separator:
251 case XK_KP_Insert:
252 case XK_Insert:
253#ifdef BUTTON_MENU
254 k = BUTTON_MENU;
255#elif defined(BUTTON_MODE)
256 k = BUTTON_MODE;
257#endif
258 break;
259
260 default:
261 k = 0;
262 if(ev)
263 DEBUGF("received ev %d\n", ev);
264 break;
265 }
266
267 if (release)
268 button_state &= ~k;
269 else
270 button_state |= k;
271}
272
273/* Again copied from real button.c... */
274
275long button_get(bool block)
276{
277 struct event ev;
278
279 if ( block || !queue_empty(&button_queue) )
280 {
281 queue_wait(&button_queue, &ev);
282 return ev.id;
283 }
284 return BUTTON_NONE;
285}
286
287long button_get_w_tmo(int ticks)
288{
289 struct event ev;
290 queue_wait_w_tmo(&button_queue, &ev, ticks);
291 return (ev.id != SYS_TIMEOUT)? ev.id: BUTTON_NONE;
292}
293
294void button_init(void)
295{
296 tick_add_task(button_tick);
297}
298
299int button_status(void)
300{
301 return lastbtn;
302}
303
304void button_clear_queue(void)
305{
306 queue_clear(&button_queue);
307}
308
309#ifdef HAS_BUTTON_HOLD
310bool button_hold(void) {
311 /* temp fix for hold button on irivers */
312 return false;
313}
314#endif
315
316#ifdef HAS_REMOTE_BUTTON_HOLD
317bool remote_button_hold(void) {
318 /* temp fix for hold button on irivers */
319 return false;
320}
321#endif