diff options
Diffstat (limited to 'uisimulator/sdl')
-rw-r--r-- | uisimulator/sdl/Makefile | 64 | ||||
-rw-r--r-- | uisimulator/sdl/README | 6 | ||||
-rw-r--r-- | uisimulator/sdl/SOURCES | 15 | ||||
-rw-r--r-- | uisimulator/sdl/button-sdl.h | 46 | ||||
-rw-r--r-- | uisimulator/sdl/button.c | 1907 | ||||
-rw-r--r-- | uisimulator/sdl/kernel-sdl.c | 155 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-bitmap.c | 415 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-bitmap.h | 35 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-charcells.c | 197 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-charcells.h | 34 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-remote-bitmap.c | 110 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-remote-bitmap.h | 32 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-sdl.c | 112 | ||||
-rw-r--r-- | uisimulator/sdl/lcd-sdl.h | 42 | ||||
-rw-r--r-- | uisimulator/sdl/sound.c | 426 | ||||
-rw-r--r-- | uisimulator/sdl/sound.h | 24 | ||||
-rw-r--r-- | uisimulator/sdl/system-sdl.h | 49 | ||||
-rw-r--r-- | uisimulator/sdl/thread-sdl.c | 649 | ||||
-rw-r--r-- | uisimulator/sdl/thread-sdl.h | 37 | ||||
-rw-r--r-- | uisimulator/sdl/timefuncs.h | 7 | ||||
-rw-r--r-- | uisimulator/sdl/timer.c | 61 | ||||
-rw-r--r-- | uisimulator/sdl/uisdl.c | 368 | ||||
-rw-r--r-- | uisimulator/sdl/uisdl.h | 408 |
23 files changed, 0 insertions, 5199 deletions
diff --git a/uisimulator/sdl/Makefile b/uisimulator/sdl/Makefile deleted file mode 100644 index dc76b35d68..0000000000 --- a/uisimulator/sdl/Makefile +++ /dev/null | |||
@@ -1,64 +0,0 @@ | |||
1 | ############################################################################ | ||
2 | # __________ __ ___. | ||
3 | # Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | # \/ \/ \/ \/ \/ | ||
8 | # $Id$ | ||
9 | # | ||
10 | # Copyright (C) 2002, 2008 by Daniel Stenberg <daniel@haxx.se> | ||
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 | |||
20 | SIMCOMMON = ../common | ||
21 | |||
22 | DEPFILE = $(OBJDIR)/dep-sim | ||
23 | |||
24 | RM = rm -f | ||
25 | DEBUG = -g | ||
26 | |||
27 | # Use this for simulator-only files | ||
28 | INCLUDES = -I. -I$(SIMCOMMON) -I$(OBJDIR) $(TARGET_INC) -I$(FIRMDIR)/export \ | ||
29 | -I$(APPSDIR) -I$(BUILDDIR) | ||
30 | |||
31 | # This sets up 'SRC' based on the files mentioned in SOURCES | ||
32 | include $(TOOLSDIR)/makesrc.inc | ||
33 | |||
34 | OBJS := $(SRC:%.c=$(OBJDIR)/%.o) | ||
35 | |||
36 | DEFINES := -DHAVE_CONFIG_H -DGETTIMEOFDAY_TWO_ARGS -DSIMULATOR \ | ||
37 | $(TARGET) -DAPPSVERSION=\"$(VERSION)\" -DMEM=${MEMORYSIZE} $(EXTRA_DEFINES) | ||
38 | |||
39 | SOURCES = $(SRC) | ||
40 | |||
41 | DIRS = . | ||
42 | |||
43 | CFLAGS = $(DEBUG) $(DEFINES) $(INCLUDES) $(GCCOPTS) -W -Wall | ||
44 | |||
45 | OUTFILE = $(BUILDDIR)/libsim.a | ||
46 | |||
47 | all: $(OUTFILE) | ||
48 | |||
49 | include $(TOOLSDIR)/make.inc | ||
50 | |||
51 | $(OUTFILE): $(OBJS) $(BUILDDIR)/UI256.bmp | ||
52 | $(call PRINTS,AR+RANLIB $(@F))$(AR) ruv $@ $(OBJS) >/dev/null 2>&1 | ||
53 | $(SILENT)$(RANLIB) $@ | ||
54 | |||
55 | clean: | ||
56 | $(call PRINTS,cleaning sim)$(RM) $(OBJS) *~ core $(OUTFILE) $(DEPFILE) \ | ||
57 | $(BUILDDIR)/UI256.bmp $(DEPFILE) | ||
58 | $(SILENT)$(MAKE) -C $(SIMCOMMON) clean | ||
59 | |||
60 | ################## Specific dependencies ################## | ||
61 | $(BUILDDIR)/UI256.bmp: UI-$(MODELNAME).bmp | ||
62 | $(call PRINTS,UI)cp $< $@ | ||
63 | |||
64 | -include $(DEPFILE) | ||
diff --git a/uisimulator/sdl/README b/uisimulator/sdl/README deleted file mode 100644 index 0a293f6ad2..0000000000 --- a/uisimulator/sdl/README +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | To build: | ||
2 | |||
3 | $ ../tools/configure | ||
4 | [answer questions] | ||
5 | $ make | ||
6 | $ ./rockboxui | ||
diff --git a/uisimulator/sdl/SOURCES b/uisimulator/sdl/SOURCES deleted file mode 100644 index 1d5b498248..0000000000 --- a/uisimulator/sdl/SOURCES +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | button.c | ||
2 | kernel-sdl.c | ||
3 | #ifdef HAVE_LCD_BITMAP | ||
4 | lcd-bitmap.c | ||
5 | #elif defined(HAVE_LCD_CHARCELLS) | ||
6 | lcd-charcells.c | ||
7 | #endif | ||
8 | #ifdef HAVE_REMOTE_LCD | ||
9 | lcd-remote-bitmap.c | ||
10 | #endif | ||
11 | lcd-sdl.c | ||
12 | sound.c | ||
13 | timer.c | ||
14 | thread-sdl.c | ||
15 | uisdl.c | ||
diff --git a/uisimulator/sdl/button-sdl.h b/uisimulator/sdl/button-sdl.h deleted file mode 100644 index 948af62c5b..0000000000 --- a/uisimulator/sdl/button-sdl.h +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2009 by Thomas Martitz | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | |||
23 | #ifndef _BUTTON_SDL_H_ | ||
24 | #define _BUTTON_SDL_H_ | ||
25 | |||
26 | #include <stdbool.h> | ||
27 | #include "config.h" | ||
28 | #include "button-target.h" | ||
29 | |||
30 | #undef HAVE_LCD_FLIP | ||
31 | |||
32 | #undef button_init_device | ||
33 | #define button_init_device() | ||
34 | |||
35 | struct button_map { | ||
36 | int button, x, y, radius; | ||
37 | char *description; | ||
38 | }; | ||
39 | |||
40 | int xy2button( int x, int y); | ||
41 | bool button_hold(void); | ||
42 | void button_init_sdl(void); | ||
43 | #undef button_init_device | ||
44 | #define button_init_device() button_init_sdl() | ||
45 | |||
46 | #endif | ||
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c deleted file mode 100644 index 2bb7764782..0000000000 --- a/uisimulator/sdl/button.c +++ /dev/null | |||
@@ -1,1907 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2002 by Felix Arends | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "uisdl.h" | ||
23 | #include "lcd-charcells.h" | ||
24 | #include "lcd-remote.h" | ||
25 | #include "config.h" | ||
26 | #include "button.h" | ||
27 | #include "kernel.h" | ||
28 | #include "backlight.h" | ||
29 | #include "misc.h" | ||
30 | #include "sim_tasks.h" | ||
31 | #include "button-sdl.h" | ||
32 | #include "backlight.h" | ||
33 | |||
34 | #include "debug.h" | ||
35 | |||
36 | #ifdef HAVE_TOUCHSCREEN | ||
37 | #include "touchscreen.h" | ||
38 | static int mouse_coords = 0; | ||
39 | #endif | ||
40 | /* how long until repeat kicks in */ | ||
41 | #define REPEAT_START 6 | ||
42 | |||
43 | /* the speed repeat starts at */ | ||
44 | #define REPEAT_INTERVAL_START 4 | ||
45 | |||
46 | /* speed repeat finishes at */ | ||
47 | #define REPEAT_INTERVAL_FINISH 2 | ||
48 | |||
49 | #ifdef HAVE_TOUCHSCREEN | ||
50 | #define USB_KEY SDLK_c /* SDLK_u is taken by BUTTON_MIDLEFT */ | ||
51 | #else | ||
52 | #define USB_KEY SDLK_u | ||
53 | #endif | ||
54 | |||
55 | #if defined(IRIVER_H100_SERIES) || defined (IRIVER_H300_SERIES) | ||
56 | int _remote_type=REMOTETYPE_H100_LCD; | ||
57 | |||
58 | int remote_type(void) | ||
59 | { | ||
60 | return _remote_type; | ||
61 | } | ||
62 | #endif | ||
63 | |||
64 | struct event_queue button_queue; | ||
65 | |||
66 | static int btn = 0; /* Hopefully keeps track of currently pressed keys... */ | ||
67 | |||
68 | #ifdef HAS_BUTTON_HOLD | ||
69 | bool hold_button_state = false; | ||
70 | bool button_hold(void) { | ||
71 | return hold_button_state; | ||
72 | } | ||
73 | #endif | ||
74 | |||
75 | #ifdef HAS_REMOTE_BUTTON_HOLD | ||
76 | bool remote_hold_button_state = false; | ||
77 | bool remote_button_hold(void) { | ||
78 | return remote_hold_button_state; | ||
79 | } | ||
80 | #endif | ||
81 | |||
82 | void button_event(int key, bool pressed) | ||
83 | { | ||
84 | int new_btn = 0; | ||
85 | static bool usb_connected = false; | ||
86 | if (usb_connected && key != USB_KEY) | ||
87 | return; | ||
88 | switch (key) | ||
89 | { | ||
90 | |||
91 | #ifdef HAVE_TOUCHSCREEN | ||
92 | case BUTTON_TOUCHSCREEN: | ||
93 | switch (touchscreen_get_mode()) | ||
94 | { | ||
95 | case TOUCHSCREEN_POINT: | ||
96 | new_btn = BUTTON_TOUCHSCREEN; | ||
97 | break; | ||
98 | case TOUCHSCREEN_BUTTON: | ||
99 | { | ||
100 | static int touchscreen_buttons[3][3] = { | ||
101 | {BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT}, | ||
102 | {BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT}, | ||
103 | {BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT}, | ||
104 | }; | ||
105 | int px_x = ((mouse_coords&0xffff0000)>>16); | ||
106 | int px_y = ((mouse_coords&0x0000ffff)); | ||
107 | new_btn = touchscreen_buttons[px_y/(LCD_HEIGHT/3)][px_x/(LCD_WIDTH/3)]; | ||
108 | break; | ||
109 | } | ||
110 | } | ||
111 | break; | ||
112 | case SDLK_KP7: | ||
113 | case SDLK_7: | ||
114 | new_btn = BUTTON_TOPLEFT; | ||
115 | break; | ||
116 | case SDLK_KP8: | ||
117 | case SDLK_8: | ||
118 | case SDLK_UP: | ||
119 | new_btn = BUTTON_TOPMIDDLE; | ||
120 | break; | ||
121 | case SDLK_KP9: | ||
122 | case SDLK_9: | ||
123 | new_btn = BUTTON_TOPRIGHT; | ||
124 | break; | ||
125 | case SDLK_KP4: | ||
126 | case SDLK_u: | ||
127 | case SDLK_LEFT: | ||
128 | new_btn = BUTTON_MIDLEFT; | ||
129 | break; | ||
130 | case SDLK_KP5: | ||
131 | case SDLK_i: | ||
132 | new_btn = BUTTON_CENTER; | ||
133 | break; | ||
134 | case SDLK_KP6: | ||
135 | case SDLK_o: | ||
136 | case SDLK_RIGHT: | ||
137 | new_btn = BUTTON_MIDRIGHT; | ||
138 | break; | ||
139 | case SDLK_KP1: | ||
140 | case SDLK_j: | ||
141 | new_btn = BUTTON_BOTTOMLEFT; | ||
142 | break; | ||
143 | case SDLK_KP2: | ||
144 | case SDLK_k: | ||
145 | case SDLK_DOWN: | ||
146 | new_btn = BUTTON_BOTTOMMIDDLE; | ||
147 | break; | ||
148 | case SDLK_KP3: | ||
149 | case SDLK_l: | ||
150 | new_btn = BUTTON_BOTTOMRIGHT; | ||
151 | break; | ||
152 | case SDLK_F4: | ||
153 | if(pressed) | ||
154 | { | ||
155 | touchscreen_set_mode(touchscreen_get_mode() == TOUCHSCREEN_POINT ? TOUCHSCREEN_BUTTON : TOUCHSCREEN_POINT); | ||
156 | printf("Touchscreen mode: %s\n", touchscreen_get_mode() == TOUCHSCREEN_POINT ? "TOUCHSCREEN_POINT" : "TOUCHSCREEN_BUTTON"); | ||
157 | } | ||
158 | break; | ||
159 | |||
160 | #endif | ||
161 | case USB_KEY: | ||
162 | if (!pressed) | ||
163 | { | ||
164 | usb_connected = !usb_connected; | ||
165 | if (usb_connected) | ||
166 | queue_post(&button_queue, SYS_USB_CONNECTED, 0); | ||
167 | else | ||
168 | queue_post(&button_queue, SYS_USB_DISCONNECTED, 0); | ||
169 | } | ||
170 | return; | ||
171 | |||
172 | #ifdef HAS_BUTTON_HOLD | ||
173 | case SDLK_h: | ||
174 | if(pressed) | ||
175 | { | ||
176 | hold_button_state = !hold_button_state; | ||
177 | DEBUGF("Hold button is %s\n", hold_button_state?"ON":"OFF"); | ||
178 | } | ||
179 | return; | ||
180 | #endif | ||
181 | |||
182 | #ifdef HAS_REMOTE_BUTTON_HOLD | ||
183 | case SDLK_j: | ||
184 | if(pressed) | ||
185 | { | ||
186 | remote_hold_button_state = !remote_hold_button_state; | ||
187 | DEBUGF("Remote hold button is %s\n", | ||
188 | remote_hold_button_state?"ON":"OFF"); | ||
189 | } | ||
190 | return; | ||
191 | #endif | ||
192 | |||
193 | #if CONFIG_KEYPAD == GIGABEAT_PAD | ||
194 | case SDLK_KP4: | ||
195 | case SDLK_LEFT: | ||
196 | new_btn = BUTTON_LEFT; | ||
197 | break; | ||
198 | case SDLK_KP6: | ||
199 | case SDLK_RIGHT: | ||
200 | new_btn = BUTTON_RIGHT; | ||
201 | break; | ||
202 | case SDLK_KP8: | ||
203 | case SDLK_UP: | ||
204 | new_btn = BUTTON_UP; | ||
205 | break; | ||
206 | case SDLK_KP2: | ||
207 | case SDLK_DOWN: | ||
208 | new_btn = BUTTON_DOWN; | ||
209 | break; | ||
210 | case SDLK_KP_PLUS: | ||
211 | case SDLK_F8: | ||
212 | new_btn = BUTTON_POWER; | ||
213 | break; | ||
214 | case SDLK_ESCAPE: | ||
215 | new_btn = BUTTON_POWER; | ||
216 | break; | ||
217 | case SDLK_KP_ENTER: | ||
218 | case SDLK_RETURN: | ||
219 | case SDLK_a: | ||
220 | new_btn = BUTTON_A; | ||
221 | break; | ||
222 | case SDLK_KP5: | ||
223 | case SDLK_SPACE: | ||
224 | new_btn = BUTTON_SELECT; | ||
225 | break; | ||
226 | case SDLK_KP_PERIOD: | ||
227 | case SDLK_INSERT: | ||
228 | new_btn = BUTTON_MENU; | ||
229 | break; | ||
230 | case SDLK_KP9: | ||
231 | new_btn = BUTTON_VOL_UP; | ||
232 | break; | ||
233 | case SDLK_KP3: | ||
234 | new_btn = BUTTON_VOL_DOWN; | ||
235 | break; | ||
236 | |||
237 | #elif CONFIG_KEYPAD == GIGABEAT_S_PAD | ||
238 | case SDLK_KP4: | ||
239 | case SDLK_LEFT: | ||
240 | new_btn = BUTTON_LEFT; | ||
241 | break; | ||
242 | case SDLK_KP6: | ||
243 | case SDLK_RIGHT: | ||
244 | new_btn = BUTTON_RIGHT; | ||
245 | break; | ||
246 | case SDLK_KP8: | ||
247 | case SDLK_UP: | ||
248 | new_btn = BUTTON_UP; | ||
249 | break; | ||
250 | case SDLK_KP2: | ||
251 | case SDLK_DOWN: | ||
252 | new_btn = BUTTON_DOWN; | ||
253 | break; | ||
254 | case SDLK_F8: | ||
255 | case SDLK_ESCAPE: | ||
256 | new_btn = BUTTON_POWER; | ||
257 | break; | ||
258 | case SDLK_KP_PLUS: | ||
259 | case SDLK_KP_ENTER: | ||
260 | case SDLK_RETURN: | ||
261 | new_btn = BUTTON_PLAY; | ||
262 | break; | ||
263 | case SDLK_KP7: | ||
264 | new_btn = BUTTON_BACK; | ||
265 | break; | ||
266 | case SDLK_KP5: | ||
267 | case SDLK_SPACE: | ||
268 | new_btn = BUTTON_SELECT; | ||
269 | break; | ||
270 | case SDLK_KP9: | ||
271 | case SDLK_KP_PERIOD: | ||
272 | case SDLK_INSERT: | ||
273 | new_btn = BUTTON_MENU; | ||
274 | break; | ||
275 | |||
276 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD | ||
277 | case SDLK_KP4: | ||
278 | case SDLK_LEFT: | ||
279 | new_btn = BUTTON_LEFT; | ||
280 | break; | ||
281 | case SDLK_KP6: | ||
282 | case SDLK_RIGHT: | ||
283 | new_btn = BUTTON_RIGHT; | ||
284 | break; | ||
285 | case SDLK_KP8: | ||
286 | case SDLK_UP: | ||
287 | new_btn = BUTTON_UP; | ||
288 | break; | ||
289 | case SDLK_KP2: | ||
290 | case SDLK_DOWN: | ||
291 | new_btn = BUTTON_DOWN; | ||
292 | break; | ||
293 | case SDLK_KP_PLUS: | ||
294 | case SDLK_F8: | ||
295 | new_btn = BUTTON_PLAY; | ||
296 | break; | ||
297 | case SDLK_ESCAPE: | ||
298 | new_btn = BUTTON_POWER; | ||
299 | break; | ||
300 | case SDLK_KP_ENTER: | ||
301 | case SDLK_RETURN: | ||
302 | case SDLK_a: | ||
303 | new_btn = BUTTON_POWER; | ||
304 | break; | ||
305 | case SDLK_KP_DIVIDE: | ||
306 | case SDLK_F1: | ||
307 | new_btn = BUTTON_REC; | ||
308 | break; | ||
309 | case SDLK_KP5: | ||
310 | case SDLK_SPACE: | ||
311 | new_btn = BUTTON_SELECT; | ||
312 | break; | ||
313 | |||
314 | #elif CONFIG_KEYPAD == IAUDIO_M3_PAD | ||
315 | case SDLK_KP4: | ||
316 | new_btn = BUTTON_LEFT; | ||
317 | break; | ||
318 | case SDLK_LEFT: | ||
319 | new_btn = BUTTON_RC_REW; | ||
320 | break; | ||
321 | case SDLK_KP6: | ||
322 | new_btn = BUTTON_RIGHT; | ||
323 | break; | ||
324 | case SDLK_RIGHT: | ||
325 | new_btn = BUTTON_RC_FF; | ||
326 | break; | ||
327 | case SDLK_KP8: | ||
328 | new_btn = BUTTON_VOL_UP; | ||
329 | break; | ||
330 | case SDLK_UP: | ||
331 | new_btn = BUTTON_RC_VOL_UP; | ||
332 | break; | ||
333 | case SDLK_KP2: | ||
334 | new_btn = BUTTON_VOL_DOWN; | ||
335 | break; | ||
336 | case SDLK_DOWN: | ||
337 | new_btn = BUTTON_RC_VOL_DOWN; | ||
338 | break; | ||
339 | case SDLK_KP_PERIOD: | ||
340 | new_btn = BUTTON_MODE; | ||
341 | break; | ||
342 | case SDLK_INSERT: | ||
343 | new_btn = BUTTON_RC_MODE; | ||
344 | break; | ||
345 | case SDLK_KP_DIVIDE: | ||
346 | new_btn = BUTTON_REC; | ||
347 | break; | ||
348 | case SDLK_F1: | ||
349 | new_btn = BUTTON_RC_REC; | ||
350 | break; | ||
351 | case SDLK_KP5: | ||
352 | new_btn = BUTTON_PLAY; | ||
353 | break; | ||
354 | case SDLK_SPACE: | ||
355 | new_btn = BUTTON_RC_PLAY; | ||
356 | break; | ||
357 | case SDLK_KP_ENTER: | ||
358 | case SDLK_RETURN: | ||
359 | new_btn = BUTTON_RC_MENU; | ||
360 | break; | ||
361 | |||
362 | #elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \ | ||
363 | || (CONFIG_KEYPAD == IPOD_4G_PAD) | ||
364 | case SDLK_KP4: | ||
365 | case SDLK_LEFT: | ||
366 | new_btn = BUTTON_LEFT; | ||
367 | break; | ||
368 | case SDLK_KP6: | ||
369 | case SDLK_RIGHT: | ||
370 | new_btn = BUTTON_RIGHT; | ||
371 | break; | ||
372 | case SDLK_KP8: | ||
373 | case SDLK_UP: | ||
374 | new_btn = BUTTON_SCROLL_BACK; | ||
375 | break; | ||
376 | case SDLK_KP2: | ||
377 | case SDLK_DOWN: | ||
378 | new_btn = BUTTON_SCROLL_FWD; | ||
379 | break; | ||
380 | case SDLK_KP_PLUS: | ||
381 | case SDLK_F8: | ||
382 | new_btn = BUTTON_PLAY; | ||
383 | break; | ||
384 | case SDLK_KP5: | ||
385 | case SDLK_SPACE: | ||
386 | new_btn = BUTTON_SELECT; | ||
387 | break; | ||
388 | case SDLK_KP_PERIOD: | ||
389 | case SDLK_INSERT: | ||
390 | new_btn = BUTTON_MENU; | ||
391 | break; | ||
392 | |||
393 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
394 | case SDLK_KP4: | ||
395 | case SDLK_LEFT: | ||
396 | new_btn = BUTTON_LEFT; | ||
397 | break; | ||
398 | case SDLK_KP6: | ||
399 | case SDLK_RIGHT: | ||
400 | new_btn = BUTTON_RIGHT; | ||
401 | break; | ||
402 | case SDLK_KP8: | ||
403 | case SDLK_UP: | ||
404 | new_btn = BUTTON_SCROLL_UP; | ||
405 | break; | ||
406 | case SDLK_KP2: | ||
407 | case SDLK_DOWN: | ||
408 | new_btn = BUTTON_SCROLL_DOWN; | ||
409 | break; | ||
410 | case SDLK_KP_PLUS: | ||
411 | case SDLK_F8: | ||
412 | new_btn = BUTTON_POWER; | ||
413 | break; | ||
414 | case SDLK_ESCAPE: | ||
415 | new_btn = BUTTON_POWER; | ||
416 | break; | ||
417 | case SDLK_KP_DIVIDE: | ||
418 | case SDLK_F1: | ||
419 | new_btn = BUTTON_REW; | ||
420 | break; | ||
421 | case SDLK_KP_MULTIPLY: | ||
422 | case SDLK_F2: | ||
423 | new_btn = BUTTON_FF; | ||
424 | break; | ||
425 | case SDLK_KP5: | ||
426 | case SDLK_SPACE: | ||
427 | new_btn = BUTTON_PLAY; | ||
428 | break; | ||
429 | |||
430 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
431 | case SDLK_t: | ||
432 | if(pressed) | ||
433 | switch(_remote_type) | ||
434 | { | ||
435 | case REMOTETYPE_UNPLUGGED: | ||
436 | _remote_type=REMOTETYPE_H100_LCD; | ||
437 | DEBUGF("Changed remote type to H100\n"); | ||
438 | break; | ||
439 | case REMOTETYPE_H100_LCD: | ||
440 | _remote_type=REMOTETYPE_H300_LCD; | ||
441 | DEBUGF("Changed remote type to H300\n"); | ||
442 | break; | ||
443 | case REMOTETYPE_H300_LCD: | ||
444 | _remote_type=REMOTETYPE_H300_NONLCD; | ||
445 | DEBUGF("Changed remote type to H300 NON-LCD\n"); | ||
446 | break; | ||
447 | case REMOTETYPE_H300_NONLCD: | ||
448 | _remote_type=REMOTETYPE_UNPLUGGED; | ||
449 | DEBUGF("Changed remote type to none\n"); | ||
450 | break; | ||
451 | } | ||
452 | break; | ||
453 | case SDLK_KP4: | ||
454 | case SDLK_LEFT: | ||
455 | new_btn = BUTTON_LEFT; | ||
456 | break; | ||
457 | case SDLK_KP6: | ||
458 | case SDLK_RIGHT: | ||
459 | new_btn = BUTTON_RIGHT; | ||
460 | break; | ||
461 | case SDLK_KP8: | ||
462 | case SDLK_UP: | ||
463 | new_btn = BUTTON_UP; | ||
464 | break; | ||
465 | case SDLK_KP2: | ||
466 | case SDLK_DOWN: | ||
467 | new_btn = BUTTON_DOWN; | ||
468 | break; | ||
469 | case SDLK_KP_PLUS: | ||
470 | case SDLK_F8: | ||
471 | new_btn = BUTTON_ON; | ||
472 | break; | ||
473 | case SDLK_KP_ENTER: | ||
474 | case SDLK_RETURN: | ||
475 | case SDLK_a: | ||
476 | new_btn = BUTTON_OFF; | ||
477 | break; | ||
478 | case SDLK_KP_DIVIDE: | ||
479 | case SDLK_F1: | ||
480 | new_btn = BUTTON_REC; | ||
481 | break; | ||
482 | case SDLK_KP5: | ||
483 | case SDLK_SPACE: | ||
484 | new_btn = BUTTON_SELECT; | ||
485 | break; | ||
486 | case SDLK_KP_PERIOD: | ||
487 | case SDLK_INSERT: | ||
488 | new_btn = BUTTON_MODE; | ||
489 | break; | ||
490 | |||
491 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | ||
492 | case SDLK_KP4: | ||
493 | case SDLK_LEFT: | ||
494 | new_btn = BUTTON_LEFT; | ||
495 | break; | ||
496 | case SDLK_KP6: | ||
497 | case SDLK_RIGHT: | ||
498 | new_btn = BUTTON_RIGHT; | ||
499 | break; | ||
500 | case SDLK_KP8: | ||
501 | case SDLK_UP: | ||
502 | new_btn = BUTTON_UP; | ||
503 | break; | ||
504 | case SDLK_KP2: | ||
505 | case SDLK_DOWN: | ||
506 | new_btn = BUTTON_DOWN; | ||
507 | break; | ||
508 | case SDLK_KP_PLUS: | ||
509 | case SDLK_F8: | ||
510 | new_btn = BUTTON_PLAY; | ||
511 | break; | ||
512 | case SDLK_KP_ENTER: | ||
513 | case SDLK_RETURN: | ||
514 | case SDLK_a: | ||
515 | new_btn = BUTTON_EQ; | ||
516 | break; | ||
517 | case SDLK_KP5: | ||
518 | case SDLK_SPACE: | ||
519 | new_btn = BUTTON_SELECT; | ||
520 | break; | ||
521 | case SDLK_KP_PERIOD: | ||
522 | case SDLK_INSERT: | ||
523 | new_btn = BUTTON_MODE; | ||
524 | break; | ||
525 | |||
526 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
527 | case SDLK_KP4: | ||
528 | case SDLK_LEFT: | ||
529 | new_btn = BUTTON_LEFT; | ||
530 | break; | ||
531 | case SDLK_KP6: | ||
532 | case SDLK_RIGHT: | ||
533 | new_btn = BUTTON_RIGHT; | ||
534 | break; | ||
535 | case SDLK_KP8: | ||
536 | case SDLK_UP: | ||
537 | new_btn = BUTTON_UP; | ||
538 | break; | ||
539 | case SDLK_KP2: | ||
540 | case SDLK_DOWN: | ||
541 | new_btn = BUTTON_DOWN; | ||
542 | break; | ||
543 | case SDLK_KP_ENTER: | ||
544 | case SDLK_RETURN: | ||
545 | case SDLK_a: | ||
546 | new_btn = BUTTON_OFF; | ||
547 | break; | ||
548 | case SDLK_KP_PERIOD: | ||
549 | case SDLK_INSERT: | ||
550 | new_btn = BUTTON_MENU; | ||
551 | break; | ||
552 | |||
553 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
554 | case SDLK_KP4: | ||
555 | case SDLK_LEFT: | ||
556 | new_btn = BUTTON_LEFT; | ||
557 | break; | ||
558 | case SDLK_KP6: | ||
559 | case SDLK_RIGHT: | ||
560 | new_btn = BUTTON_RIGHT; | ||
561 | break; | ||
562 | case SDLK_KP8: | ||
563 | case SDLK_UP: | ||
564 | new_btn = BUTTON_PLAY; | ||
565 | break; | ||
566 | case SDLK_KP2: | ||
567 | case SDLK_DOWN: | ||
568 | new_btn = BUTTON_STOP; | ||
569 | break; | ||
570 | case SDLK_KP_PLUS: | ||
571 | case SDLK_F8: | ||
572 | new_btn = BUTTON_ON; | ||
573 | break; | ||
574 | case SDLK_KP_PERIOD: | ||
575 | case SDLK_INSERT: | ||
576 | new_btn = BUTTON_MENU; | ||
577 | break; | ||
578 | |||
579 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
580 | case SDLK_KP4: | ||
581 | case SDLK_LEFT: | ||
582 | new_btn = BUTTON_LEFT; | ||
583 | break; | ||
584 | case SDLK_KP6: | ||
585 | case SDLK_RIGHT: | ||
586 | new_btn = BUTTON_RIGHT; | ||
587 | break; | ||
588 | case SDLK_KP8: | ||
589 | case SDLK_UP: | ||
590 | new_btn = BUTTON_UP; | ||
591 | break; | ||
592 | case SDLK_KP2: | ||
593 | case SDLK_DOWN: | ||
594 | new_btn = BUTTON_DOWN; | ||
595 | break; | ||
596 | case SDLK_KP_PLUS: | ||
597 | case SDLK_F8: | ||
598 | new_btn = BUTTON_ON; | ||
599 | break; | ||
600 | case SDLK_KP_ENTER: | ||
601 | case SDLK_RETURN: | ||
602 | case SDLK_a: | ||
603 | new_btn = BUTTON_OFF; | ||
604 | break; | ||
605 | case SDLK_KP_DIVIDE: | ||
606 | case SDLK_F1: | ||
607 | new_btn = BUTTON_F1; | ||
608 | break; | ||
609 | case SDLK_KP_MULTIPLY: | ||
610 | case SDLK_F2: | ||
611 | new_btn = BUTTON_F2; | ||
612 | break; | ||
613 | case SDLK_KP_MINUS: | ||
614 | case SDLK_F3: | ||
615 | new_btn = BUTTON_F3; | ||
616 | break; | ||
617 | case SDLK_KP5: | ||
618 | case SDLK_SPACE: | ||
619 | new_btn = BUTTON_PLAY; | ||
620 | break; | ||
621 | |||
622 | #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD | ||
623 | case SDLK_KP4: | ||
624 | case SDLK_LEFT: | ||
625 | new_btn = BUTTON_LEFT; | ||
626 | break; | ||
627 | case SDLK_KP6: | ||
628 | case SDLK_RIGHT: | ||
629 | new_btn = BUTTON_RIGHT; | ||
630 | break; | ||
631 | case SDLK_KP8: | ||
632 | case SDLK_UP: | ||
633 | new_btn = BUTTON_UP; | ||
634 | break; | ||
635 | case SDLK_KP2: | ||
636 | case SDLK_DOWN: | ||
637 | new_btn = BUTTON_DOWN; | ||
638 | break; | ||
639 | case SDLK_KP_PLUS: | ||
640 | case SDLK_F8: | ||
641 | new_btn = BUTTON_ON; | ||
642 | break; | ||
643 | case SDLK_KP_ENTER: | ||
644 | case SDLK_RETURN: | ||
645 | case SDLK_a: | ||
646 | new_btn = BUTTON_OFF; | ||
647 | break; | ||
648 | case SDLK_KP_DIVIDE: | ||
649 | case SDLK_F1: | ||
650 | new_btn = BUTTON_F1; | ||
651 | break; | ||
652 | case SDLK_KP_MULTIPLY: | ||
653 | case SDLK_F2: | ||
654 | new_btn = BUTTON_F2; | ||
655 | break; | ||
656 | case SDLK_KP_MINUS: | ||
657 | case SDLK_F3: | ||
658 | new_btn = BUTTON_F3; | ||
659 | break; | ||
660 | case SDLK_KP5: | ||
661 | case SDLK_SPACE: | ||
662 | new_btn = BUTTON_SELECT; | ||
663 | break; | ||
664 | |||
665 | #elif CONFIG_KEYPAD == SANSA_E200_PAD | ||
666 | case SDLK_KP4: | ||
667 | case SDLK_LEFT: | ||
668 | new_btn = BUTTON_LEFT; | ||
669 | break; | ||
670 | case SDLK_KP6: | ||
671 | case SDLK_RIGHT: | ||
672 | new_btn = BUTTON_RIGHT; | ||
673 | break; | ||
674 | case SDLK_KP8: | ||
675 | case SDLK_UP: | ||
676 | new_btn = BUTTON_SCROLL_BACK; | ||
677 | break; | ||
678 | case SDLK_KP2: | ||
679 | case SDLK_DOWN: | ||
680 | new_btn = BUTTON_SCROLL_FWD; | ||
681 | break; | ||
682 | case SDLK_KP9: | ||
683 | case SDLK_PAGEUP: | ||
684 | new_btn = BUTTON_UP; | ||
685 | break; | ||
686 | case SDLK_KP3: | ||
687 | case SDLK_PAGEDOWN: | ||
688 | new_btn = BUTTON_DOWN; | ||
689 | break; | ||
690 | case SDLK_KP1: | ||
691 | case SDLK_HOME: | ||
692 | new_btn = BUTTON_POWER; | ||
693 | break; | ||
694 | case SDLK_KP7: | ||
695 | case SDLK_END: | ||
696 | new_btn = BUTTON_REC; | ||
697 | break; | ||
698 | case SDLK_KP5: | ||
699 | case SDLK_SPACE: | ||
700 | new_btn = BUTTON_SELECT; | ||
701 | break; | ||
702 | |||
703 | #elif CONFIG_KEYPAD == SANSA_C200_PAD | ||
704 | case SDLK_KP4: | ||
705 | case SDLK_LEFT: | ||
706 | new_btn = BUTTON_LEFT; | ||
707 | break; | ||
708 | case SDLK_KP6: | ||
709 | case SDLK_RIGHT: | ||
710 | new_btn = BUTTON_RIGHT; | ||
711 | break; | ||
712 | case SDLK_KP8: | ||
713 | case SDLK_UP: | ||
714 | new_btn = BUTTON_UP; | ||
715 | break; | ||
716 | case SDLK_KP2: | ||
717 | case SDLK_DOWN: | ||
718 | new_btn = BUTTON_DOWN; | ||
719 | break; | ||
720 | case SDLK_KP3: | ||
721 | new_btn = BUTTON_POWER; | ||
722 | break; | ||
723 | case SDLK_KP1: | ||
724 | new_btn = BUTTON_REC; | ||
725 | break; | ||
726 | case SDLK_KP5: | ||
727 | case SDLK_KP_ENTER: | ||
728 | case SDLK_RETURN: | ||
729 | new_btn = BUTTON_SELECT; | ||
730 | break; | ||
731 | case SDLK_KP7: | ||
732 | new_btn = BUTTON_VOL_DOWN; | ||
733 | break; | ||
734 | case SDLK_KP9: | ||
735 | new_btn = BUTTON_VOL_UP; | ||
736 | break; | ||
737 | |||
738 | #elif CONFIG_KEYPAD == MROBE500_PAD | ||
739 | case SDLK_F9: | ||
740 | new_btn = BUTTON_RC_HEART; | ||
741 | break; | ||
742 | case SDLK_F10: | ||
743 | new_btn = BUTTON_RC_MODE; | ||
744 | break; | ||
745 | case SDLK_F11: | ||
746 | new_btn = BUTTON_RC_VOL_DOWN; | ||
747 | break; | ||
748 | case SDLK_F12: | ||
749 | new_btn = BUTTON_RC_VOL_UP; | ||
750 | break; | ||
751 | case SDLK_MINUS: | ||
752 | case SDLK_LESS: | ||
753 | case SDLK_LEFTBRACKET: | ||
754 | case SDLK_KP_DIVIDE: | ||
755 | new_btn = BUTTON_LEFT; | ||
756 | break; | ||
757 | case SDLK_PLUS: | ||
758 | case SDLK_GREATER: | ||
759 | case SDLK_RIGHTBRACKET: | ||
760 | case SDLK_KP_MULTIPLY: | ||
761 | new_btn = BUTTON_RIGHT; | ||
762 | break; | ||
763 | case SDLK_PAGEUP: | ||
764 | new_btn = BUTTON_RC_PLAY; | ||
765 | break; | ||
766 | case SDLK_PAGEDOWN: | ||
767 | new_btn = BUTTON_RC_DOWN; | ||
768 | break; | ||
769 | case SDLK_F8: | ||
770 | case SDLK_ESCAPE: | ||
771 | new_btn = BUTTON_POWER; | ||
772 | break; | ||
773 | #elif CONFIG_KEYPAD == MROBE100_PAD | ||
774 | case SDLK_F9: | ||
775 | new_btn = BUTTON_RC_HEART; | ||
776 | break; | ||
777 | case SDLK_F10: | ||
778 | new_btn = BUTTON_RC_MODE; | ||
779 | break; | ||
780 | case SDLK_F11: | ||
781 | new_btn = BUTTON_RC_VOL_DOWN; | ||
782 | break; | ||
783 | case SDLK_F12: | ||
784 | new_btn = BUTTON_RC_VOL_UP; | ||
785 | break; | ||
786 | case SDLK_LEFT: | ||
787 | new_btn = BUTTON_RC_FF; | ||
788 | break; | ||
789 | case SDLK_RIGHT: | ||
790 | new_btn = BUTTON_RC_REW; | ||
791 | break; | ||
792 | case SDLK_UP: | ||
793 | new_btn = BUTTON_RC_PLAY; | ||
794 | break; | ||
795 | case SDLK_DOWN: | ||
796 | new_btn = BUTTON_RC_DOWN; | ||
797 | break; | ||
798 | case SDLK_KP1: | ||
799 | new_btn = BUTTON_DISPLAY; | ||
800 | break; | ||
801 | case SDLK_KP7: | ||
802 | new_btn = BUTTON_MENU; | ||
803 | break; | ||
804 | case SDLK_KP9: | ||
805 | new_btn = BUTTON_PLAY; | ||
806 | break; | ||
807 | case SDLK_KP4: | ||
808 | new_btn = BUTTON_LEFT; | ||
809 | break; | ||
810 | case SDLK_KP6: | ||
811 | new_btn = BUTTON_RIGHT; | ||
812 | break; | ||
813 | case SDLK_KP8: | ||
814 | new_btn = BUTTON_UP; | ||
815 | break; | ||
816 | case SDLK_KP2: | ||
817 | new_btn = BUTTON_DOWN; | ||
818 | break; | ||
819 | case SDLK_KP5: | ||
820 | case SDLK_SPACE: | ||
821 | new_btn = BUTTON_SELECT; | ||
822 | break; | ||
823 | case SDLK_KP_MULTIPLY: | ||
824 | case SDLK_F8: | ||
825 | case SDLK_ESCAPE: | ||
826 | new_btn = BUTTON_POWER; | ||
827 | break; | ||
828 | |||
829 | #elif CONFIG_KEYPAD == COWON_D2_PAD | ||
830 | case SDLK_KP_MULTIPLY: | ||
831 | case SDLK_F8: | ||
832 | case SDLK_ESCAPE: | ||
833 | case SDLK_BACKSPACE: | ||
834 | case SDLK_DELETE: | ||
835 | new_btn = BUTTON_POWER; | ||
836 | break; | ||
837 | case SDLK_KP_PLUS: | ||
838 | case SDLK_EQUALS: | ||
839 | new_btn = BUTTON_PLUS; | ||
840 | break; | ||
841 | case SDLK_KP_MINUS: | ||
842 | case SDLK_MINUS: | ||
843 | new_btn = BUTTON_MINUS; | ||
844 | break; | ||
845 | case SDLK_KP_ENTER: | ||
846 | case SDLK_RETURN: | ||
847 | case SDLK_SPACE: | ||
848 | case SDLK_INSERT: | ||
849 | new_btn = BUTTON_MENU; | ||
850 | break; | ||
851 | #elif CONFIG_KEYPAD == IAUDIO67_PAD | ||
852 | case SDLK_UP: | ||
853 | new_btn = BUTTON_RIGHT; | ||
854 | break; | ||
855 | case SDLK_DOWN: | ||
856 | new_btn = BUTTON_LEFT; | ||
857 | break; | ||
858 | case SDLK_LEFT: | ||
859 | new_btn = BUTTON_STOP; | ||
860 | break; | ||
861 | case SDLK_RETURN: | ||
862 | case SDLK_KP_ENTER: | ||
863 | case SDLK_RIGHT: | ||
864 | new_btn = BUTTON_PLAY; | ||
865 | break; | ||
866 | case SDLK_PLUS: | ||
867 | new_btn = BUTTON_VOLUP; | ||
868 | break; | ||
869 | case SDLK_MINUS: | ||
870 | new_btn = BUTTON_VOLDOWN; | ||
871 | break; | ||
872 | case SDLK_SPACE: | ||
873 | new_btn = BUTTON_MENU; | ||
874 | break; | ||
875 | case SDLK_BACKSPACE: | ||
876 | new_btn = BUTTON_POWER; | ||
877 | break; | ||
878 | #elif CONFIG_KEYPAD == CREATIVEZVM_PAD | ||
879 | case SDLK_KP1: | ||
880 | new_btn = BUTTON_BACK; | ||
881 | break; | ||
882 | case SDLK_KP3: | ||
883 | new_btn = BUTTON_MENU; | ||
884 | break; | ||
885 | case SDLK_KP7: | ||
886 | new_btn = BUTTON_CUSTOM; | ||
887 | break; | ||
888 | case SDLK_KP9: | ||
889 | new_btn = BUTTON_PLAY; | ||
890 | break; | ||
891 | case SDLK_KP4: | ||
892 | case SDLK_LEFT: | ||
893 | new_btn = BUTTON_LEFT; | ||
894 | break; | ||
895 | case SDLK_KP6: | ||
896 | case SDLK_RIGHT: | ||
897 | new_btn = BUTTON_RIGHT; | ||
898 | break; | ||
899 | case SDLK_KP8: | ||
900 | case SDLK_UP: | ||
901 | new_btn = BUTTON_UP; | ||
902 | break; | ||
903 | case SDLK_KP2: | ||
904 | case SDLK_DOWN: | ||
905 | new_btn = BUTTON_DOWN; | ||
906 | break; | ||
907 | case SDLK_KP5: | ||
908 | case SDLK_SPACE: | ||
909 | new_btn = BUTTON_SELECT; | ||
910 | break; | ||
911 | case SDLK_KP_MULTIPLY: | ||
912 | case SDLK_F8: | ||
913 | case SDLK_ESCAPE: | ||
914 | new_btn = BUTTON_POWER; | ||
915 | break; | ||
916 | #elif CONFIG_KEYPAD == CREATIVEZV_PAD | ||
917 | case SDLK_KP1: | ||
918 | new_btn = BUTTON_PREV; | ||
919 | break; | ||
920 | case SDLK_KP3: | ||
921 | new_btn = BUTTON_NEXT; | ||
922 | break; | ||
923 | case SDLK_KP7: | ||
924 | new_btn = BUTTON_BACK; | ||
925 | break; | ||
926 | case SDLK_p: | ||
927 | new_btn = BUTTON_PLAY; | ||
928 | break; | ||
929 | case SDLK_KP9: | ||
930 | new_btn = BUTTON_MENU; | ||
931 | break; | ||
932 | case SDLK_KP4: | ||
933 | case SDLK_LEFT: | ||
934 | new_btn = BUTTON_LEFT; | ||
935 | break; | ||
936 | case SDLK_KP6: | ||
937 | case SDLK_RIGHT: | ||
938 | new_btn = BUTTON_RIGHT; | ||
939 | break; | ||
940 | case SDLK_KP8: | ||
941 | case SDLK_UP: | ||
942 | new_btn = BUTTON_UP; | ||
943 | break; | ||
944 | case SDLK_KP2: | ||
945 | case SDLK_DOWN: | ||
946 | new_btn = BUTTON_DOWN; | ||
947 | break; | ||
948 | case SDLK_KP5: | ||
949 | case SDLK_SPACE: | ||
950 | new_btn = BUTTON_SELECT; | ||
951 | break; | ||
952 | case SDLK_KP_MULTIPLY: | ||
953 | case SDLK_F8: | ||
954 | case SDLK_ESCAPE: | ||
955 | new_btn = BUTTON_POWER; | ||
956 | break; | ||
957 | case SDLK_z: | ||
958 | new_btn = BUTTON_VOL_DOWN; | ||
959 | break; | ||
960 | case SDLK_s: | ||
961 | new_btn = BUTTON_VOL_UP; | ||
962 | |||
963 | #elif CONFIG_KEYPAD == MEIZU_M6SL_PAD | ||
964 | case SDLK_KP1: | ||
965 | new_btn = BUTTON_PREV; | ||
966 | break; | ||
967 | case SDLK_KP3: | ||
968 | new_btn = BUTTON_NEXT; | ||
969 | break; | ||
970 | case SDLK_KP_ENTER: | ||
971 | case SDLK_RETURN: | ||
972 | case SDLK_a: | ||
973 | new_btn = BUTTON_PLAY; | ||
974 | break; | ||
975 | case SDLK_KP_PERIOD: | ||
976 | case SDLK_INSERT: | ||
977 | new_btn = BUTTON_MENU; | ||
978 | break; | ||
979 | case SDLK_KP8: | ||
980 | case SDLK_UP: | ||
981 | new_btn = BUTTON_UP; | ||
982 | break; | ||
983 | case SDLK_KP2: | ||
984 | case SDLK_DOWN: | ||
985 | new_btn = BUTTON_DOWN; | ||
986 | break; | ||
987 | case SDLK_KP5: | ||
988 | case SDLK_SPACE: | ||
989 | new_btn = BUTTON_SELECT; | ||
990 | break; | ||
991 | #elif CONFIG_KEYPAD == SANSA_FUZE_PAD | ||
992 | case SDLK_KP4: | ||
993 | case SDLK_LEFT: | ||
994 | new_btn = BUTTON_LEFT; | ||
995 | break; | ||
996 | case SDLK_KP6: | ||
997 | case SDLK_RIGHT: | ||
998 | new_btn = BUTTON_RIGHT; | ||
999 | break; | ||
1000 | case SDLK_KP8: | ||
1001 | case SDLK_UP: | ||
1002 | new_btn = BUTTON_SCROLL_BACK; | ||
1003 | break; | ||
1004 | case SDLK_KP2: | ||
1005 | case SDLK_DOWN: | ||
1006 | new_btn = BUTTON_SCROLL_FWD; | ||
1007 | break; | ||
1008 | case SDLK_PAGEUP: | ||
1009 | case SDLK_KP9: | ||
1010 | new_btn = BUTTON_UP; | ||
1011 | break; | ||
1012 | case SDLK_PAGEDOWN: | ||
1013 | case SDLK_KP3: | ||
1014 | new_btn = BUTTON_DOWN; | ||
1015 | break; | ||
1016 | case SDLK_KP_MINUS: | ||
1017 | case SDLK_KP1: | ||
1018 | new_btn = BUTTON_POWER; | ||
1019 | break; | ||
1020 | case SDLK_KP_MULTIPLY: | ||
1021 | new_btn = BUTTON_HOME; | ||
1022 | break; | ||
1023 | case SDLK_KP5: | ||
1024 | case SDLK_SPACE: | ||
1025 | case SDLK_KP_ENTER: | ||
1026 | case SDLK_RETURN: | ||
1027 | new_btn = BUTTON_SELECT; | ||
1028 | break; | ||
1029 | #elif CONFIG_KEYPAD == SANSA_CLIP_PAD | ||
1030 | case SDLK_KP4: | ||
1031 | case SDLK_LEFT: | ||
1032 | new_btn = BUTTON_LEFT; | ||
1033 | break; | ||
1034 | case SDLK_KP6: | ||
1035 | case SDLK_RIGHT: | ||
1036 | new_btn = BUTTON_RIGHT; | ||
1037 | break; | ||
1038 | case SDLK_KP8: | ||
1039 | case SDLK_UP: | ||
1040 | new_btn = BUTTON_UP; | ||
1041 | break; | ||
1042 | case SDLK_KP2: | ||
1043 | case SDLK_DOWN: | ||
1044 | new_btn = BUTTON_DOWN; | ||
1045 | break; | ||
1046 | |||
1047 | case SDLK_INSERT: | ||
1048 | case SDLK_KP_MULTIPLY: | ||
1049 | new_btn = BUTTON_HOME; | ||
1050 | break; | ||
1051 | case SDLK_SPACE: | ||
1052 | case SDLK_KP5: | ||
1053 | new_btn = BUTTON_SELECT; | ||
1054 | break; | ||
1055 | case SDLK_PAGEDOWN: | ||
1056 | case SDLK_KP3: | ||
1057 | new_btn = BUTTON_VOL_DOWN; | ||
1058 | break; | ||
1059 | case SDLK_PAGEUP: | ||
1060 | case SDLK_KP9: | ||
1061 | new_btn = BUTTON_VOL_UP; | ||
1062 | break; | ||
1063 | case SDLK_ESCAPE: | ||
1064 | case SDLK_KP1: | ||
1065 | new_btn = BUTTON_POWER; | ||
1066 | break; | ||
1067 | #elif CONFIG_KEYPAD == SANSA_M200_PAD | ||
1068 | case SDLK_KP4: | ||
1069 | case SDLK_LEFT: | ||
1070 | new_btn = BUTTON_LEFT; | ||
1071 | break; | ||
1072 | case SDLK_KP6: | ||
1073 | case SDLK_RIGHT: | ||
1074 | new_btn = BUTTON_RIGHT; | ||
1075 | break; | ||
1076 | case SDLK_KP8: | ||
1077 | case SDLK_UP: | ||
1078 | new_btn = BUTTON_UP; | ||
1079 | break; | ||
1080 | case SDLK_KP2: | ||
1081 | case SDLK_DOWN: | ||
1082 | new_btn = BUTTON_DOWN; | ||
1083 | break; | ||
1084 | case SDLK_PLUS: | ||
1085 | new_btn = BUTTON_POWER; | ||
1086 | break; | ||
1087 | case SDLK_KP5: | ||
1088 | new_btn = BUTTON_SELECT; | ||
1089 | break; | ||
1090 | case SDLK_KP7: | ||
1091 | new_btn = BUTTON_VOL_DOWN; | ||
1092 | break; | ||
1093 | case SDLK_KP9: | ||
1094 | new_btn = BUTTON_VOL_UP; | ||
1095 | break; | ||
1096 | #elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD | ||
1097 | case SDLK_KP4: | ||
1098 | case SDLK_LEFT: | ||
1099 | new_btn = BUTTON_LEFT; | ||
1100 | break; | ||
1101 | case SDLK_KP6: | ||
1102 | case SDLK_RIGHT: | ||
1103 | new_btn = BUTTON_RIGHT; | ||
1104 | break; | ||
1105 | case SDLK_KP8: | ||
1106 | case SDLK_UP: | ||
1107 | new_btn = BUTTON_UP; | ||
1108 | break; | ||
1109 | case SDLK_KP2: | ||
1110 | case SDLK_DOWN: | ||
1111 | new_btn = BUTTON_DOWN; | ||
1112 | break; | ||
1113 | case SDLK_KP1: | ||
1114 | new_btn = BUTTON_MENU; | ||
1115 | break; | ||
1116 | case SDLK_KP5: | ||
1117 | case SDLK_SPACE: | ||
1118 | new_btn = BUTTON_PLAY; | ||
1119 | break; | ||
1120 | case SDLK_KP7: | ||
1121 | new_btn = BUTTON_PREV; | ||
1122 | break; | ||
1123 | case SDLK_KP9: | ||
1124 | new_btn = BUTTON_NEXT; | ||
1125 | break; | ||
1126 | case SDLK_KP_ENTER: | ||
1127 | case SDLK_RETURN: | ||
1128 | new_btn = BUTTON_POWER; | ||
1129 | break; | ||
1130 | case SDLK_PAGEUP: | ||
1131 | new_btn = BUTTON_VOL_UP; | ||
1132 | break; | ||
1133 | case SDLK_PAGEDOWN: | ||
1134 | new_btn = BUTTON_VOL_DOWN; | ||
1135 | break; | ||
1136 | #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD | ||
1137 | case SDLK_KP4: | ||
1138 | case SDLK_LEFT: | ||
1139 | new_btn = BUTTON_LEFT; | ||
1140 | break; | ||
1141 | case SDLK_KP6: | ||
1142 | case SDLK_RIGHT: | ||
1143 | new_btn = BUTTON_RIGHT; | ||
1144 | break; | ||
1145 | case SDLK_KP8: | ||
1146 | case SDLK_UP: | ||
1147 | new_btn = BUTTON_UP; | ||
1148 | break; | ||
1149 | case SDLK_KP2: | ||
1150 | case SDLK_DOWN: | ||
1151 | new_btn = BUTTON_DOWN; | ||
1152 | break; | ||
1153 | case SDLK_KP5: | ||
1154 | case SDLK_SPACE: | ||
1155 | new_btn = BUTTON_SELECT; | ||
1156 | break; | ||
1157 | case SDLK_KP7: | ||
1158 | case SDLK_ESCAPE: | ||
1159 | new_btn = BUTTON_POWER; | ||
1160 | break; | ||
1161 | case SDLK_KP1: | ||
1162 | new_btn = BUTTON_PLAYLIST; | ||
1163 | break; | ||
1164 | case SDLK_KP9: | ||
1165 | new_btn = BUTTON_VOL_UP; | ||
1166 | break; | ||
1167 | case SDLK_KP3: | ||
1168 | new_btn = BUTTON_VOL_DOWN; | ||
1169 | break; | ||
1170 | case SDLK_KP_MINUS: | ||
1171 | new_btn = BUTTON_MENU; | ||
1172 | break; | ||
1173 | case SDLK_KP_PLUS: | ||
1174 | new_btn = BUTTON_VIEW; | ||
1175 | break; | ||
1176 | #elif CONFIG_KEYPAD == ONDAVX747_PAD | ||
1177 | case SDLK_ESCAPE: | ||
1178 | new_btn = BUTTON_POWER; | ||
1179 | break; | ||
1180 | case SDLK_KP_PLUS: | ||
1181 | case SDLK_PLUS: | ||
1182 | case SDLK_GREATER: | ||
1183 | case SDLK_RIGHTBRACKET: | ||
1184 | case SDLK_KP_MULTIPLY: | ||
1185 | new_btn = BUTTON_VOL_UP; | ||
1186 | break; | ||
1187 | case SDLK_KP_MINUS: | ||
1188 | case SDLK_MINUS: | ||
1189 | case SDLK_LESS: | ||
1190 | case SDLK_LEFTBRACKET: | ||
1191 | case SDLK_KP_DIVIDE: | ||
1192 | new_btn = BUTTON_VOL_DOWN; | ||
1193 | break; | ||
1194 | case SDLK_KP_ENTER: | ||
1195 | case SDLK_RETURN: | ||
1196 | new_btn = BUTTON_MENU; | ||
1197 | break; | ||
1198 | #elif CONFIG_KEYPAD == ONDAVX777_PAD | ||
1199 | case SDLK_ESCAPE: | ||
1200 | new_btn = BUTTON_POWER; | ||
1201 | break; | ||
1202 | #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD | ||
1203 | case SDLK_KP4: | ||
1204 | case SDLK_LEFT: | ||
1205 | new_btn = BUTTON_LEFT; | ||
1206 | break; | ||
1207 | case SDLK_KP6: | ||
1208 | case SDLK_RIGHT: | ||
1209 | new_btn = BUTTON_RIGHT; | ||
1210 | break; | ||
1211 | case SDLK_KP8: | ||
1212 | case SDLK_UP: | ||
1213 | new_btn = BUTTON_UP; | ||
1214 | break; | ||
1215 | case SDLK_KP2: | ||
1216 | case SDLK_DOWN: | ||
1217 | new_btn = BUTTON_DOWN; | ||
1218 | break; | ||
1219 | case SDLK_KP5: | ||
1220 | case SDLK_KP_ENTER: | ||
1221 | new_btn = BUTTON_PLAY; | ||
1222 | break; | ||
1223 | case SDLK_KP9: | ||
1224 | case SDLK_PAGEUP: | ||
1225 | new_btn = BUTTON_FFWD; | ||
1226 | break; | ||
1227 | #ifdef SAMSUNG_YH820 | ||
1228 | case SDLK_KP7: | ||
1229 | #else | ||
1230 | case SDLK_KP3: | ||
1231 | #endif | ||
1232 | case SDLK_PAGEDOWN: | ||
1233 | new_btn = BUTTON_REW; | ||
1234 | break; | ||
1235 | case SDLK_KP_PLUS: | ||
1236 | new_btn = BUTTON_REC; | ||
1237 | break; | ||
1238 | #elif CONFIG_KEYPAD == MINI2440_PAD | ||
1239 | case SDLK_LEFT: | ||
1240 | new_btn = BUTTON_LEFT; | ||
1241 | break; | ||
1242 | case SDLK_RIGHT: | ||
1243 | new_btn = BUTTON_RIGHT; | ||
1244 | break; | ||
1245 | case SDLK_UP: | ||
1246 | new_btn = BUTTON_UP; | ||
1247 | break; | ||
1248 | case SDLK_DOWN: | ||
1249 | new_btn = BUTTON_DOWN; | ||
1250 | break; | ||
1251 | case SDLK_F8: | ||
1252 | case SDLK_ESCAPE: | ||
1253 | new_btn = BUTTON_POWER; | ||
1254 | break; | ||
1255 | case SDLK_KP_ENTER: | ||
1256 | case SDLK_RETURN: | ||
1257 | case SDLK_a: | ||
1258 | new_btn = BUTTON_A; | ||
1259 | break; | ||
1260 | case SDLK_SPACE: | ||
1261 | new_btn = BUTTON_SELECT; | ||
1262 | break; | ||
1263 | case SDLK_KP_PERIOD: | ||
1264 | case SDLK_INSERT: | ||
1265 | new_btn = BUTTON_MENU; | ||
1266 | break; | ||
1267 | case SDLK_KP_PLUS: | ||
1268 | new_btn = BUTTON_VOL_UP; | ||
1269 | break; | ||
1270 | case SDLK_KP_MINUS: | ||
1271 | new_btn = BUTTON_VOL_DOWN; | ||
1272 | break; | ||
1273 | #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD | ||
1274 | case SDLK_KP4: | ||
1275 | case SDLK_LEFT: | ||
1276 | new_btn = BUTTON_PREV; | ||
1277 | break; | ||
1278 | case SDLK_KP6: | ||
1279 | case SDLK_RIGHT: | ||
1280 | new_btn = BUTTON_NEXT; | ||
1281 | break; | ||
1282 | case SDLK_KP8: | ||
1283 | case SDLK_UP: | ||
1284 | new_btn = BUTTON_UP; | ||
1285 | break; | ||
1286 | case SDLK_KP2: | ||
1287 | case SDLK_DOWN: | ||
1288 | new_btn = BUTTON_DOWN; | ||
1289 | break; | ||
1290 | case SDLK_KP7: | ||
1291 | new_btn = BUTTON_MENU; | ||
1292 | break; | ||
1293 | case SDLK_KP9: | ||
1294 | new_btn = BUTTON_PLAY; | ||
1295 | break; | ||
1296 | case SDLK_KP5: | ||
1297 | new_btn = BUTTON_OK; | ||
1298 | break; | ||
1299 | case SDLK_KP_DIVIDE: | ||
1300 | new_btn = BUTTON_CANCEL; | ||
1301 | break; | ||
1302 | case SDLK_KP_PLUS: | ||
1303 | new_btn = BUTTON_POWER; | ||
1304 | break; | ||
1305 | case SDLK_KP_MULTIPLY: | ||
1306 | new_btn = BUTTON_REC; | ||
1307 | break; | ||
1308 | |||
1309 | #elif CONFIG_KEYPAD == MPIO_HD200_PAD | ||
1310 | case SDLK_UP: | ||
1311 | new_btn = BUTTON_PREV; | ||
1312 | break; | ||
1313 | case SDLK_DOWN: | ||
1314 | new_btn = BUTTON_NEXT; | ||
1315 | break; | ||
1316 | case SDLK_SPACE: | ||
1317 | new_btn = BUTTON_SELECT; | ||
1318 | break; | ||
1319 | case SDLK_RETURN: | ||
1320 | new_btn = BUTTON_PLAY; | ||
1321 | break; | ||
1322 | case SDLK_LEFT: | ||
1323 | new_btn = BUTTON_VOL_DOWN; | ||
1324 | break; | ||
1325 | case SDLK_RIGHT: | ||
1326 | new_btn = BUTTON_VOL_UP; | ||
1327 | break; | ||
1328 | case SDLK_ESCAPE: | ||
1329 | new_btn = BUTTON_REC; | ||
1330 | break; | ||
1331 | |||
1332 | #else | ||
1333 | #error No keymap defined! | ||
1334 | #endif /* CONFIG_KEYPAD */ | ||
1335 | case SDLK_KP0: | ||
1336 | case SDLK_F5: | ||
1337 | if(pressed) | ||
1338 | { | ||
1339 | sim_trigger_screendump(); | ||
1340 | return; | ||
1341 | } | ||
1342 | break; | ||
1343 | } | ||
1344 | |||
1345 | /* Call to make up for scrollwheel target implementation. This is | ||
1346 | * not handled in the main button.c driver, but on the target | ||
1347 | * implementation (look at button-e200.c for example if you are trying to | ||
1348 | * figure out why using button_get_data needed a hack before). | ||
1349 | */ | ||
1350 | #if defined(BUTTON_SCROLL_FWD) && defined(BUTTON_SCROLL_BACK) | ||
1351 | if((new_btn == BUTTON_SCROLL_FWD || new_btn == BUTTON_SCROLL_BACK) && | ||
1352 | pressed) | ||
1353 | { | ||
1354 | /* Clear these buttons from the data - adding them to the queue is | ||
1355 | * handled in the scrollwheel drivers for the targets. They do not | ||
1356 | * store the scroll forward/back buttons in their button data for | ||
1357 | * the button_read call. | ||
1358 | */ | ||
1359 | #ifdef HAVE_BACKLIGHT | ||
1360 | backlight_on(); | ||
1361 | #endif | ||
1362 | #ifdef HAVE_BUTTON_LIGHT | ||
1363 | buttonlight_on(); | ||
1364 | #endif | ||
1365 | queue_post(&button_queue, new_btn, 1<<24); | ||
1366 | new_btn &= ~(BUTTON_SCROLL_FWD | BUTTON_SCROLL_BACK); | ||
1367 | } | ||
1368 | #endif | ||
1369 | |||
1370 | if (pressed) | ||
1371 | btn |= new_btn; | ||
1372 | else | ||
1373 | btn &= ~new_btn; | ||
1374 | } | ||
1375 | #if defined(HAVE_BUTTON_DATA) && defined(HAVE_TOUCHSCREEN) | ||
1376 | int button_read_device(int* data) | ||
1377 | { | ||
1378 | *data = mouse_coords; | ||
1379 | #else | ||
1380 | int button_read_device(void) | ||
1381 | { | ||
1382 | #endif | ||
1383 | |||
1384 | #ifdef HAS_BUTTON_HOLD | ||
1385 | int hold_button = button_hold(); | ||
1386 | |||
1387 | #ifdef HAVE_BACKLIGHT | ||
1388 | /* light handling */ | ||
1389 | static int hold_button_old = false; | ||
1390 | if (hold_button != hold_button_old) | ||
1391 | { | ||
1392 | hold_button_old = hold_button; | ||
1393 | backlight_hold_changed(hold_button); | ||
1394 | } | ||
1395 | #endif | ||
1396 | |||
1397 | if (hold_button) | ||
1398 | return BUTTON_NONE; | ||
1399 | #endif | ||
1400 | |||
1401 | return btn; | ||
1402 | } | ||
1403 | |||
1404 | |||
1405 | #ifdef HAVE_TOUCHSCREEN | ||
1406 | extern bool debug_wps; | ||
1407 | void mouse_tick_task(void) | ||
1408 | { | ||
1409 | static int last_check = 0; | ||
1410 | int x,y; | ||
1411 | if (TIME_BEFORE(current_tick, last_check+(HZ/10))) | ||
1412 | return; | ||
1413 | last_check = current_tick; | ||
1414 | if (SDL_GetMouseState(&x, &y) & SDL_BUTTON(SDL_BUTTON_LEFT)) | ||
1415 | { | ||
1416 | if(background) | ||
1417 | { | ||
1418 | x -= UI_LCD_POSX; | ||
1419 | y -= UI_LCD_POSY; | ||
1420 | |||
1421 | if(x<0 || y<0 || x>SIM_LCD_WIDTH || y>SIM_LCD_HEIGHT) | ||
1422 | return; | ||
1423 | } | ||
1424 | |||
1425 | mouse_coords = (x<<16)|y; | ||
1426 | button_event(BUTTON_TOUCHSCREEN, true); | ||
1427 | if (debug_wps) | ||
1428 | printf("Mouse at: (%d, %d)\n", x, y); | ||
1429 | } | ||
1430 | } | ||
1431 | #endif | ||
1432 | |||
1433 | void button_init_sdl(void) | ||
1434 | { | ||
1435 | #ifdef HAVE_TOUCHSCREEN | ||
1436 | tick_add_task(mouse_tick_task); | ||
1437 | #endif | ||
1438 | } | ||
1439 | |||
1440 | /* Button maps: simulated key, x, y, radius, name */ | ||
1441 | /* Run sim with --mapping to get coordinates */ | ||
1442 | /* or --debugbuttons to check */ | ||
1443 | /* The First matching button is returned */ | ||
1444 | |||
1445 | #ifdef SANSA_FUZE | ||
1446 | struct button_map bm[] = { | ||
1447 | { SDLK_KP8, 70, 265, 35, "Scroll Back" }, | ||
1448 | { SDLK_KP9, 141, 255, 31, "Play" }, | ||
1449 | { SDLK_KP_MULTIPLY, 228, 267, 18, "Home" }, | ||
1450 | { SDLK_LEFT, 69, 329, 31, "Left" }, | ||
1451 | { SDLK_SPACE, 141, 330, 20, "Select" }, | ||
1452 | { SDLK_RIGHT, 214, 331, 23, "Right" }, | ||
1453 | { SDLK_KP3, 142, 406, 30, "Menu" }, | ||
1454 | { SDLK_DOWN, 221, 384, 24, "Scroll Fwd" }, | ||
1455 | { SDLK_KP_MINUS, 270, 299, 25, "Power" }, | ||
1456 | { SDLK_h, 269, 358, 26, "Hold" }, | ||
1457 | { 0, 0, 0, 0, "None" } | ||
1458 | }; | ||
1459 | #elif defined (SANSA_CLIP) | ||
1460 | struct button_map bm[] = { | ||
1461 | { SDLK_KP_MULTIPLY, 165, 158, 17, "Home" }, | ||
1462 | { SDLK_KP5, 102, 230, 29, "Select" }, | ||
1463 | { SDLK_KP8, 100, 179, 25, "Play" }, | ||
1464 | { SDLK_KP4, 53, 231, 21, "Left" }, | ||
1465 | { SDLK_KP6, 147, 232, 19, "Right" }, | ||
1466 | { SDLK_KP2, 105, 275, 22, "Menu" }, | ||
1467 | { 0, 0, 0, 0, "None" } | ||
1468 | }; | ||
1469 | #elif defined (SANSA_C200) || defined(SANSA_C200V2) | ||
1470 | struct button_map bm[] = { | ||
1471 | |||
1472 | { SDLK_KP7, 84, 7, 21, "Vol Down" }, | ||
1473 | { SDLK_KP9, 158, 7, 20, "Vol Up" }, | ||
1474 | { SDLK_KP1, 173, 130, 27, "Record" }, | ||
1475 | { SDLK_KP5, 277, 75, 21, "Select" }, | ||
1476 | { SDLK_KP4, 233, 75, 24, "Left" }, | ||
1477 | { SDLK_KP6, 313, 74, 18, "Right" }, | ||
1478 | { SDLK_KP8, 276, 34, 15, "Play" }, | ||
1479 | { SDLK_KP2, 277, 119, 17, "Down" }, | ||
1480 | { SDLK_KP3, 314, 113, 19, "Menu" }, | ||
1481 | { 0, 0, 0, 0, "None" } | ||
1482 | }; | ||
1483 | #elif defined (SANSA_E200V2) || defined(SANSA_E200) | ||
1484 | struct button_map bm[] = { | ||
1485 | { SDLK_KP7, 5, 92, 18, "Record" }, | ||
1486 | { SDLK_KP9, 128, 295, 43, "Play" }, | ||
1487 | { SDLK_KP4, 42, 380, 33, "Left" }, | ||
1488 | { SDLK_KP5, 129, 378, 36, "Select" }, | ||
1489 | { SDLK_KP6, 218, 383, 30, "Right" }, | ||
1490 | { SDLK_KP3, 129, 461, 29, "Down" }, | ||
1491 | { SDLK_KP1, 55, 464, 20, "Menu" }, | ||
1492 | { SDLK_KP8, 92, 338, 17, "Scroll Back" }, | ||
1493 | { SDLK_KP2, 167, 342, 17, "Scroll Fwd" }, | ||
1494 | { 0, 0, 0, 0, "None" } | ||
1495 | }; | ||
1496 | #elif defined (SANSA_M200V4) | ||
1497 | struct button_map bm[] = { | ||
1498 | { SDLK_KP_PLUS, 54, 14, 16, "Power" }, | ||
1499 | { SDLK_KP7, 96, 13, 12, "Vol Down" }, | ||
1500 | { SDLK_KP9, 139, 14, 14, "Vol Up" }, | ||
1501 | { SDLK_KP5, 260, 82, 20, "Select" }, | ||
1502 | { SDLK_KP8, 258, 35, 30, "Play" }, | ||
1503 | { SDLK_KP4, 214, 84, 25, "Left" }, | ||
1504 | { SDLK_KP6, 300, 83, 24, "Right" }, | ||
1505 | { SDLK_KP2, 262, 125, 28, "Repeat" }, | ||
1506 | { SDLK_h, 113, 151, 21, "Hold" }, | ||
1507 | { 0, 0, 0, 0, "None" } | ||
1508 | }; | ||
1509 | #elif defined (IPOD_VIDEO) | ||
1510 | struct button_map bm[] = { | ||
1511 | { SDLK_KP_PERIOD, 174, 350, 35, "Menu" }, | ||
1512 | { SDLK_KP8, 110, 380, 33, "Scroll Back" }, | ||
1513 | { SDLK_KP2, 234, 377, 34, "Scroll Fwd" }, | ||
1514 | { SDLK_KP4, 78, 438, 47, "Left" }, | ||
1515 | { SDLK_KP5, 172, 435, 43, "Select" }, | ||
1516 | { SDLK_KP6, 262, 438, 52, "Right" }, | ||
1517 | { SDLK_KP_PLUS, 172, 519, 43, "Play" }, | ||
1518 | { 0, 0, 0 , 0, "None" } | ||
1519 | }; | ||
1520 | #elif defined (IPOD_MINI) || defined(IPOD_MINI2G) | ||
1521 | struct button_map bm[] = { | ||
1522 | { SDLK_KP5, 92, 267, 29, "Select" }, | ||
1523 | { SDLK_KP4, 31, 263, 37, "Left" }, | ||
1524 | { SDLK_KP6, 150, 268, 33, "Right" }, | ||
1525 | { SDLK_KP_PERIOD, 93, 209, 30, "Menu" }, | ||
1526 | { SDLK_KP_PLUS, 93, 324, 25, "Play" }, | ||
1527 | { SDLK_KP8, 53, 220, 29, "Scroll Back" }, | ||
1528 | { SDLK_KP2, 134, 219, 31, "Scroll Fwd" }, | ||
1529 | { 0, 0, 0 , 0, "None" } | ||
1530 | }; | ||
1531 | #elif defined (IPOD_3G) | ||
1532 | struct button_map bm[] = { | ||
1533 | { SDLK_KP5, 108, 296, 26, "Select" }, | ||
1534 | { SDLK_KP8, 70, 255, 26, "Scroll Back" }, | ||
1535 | { SDLK_KP2, 149, 256, 28, "Scroll Fwd" }, | ||
1536 | { SDLK_KP4, 27, 186, 22, "Left" }, | ||
1537 | { SDLK_KP_PERIOD, 82, 185, 22, "Menu" }, | ||
1538 | { SDLK_KP_PERIOD, 133, 185, 21, "Play" }, | ||
1539 | { SDLK_KP6, 189, 188, 21, "Right" }, | ||
1540 | { 0, 0, 0 , 0, "None" } | ||
1541 | }; | ||
1542 | #elif defined (IPOD_4G) | ||
1543 | struct button_map bm[] = { | ||
1544 | { SDLK_KP5, 96, 269, 27, "Select" }, | ||
1545 | { SDLK_KP4, 39, 267, 30, "Left" }, | ||
1546 | { SDLK_KP6, 153, 270, 27, "Right" }, | ||
1547 | { SDLK_KP_PERIOD, 96, 219, 30, "Menu" }, | ||
1548 | { SDLK_KP_PLUS, 95, 326, 27, "Play" }, | ||
1549 | { SDLK_KP8, 57, 233, 29, "Scroll Back" }, | ||
1550 | { SDLK_KP2, 132, 226, 29, "Scroll Fwd" }, | ||
1551 | { 0, 0, 0 , 0, "None" } | ||
1552 | }; | ||
1553 | #elif defined (IPOD_COLOR) | ||
1554 | struct button_map bm[] = { | ||
1555 | { SDLK_KP5, 128, 362, 35, "Select" }, | ||
1556 | { SDLK_KP4, 55, 358, 38, "Left" }, | ||
1557 | { SDLK_KP6, 203, 359, 39, "Right" }, | ||
1558 | { SDLK_KP_PERIOD, 128, 282, 34, "Menu" }, | ||
1559 | { SDLK_KP_PLUS, 129, 439, 41, "Play" }, | ||
1560 | { SDLK_KP8, 76, 309, 34, "Scroll Back" }, | ||
1561 | { SDLK_KP2, 182, 311, 45, "Scroll Fwd" }, | ||
1562 | { 0, 0, 0 , 0, "None" } | ||
1563 | }; | ||
1564 | #elif defined (IPOD_1G2G) | ||
1565 | struct button_map bm[] = { | ||
1566 | { SDLK_KP5, 112, 265, 31, "Select" }, | ||
1567 | { SDLK_KP8, 74, 224, 28, "Scroll Back" }, | ||
1568 | { SDLK_KP2, 146, 228, 28, "Scroll Fwd" }, | ||
1569 | /* Dummy button to make crescent shape */ | ||
1570 | { SDLK_y, 112, 265, 76, "None" }, | ||
1571 | { SDLK_KP8, 74, 224, 28, "Scroll Back" }, | ||
1572 | { SDLK_KP2, 146, 228, 28, "Scroll Fwd" }, | ||
1573 | { SDLK_KP6, 159, 268, 64, "Right" }, | ||
1574 | { SDLK_KP4, 62, 266, 62, "Left" }, | ||
1575 | { SDLK_KP_PERIOD, 111, 216, 64, "Menu" }, | ||
1576 | { SDLK_KP_PLUS, 111, 326, 55, "Down" }, | ||
1577 | { 0, 0, 0 , 0, "None" } | ||
1578 | }; | ||
1579 | #elif defined (IPOD_NANO) | ||
1580 | struct button_map bm[] = { | ||
1581 | { SDLK_KP5, 98, 316, 37, "Select" }, | ||
1582 | { SDLK_KP4, 37, 312, 28, "Left" }, | ||
1583 | { SDLK_KP6, 160, 313, 25, "Right" }, | ||
1584 | { SDLK_KP_PERIOD,102, 256, 23, "Menu" }, | ||
1585 | { SDLK_KP_PLUS, 99, 378, 28, "Play" }, | ||
1586 | { SDLK_KP8, 58, 272, 24, "Scroll Back" }, | ||
1587 | { SDLK_KP2, 141, 274, 22, "Scroll Fwd" }, | ||
1588 | { 0, 0, 0 , 0, "None" } | ||
1589 | }; | ||
1590 | #elif defined (IPOD_NANO2G) | ||
1591 | struct button_map bm[] = { | ||
1592 | { SDLK_KP5, 118, 346, 37, "Select" }, | ||
1593 | { SDLK_KP4, 51, 345, 28, "Left" }, | ||
1594 | { SDLK_KP6, 180, 346, 26, "Right" }, | ||
1595 | { SDLK_KP_PERIOD, 114, 286, 23, "Menu" }, | ||
1596 | { SDLK_KP_PLUS, 115, 412, 27, "Down" }, | ||
1597 | { SDLK_KP8, 67, 303, 28, "Scroll Back" }, | ||
1598 | { SDLK_KP2, 163, 303, 27, "Scroll Fwd" }, | ||
1599 | { 0, 0, 0 , 0, "None" } | ||
1600 | }; | ||
1601 | #elif defined (COWON_D2) | ||
1602 | struct button_map bm[] = { | ||
1603 | { SDLK_DELETE, 51, 14, 17, "Power" }, | ||
1604 | { SDLK_h, 138, 14, 16, "Hold" }, | ||
1605 | { SDLK_MINUS, 320, 14, 10, "Minus" }, | ||
1606 | { SDLK_INSERT, 347, 13, 13, "Menu" }, | ||
1607 | { SDLK_KP_PLUS, 374, 14, 12, "Plus" }, | ||
1608 | { 0, 0, 0, 0, "None" } | ||
1609 | }; | ||
1610 | #elif defined (IAUDIO_M3) | ||
1611 | struct button_map bm[] = { | ||
1612 | { SDLK_KP5, 256, 72, 29, "Play" }, | ||
1613 | { SDLK_KP6, 255, 137, 28, "Right" }, | ||
1614 | { SDLK_KP4, 257, 201, 26, "Left" }, | ||
1615 | { SDLK_KP8, 338, 31, 27, "Up" }, | ||
1616 | { SDLK_KP2, 339, 92, 23, "Down" }, | ||
1617 | { SDLK_KP_PERIOD, 336, 50, 23, "Mode" }, | ||
1618 | { SDLK_KP_DIVIDE, 336, 147, 23, "Rec" }, | ||
1619 | { SDLK_h, 336, 212, 30, "Hold" }, | ||
1620 | /* remote */ | ||
1621 | { SDLK_SPACE, 115, 308, 20, "RC Play" }, | ||
1622 | { SDLK_RIGHT, 85, 308, 20, "RC Rew" }, | ||
1623 | { SDLK_LEFT, 143, 308, 20, "RC FF" }, | ||
1624 | { SDLK_UP, 143, 498, 20, "RC Up" }, | ||
1625 | { SDLK_DOWN, 85, 498, 20, "RC Down" }, | ||
1626 | { SDLK_INSERT, 212, 308, 30, "RC Mode" }, | ||
1627 | { SDLK_F1, 275, 308, 25, "RC Rec" }, | ||
1628 | { SDLK_KP_ENTER, 115, 498, 20, "RC Menu" }, | ||
1629 | { 0, 0, 0, 0, "None" } | ||
1630 | }; | ||
1631 | #elif defined (IAUDIO_M5) | ||
1632 | struct button_map bm[] = { | ||
1633 | { SDLK_KP_ENTER, 333, 41, 17, "Enter" }, | ||
1634 | { SDLK_h, 334, 74, 21, "Hold" }, | ||
1635 | { SDLK_KP_DIVIDE, 333, 142, 24, "Record" }, | ||
1636 | { SDLK_KP_PLUS, 332, 213, 20, "Play" }, | ||
1637 | { SDLK_KP5, 250, 291, 19, "Select" }, | ||
1638 | { SDLK_KP8, 249, 236, 32, "Up" }, | ||
1639 | { SDLK_KP4, 194, 292, 29, "Left" }, | ||
1640 | { SDLK_KP6, 297, 290, 27, "Right" }, | ||
1641 | { SDLK_KP2, 252, 335, 28, "Down" }, | ||
1642 | { 0, 0, 0, 0, "None" } | ||
1643 | }; | ||
1644 | #elif defined (IAUDIO_7) | ||
1645 | struct button_map bm[] = { | ||
1646 | { 0, 0, 0, 0, "None" } | ||
1647 | }; | ||
1648 | #elif defined (IAUDIO_X5) | ||
1649 | struct button_map bm[] = { | ||
1650 | { SDLK_KP_ENTER, 275, 38, 17, "Power" }, | ||
1651 | { SDLK_h, 274, 83, 16, "Hold" }, | ||
1652 | { SDLK_KP_DIVIDE, 276, 128, 22, "Record" }, | ||
1653 | { SDLK_KP_PLUS, 274, 186, 22, "Play" }, | ||
1654 | { SDLK_KP5, 200, 247, 16, "Select" }, | ||
1655 | { SDLK_KP8, 200, 206, 16, "Up" }, | ||
1656 | { SDLK_KP4, 163, 248, 19, "Left" }, | ||
1657 | { SDLK_KP6, 225, 247, 24, "Right" }, | ||
1658 | { SDLK_KP2, 199, 279, 20, "Down" }, | ||
1659 | { 0, 0, 0, 0, "None" } | ||
1660 | }; | ||
1661 | #elif defined (ARCHOS_PLAYER) | ||
1662 | struct button_map bm[] = { | ||
1663 | { SDLK_KP_PLUS, 79, 252, 23, "On" }, | ||
1664 | { SDLK_KP_PERIOD, 81, 310, 20, "Menu" }, | ||
1665 | { SDLK_KP8, 154, 237, 28, "Play" }, | ||
1666 | { SDLK_KP4, 121, 282, 23, "Left" }, | ||
1667 | { SDLK_KP6, 187, 282, 22, "Right" }, | ||
1668 | { SDLK_KP2, 157, 312, 20, "Down" }, | ||
1669 | { 0, 0, 0, 0, "None" } | ||
1670 | }; | ||
1671 | #elif defined (ARCHOS_RECORDER) | ||
1672 | struct button_map bm[] = { | ||
1673 | { SDLK_F1, 94, 205, 22, "F1" }, | ||
1674 | { SDLK_F2, 136, 204, 21, "F2" }, | ||
1675 | { SDLK_F3, 174, 204, 24, "F3" }, | ||
1676 | { SDLK_KP_PLUS, 75, 258, 19, "On" }, | ||
1677 | { SDLK_KP_ENTER, 76, 307, 15, "Off" }, | ||
1678 | { SDLK_KP5, 151, 290, 20, "Select" }, | ||
1679 | { SDLK_KP8, 152, 251, 23, "Up" }, | ||
1680 | { SDLK_KP4, 113, 288, 26, "Left" }, | ||
1681 | { SDLK_KP6, 189, 291, 23, "Right" }, | ||
1682 | { SDLK_KP2, 150, 327, 27, "Down" }, | ||
1683 | { 0, 0, 0, 0, "None" } | ||
1684 | }; | ||
1685 | #elif defined (ARCHOS_FMRECORDER) || defined (ARCHOS_RECORDERV2) | ||
1686 | struct button_map bm[] = { | ||
1687 | { SDLK_F1, 88, 210, 28, "F1" }, | ||
1688 | { SDLK_F2, 144, 212, 28, "F2" }, | ||
1689 | { SDLK_F3, 197, 212, 28, "F3" }, | ||
1690 | { SDLK_KP5, 144, 287, 21, "Select" }, | ||
1691 | { SDLK_KP_PLUS, 86, 320, 13, "Menu" }, | ||
1692 | { SDLK_KP_ENTER, 114, 347, 13, "Stop" }, | ||
1693 | { SDLK_y, 144, 288, 31, "None" }, | ||
1694 | { SDLK_KP8, 144, 259, 25, "Up" }, | ||
1695 | { SDLK_KP2, 144, 316, 31, "Down" }, | ||
1696 | { SDLK_KP6, 171, 287, 32, "Right" }, | ||
1697 | { SDLK_KP4, 117, 287, 31, "Left" }, | ||
1698 | { 0, 0, 0, 0, "None" } | ||
1699 | }; | ||
1700 | #elif defined (ARCHOS_ONDIOSP) || defined (ARCHOS_ONDIOFM) | ||
1701 | struct button_map bm[] = { | ||
1702 | { SDLK_KP_ENTER, 75, 23, 30, "Enter" }, | ||
1703 | { SDLK_KP8, 75, 174, 33, "KP8" }, | ||
1704 | { SDLK_KP4, 26, 186, 48, "KP4" }, | ||
1705 | { SDLK_KP6, 118, 196, 32, "KP6" }, | ||
1706 | { SDLK_KP2, 75, 234, 16, "KP2" }, | ||
1707 | { SDLK_KP_PERIOD, 54, 250, 24, "Period" }, | ||
1708 | { 0, 0, 0, 0, "None" } | ||
1709 | }; | ||
1710 | #elif defined (IRIVER_H10) | ||
1711 | struct button_map bm[] = { | ||
1712 | { SDLK_KP_PLUS, 38, 70, 37, "Power" }, | ||
1713 | { SDLK_KP4, 123, 194, 26, "Cancel" }, | ||
1714 | { SDLK_KP6, 257, 195, 34, "Select" }, | ||
1715 | { SDLK_KP8, 190, 221, 28, "Up" }, | ||
1716 | { SDLK_KP2, 192, 320, 27, "Down" }, | ||
1717 | { SDLK_KP_DIVIDE, 349, 49, 20, "Rew" }, | ||
1718 | { SDLK_KP5, 349, 96, 20, "Play" }, | ||
1719 | { SDLK_KP_MULTIPLY, 350, 141, 23, "FF" }, | ||
1720 | { 0, 0, 0, 0, "None" } | ||
1721 | }; | ||
1722 | #elif defined (IRIVER_H10_5GB) | ||
1723 | struct button_map bm[] = { | ||
1724 | { SDLK_KP_PLUS, 34, 76, 23, "Power" }, | ||
1725 | { SDLK_KP4, 106, 222, 28, "Cancel" }, | ||
1726 | { SDLK_KP6, 243, 220, 31, "Select" }, | ||
1727 | { SDLK_KP8, 176, 254, 34, "Up" }, | ||
1728 | { SDLK_KP2, 175, 371, 35, "Down" }, | ||
1729 | { SDLK_KP_DIVIDE, 319, 63, 26, "Rew" }, | ||
1730 | { SDLK_KP5, 320, 124, 26, "Play" }, | ||
1731 | { SDLK_KP_MULTIPLY, 320, 181, 32, "FF" }, | ||
1732 | { 0, 0, 0, 0, "None" } | ||
1733 | }; | ||
1734 | #elif defined (IRIVER_H120) || defined (IRIVER_H100) | ||
1735 | struct button_map bm[] = { | ||
1736 | { SDLK_KP_DIVIDE, 46, 162, 13, "Record" }, | ||
1737 | { SDLK_KP_PLUS, 327, 36, 16, "Play" }, | ||
1738 | { SDLK_KP_ENTER, 330, 99, 18, "Stop" }, | ||
1739 | { SDLK_KP_PERIOD, 330, 163, 18, "AB" }, | ||
1740 | { SDLK_KP5, 186, 227, 27, "5" }, | ||
1741 | { SDLK_KP8, 187, 185, 19, "8" }, | ||
1742 | { SDLK_KP4, 142, 229, 23, "4" }, | ||
1743 | { SDLK_KP6, 231, 229, 22, "6" }, | ||
1744 | { SDLK_KP2, 189, 272, 28, "2" }, | ||
1745 | /* Remote Buttons */ | ||
1746 | { SDLK_KP_ENTER, 250, 404, 20, "Stop" }, | ||
1747 | { SDLK_SPACE, 285, 439, 29, "Space" }, | ||
1748 | { SDLK_h, 336, 291, 24, "Hold" }, | ||
1749 | { 0, 0, 0, 0, "None" } | ||
1750 | }; | ||
1751 | #elif defined (IRIVER_H300) | ||
1752 | struct button_map bm[] = { | ||
1753 | { SDLK_KP_PLUS, 56, 335, 20, "Play" }, | ||
1754 | { SDLK_KP8, 140, 304, 29, "Up" }, | ||
1755 | { SDLK_KP_DIVIDE, 233, 331, 23, "Record" }, | ||
1756 | { SDLK_KP_ENTER, 54, 381, 24, "Stop" }, | ||
1757 | { SDLK_KP4, 100, 353, 17, "Left" }, | ||
1758 | { SDLK_KP5, 140, 351, 19, "Navi" }, | ||
1759 | { SDLK_KP6, 185, 356, 19, "Right" }, | ||
1760 | { SDLK_KP_PERIOD, 230, 380, 20, "AB" }, | ||
1761 | { SDLK_KP2, 142, 402, 24, "Down" }, | ||
1762 | { SDLK_KP_ENTER, 211, 479, 21, "Stop" }, | ||
1763 | { SDLK_KP_PLUS, 248, 513, 29, "Play" }, | ||
1764 | { 0, 0, 0, 0, "None" } | ||
1765 | }; | ||
1766 | #elif defined (MROBE_500) | ||
1767 | struct button_map bm[] = { | ||
1768 | { SDLK_KP9, 171, 609, 9, "Play" }, | ||
1769 | { SDLK_KP4, 158, 623, 9, "Left" }, | ||
1770 | { SDLK_KP6, 184, 622, 9, "Right" }, | ||
1771 | { SDLK_KP7, 171, 638, 11, "Menu" }, | ||
1772 | { 0, 0, 0, 0, "None" } | ||
1773 | }; | ||
1774 | #elif defined (MROBE_100) | ||
1775 | struct button_map bm[] = { | ||
1776 | { SDLK_KP7, 80, 233, 30, "Menu" }, | ||
1777 | { SDLK_KP8, 138, 250, 19, "Up" }, | ||
1778 | { SDLK_KP9, 201, 230, 27, "Play" }, | ||
1779 | { SDLK_KP4, 63, 305, 25, "Left" }, | ||
1780 | { SDLK_KP5, 125, 309, 28, "Select" }, | ||
1781 | { SDLK_KP6, 200, 307, 35, "Right" }, | ||
1782 | { SDLK_KP1, 52, 380, 32, "Display" }, | ||
1783 | { SDLK_KP2, 125, 363, 30, "Down" }, | ||
1784 | { SDLK_KP9, 168, 425, 10, "Play" }, | ||
1785 | { SDLK_KP4, 156, 440, 11, "Left" }, | ||
1786 | { SDLK_KP6, 180, 440, 13, "Right" }, | ||
1787 | { SDLK_KP7, 169, 452, 10, "Menu" }, | ||
1788 | { SDLK_KP_MULTIPLY, 222, 15, 16, "Power" }, | ||
1789 | { 0, 0, 0, 0, "None" } | ||
1790 | }; | ||
1791 | #elif defined (GIGABEAT_F) | ||
1792 | struct button_map bm[] = { | ||
1793 | { SDLK_KP_PLUS, 361, 187, 22, "Power" }, | ||
1794 | { SDLK_KP_PERIOD, 361, 270, 17, "Menu" }, | ||
1795 | { SDLK_KP9, 365, 345, 26, "Vol Up" }, | ||
1796 | { SDLK_KP3, 363, 433, 25, "Vol Down" }, | ||
1797 | { SDLK_KP_ENTER, 365, 520, 19, "A" }, | ||
1798 | { SDLK_KP8, 167, 458, 35, "Up" }, | ||
1799 | { SDLK_KP4, 86, 537, 29, "Left" }, | ||
1800 | { SDLK_KP5, 166, 536, 30, "Select" }, | ||
1801 | { SDLK_KP6, 248, 536, 30, "Right" }, | ||
1802 | { SDLK_KP2, 169, 617, 28, "Down" }, | ||
1803 | { 0, 0, 0, 0, "None" } | ||
1804 | }; | ||
1805 | #elif defined (GIGABEAT_S) | ||
1806 | struct button_map bm[] = { | ||
1807 | { SDLK_KP_PLUS, 416, 383, 23, "Play" }, | ||
1808 | { SDLK_KP7, 135, 442, 46, "Back" }, | ||
1809 | { SDLK_KP9, 288, 447, 35, "Menu" }, | ||
1810 | { SDLK_KP8, 214, 480, 32, "Up" }, | ||
1811 | { SDLK_KP4, 128, 558, 33, "Left" }, | ||
1812 | { SDLK_KP5, 214, 556, 34, "Select" }, | ||
1813 | { SDLK_KP6, 293, 558, 35, "Right" }, | ||
1814 | { SDLK_KP2, 214, 637, 38, "Down" }, | ||
1815 | { 0, 0, 0, 0, "None" } | ||
1816 | }; | ||
1817 | #elif defined (SAMSUNG_YH820) | ||
1818 | struct button_map bm[] = { | ||
1819 | { SDLK_KP_PLUS, 330, 53, 23, "Record" }, | ||
1820 | { SDLK_KP7, 132, 208, 21, "Left" }, | ||
1821 | { SDLK_KP5, 182, 210, 18, "Play" }, | ||
1822 | { SDLK_KP9, 234, 211, 22, "Right" }, | ||
1823 | { SDLK_KP8, 182, 260, 15, "Up" }, | ||
1824 | { SDLK_KP4, 122, 277, 29, "Menu" }, | ||
1825 | { SDLK_KP6, 238, 276, 25, "Select" }, | ||
1826 | { SDLK_KP2, 183, 321, 24, "Down" }, | ||
1827 | { 0, 0, 0, 0, "None" } | ||
1828 | }; | ||
1829 | #elif defined (SAMSUNG_YH920) || defined (SAMSUNG_YH925) | ||
1830 | struct button_map bm[] = { | ||
1831 | { SDLK_KP9, 370, 32, 15, "FF" }, | ||
1832 | { SDLK_KP5, 369, 84, 25, "Play" }, | ||
1833 | { SDLK_KP5, 367, 125, 27, "Play" }, | ||
1834 | { SDLK_KP3, 369, 188, 17, "Rew" }, | ||
1835 | { SDLK_KP_PLUS, 370, 330, 30, "Record" }, | ||
1836 | { SDLK_KP4, 146, 252, 32, "Menu" }, | ||
1837 | { SDLK_KP8, 204, 226, 27, "Up" }, | ||
1838 | { SDLK_KP6, 257, 250, 34, "Select" }, | ||
1839 | { SDLK_KP2, 205, 294, 35, "Down" }, | ||
1840 | { 0, 0, 0, 0, "None" } | ||
1841 | }; | ||
1842 | #elif defined (ONDA_VX747) || defined (ONDA_VX747P) | ||
1843 | struct button_map bm[] = { | ||
1844 | { SDLK_MINUS, 113, 583, 28, "Minus" }, | ||
1845 | { SDLK_PLUS, 227, 580, 28, "Plus" }, | ||
1846 | { SDLK_RETURN, 171, 583, 34, "Menu" }, | ||
1847 | { 0, 0, 0, 0, "None" } | ||
1848 | }; | ||
1849 | #elif defined (PHILIPS_SA9200) | ||
1850 | struct button_map bm[] = { | ||
1851 | { SDLK_KP_ENTER, 25, 155, 33, "Power" }, | ||
1852 | { SDLK_PAGEUP, 210, 98, 31, "Vol Up" }, | ||
1853 | { SDLK_PAGEDOWN, 210, 168, 34, "Vol Down" }, | ||
1854 | { SDLK_KP7, 40, 249, 26, "Prev" }, | ||
1855 | { SDLK_KP8, 110, 247, 22, "Up" }, | ||
1856 | { SDLK_KP9, 183, 249, 31, "Next" }, | ||
1857 | { SDLK_KP4, 45, 305, 25, "Left" }, | ||
1858 | { SDLK_KP5, 111, 304, 24, "Play" }, | ||
1859 | { SDLK_KP6, 183, 304, 21, "Right" }, | ||
1860 | { SDLK_KP1, 43, 377, 21, "Menu" }, | ||
1861 | { SDLK_KP2, 112, 371, 24, "Down" }, | ||
1862 | { 0, 0, 0, 0, "None" } | ||
1863 | }; | ||
1864 | #elif defined (CREATIVE_ZVM) || defined (CREATIVE_ZVM60GB) || \ | ||
1865 | defined (CREATIVE_ZV) | ||
1866 | struct button_map bm[] = { | ||
1867 | { SDLK_KP7, 52, 414, 35, "Custom" }, | ||
1868 | { SDLK_KP8, 185, 406, 55, "Up" }, | ||
1869 | { SDLK_KP9, 315, 421, 46, "Play" }, | ||
1870 | { SDLK_KP4, 122, 500, 41, "Left" }, | ||
1871 | { SDLK_KP6, 247, 493, 49, "Right" }, | ||
1872 | { SDLK_KP1, 58, 577, 49, "Back" }, | ||
1873 | { SDLK_KP2, 186, 585, 46, "Down" }, | ||
1874 | { SDLK_KP3, 311, 569, 47, "Menu" }, | ||
1875 | { 0, 0, 0, 0, "None" } | ||
1876 | }; | ||
1877 | #elif defined (MPIO_HD200) | ||
1878 | struct button_map bm[] = { | ||
1879 | { SDLK_ESCAPE, 369, 257, 20, "Rec" }, | ||
1880 | { SDLK_RETURN, 369, 305, 20, "Play/Stop" }, | ||
1881 | { SDLK_UP, 353, 168, 10, "Rew" }, | ||
1882 | { SDLK_DOWN, 353, 198, 10, "FF" }, | ||
1883 | { SDLK_SPACE, 353, 186, 10, "Select" }, | ||
1884 | { SDLK_LEFT, 123, 67, 20, "Vol Down" }, | ||
1885 | { SDLK_RIGHT, 206, 67, 20, "Vol Up" }, | ||
1886 | { SDLK_h, 369, 402, 30, "Hold" }, | ||
1887 | { 0, 0, 0, 0, "None" } | ||
1888 | }; | ||
1889 | #else | ||
1890 | struct button_map bm[] = { | ||
1891 | { 0, 0, 0, 0, ""} | ||
1892 | }; | ||
1893 | #endif | ||
1894 | |||
1895 | int xy2button( int x, int y) { | ||
1896 | int i; | ||
1897 | extern bool debug_buttons; | ||
1898 | |||
1899 | for ( i = 0; bm[i].button; i++ ) | ||
1900 | /* check distance from center of button < radius */ | ||
1901 | if ( ( (x-bm[i].x)*(x-bm[i].x) ) + ( ( y-bm[i].y)*(y-bm[i].y) ) < bm[i].radius*bm[i].radius ) { | ||
1902 | if (debug_buttons) | ||
1903 | printf("Button: %s\n", bm[i].description ); | ||
1904 | return bm[i].button; | ||
1905 | } | ||
1906 | return 0; | ||
1907 | } | ||
diff --git a/uisimulator/sdl/kernel-sdl.c b/uisimulator/sdl/kernel-sdl.c deleted file mode 100644 index 3288a6f97a..0000000000 --- a/uisimulator/sdl/kernel-sdl.c +++ /dev/null | |||
@@ -1,155 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2002 by Felix Arends | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include <stdlib.h> | ||
23 | #include <SDL.h> | ||
24 | #include <SDL_thread.h> | ||
25 | #include "memory.h" | ||
26 | #include "system-sdl.h" | ||
27 | #include "uisdl.h" | ||
28 | #include "kernel.h" | ||
29 | #include "thread-sdl.h" | ||
30 | #include "thread.h" | ||
31 | #include "debug.h" | ||
32 | |||
33 | static SDL_TimerID tick_timer_id; | ||
34 | long start_tick; | ||
35 | |||
36 | /* Condition to signal that "interrupts" may proceed */ | ||
37 | static SDL_cond *sim_thread_cond; | ||
38 | /* Mutex to serialize changing levels and exclude other threads while | ||
39 | * inside a handler */ | ||
40 | static SDL_mutex *sim_irq_mtx; | ||
41 | static int interrupt_level = HIGHEST_IRQ_LEVEL; | ||
42 | static int handlers_pending = 0; | ||
43 | static int status_reg = 0; | ||
44 | |||
45 | /* Nescessary logic: | ||
46 | * 1) All threads must pass unblocked | ||
47 | * 2) Current handler must always pass unblocked | ||
48 | * 3) Threads must be excluded when irq routine is running | ||
49 | * 4) No more than one handler routine should execute at a time | ||
50 | */ | ||
51 | int set_irq_level(int level) | ||
52 | { | ||
53 | SDL_LockMutex(sim_irq_mtx); | ||
54 | |||
55 | int oldlevel = interrupt_level; | ||
56 | |||
57 | if (status_reg == 0 && level == 0 && oldlevel != 0) | ||
58 | { | ||
59 | /* Not in a handler and "interrupts" are being reenabled */ | ||
60 | if (handlers_pending > 0) | ||
61 | SDL_CondSignal(sim_thread_cond); | ||
62 | } | ||
63 | |||
64 | interrupt_level = level; /* save new level */ | ||
65 | |||
66 | SDL_UnlockMutex(sim_irq_mtx); | ||
67 | return oldlevel; | ||
68 | } | ||
69 | |||
70 | void sim_enter_irq_handler(void) | ||
71 | { | ||
72 | SDL_LockMutex(sim_irq_mtx); | ||
73 | handlers_pending++; | ||
74 | |||
75 | if(interrupt_level != 0) | ||
76 | { | ||
77 | /* "Interrupts" are disabled. Wait for reenable */ | ||
78 | SDL_CondWait(sim_thread_cond, sim_irq_mtx); | ||
79 | } | ||
80 | |||
81 | status_reg = 1; | ||
82 | } | ||
83 | |||
84 | void sim_exit_irq_handler(void) | ||
85 | { | ||
86 | if (--handlers_pending > 0) | ||
87 | SDL_CondSignal(sim_thread_cond); | ||
88 | |||
89 | status_reg = 0; | ||
90 | SDL_UnlockMutex(sim_irq_mtx); | ||
91 | } | ||
92 | |||
93 | bool sim_kernel_init(void) | ||
94 | { | ||
95 | sim_irq_mtx = SDL_CreateMutex(); | ||
96 | if (sim_irq_mtx == NULL) | ||
97 | { | ||
98 | fprintf(stderr, "Cannot create sim_handler_mtx\n"); | ||
99 | return false; | ||
100 | } | ||
101 | |||
102 | sim_thread_cond = SDL_CreateCond(); | ||
103 | if (sim_thread_cond == NULL) | ||
104 | { | ||
105 | fprintf(stderr, "Cannot create sim_thread_cond\n"); | ||
106 | return false; | ||
107 | } | ||
108 | |||
109 | return true; | ||
110 | } | ||
111 | |||
112 | void sim_kernel_shutdown(void) | ||
113 | { | ||
114 | SDL_RemoveTimer(tick_timer_id); | ||
115 | SDL_DestroyMutex(sim_irq_mtx); | ||
116 | SDL_DestroyCond(sim_thread_cond); | ||
117 | } | ||
118 | |||
119 | Uint32 tick_timer(Uint32 interval, void *param) | ||
120 | { | ||
121 | long new_tick; | ||
122 | |||
123 | (void) interval; | ||
124 | (void) param; | ||
125 | |||
126 | new_tick = (SDL_GetTicks() - start_tick) / (1000/HZ); | ||
127 | |||
128 | while(new_tick != current_tick) | ||
129 | { | ||
130 | sim_enter_irq_handler(); | ||
131 | |||
132 | /* Run through the list of tick tasks - increments tick | ||
133 | * on each iteration. */ | ||
134 | call_tick_tasks(); | ||
135 | |||
136 | sim_exit_irq_handler(); | ||
137 | } | ||
138 | |||
139 | return 1; | ||
140 | } | ||
141 | |||
142 | void tick_start(unsigned int interval_in_ms) | ||
143 | { | ||
144 | if (tick_timer_id != NULL) | ||
145 | { | ||
146 | SDL_RemoveTimer(tick_timer_id); | ||
147 | tick_timer_id = NULL; | ||
148 | } | ||
149 | else | ||
150 | { | ||
151 | start_tick = SDL_GetTicks(); | ||
152 | } | ||
153 | |||
154 | tick_timer_id = SDL_AddTimer(interval_in_ms, tick_timer, NULL); | ||
155 | } | ||
diff --git a/uisimulator/sdl/lcd-bitmap.c b/uisimulator/sdl/lcd-bitmap.c deleted file mode 100644 index 0bd90196e4..0000000000 --- a/uisimulator/sdl/lcd-bitmap.c +++ /dev/null | |||
@@ -1,415 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "debug.h" | ||
23 | #include "uisdl.h" | ||
24 | #include "lcd-sdl.h" | ||
25 | #include "screendump.h" | ||
26 | |||
27 | SDL_Surface* lcd_surface; | ||
28 | |||
29 | #if LCD_DEPTH <= 8 | ||
30 | #ifdef HAVE_BACKLIGHT | ||
31 | SDL_Color lcd_bl_color_dark = {RED_CMP(LCD_BL_DARKCOLOR), | ||
32 | GREEN_CMP(LCD_BL_DARKCOLOR), | ||
33 | BLUE_CMP(LCD_BL_DARKCOLOR), 0}; | ||
34 | SDL_Color lcd_bl_color_bright = {RED_CMP(LCD_BL_BRIGHTCOLOR), | ||
35 | GREEN_CMP(LCD_BL_BRIGHTCOLOR), | ||
36 | BLUE_CMP(LCD_BL_BRIGHTCOLOR), 0}; | ||
37 | #ifdef HAVE_LCD_SPLIT | ||
38 | SDL_Color lcd_bl_color2_dark = {RED_CMP(LCD_BL_DARKCOLOR_2), | ||
39 | GREEN_CMP(LCD_BL_DARKCOLOR_2), | ||
40 | BLUE_CMP(LCD_BL_DARKCOLOR_2), 0}; | ||
41 | SDL_Color lcd_bl_color2_bright = {RED_CMP(LCD_BL_BRIGHTCOLOR_2), | ||
42 | GREEN_CMP(LCD_BL_BRIGHTCOLOR_2), | ||
43 | BLUE_CMP(LCD_BL_BRIGHTCOLOR_2), 0}; | ||
44 | #endif | ||
45 | #endif /* HAVE_BACKLIGHT */ | ||
46 | SDL_Color lcd_color_dark = {RED_CMP(LCD_DARKCOLOR), | ||
47 | GREEN_CMP(LCD_DARKCOLOR), | ||
48 | BLUE_CMP(LCD_DARKCOLOR), 0}; | ||
49 | SDL_Color lcd_color_bright = {RED_CMP(LCD_BRIGHTCOLOR), | ||
50 | GREEN_CMP(LCD_BRIGHTCOLOR), | ||
51 | BLUE_CMP(LCD_BRIGHTCOLOR), 0}; | ||
52 | #ifdef HAVE_LCD_SPLIT | ||
53 | SDL_Color lcd_color2_dark = {RED_CMP(LCD_DARKCOLOR_2), | ||
54 | GREEN_CMP(LCD_DARKCOLOR_2), | ||
55 | BLUE_CMP(LCD_DARKCOLOR_2), 0}; | ||
56 | SDL_Color lcd_color2_bright = {RED_CMP(LCD_BRIGHTCOLOR_2), | ||
57 | GREEN_CMP(LCD_BRIGHTCOLOR_2), | ||
58 | BLUE_CMP(LCD_BRIGHTCOLOR_2), 0}; | ||
59 | #endif | ||
60 | |||
61 | #ifdef HAVE_LCD_SPLIT | ||
62 | #define NUM_SHADES 128 | ||
63 | #else | ||
64 | #define NUM_SHADES 129 | ||
65 | #endif | ||
66 | |||
67 | #else /* LCD_DEPTH > 8 */ | ||
68 | |||
69 | #ifdef HAVE_TRANSFLECTIVE_LCD | ||
70 | #define BACKLIGHT_OFF_ALPHA 85 /* 1/3 brightness */ | ||
71 | #else | ||
72 | #define BACKLIGHT_OFF_ALPHA 0 /* pitch black */ | ||
73 | #endif | ||
74 | |||
75 | #endif /* LCD_DEPTH */ | ||
76 | |||
77 | #if LCD_DEPTH < 8 | ||
78 | unsigned long (*lcd_ex_getpixel)(int, int) = NULL; | ||
79 | #endif /* LCD_DEPTH < 8 */ | ||
80 | |||
81 | #if LCD_DEPTH == 2 | ||
82 | /* Only defined for positive, non-split LCD for now */ | ||
83 | static const unsigned char colorindex[4] = {128, 85, 43, 0}; | ||
84 | #endif | ||
85 | |||
86 | static unsigned long get_lcd_pixel(int x, int y) | ||
87 | { | ||
88 | #if LCD_DEPTH == 1 | ||
89 | #ifdef HAVE_NEGATIVE_LCD | ||
90 | return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? (NUM_SHADES-1) : 0; | ||
91 | #else | ||
92 | return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? 0 : (NUM_SHADES-1); | ||
93 | #endif | ||
94 | #elif LCD_DEPTH == 2 | ||
95 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING | ||
96 | return colorindex[(lcd_framebuffer[y][x/4] >> (2 * (~x & 3))) & 3]; | ||
97 | #elif LCD_PIXELFORMAT == VERTICAL_PACKING | ||
98 | return colorindex[(lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3]; | ||
99 | #elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED | ||
100 | unsigned bits = (lcd_framebuffer[y/8][x] >> (y & 7)) & 0x0101; | ||
101 | return colorindex[(bits | (bits >> 7)) & 3]; | ||
102 | #endif | ||
103 | #elif LCD_DEPTH == 16 | ||
104 | #if LCD_PIXELFORMAT == RGB565SWAPPED | ||
105 | unsigned bits = lcd_framebuffer[y][x]; | ||
106 | return (bits >> 8) | (bits << 8); | ||
107 | #else | ||
108 | #if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE | ||
109 | return *(&lcd_framebuffer[0][0]+LCD_HEIGHT*x+y); | ||
110 | #else | ||
111 | return lcd_framebuffer[y][x]; | ||
112 | #endif | ||
113 | #endif | ||
114 | #endif | ||
115 | } | ||
116 | |||
117 | void lcd_update(void) | ||
118 | { | ||
119 | /* update a full screen rect */ | ||
120 | lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT); | ||
121 | } | ||
122 | |||
123 | void lcd_update_rect(int x_start, int y_start, int width, int height) | ||
124 | { | ||
125 | sdl_update_rect(lcd_surface, x_start, y_start, width, height, | ||
126 | LCD_WIDTH, LCD_HEIGHT, get_lcd_pixel); | ||
127 | sdl_gui_update(lcd_surface, x_start, y_start, width, | ||
128 | height + LCD_SPLIT_LINES, SIM_LCD_WIDTH, SIM_LCD_HEIGHT, | ||
129 | background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0); | ||
130 | } | ||
131 | |||
132 | #ifdef HAVE_BACKLIGHT | ||
133 | void sim_backlight(int value) | ||
134 | { | ||
135 | #if LCD_DEPTH <= 8 | ||
136 | if (value > 0) { | ||
137 | sdl_set_gradient(lcd_surface, &lcd_bl_color_dark, | ||
138 | &lcd_bl_color_bright, 0, NUM_SHADES); | ||
139 | #ifdef HAVE_LCD_SPLIT | ||
140 | sdl_set_gradient(lcd_surface, &lcd_bl_color2_dark, | ||
141 | &lcd_bl_color2_bright, NUM_SHADES, NUM_SHADES); | ||
142 | #endif | ||
143 | } else { | ||
144 | sdl_set_gradient(lcd_surface, &lcd_color_dark, | ||
145 | &lcd_color_bright, 0, NUM_SHADES); | ||
146 | #ifdef HAVE_LCD_SPLIT | ||
147 | sdl_set_gradient(lcd_surface, &lcd_color2_dark, | ||
148 | &lcd_color2_bright, NUM_SHADES, NUM_SHADES); | ||
149 | #endif | ||
150 | } | ||
151 | #else /* LCD_DEPTH > 8 */ | ||
152 | SDL_SetAlpha(lcd_surface, SDL_SRCALPHA, (value * 255) / 100); | ||
153 | #endif /* LCD_DEPTH */ | ||
154 | |||
155 | sdl_gui_update(lcd_surface, 0, 0, SIM_LCD_WIDTH, SIM_LCD_HEIGHT, | ||
156 | SIM_LCD_WIDTH, SIM_LCD_HEIGHT, | ||
157 | background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0); | ||
158 | } | ||
159 | #endif /* HAVE_BACKLIGHT */ | ||
160 | |||
161 | /* initialise simulator lcd driver */ | ||
162 | void sim_lcd_init(void) | ||
163 | { | ||
164 | #if LCD_DEPTH == 16 | ||
165 | lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, | ||
166 | SIM_LCD_WIDTH * display_zoom, | ||
167 | SIM_LCD_HEIGHT * display_zoom, | ||
168 | LCD_DEPTH, 0, 0, 0, 0); | ||
169 | #elif LCD_DEPTH <= 8 | ||
170 | lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, | ||
171 | SIM_LCD_WIDTH * display_zoom, | ||
172 | SIM_LCD_HEIGHT * display_zoom, | ||
173 | 8, 0, 0, 0, 0); | ||
174 | |||
175 | #ifdef HAVE_BACKLIGHT | ||
176 | sdl_set_gradient(lcd_surface, &lcd_bl_color_dark, | ||
177 | &lcd_bl_color_bright, 0, NUM_SHADES); | ||
178 | #ifdef HAVE_LCD_SPLIT | ||
179 | sdl_set_gradient(lcd_surface, &lcd_bl_color2_dark, | ||
180 | &lcd_bl_color2_bright, NUM_SHADES, NUM_SHADES); | ||
181 | #endif | ||
182 | #else /* !HAVE_BACKLIGHT */ | ||
183 | sdl_set_gradient(lcd_surface, &lcd_color_dark, | ||
184 | &lcd_color_bright, 0, NUM_SHADES); | ||
185 | #ifdef HAVE_LCD_SPLIT | ||
186 | sdl_set_gradient(lcd_surface, &lcd_color2_dark, | ||
187 | &lcd_color2_bright, NUM_SHADES, NUM_SHADES); | ||
188 | #endif | ||
189 | #endif /* !HAVE_BACKLIGHT */ | ||
190 | #endif /* LCD_DEPTH */ | ||
191 | } | ||
192 | |||
193 | #if LCD_DEPTH < 8 | ||
194 | void sim_lcd_ex_init(unsigned long (*getpixel)(int, int)) | ||
195 | { | ||
196 | lcd_ex_getpixel = getpixel; | ||
197 | } | ||
198 | |||
199 | void sim_lcd_ex_update_rect(int x_start, int y_start, int width, int height) | ||
200 | { | ||
201 | if (lcd_ex_getpixel) { | ||
202 | sdl_update_rect(lcd_surface, x_start, y_start, width, height, | ||
203 | LCD_WIDTH, LCD_HEIGHT, lcd_ex_getpixel); | ||
204 | sdl_gui_update(lcd_surface, x_start, y_start, width, | ||
205 | height + LCD_SPLIT_LINES, SIM_LCD_WIDTH, SIM_LCD_HEIGHT, | ||
206 | background ? UI_LCD_POSX : 0, | ||
207 | background ? UI_LCD_POSY : 0); | ||
208 | } | ||
209 | } | ||
210 | #endif | ||
211 | |||
212 | #ifdef HAVE_LCD_COLOR | ||
213 | /** | ||
214 | * |R| |1.000000 -0.000001 1.402000| |Y'| | ||
215 | * |G| = |1.000000 -0.334136 -0.714136| |Pb| | ||
216 | * |B| |1.000000 1.772000 0.000000| |Pr| | ||
217 | * Scaled, normalized, rounded and tweaked to yield RGB 565: | ||
218 | * |R| |74 0 101| |Y' - 16| >> 9 | ||
219 | * |G| = |74 -24 -51| |Cb - 128| >> 8 | ||
220 | * |B| |74 128 0| |Cr - 128| >> 9 | ||
221 | */ | ||
222 | #define YFAC (74) | ||
223 | #define RVFAC (101) | ||
224 | #define GUFAC (-24) | ||
225 | #define GVFAC (-51) | ||
226 | #define BUFAC (128) | ||
227 | |||
228 | static inline int clamp(int val, int min, int max) | ||
229 | { | ||
230 | if (val < min) | ||
231 | val = min; | ||
232 | else if (val > max) | ||
233 | val = max; | ||
234 | return val; | ||
235 | } | ||
236 | |||
237 | void lcd_yuv_set_options(unsigned options) | ||
238 | { | ||
239 | (void)options; | ||
240 | } | ||
241 | |||
242 | /* Draw a partial YUV colour bitmap - similiar behavior to lcd_blit_yuv | ||
243 | in the core */ | ||
244 | void lcd_blit_yuv(unsigned char * const src[3], | ||
245 | int src_x, int src_y, int stride, | ||
246 | int x, int y, int width, int height) | ||
247 | { | ||
248 | const unsigned char *ysrc, *usrc, *vsrc; | ||
249 | int linecounter; | ||
250 | fb_data *dst, *row_end; | ||
251 | long z; | ||
252 | |||
253 | /* width and height must be >= 2 and an even number */ | ||
254 | width &= ~1; | ||
255 | linecounter = height >> 1; | ||
256 | |||
257 | #if LCD_WIDTH >= LCD_HEIGHT | ||
258 | dst = &lcd_framebuffer[y][x]; | ||
259 | row_end = dst + width; | ||
260 | #else | ||
261 | dst = &lcd_framebuffer[x][LCD_WIDTH - y - 1]; | ||
262 | row_end = dst + LCD_WIDTH * width; | ||
263 | #endif | ||
264 | |||
265 | z = stride * src_y; | ||
266 | ysrc = src[0] + z + src_x; | ||
267 | usrc = src[1] + (z >> 2) + (src_x >> 1); | ||
268 | vsrc = src[2] + (usrc - src[1]); | ||
269 | |||
270 | /* stride => amount to jump from end of last row to start of next */ | ||
271 | stride -= width; | ||
272 | |||
273 | /* upsampling, YUV->RGB conversion and reduction to RGB565 in one go */ | ||
274 | |||
275 | do | ||
276 | { | ||
277 | do | ||
278 | { | ||
279 | int y, cb, cr, rv, guv, bu, r, g, b; | ||
280 | |||
281 | y = YFAC*(*ysrc++ - 16); | ||
282 | cb = *usrc++ - 128; | ||
283 | cr = *vsrc++ - 128; | ||
284 | |||
285 | rv = RVFAC*cr; | ||
286 | guv = GUFAC*cb + GVFAC*cr; | ||
287 | bu = BUFAC*cb; | ||
288 | |||
289 | r = y + rv; | ||
290 | g = y + guv; | ||
291 | b = y + bu; | ||
292 | |||
293 | if ((unsigned)(r | g | b) > 64*256-1) | ||
294 | { | ||
295 | r = clamp(r, 0, 64*256-1); | ||
296 | g = clamp(g, 0, 64*256-1); | ||
297 | b = clamp(b, 0, 64*256-1); | ||
298 | } | ||
299 | |||
300 | *dst = LCD_RGBPACK_LCD(r >> 9, g >> 8, b >> 9); | ||
301 | |||
302 | #if LCD_WIDTH >= LCD_HEIGHT | ||
303 | dst++; | ||
304 | #else | ||
305 | dst += LCD_WIDTH; | ||
306 | #endif | ||
307 | |||
308 | y = YFAC*(*ysrc++ - 16); | ||
309 | r = y + rv; | ||
310 | g = y + guv; | ||
311 | b = y + bu; | ||
312 | |||
313 | if ((unsigned)(r | g | b) > 64*256-1) | ||
314 | { | ||
315 | r = clamp(r, 0, 64*256-1); | ||
316 | g = clamp(g, 0, 64*256-1); | ||
317 | b = clamp(b, 0, 64*256-1); | ||
318 | } | ||
319 | |||
320 | *dst = LCD_RGBPACK_LCD(r >> 9, g >> 8, b >> 9); | ||
321 | |||
322 | #if LCD_WIDTH >= LCD_HEIGHT | ||
323 | dst++; | ||
324 | #else | ||
325 | dst += LCD_WIDTH; | ||
326 | #endif | ||
327 | } | ||
328 | while (dst < row_end); | ||
329 | |||
330 | ysrc += stride; | ||
331 | usrc -= width >> 1; | ||
332 | vsrc -= width >> 1; | ||
333 | |||
334 | #if LCD_WIDTH >= LCD_HEIGHT | ||
335 | row_end += LCD_WIDTH; | ||
336 | dst += LCD_WIDTH - width; | ||
337 | #else | ||
338 | row_end -= 1; | ||
339 | dst -= LCD_WIDTH*width + 1; | ||
340 | #endif | ||
341 | |||
342 | do | ||
343 | { | ||
344 | int y, cb, cr, rv, guv, bu, r, g, b; | ||
345 | |||
346 | y = YFAC*(*ysrc++ - 16); | ||
347 | cb = *usrc++ - 128; | ||
348 | cr = *vsrc++ - 128; | ||
349 | |||
350 | rv = RVFAC*cr; | ||
351 | guv = GUFAC*cb + GVFAC*cr; | ||
352 | bu = BUFAC*cb; | ||
353 | |||
354 | r = y + rv; | ||
355 | g = y + guv; | ||
356 | b = y + bu; | ||
357 | |||
358 | if ((unsigned)(r | g | b) > 64*256-1) | ||
359 | { | ||
360 | r = clamp(r, 0, 64*256-1); | ||
361 | g = clamp(g, 0, 64*256-1); | ||
362 | b = clamp(b, 0, 64*256-1); | ||
363 | } | ||
364 | |||
365 | *dst = LCD_RGBPACK_LCD(r >> 9, g >> 8, b >> 9); | ||
366 | |||
367 | #if LCD_WIDTH >= LCD_HEIGHT | ||
368 | dst++; | ||
369 | #else | ||
370 | dst += LCD_WIDTH; | ||
371 | #endif | ||
372 | |||
373 | y = YFAC*(*ysrc++ - 16); | ||
374 | r = y + rv; | ||
375 | g = y + guv; | ||
376 | b = y + bu; | ||
377 | |||
378 | if ((unsigned)(r | g | b) > 64*256-1) | ||
379 | { | ||
380 | r = clamp(r, 0, 64*256-1); | ||
381 | g = clamp(g, 0, 64*256-1); | ||
382 | b = clamp(b, 0, 64*256-1); | ||
383 | } | ||
384 | |||
385 | *dst = LCD_RGBPACK_LCD(r >> 9, g >> 8, b >> 9); | ||
386 | |||
387 | #if LCD_WIDTH >= LCD_HEIGHT | ||
388 | dst++; | ||
389 | #else | ||
390 | dst += LCD_WIDTH; | ||
391 | #endif | ||
392 | } | ||
393 | while (dst < row_end); | ||
394 | |||
395 | ysrc += stride; | ||
396 | usrc += stride >> 1; | ||
397 | vsrc += stride >> 1; | ||
398 | |||
399 | #if LCD_WIDTH >= LCD_HEIGHT | ||
400 | row_end += LCD_WIDTH; | ||
401 | dst += LCD_WIDTH - width; | ||
402 | #else | ||
403 | row_end -= 1; | ||
404 | dst -= LCD_WIDTH*width + 1; | ||
405 | #endif | ||
406 | } | ||
407 | while (--linecounter > 0); | ||
408 | |||
409 | #if LCD_WIDTH >= LCD_HEIGHT | ||
410 | lcd_update_rect(x, y, width, height); | ||
411 | #else | ||
412 | lcd_update_rect(LCD_WIDTH - y - height, x, height, width); | ||
413 | #endif | ||
414 | } | ||
415 | #endif /* HAVE_LCD_COLOR */ | ||
diff --git a/uisimulator/sdl/lcd-bitmap.h b/uisimulator/sdl/lcd-bitmap.h deleted file mode 100644 index a898744b41..0000000000 --- a/uisimulator/sdl/lcd-bitmap.h +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef __LCDBITMAP_H__ | ||
23 | #define __LCDBITMAP_H__ | ||
24 | |||
25 | #include "lcd.h" | ||
26 | #include "SDL.h" | ||
27 | |||
28 | void sim_lcd_init(void); | ||
29 | #if LCD_DEPTH < 8 | ||
30 | void sim_lcd_ex_init(unsigned long (*getpixel)(int, int)); | ||
31 | void sim_lcd_ex_update_rect(int x, int y, int width, int height); | ||
32 | #endif | ||
33 | |||
34 | #endif /* #ifndef __LCDBITMAP_H__ */ | ||
35 | |||
diff --git a/uisimulator/sdl/lcd-charcells.c b/uisimulator/sdl/lcd-charcells.c deleted file mode 100644 index 05513ab266..0000000000 --- a/uisimulator/sdl/lcd-charcells.c +++ /dev/null | |||
@@ -1,197 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "debug.h" | ||
23 | #include "lcd.h" | ||
24 | #include "lcd-charcell.h" | ||
25 | #include "screendump.h" | ||
26 | #include "general.h" | ||
27 | #include <string.h> | ||
28 | #include <unistd.h> | ||
29 | #include <fcntl.h> | ||
30 | |||
31 | #include "lcd-playersim.h" | ||
32 | #include "uisdl.h" | ||
33 | #include "lcd-sdl.h" | ||
34 | |||
35 | /* can't include file.h here */ | ||
36 | #ifndef MAX_PATH | ||
37 | #define MAX_PATH 260 | ||
38 | #endif | ||
39 | |||
40 | /* extern functions, needed for screendump() */ | ||
41 | extern int sim_creat(const char *name, mode_t mode); | ||
42 | |||
43 | SDL_Surface* lcd_surface; | ||
44 | |||
45 | SDL_Color lcd_bl_color_dark = {RED_CMP(LCD_BL_DARKCOLOR), | ||
46 | GREEN_CMP(LCD_BL_DARKCOLOR), | ||
47 | BLUE_CMP(LCD_BL_DARKCOLOR), 0}; | ||
48 | SDL_Color lcd_bl_color_bright = {RED_CMP(LCD_BL_BRIGHTCOLOR), | ||
49 | GREEN_CMP(LCD_BL_BRIGHTCOLOR), | ||
50 | BLUE_CMP(LCD_BL_BRIGHTCOLOR), 0}; | ||
51 | SDL_Color lcd_color_dark = {RED_CMP(LCD_DARKCOLOR), | ||
52 | GREEN_CMP(LCD_DARKCOLOR), | ||
53 | BLUE_CMP(LCD_DARKCOLOR), 0}; | ||
54 | SDL_Color lcd_color_bright = {RED_CMP(LCD_BRIGHTCOLOR), | ||
55 | GREEN_CMP(LCD_BRIGHTCOLOR), | ||
56 | BLUE_CMP(LCD_BRIGHTCOLOR), 0}; | ||
57 | |||
58 | |||
59 | static unsigned long get_lcd_pixel(int x, int y) | ||
60 | { | ||
61 | return sim_lcd_framebuffer[y][x]; | ||
62 | } | ||
63 | |||
64 | void sim_lcd_update_rect(int x_start, int y_start, int width, int height) | ||
65 | { | ||
66 | sdl_update_rect(lcd_surface, x_start, y_start, width, height, | ||
67 | SIM_LCD_WIDTH, SIM_LCD_HEIGHT, get_lcd_pixel); | ||
68 | sdl_gui_update(lcd_surface, x_start, y_start, width, height, | ||
69 | SIM_LCD_WIDTH, SIM_LCD_HEIGHT, | ||
70 | background ? UI_LCD_POSX : 0, background ? UI_LCD_POSY : 0); | ||
71 | } | ||
72 | |||
73 | void lcd_update(void) | ||
74 | { | ||
75 | int x, y; | ||
76 | |||
77 | for (y = 0; y < lcd_pattern_count; y++) | ||
78 | if (lcd_patterns[y].count > 0) | ||
79 | sim_lcd_define_pattern(y, lcd_patterns[y].pattern); | ||
80 | |||
81 | for (y = 0; y < LCD_HEIGHT; y++) | ||
82 | for (x = 0; x < LCD_WIDTH; x++) | ||
83 | lcd_print_char(x, y, lcd_charbuffer[y][x]); | ||
84 | |||
85 | if (lcd_cursor.visible) | ||
86 | lcd_print_char(lcd_cursor.x, lcd_cursor.y, lcd_cursor.hw_char); | ||
87 | |||
88 | sim_lcd_update_rect(0, ICON_HEIGHT, SIM_LCD_WIDTH, | ||
89 | LCD_HEIGHT*CHAR_HEIGHT*CHAR_PIXEL); | ||
90 | } | ||
91 | |||
92 | #ifdef HAVE_BACKLIGHT | ||
93 | void sim_backlight(int value) | ||
94 | { | ||
95 | if (value > 0) { | ||
96 | sdl_set_gradient(lcd_surface, &lcd_bl_color_bright, | ||
97 | &lcd_bl_color_dark, 0, (1<<LCD_DEPTH)); | ||
98 | } else { | ||
99 | sdl_set_gradient(lcd_surface, &lcd_color_bright, | ||
100 | &lcd_color_dark, 0, (1<<LCD_DEPTH)); | ||
101 | } | ||
102 | |||
103 | sim_lcd_update_rect(0, 0, SIM_LCD_WIDTH, SIM_LCD_HEIGHT); | ||
104 | } | ||
105 | #endif | ||
106 | |||
107 | /* initialise simulator lcd driver */ | ||
108 | void sim_lcd_init(void) | ||
109 | { | ||
110 | lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, | ||
111 | SIM_LCD_WIDTH * display_zoom, | ||
112 | SIM_LCD_HEIGHT * display_zoom, | ||
113 | 8, 0, 0, 0, 0); | ||
114 | |||
115 | sdl_set_gradient(lcd_surface, &lcd_bl_color_bright, | ||
116 | &lcd_bl_color_dark, 0, (1<<LCD_DEPTH)); | ||
117 | } | ||
118 | |||
119 | #define BMP_COMPRESSION 0 /* BI_RGB */ | ||
120 | #define BMP_NUMCOLORS (1 << LCD_DEPTH) | ||
121 | #define BMP_BPP 1 | ||
122 | #define BMP_LINESIZE (((SIM_LCD_WIDTH + 31) / 32) * 4) | ||
123 | |||
124 | #define BMP_HEADERSIZE (54 + 4 * BMP_NUMCOLORS) | ||
125 | #define BMP_DATASIZE (BMP_LINESIZE * SIM_LCD_HEIGHT) | ||
126 | #define BMP_TOTALSIZE (BMP_HEADERSIZE + BMP_DATASIZE) | ||
127 | |||
128 | #define LE16_CONST(x) (x)&0xff, ((x)>>8)&0xff | ||
129 | #define LE32_CONST(x) (x)&0xff, ((x)>>8)&0xff, ((x)>>16)&0xff, ((x)>>24)&0xff | ||
130 | |||
131 | static const unsigned char bmpheader[] = | ||
132 | { | ||
133 | 0x42, 0x4d, /* 'BM' */ | ||
134 | LE32_CONST(BMP_TOTALSIZE), /* Total file size */ | ||
135 | 0x00, 0x00, 0x00, 0x00, /* Reserved */ | ||
136 | LE32_CONST(BMP_HEADERSIZE), /* Offset to start of pixel data */ | ||
137 | |||
138 | 0x28, 0x00, 0x00, 0x00, /* Size of (2nd) header */ | ||
139 | LE32_CONST(SIM_LCD_WIDTH), /* Width in pixels */ | ||
140 | LE32_CONST(SIM_LCD_HEIGHT), /* Height in pixels */ | ||
141 | 0x01, 0x00, /* Number of planes (always 1) */ | ||
142 | LE16_CONST(BMP_BPP), /* Bits per pixel 1/4/8/16/24 */ | ||
143 | LE32_CONST(BMP_COMPRESSION),/* Compression mode */ | ||
144 | LE32_CONST(BMP_DATASIZE), /* Size of bitmap data */ | ||
145 | 0xc4, 0x0e, 0x00, 0x00, /* Horizontal resolution (pixels/meter) */ | ||
146 | 0xc4, 0x0e, 0x00, 0x00, /* Vertical resolution (pixels/meter) */ | ||
147 | LE32_CONST(BMP_NUMCOLORS), /* Number of used colours */ | ||
148 | LE32_CONST(BMP_NUMCOLORS), /* Number of important colours */ | ||
149 | |||
150 | BMP_COLOR(LCD_BL_BRIGHTCOLOR), | ||
151 | BMP_COLOR(LCD_BL_DARKCOLOR) | ||
152 | }; | ||
153 | |||
154 | void screen_dump(void) | ||
155 | { | ||
156 | int fd; | ||
157 | char filename[MAX_PATH]; | ||
158 | int x, y; | ||
159 | static unsigned char line[BMP_LINESIZE]; | ||
160 | |||
161 | create_numbered_filename(filename, "", "dump_", ".bmp", 4 | ||
162 | IF_CNFN_NUM_(, NULL)); | ||
163 | DEBUGF("screen_dump\n"); | ||
164 | |||
165 | fd = sim_creat(filename, 0666); | ||
166 | if (fd < 0) | ||
167 | return; | ||
168 | |||
169 | write(fd, bmpheader, sizeof(bmpheader)); | ||
170 | SDL_LockSurface(lcd_surface); | ||
171 | |||
172 | /* BMP image goes bottom up */ | ||
173 | for (y = SIM_LCD_HEIGHT - 1; y >= 0; y--) | ||
174 | { | ||
175 | Uint8 *src = (Uint8 *)lcd_surface->pixels | ||
176 | + y * SIM_LCD_WIDTH * display_zoom * display_zoom; | ||
177 | unsigned char *dst = line; | ||
178 | unsigned dst_mask = 0x80; | ||
179 | |||
180 | memset(line, 0, sizeof(line)); | ||
181 | for (x = SIM_LCD_WIDTH; x > 0; x--) | ||
182 | { | ||
183 | if (*src) | ||
184 | *dst |= dst_mask; | ||
185 | src += display_zoom; | ||
186 | dst_mask >>= 1; | ||
187 | if (dst_mask == 0) | ||
188 | { | ||
189 | dst++; | ||
190 | dst_mask = 0x80; | ||
191 | } | ||
192 | } | ||
193 | write(fd, line, sizeof(line)); | ||
194 | } | ||
195 | SDL_UnlockSurface(lcd_surface); | ||
196 | close(fd); | ||
197 | } | ||
diff --git a/uisimulator/sdl/lcd-charcells.h b/uisimulator/sdl/lcd-charcells.h deleted file mode 100644 index 890594f766..0000000000 --- a/uisimulator/sdl/lcd-charcells.h +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef __LCDCHARCELL_H__ | ||
23 | #define __LCDCHARCELL_H__ | ||
24 | |||
25 | #include "lcd.h" | ||
26 | #include "SDL.h" | ||
27 | |||
28 | #ifdef HAVE_LCD_CHARCELLS | ||
29 | void sim_lcd_init(void); | ||
30 | void screen_dump(void); | ||
31 | #endif | ||
32 | |||
33 | #endif /* #ifndef __LCDCHARCELL_H__ */ | ||
34 | |||
diff --git a/uisimulator/sdl/lcd-remote-bitmap.c b/uisimulator/sdl/lcd-remote-bitmap.c deleted file mode 100644 index c44e476288..0000000000 --- a/uisimulator/sdl/lcd-remote-bitmap.c +++ /dev/null | |||
@@ -1,110 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "uisdl.h" | ||
23 | #include "lcd-sdl.h" | ||
24 | #include "lcd-remote-bitmap.h" | ||
25 | #include "screendump.h" | ||
26 | |||
27 | SDL_Surface *remote_surface = 0; | ||
28 | |||
29 | SDL_Color remote_bl_color_dark = {RED_CMP(LCD_REMOTE_BL_DARKCOLOR), | ||
30 | GREEN_CMP(LCD_REMOTE_BL_DARKCOLOR), | ||
31 | BLUE_CMP(LCD_REMOTE_BL_DARKCOLOR), 0}; | ||
32 | SDL_Color remote_bl_color_bright = {RED_CMP(LCD_REMOTE_BL_BRIGHTCOLOR), | ||
33 | GREEN_CMP(LCD_REMOTE_BL_BRIGHTCOLOR), | ||
34 | BLUE_CMP(LCD_REMOTE_BL_BRIGHTCOLOR), 0}; | ||
35 | SDL_Color remote_color_dark = {RED_CMP(LCD_REMOTE_DARKCOLOR), | ||
36 | GREEN_CMP(LCD_REMOTE_DARKCOLOR), | ||
37 | BLUE_CMP(LCD_REMOTE_DARKCOLOR), 0}; | ||
38 | SDL_Color remote_color_bright = {RED_CMP(LCD_REMOTE_BRIGHTCOLOR), | ||
39 | GREEN_CMP(LCD_REMOTE_BRIGHTCOLOR), | ||
40 | BLUE_CMP(LCD_REMOTE_BRIGHTCOLOR), 0}; | ||
41 | |||
42 | #define NUM_SHADES 129 | ||
43 | |||
44 | #if LCD_REMOTE_DEPTH == 2 | ||
45 | /* Only defined for positive, non-split LCD for now */ | ||
46 | static const unsigned char colorindex[4] = {128, 85, 43, 0}; | ||
47 | #endif | ||
48 | |||
49 | static unsigned long get_lcd_remote_pixel(int x, int y) | ||
50 | { | ||
51 | #if LCD_REMOTE_DEPTH == 1 | ||
52 | return lcd_remote_framebuffer[y/8][x] & (1 << (y & 7)) ? 0 : (NUM_SHADES-1); | ||
53 | #elif LCD_REMOTE_DEPTH == 2 | ||
54 | #if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED | ||
55 | unsigned bits = (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 0x0101; | ||
56 | return colorindex[(bits | (bits >> 7)) & 3]; | ||
57 | #endif | ||
58 | #endif | ||
59 | } | ||
60 | |||
61 | void lcd_remote_update (void) | ||
62 | { | ||
63 | lcd_remote_update_rect(0, 0, LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT); | ||
64 | } | ||
65 | |||
66 | void lcd_remote_update_rect(int x_start, int y_start, int width, int height) | ||
67 | { | ||
68 | if (remote_surface) | ||
69 | { | ||
70 | sdl_update_rect(remote_surface, x_start, y_start, width, height, | ||
71 | LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT, get_lcd_remote_pixel); | ||
72 | sdl_gui_update(remote_surface, x_start, y_start, width, height, | ||
73 | LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT, background ? UI_REMOTE_POSX : 0, | ||
74 | background ? UI_REMOTE_POSY : LCD_HEIGHT); | ||
75 | } | ||
76 | } | ||
77 | |||
78 | void sim_remote_backlight(int value) | ||
79 | { | ||
80 | if (remote_surface) | ||
81 | { | ||
82 | if (value > 0) | ||
83 | { | ||
84 | sdl_set_gradient(remote_surface, &remote_bl_color_dark, | ||
85 | &remote_bl_color_bright, 0, NUM_SHADES); | ||
86 | } | ||
87 | else | ||
88 | { | ||
89 | sdl_set_gradient(remote_surface, &remote_color_dark, | ||
90 | &remote_color_bright, 0, NUM_SHADES); | ||
91 | } | ||
92 | sdl_gui_update(remote_surface, 0, 0, LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT, | ||
93 | LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT, | ||
94 | background ? UI_REMOTE_POSX : 0, | ||
95 | background? UI_REMOTE_POSY : LCD_HEIGHT); | ||
96 | } | ||
97 | } | ||
98 | |||
99 | /* initialise simulator lcd remote driver */ | ||
100 | void sim_lcd_remote_init(void) | ||
101 | { | ||
102 | remote_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, | ||
103 | LCD_REMOTE_WIDTH * display_zoom, | ||
104 | LCD_REMOTE_HEIGHT * display_zoom, | ||
105 | 8, 0, 0, 0, 0); | ||
106 | |||
107 | sdl_set_gradient(remote_surface, &remote_bl_color_dark, | ||
108 | &remote_bl_color_bright, 0, NUM_SHADES); | ||
109 | } | ||
110 | |||
diff --git a/uisimulator/sdl/lcd-remote-bitmap.h b/uisimulator/sdl/lcd-remote-bitmap.h deleted file mode 100644 index 0a92ee6b79..0000000000 --- a/uisimulator/sdl/lcd-remote-bitmap.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef __LCDREMOTE_H__ | ||
23 | #define __LCDREMOTE_H__ | ||
24 | |||
25 | #include "lcd.h" | ||
26 | #include "lcd-remote.h" | ||
27 | #include "SDL.h" | ||
28 | |||
29 | void sim_lcd_remote_init(void); | ||
30 | |||
31 | #endif /* #ifndef __LCDREMOTE_H__ */ | ||
32 | |||
diff --git a/uisimulator/sdl/lcd-sdl.c b/uisimulator/sdl/lcd-sdl.c deleted file mode 100644 index f1ffe8a76a..0000000000 --- a/uisimulator/sdl/lcd-sdl.c +++ /dev/null | |||
@@ -1,112 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "lcd-sdl.h" | ||
23 | #include "uisdl.h" | ||
24 | #include "system.h" /* for MIN() and MAX() */ | ||
25 | |||
26 | int display_zoom = 1; | ||
27 | |||
28 | void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width, | ||
29 | int height, int max_x, int max_y, | ||
30 | unsigned long (*getpixel)(int, int)) | ||
31 | { | ||
32 | int x, y; | ||
33 | int xmax, ymax; | ||
34 | SDL_Rect dest; | ||
35 | |||
36 | ymax = y_start + height; | ||
37 | xmax = x_start + width; | ||
38 | |||
39 | if(xmax > max_x) | ||
40 | xmax = max_x; | ||
41 | if(ymax >= max_y) | ||
42 | ymax = max_y; | ||
43 | |||
44 | SDL_LockSurface(surface); | ||
45 | |||
46 | dest.w = display_zoom; | ||
47 | dest.h = display_zoom; | ||
48 | |||
49 | for (x = x_start; x < xmax; x++) { | ||
50 | dest.x = x * display_zoom; | ||
51 | |||
52 | #ifdef HAVE_LCD_SPLIT | ||
53 | for (y = y_start; y < MIN(ymax, LCD_SPLIT_POS); y++) { | ||
54 | dest.y = y * display_zoom; | ||
55 | |||
56 | SDL_FillRect(surface, &dest, (Uint32)(getpixel(x, y) | 0x80)); | ||
57 | } | ||
58 | for (y = MAX(y_start, LCD_SPLIT_POS); y < ymax; y++) { | ||
59 | dest.y = (y + LCD_SPLIT_LINES) * display_zoom ; | ||
60 | |||
61 | SDL_FillRect(surface, &dest, (Uint32)getpixel(x, y)); | ||
62 | } | ||
63 | #else | ||
64 | for (y = y_start; y < ymax; y++) { | ||
65 | dest.y = y * display_zoom; | ||
66 | |||
67 | SDL_FillRect(surface, &dest, (Uint32)getpixel(x, y)); | ||
68 | } | ||
69 | #endif | ||
70 | } | ||
71 | |||
72 | SDL_UnlockSurface(surface); | ||
73 | } | ||
74 | |||
75 | void sdl_gui_update(SDL_Surface *surface, int x_start, int y_start, int width, | ||
76 | int height, int max_x, int max_y, int ui_x, int ui_y) | ||
77 | { | ||
78 | if (x_start + width > max_x) | ||
79 | width = max_x - x_start; | ||
80 | if (y_start + height > max_y) | ||
81 | height = max_y - y_start; | ||
82 | |||
83 | SDL_Rect src = {x_start * display_zoom, y_start * display_zoom, | ||
84 | width * display_zoom, height * display_zoom}; | ||
85 | SDL_Rect dest= {(ui_x + x_start) * display_zoom, | ||
86 | (ui_y + y_start) * display_zoom, | ||
87 | width * display_zoom, height * display_zoom}; | ||
88 | |||
89 | if (surface->flags & SDL_SRCALPHA) /* alpha needs a black background */ | ||
90 | SDL_FillRect(gui_surface, &dest, 0); | ||
91 | |||
92 | SDL_BlitSurface(surface, &src, gui_surface, &dest); | ||
93 | |||
94 | SDL_Flip(gui_surface); | ||
95 | } | ||
96 | |||
97 | /* set a range of bitmap indices to a gradient from startcolour to endcolour */ | ||
98 | void sdl_set_gradient(SDL_Surface *surface, SDL_Color *start, SDL_Color *end, | ||
99 | int first, int steps) | ||
100 | { | ||
101 | int i; | ||
102 | SDL_Color palette[steps]; | ||
103 | |||
104 | for (i = 0; i < steps; i++) { | ||
105 | palette[i].r = start->r + (end->r - start->r) * i / (steps - 1); | ||
106 | palette[i].g = start->g + (end->g - start->g) * i / (steps - 1); | ||
107 | palette[i].b = start->b + (end->b - start->b) * i / (steps - 1); | ||
108 | } | ||
109 | |||
110 | SDL_SetPalette(surface, SDL_LOGPAL|SDL_PHYSPAL, palette, first, steps); | ||
111 | } | ||
112 | |||
diff --git a/uisimulator/sdl/lcd-sdl.h b/uisimulator/sdl/lcd-sdl.h deleted file mode 100644 index 9ffa5246cf..0000000000 --- a/uisimulator/sdl/lcd-sdl.h +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef __LCDSDL_H__ | ||
23 | #define __LCDSDL_H__ | ||
24 | |||
25 | #include "lcd.h" | ||
26 | #include "SDL.h" | ||
27 | |||
28 | /* Default display zoom level */ | ||
29 | extern int display_zoom; | ||
30 | |||
31 | void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width, | ||
32 | int height, int max_x, int max_y, | ||
33 | unsigned long (*getpixel)(int, int)); | ||
34 | |||
35 | void sdl_gui_update(SDL_Surface *surface, int x_start, int y_start, int width, | ||
36 | int height, int max_x, int max_y, int ui_x, int ui_y); | ||
37 | |||
38 | void sdl_set_gradient(SDL_Surface *surface, SDL_Color *start, SDL_Color *end, | ||
39 | int first, int steps); | ||
40 | |||
41 | #endif /* #ifndef __LCDSDL_H__ */ | ||
42 | |||
diff --git a/uisimulator/sdl/sound.c b/uisimulator/sdl/sound.c deleted file mode 100644 index 0f8d5d4934..0000000000 --- a/uisimulator/sdl/sound.c +++ /dev/null | |||
@@ -1,426 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2005 by Nick Lanham | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "autoconf.h" | ||
23 | |||
24 | #include <stdlib.h> | ||
25 | #include <stdbool.h> | ||
26 | #include <memory.h> | ||
27 | #include "kernel.h" | ||
28 | #include "sound.h" | ||
29 | #include "audiohw.h" | ||
30 | |||
31 | #include "pcm.h" | ||
32 | #include "pcm_sampr.h" | ||
33 | #include "SDL.h" | ||
34 | |||
35 | /*#define LOGF_ENABLE*/ | ||
36 | #include "logf.h" | ||
37 | |||
38 | static int sim_volume = 0; | ||
39 | |||
40 | #if CONFIG_CODEC == SWCODEC | ||
41 | static int cvt_status = -1; | ||
42 | |||
43 | static Uint8* pcm_data; | ||
44 | static size_t pcm_data_size; | ||
45 | static size_t pcm_sample_bytes; | ||
46 | static size_t pcm_channel_bytes; | ||
47 | |||
48 | static struct pcm_udata | ||
49 | { | ||
50 | Uint8 *stream; | ||
51 | Uint32 num_in; | ||
52 | Uint32 num_out; | ||
53 | FILE *debug; | ||
54 | } udata; | ||
55 | |||
56 | static SDL_AudioSpec obtained; | ||
57 | static SDL_AudioCVT cvt; | ||
58 | |||
59 | extern bool debug_audio; | ||
60 | |||
61 | #ifndef MIN | ||
62 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) | ||
63 | #endif | ||
64 | |||
65 | void pcm_play_lock(void) | ||
66 | { | ||
67 | SDL_LockAudio(); | ||
68 | } | ||
69 | |||
70 | void pcm_play_unlock(void) | ||
71 | { | ||
72 | SDL_UnlockAudio(); | ||
73 | } | ||
74 | |||
75 | static void pcm_dma_apply_settings_nolock(void) | ||
76 | { | ||
77 | cvt_status = SDL_BuildAudioCVT(&cvt, AUDIO_S16SYS, 2, pcm_sampr, | ||
78 | obtained.format, obtained.channels, obtained.freq); | ||
79 | |||
80 | if (cvt_status < 0) { | ||
81 | cvt.len_ratio = (double)obtained.freq / (double)pcm_sampr; | ||
82 | } | ||
83 | } | ||
84 | |||
85 | void pcm_dma_apply_settings(void) | ||
86 | { | ||
87 | pcm_play_lock(); | ||
88 | pcm_dma_apply_settings_nolock(); | ||
89 | pcm_play_unlock(); | ||
90 | } | ||
91 | |||
92 | void pcm_play_dma_start(const void *addr, size_t size) | ||
93 | { | ||
94 | pcm_dma_apply_settings_nolock(); | ||
95 | |||
96 | pcm_data = (Uint8 *) addr; | ||
97 | pcm_data_size = size; | ||
98 | |||
99 | SDL_PauseAudio(0); | ||
100 | } | ||
101 | |||
102 | void pcm_play_dma_stop(void) | ||
103 | { | ||
104 | SDL_PauseAudio(1); | ||
105 | if (udata.debug != NULL) { | ||
106 | fclose(udata.debug); | ||
107 | udata.debug = NULL; | ||
108 | DEBUGF("Audio debug file closed\n"); | ||
109 | } | ||
110 | } | ||
111 | |||
112 | void pcm_play_dma_pause(bool pause) | ||
113 | { | ||
114 | if (pause) | ||
115 | SDL_PauseAudio(1); | ||
116 | else | ||
117 | SDL_PauseAudio(0); | ||
118 | } | ||
119 | |||
120 | size_t pcm_get_bytes_waiting(void) | ||
121 | { | ||
122 | return pcm_data_size; | ||
123 | } | ||
124 | |||
125 | extern int sim_volume; /* in firmware/sound.c */ | ||
126 | static void write_to_soundcard(struct pcm_udata *udata) { | ||
127 | if (debug_audio && (udata->debug == NULL)) { | ||
128 | udata->debug = fopen("audiodebug.raw", "ab"); | ||
129 | DEBUGF("Audio debug file open\n"); | ||
130 | } | ||
131 | |||
132 | if (cvt.needed) { | ||
133 | Uint32 rd = udata->num_in; | ||
134 | Uint32 wr = (double)rd * cvt.len_ratio; | ||
135 | |||
136 | if (wr > udata->num_out) { | ||
137 | wr = udata->num_out; | ||
138 | rd = (double)wr / cvt.len_ratio; | ||
139 | |||
140 | if (rd > udata->num_in) | ||
141 | { | ||
142 | rd = udata->num_in; | ||
143 | wr = (double)rd * cvt.len_ratio; | ||
144 | } | ||
145 | } | ||
146 | |||
147 | if (wr == 0 || rd == 0) | ||
148 | { | ||
149 | udata->num_out = udata->num_in = 0; | ||
150 | return; | ||
151 | } | ||
152 | |||
153 | if (cvt_status > 0) { | ||
154 | cvt.len = rd * pcm_sample_bytes; | ||
155 | cvt.buf = (Uint8 *) malloc(cvt.len * cvt.len_mult); | ||
156 | |||
157 | memcpy(cvt.buf, pcm_data, cvt.len); | ||
158 | |||
159 | SDL_ConvertAudio(&cvt); | ||
160 | SDL_MixAudio(udata->stream, cvt.buf, cvt.len_cvt, sim_volume); | ||
161 | |||
162 | udata->num_in = cvt.len / pcm_sample_bytes; | ||
163 | udata->num_out = cvt.len_cvt / pcm_sample_bytes; | ||
164 | |||
165 | if (udata->debug != NULL) { | ||
166 | fwrite(cvt.buf, sizeof(Uint8), cvt.len_cvt, udata->debug); | ||
167 | } | ||
168 | |||
169 | free(cvt.buf); | ||
170 | } | ||
171 | else { | ||
172 | /* Convert is bad, so do silence */ | ||
173 | Uint32 num = wr*obtained.channels; | ||
174 | udata->num_in = rd; | ||
175 | udata->num_out = wr; | ||
176 | |||
177 | switch (pcm_channel_bytes) | ||
178 | { | ||
179 | case 1: | ||
180 | { | ||
181 | Uint8 *stream = udata->stream; | ||
182 | while (num-- > 0) | ||
183 | *stream++ = obtained.silence; | ||
184 | break; | ||
185 | } | ||
186 | case 2: | ||
187 | { | ||
188 | Uint16 *stream = (Uint16 *)udata->stream; | ||
189 | while (num-- > 0) | ||
190 | *stream++ = obtained.silence; | ||
191 | break; | ||
192 | } | ||
193 | } | ||
194 | |||
195 | if (udata->debug != NULL) { | ||
196 | fwrite(udata->stream, sizeof(Uint8), wr, udata->debug); | ||
197 | } | ||
198 | } | ||
199 | } else { | ||
200 | udata->num_in = udata->num_out = MIN(udata->num_in, udata->num_out); | ||
201 | SDL_MixAudio(udata->stream, pcm_data, | ||
202 | udata->num_out * pcm_sample_bytes, sim_volume); | ||
203 | |||
204 | if (udata->debug != NULL) { | ||
205 | fwrite(pcm_data, sizeof(Uint8), udata->num_out * pcm_sample_bytes, | ||
206 | udata->debug); | ||
207 | } | ||
208 | } | ||
209 | } | ||
210 | |||
211 | static void sdl_audio_callback(struct pcm_udata *udata, Uint8 *stream, int len) | ||
212 | { | ||
213 | logf("sdl_audio_callback: len %d, pcm %d\n", len, pcm_data_size); | ||
214 | udata->stream = stream; | ||
215 | |||
216 | /* Write what we have in the PCM buffer */ | ||
217 | if (pcm_data_size > 0) | ||
218 | goto start; | ||
219 | |||
220 | /* Audio card wants more? Get some more then. */ | ||
221 | while (len > 0) { | ||
222 | if ((ssize_t)pcm_data_size <= 0) { | ||
223 | pcm_data_size = 0; | ||
224 | if (pcm_callback_for_more) | ||
225 | pcm_callback_for_more(&pcm_data, &pcm_data_size); | ||
226 | } | ||
227 | |||
228 | if (pcm_data_size > 0) { | ||
229 | start: | ||
230 | udata->num_in = pcm_data_size / pcm_sample_bytes; | ||
231 | udata->num_out = len / pcm_sample_bytes; | ||
232 | |||
233 | write_to_soundcard(udata); | ||
234 | |||
235 | udata->num_in *= pcm_sample_bytes; | ||
236 | udata->num_out *= pcm_sample_bytes; | ||
237 | |||
238 | pcm_data += udata->num_in; | ||
239 | pcm_data_size -= udata->num_in; | ||
240 | udata->stream += udata->num_out; | ||
241 | len -= udata->num_out; | ||
242 | } else { | ||
243 | DEBUGF("sdl_audio_callback: No Data.\n"); | ||
244 | pcm_play_dma_stop(); | ||
245 | pcm_play_dma_stopped_callback(); | ||
246 | break; | ||
247 | } | ||
248 | } | ||
249 | } | ||
250 | |||
251 | const void * pcm_play_dma_get_peak_buffer(int *count) | ||
252 | { | ||
253 | uintptr_t addr = (uintptr_t)pcm_data; | ||
254 | *count = pcm_data_size / 4; | ||
255 | return (void *)((addr + 2) & ~3); | ||
256 | } | ||
257 | |||
258 | #ifdef HAVE_RECORDING | ||
259 | void pcm_rec_lock(void) | ||
260 | { | ||
261 | } | ||
262 | |||
263 | void pcm_rec_unlock(void) | ||
264 | { | ||
265 | } | ||
266 | |||
267 | void pcm_rec_dma_init(void) | ||
268 | { | ||
269 | } | ||
270 | |||
271 | void pcm_rec_dma_close(void) | ||
272 | { | ||
273 | } | ||
274 | |||
275 | void pcm_rec_dma_start(void *start, size_t size) | ||
276 | { | ||
277 | (void)start; | ||
278 | (void)size; | ||
279 | } | ||
280 | |||
281 | void pcm_rec_dma_stop(void) | ||
282 | { | ||
283 | } | ||
284 | |||
285 | void pcm_rec_dma_record_more(void *start, size_t size) | ||
286 | { | ||
287 | (void)start; | ||
288 | (void)size; | ||
289 | } | ||
290 | |||
291 | unsigned long pcm_rec_status(void) | ||
292 | { | ||
293 | return 0; | ||
294 | } | ||
295 | |||
296 | const void * pcm_rec_dma_get_peak_buffer(void) | ||
297 | { | ||
298 | return NULL; | ||
299 | } | ||
300 | |||
301 | #endif /* HAVE_RECORDING */ | ||
302 | |||
303 | void pcm_play_dma_init(void) | ||
304 | { | ||
305 | SDL_AudioSpec wanted_spec; | ||
306 | udata.debug = NULL; | ||
307 | |||
308 | if (debug_audio) { | ||
309 | udata.debug = fopen("audiodebug.raw", "wb"); | ||
310 | DEBUGF("Audio debug file open\n"); | ||
311 | } | ||
312 | |||
313 | /* Set 16-bit stereo audio at 44Khz */ | ||
314 | wanted_spec.freq = 44100; | ||
315 | wanted_spec.format = AUDIO_S16SYS; | ||
316 | wanted_spec.channels = 2; | ||
317 | wanted_spec.samples = 2048; | ||
318 | wanted_spec.callback = | ||
319 | (void (SDLCALL *)(void *userdata, | ||
320 | Uint8 *stream, int len))sdl_audio_callback; | ||
321 | wanted_spec.userdata = &udata; | ||
322 | |||
323 | /* Open the audio device and start playing sound! */ | ||
324 | if(SDL_OpenAudio(&wanted_spec, &obtained) < 0) { | ||
325 | fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); | ||
326 | return; | ||
327 | } | ||
328 | |||
329 | switch (obtained.format) | ||
330 | { | ||
331 | case AUDIO_U8: | ||
332 | case AUDIO_S8: | ||
333 | pcm_channel_bytes = 1; | ||
334 | break; | ||
335 | case AUDIO_U16LSB: | ||
336 | case AUDIO_S16LSB: | ||
337 | case AUDIO_U16MSB: | ||
338 | case AUDIO_S16MSB: | ||
339 | pcm_channel_bytes = 2; | ||
340 | break; | ||
341 | default: | ||
342 | fprintf(stderr, "Unknown sample format obtained: %u\n", | ||
343 | (unsigned)obtained.format); | ||
344 | return; | ||
345 | } | ||
346 | |||
347 | pcm_sample_bytes = obtained.channels * pcm_channel_bytes; | ||
348 | |||
349 | pcm_dma_apply_settings_nolock(); | ||
350 | } | ||
351 | |||
352 | void pcm_postinit(void) | ||
353 | { | ||
354 | } | ||
355 | |||
356 | #endif /* CONFIG_CODEC == SWCODEC */ | ||
357 | |||
358 | /** | ||
359 | * Audio Hardware api. Make them do nothing as we cannot properly simulate with | ||
360 | * SDL. if we used DSP we would run code that doesn't actually run on the target | ||
361 | **/ | ||
362 | void audiohw_set_volume(int volume) | ||
363 | { | ||
364 | sim_volume = SDL_MIX_MAXVOLUME * ((volume - VOLUME_MIN) / 10) / (VOLUME_RANGE / 10); | ||
365 | } | ||
366 | #if defined(AUDIOHW_HAVE_PRESCALER) | ||
367 | void audiohw_set_prescaler(int value) { (void)value; } | ||
368 | #endif | ||
369 | #if defined(AUDIOHW_HAVE_BALANCE) | ||
370 | void audiohw_set_balance(int value) { (void)value; } | ||
371 | #endif | ||
372 | #if defined(AUDIOHW_HAVE_BASS) | ||
373 | void audiohw_set_bass(int value) { (void)value; } | ||
374 | #endif | ||
375 | #if defined(AUDIOHW_HAVE_TREBLE) | ||
376 | void audiohw_set_treble(int value) { (void)value; } | ||
377 | #endif | ||
378 | #if CONFIG_CODEC != SWCODEC | ||
379 | void audiohw_set_channel(int value) { (void)value; } | ||
380 | void audiohw_set_stereo_width(int value){ (void)value; } | ||
381 | #endif | ||
382 | #if defined(AUDIOHW_HAVE_BASS_CUTOFF) | ||
383 | void audiohw_set_bass_cutoff(int value) { (void)value; } | ||
384 | #endif | ||
385 | #if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) | ||
386 | void audiohw_set_treble_cutoff(int value){ (void)value; } | ||
387 | #endif | ||
388 | /* EQ-based tone controls */ | ||
389 | #if defined(AUDIOHW_HAVE_EQ) | ||
390 | void audiohw_set_eq_band_gain(unsigned int band, int value) | ||
391 | { (void)band; (void)value; } | ||
392 | #endif | ||
393 | #if defined(AUDIOHW_HAVE_EQ_FREQUENCY) | ||
394 | void audiohw_set_eq_band_frequency(unsigned int band, int value) | ||
395 | { (void)band; (void)value; } | ||
396 | #endif | ||
397 | #if defined(AUDIOHW_HAVE_EQ_WIDTH) | ||
398 | void audiohw_set_eq_band_width(unsigned int band, int value) | ||
399 | { (void)band; (void)value; } | ||
400 | #endif | ||
401 | #if defined(AUDIOHW_HAVE_DEPTH_3D) | ||
402 | void audiohw_set_depth_3d(int value) | ||
403 | { (void)value; } | ||
404 | #endif | ||
405 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
406 | int mas_codec_readreg(int reg) | ||
407 | { | ||
408 | (void)reg; | ||
409 | return 0; | ||
410 | } | ||
411 | |||
412 | int mas_codec_writereg(int reg, unsigned int val) | ||
413 | { | ||
414 | (void)reg; | ||
415 | (void)val; | ||
416 | return 0; | ||
417 | } | ||
418 | int mas_writemem(int bank, int addr, const unsigned long* src, int len) | ||
419 | { | ||
420 | (void)bank; | ||
421 | (void)addr; | ||
422 | (void)src; | ||
423 | (void)len; | ||
424 | return 0; | ||
425 | } | ||
426 | #endif | ||
diff --git a/uisimulator/sdl/sound.h b/uisimulator/sdl/sound.h deleted file mode 100644 index 5f4cc6eaf0..0000000000 --- a/uisimulator/sdl/sound.h +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2005 by Daniel Stenberg <daniel@haxx.se> | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | int sound_playback_thread(void* p); | ||
23 | |||
24 | extern void (*sound_get_pcm)(unsigned char** start, long* size); | ||
diff --git a/uisimulator/sdl/system-sdl.h b/uisimulator/sdl/system-sdl.h deleted file mode 100644 index 04e033e330..0000000000 --- a/uisimulator/sdl/system-sdl.h +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2007 by Michael Sevakis | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #ifndef _SYSTEM_SDL_H_ | ||
22 | #define _SYSTEM_SDL_H_ | ||
23 | |||
24 | #include <stdbool.h> | ||
25 | |||
26 | #define HIGHEST_IRQ_LEVEL 1 | ||
27 | |||
28 | int set_irq_level(int level); | ||
29 | |||
30 | #define disable_irq() \ | ||
31 | ((void)set_irq_level(HIGHEST_IRQ_LEVEL)) | ||
32 | |||
33 | #define enable_irq() \ | ||
34 | ((void)set_irq_level(0)) | ||
35 | |||
36 | #define disable_irq_save() \ | ||
37 | set_irq_level(HIGHEST_IRQ_LEVEL) | ||
38 | |||
39 | #define restore_irq(level) \ | ||
40 | ((void)set_irq_level(level)) | ||
41 | |||
42 | void sim_enter_irq_handler(void); | ||
43 | void sim_exit_irq_handler(void); | ||
44 | bool sim_kernel_init(void); | ||
45 | void sim_kernel_shutdown(void); | ||
46 | |||
47 | extern long start_tick; | ||
48 | |||
49 | #endif /* _SYSTEM_SDL_H_ */ | ||
diff --git a/uisimulator/sdl/thread-sdl.c b/uisimulator/sdl/thread-sdl.c deleted file mode 100644 index e9b5fc205d..0000000000 --- a/uisimulator/sdl/thread-sdl.c +++ /dev/null | |||
@@ -1,649 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include <stdbool.h> | ||
23 | #include <time.h> | ||
24 | #include <SDL.h> | ||
25 | #include <SDL_thread.h> | ||
26 | #include <stdlib.h> | ||
27 | #include <memory.h> | ||
28 | #include <setjmp.h> | ||
29 | #include "system-sdl.h" | ||
30 | #include "thread-sdl.h" | ||
31 | #include "system.h" | ||
32 | #include "kernel.h" | ||
33 | #include "thread.h" | ||
34 | #include "debug.h" | ||
35 | |||
36 | /* Define this as 1 to show informational messages that are not errors. */ | ||
37 | #define THREAD_SDL_DEBUGF_ENABLED 0 | ||
38 | |||
39 | #if THREAD_SDL_DEBUGF_ENABLED | ||
40 | #define THREAD_SDL_DEBUGF(...) DEBUGF(__VA_ARGS__) | ||
41 | static char __name[32]; | ||
42 | #define THREAD_SDL_GET_NAME(thread) \ | ||
43 | ({ thread_get_name(__name, ARRAYLEN(__name), thread); __name; }) | ||
44 | #else | ||
45 | #define THREAD_SDL_DEBUGF(...) | ||
46 | #define THREAD_SDL_GET_NAME(thread) | ||
47 | #endif | ||
48 | |||
49 | #define THREAD_PANICF(str...) \ | ||
50 | ({ fprintf(stderr, str); exit(-1); }) | ||
51 | |||
52 | /* Thread/core entries as in rockbox core */ | ||
53 | static struct core_entry cores[NUM_CORES]; | ||
54 | struct thread_entry threads[MAXTHREADS]; | ||
55 | /* Jump buffers for graceful exit - kernel threads don't stay neatly | ||
56 | * in their start routines responding to messages so this is the only | ||
57 | * way to get them back in there so they may exit */ | ||
58 | static jmp_buf thread_jmpbufs[MAXTHREADS]; | ||
59 | static SDL_mutex *m; | ||
60 | static volatile bool threads_exit = false; | ||
61 | |||
62 | extern long start_tick; | ||
63 | |||
64 | void thread_sdl_shutdown(void) | ||
65 | { | ||
66 | int i; | ||
67 | |||
68 | /* Tell all threads jump back to their start routines, unlock and exit | ||
69 | gracefully - we'll check each one in turn for it's status. Threads | ||
70 | _could_ terminate via remove_thread or multiple threads could exit | ||
71 | on each unlock but that is safe. */ | ||
72 | |||
73 | /* Do this before trying to acquire lock */ | ||
74 | threads_exit = true; | ||
75 | |||
76 | /* Take control */ | ||
77 | SDL_LockMutex(m); | ||
78 | |||
79 | for (i = 0; i < MAXTHREADS; i++) | ||
80 | { | ||
81 | struct thread_entry *thread = &threads[i]; | ||
82 | if (thread->context.t != NULL) | ||
83 | { | ||
84 | /* Signal thread on delay or block */ | ||
85 | SDL_Thread *t = thread->context.t; | ||
86 | SDL_SemPost(thread->context.s); | ||
87 | SDL_UnlockMutex(m); | ||
88 | /* Wait for it to finish */ | ||
89 | SDL_WaitThread(t, NULL); | ||
90 | /* Relock for next thread signal */ | ||
91 | SDL_LockMutex(m); | ||
92 | } | ||
93 | } | ||
94 | |||
95 | SDL_UnlockMutex(m); | ||
96 | SDL_DestroyMutex(m); | ||
97 | } | ||
98 | |||
99 | static void new_thread_id(unsigned int slot_num, | ||
100 | struct thread_entry *thread) | ||
101 | { | ||
102 | unsigned int version = | ||
103 | (thread->id + (1u << THREAD_ID_VERSION_SHIFT)) | ||
104 | & THREAD_ID_VERSION_MASK; | ||
105 | |||
106 | if (version == 0) | ||
107 | version = 1u << THREAD_ID_VERSION_SHIFT; | ||
108 | |||
109 | thread->id = version | (slot_num & THREAD_ID_SLOT_MASK); | ||
110 | } | ||
111 | |||
112 | static struct thread_entry * find_empty_thread_slot(void) | ||
113 | { | ||
114 | struct thread_entry *thread = NULL; | ||
115 | int n; | ||
116 | |||
117 | for (n = 0; n < MAXTHREADS; n++) | ||
118 | { | ||
119 | int state = threads[n].state; | ||
120 | |||
121 | if (state == STATE_KILLED) | ||
122 | { | ||
123 | thread = &threads[n]; | ||
124 | break; | ||
125 | } | ||
126 | } | ||
127 | |||
128 | return thread; | ||
129 | } | ||
130 | |||
131 | /* Do main thread creation in this file scope to avoid the need to double- | ||
132 | return to a prior call-level which would be unaware of the fact setjmp | ||
133 | was used */ | ||
134 | extern void app_main(void *param); | ||
135 | static int thread_sdl_app_main(void *param) | ||
136 | { | ||
137 | SDL_LockMutex(m); | ||
138 | cores[CURRENT_CORE].running = &threads[0]; | ||
139 | |||
140 | /* Set the jump address for return */ | ||
141 | if (setjmp(thread_jmpbufs[0]) == 0) | ||
142 | { | ||
143 | app_main(param); | ||
144 | /* should not ever be reached but... */ | ||
145 | THREAD_PANICF("app_main returned!\n"); | ||
146 | } | ||
147 | |||
148 | /* Unlock and exit */ | ||
149 | SDL_UnlockMutex(m); | ||
150 | return 0; | ||
151 | } | ||
152 | |||
153 | /* Initialize SDL threading */ | ||
154 | bool thread_sdl_init(void *param) | ||
155 | { | ||
156 | struct thread_entry *thread; | ||
157 | int n; | ||
158 | |||
159 | memset(cores, 0, sizeof(cores)); | ||
160 | memset(threads, 0, sizeof(threads)); | ||
161 | |||
162 | m = SDL_CreateMutex(); | ||
163 | |||
164 | if (SDL_LockMutex(m) == -1) | ||
165 | { | ||
166 | fprintf(stderr, "Couldn't lock mutex\n"); | ||
167 | return false; | ||
168 | } | ||
169 | |||
170 | /* Initialize all IDs */ | ||
171 | for (n = 0; n < MAXTHREADS; n++) | ||
172 | threads[n].id = THREAD_ID_INIT(n); | ||
173 | |||
174 | /* Slot 0 is reserved for the main thread - initialize it here and | ||
175 | then create the SDL thread - it is possible to have a quick, early | ||
176 | shutdown try to access the structure. */ | ||
177 | thread = &threads[0]; | ||
178 | thread->stack = (uintptr_t *)" "; | ||
179 | thread->stack_size = 8; | ||
180 | thread->name = "main"; | ||
181 | thread->state = STATE_RUNNING; | ||
182 | thread->context.s = SDL_CreateSemaphore(0); | ||
183 | cores[CURRENT_CORE].running = thread; | ||
184 | |||
185 | if (thread->context.s == NULL) | ||
186 | { | ||
187 | fprintf(stderr, "Failed to create main semaphore\n"); | ||
188 | return false; | ||
189 | } | ||
190 | |||
191 | thread->context.t = SDL_CreateThread(thread_sdl_app_main, param); | ||
192 | |||
193 | if (thread->context.t == NULL) | ||
194 | { | ||
195 | SDL_DestroySemaphore(thread->context.s); | ||
196 | fprintf(stderr, "Failed to create main thread\n"); | ||
197 | return false; | ||
198 | } | ||
199 | |||
200 | THREAD_SDL_DEBUGF("Main thread: %p\n", thread); | ||
201 | |||
202 | SDL_UnlockMutex(m); | ||
203 | return true; | ||
204 | } | ||
205 | |||
206 | void thread_sdl_exception_wait(void) | ||
207 | { | ||
208 | while (1) | ||
209 | { | ||
210 | SDL_Delay(HZ/10); | ||
211 | if (threads_exit) | ||
212 | thread_exit(); | ||
213 | } | ||
214 | } | ||
215 | |||
216 | /* A way to yield and leave the threading system for extended periods */ | ||
217 | void thread_sdl_thread_lock(void *me) | ||
218 | { | ||
219 | SDL_LockMutex(m); | ||
220 | cores[CURRENT_CORE].running = (struct thread_entry *)me; | ||
221 | |||
222 | if (threads_exit) | ||
223 | thread_exit(); | ||
224 | } | ||
225 | |||
226 | void * thread_sdl_thread_unlock(void) | ||
227 | { | ||
228 | struct thread_entry *current = cores[CURRENT_CORE].running; | ||
229 | SDL_UnlockMutex(m); | ||
230 | return current; | ||
231 | } | ||
232 | |||
233 | struct thread_entry * thread_id_entry(unsigned int thread_id) | ||
234 | { | ||
235 | return (thread_id == THREAD_ID_CURRENT) ? | ||
236 | cores[CURRENT_CORE].running : | ||
237 | &threads[thread_id & THREAD_ID_SLOT_MASK]; | ||
238 | } | ||
239 | |||
240 | static void add_to_list_l(struct thread_entry **list, | ||
241 | struct thread_entry *thread) | ||
242 | { | ||
243 | if (*list == NULL) | ||
244 | { | ||
245 | /* Insert into unoccupied list */ | ||
246 | thread->l.next = thread; | ||
247 | thread->l.prev = thread; | ||
248 | *list = thread; | ||
249 | } | ||
250 | else | ||
251 | { | ||
252 | /* Insert last */ | ||
253 | thread->l.next = *list; | ||
254 | thread->l.prev = (*list)->l.prev; | ||
255 | thread->l.prev->l.next = thread; | ||
256 | (*list)->l.prev = thread; | ||
257 | } | ||
258 | } | ||
259 | |||
260 | static void remove_from_list_l(struct thread_entry **list, | ||
261 | struct thread_entry *thread) | ||
262 | { | ||
263 | if (thread == thread->l.next) | ||
264 | { | ||
265 | /* The only item */ | ||
266 | *list = NULL; | ||
267 | return; | ||
268 | } | ||
269 | |||
270 | if (thread == *list) | ||
271 | { | ||
272 | /* List becomes next item */ | ||
273 | *list = thread->l.next; | ||
274 | } | ||
275 | |||
276 | /* Fix links to jump over the removed entry. */ | ||
277 | thread->l.prev->l.next = thread->l.next; | ||
278 | thread->l.next->l.prev = thread->l.prev; | ||
279 | } | ||
280 | |||
281 | unsigned int thread_get_current(void) | ||
282 | { | ||
283 | return cores[CURRENT_CORE].running->id; | ||
284 | } | ||
285 | |||
286 | void switch_thread(void) | ||
287 | { | ||
288 | struct thread_entry *current = cores[CURRENT_CORE].running; | ||
289 | |||
290 | enable_irq(); | ||
291 | |||
292 | switch (current->state) | ||
293 | { | ||
294 | case STATE_RUNNING: | ||
295 | { | ||
296 | SDL_UnlockMutex(m); | ||
297 | /* Any other thread waiting already will get it first */ | ||
298 | SDL_LockMutex(m); | ||
299 | break; | ||
300 | } /* STATE_RUNNING: */ | ||
301 | |||
302 | case STATE_BLOCKED: | ||
303 | { | ||
304 | int oldlevel; | ||
305 | |||
306 | SDL_UnlockMutex(m); | ||
307 | SDL_SemWait(current->context.s); | ||
308 | SDL_LockMutex(m); | ||
309 | |||
310 | oldlevel = disable_irq_save(); | ||
311 | current->state = STATE_RUNNING; | ||
312 | restore_irq(oldlevel); | ||
313 | break; | ||
314 | } /* STATE_BLOCKED: */ | ||
315 | |||
316 | case STATE_BLOCKED_W_TMO: | ||
317 | { | ||
318 | int result, oldlevel; | ||
319 | |||
320 | SDL_UnlockMutex(m); | ||
321 | result = SDL_SemWaitTimeout(current->context.s, current->tmo_tick); | ||
322 | SDL_LockMutex(m); | ||
323 | |||
324 | oldlevel = disable_irq_save(); | ||
325 | |||
326 | if (current->state == STATE_BLOCKED_W_TMO) | ||
327 | { | ||
328 | /* Timed out */ | ||
329 | remove_from_list_l(current->bqp, current); | ||
330 | |||
331 | #ifdef HAVE_WAKEUP_EXT_CB | ||
332 | if (current->wakeup_ext_cb != NULL) | ||
333 | current->wakeup_ext_cb(current); | ||
334 | #endif | ||
335 | current->state = STATE_RUNNING; | ||
336 | } | ||
337 | |||
338 | if (result == SDL_MUTEX_TIMEDOUT) | ||
339 | { | ||
340 | /* Other signals from an explicit wake could have been made before | ||
341 | * arriving here if we timed out waiting for the semaphore. Make | ||
342 | * sure the count is reset. */ | ||
343 | while (SDL_SemValue(current->context.s) > 0) | ||
344 | SDL_SemTryWait(current->context.s); | ||
345 | } | ||
346 | |||
347 | restore_irq(oldlevel); | ||
348 | break; | ||
349 | } /* STATE_BLOCKED_W_TMO: */ | ||
350 | |||
351 | case STATE_SLEEPING: | ||
352 | { | ||
353 | SDL_UnlockMutex(m); | ||
354 | SDL_SemWaitTimeout(current->context.s, current->tmo_tick); | ||
355 | SDL_LockMutex(m); | ||
356 | current->state = STATE_RUNNING; | ||
357 | break; | ||
358 | } /* STATE_SLEEPING: */ | ||
359 | } | ||
360 | |||
361 | cores[CURRENT_CORE].running = current; | ||
362 | |||
363 | if (threads_exit) | ||
364 | thread_exit(); | ||
365 | } | ||
366 | |||
367 | void sleep_thread(int ticks) | ||
368 | { | ||
369 | struct thread_entry *current = cores[CURRENT_CORE].running; | ||
370 | int rem; | ||
371 | |||
372 | current->state = STATE_SLEEPING; | ||
373 | |||
374 | rem = (SDL_GetTicks() - start_tick) % (1000/HZ); | ||
375 | if (rem < 0) | ||
376 | rem = 0; | ||
377 | |||
378 | current->tmo_tick = (1000/HZ) * ticks + ((1000/HZ)-1) - rem; | ||
379 | } | ||
380 | |||
381 | void block_thread(struct thread_entry *current) | ||
382 | { | ||
383 | current->state = STATE_BLOCKED; | ||
384 | add_to_list_l(current->bqp, current); | ||
385 | } | ||
386 | |||
387 | void block_thread_w_tmo(struct thread_entry *current, int ticks) | ||
388 | { | ||
389 | current->state = STATE_BLOCKED_W_TMO; | ||
390 | current->tmo_tick = (1000/HZ)*ticks; | ||
391 | add_to_list_l(current->bqp, current); | ||
392 | } | ||
393 | |||
394 | unsigned int wakeup_thread(struct thread_entry **list) | ||
395 | { | ||
396 | struct thread_entry *thread = *list; | ||
397 | |||
398 | if (thread != NULL) | ||
399 | { | ||
400 | switch (thread->state) | ||
401 | { | ||
402 | case STATE_BLOCKED: | ||
403 | case STATE_BLOCKED_W_TMO: | ||
404 | remove_from_list_l(list, thread); | ||
405 | thread->state = STATE_RUNNING; | ||
406 | SDL_SemPost(thread->context.s); | ||
407 | return THREAD_OK; | ||
408 | } | ||
409 | } | ||
410 | |||
411 | return THREAD_NONE; | ||
412 | } | ||
413 | |||
414 | unsigned int thread_queue_wake(struct thread_entry **list) | ||
415 | { | ||
416 | unsigned int result = THREAD_NONE; | ||
417 | |||
418 | for (;;) | ||
419 | { | ||
420 | unsigned int rc = wakeup_thread(list); | ||
421 | |||
422 | if (rc == THREAD_NONE) | ||
423 | break; | ||
424 | |||
425 | result |= rc; | ||
426 | } | ||
427 | |||
428 | return result; | ||
429 | } | ||
430 | |||
431 | void thread_thaw(unsigned int thread_id) | ||
432 | { | ||
433 | struct thread_entry *thread = thread_id_entry(thread_id); | ||
434 | |||
435 | if (thread->id == thread_id && thread->state == STATE_FROZEN) | ||
436 | { | ||
437 | thread->state = STATE_RUNNING; | ||
438 | SDL_SemPost(thread->context.s); | ||
439 | } | ||
440 | } | ||
441 | |||
442 | int runthread(void *data) | ||
443 | { | ||
444 | struct thread_entry *current; | ||
445 | jmp_buf *current_jmpbuf; | ||
446 | |||
447 | /* Cannot access thread variables before locking the mutex as the | ||
448 | data structures may not be filled-in yet. */ | ||
449 | SDL_LockMutex(m); | ||
450 | cores[CURRENT_CORE].running = (struct thread_entry *)data; | ||
451 | current = cores[CURRENT_CORE].running; | ||
452 | current_jmpbuf = &thread_jmpbufs[current - threads]; | ||
453 | |||
454 | /* Setup jump for exit */ | ||
455 | if (setjmp(*current_jmpbuf) == 0) | ||
456 | { | ||
457 | /* Run the thread routine */ | ||
458 | if (current->state == STATE_FROZEN) | ||
459 | { | ||
460 | SDL_UnlockMutex(m); | ||
461 | SDL_SemWait(current->context.s); | ||
462 | SDL_LockMutex(m); | ||
463 | cores[CURRENT_CORE].running = current; | ||
464 | } | ||
465 | |||
466 | if (!threads_exit) | ||
467 | { | ||
468 | current->context.start(); | ||
469 | THREAD_SDL_DEBUGF("Thread Done: %d (%s)\n", | ||
470 | current - threads, THREAD_SDL_GET_NAME(current)); | ||
471 | /* Thread routine returned - suicide */ | ||
472 | } | ||
473 | |||
474 | thread_exit(); | ||
475 | } | ||
476 | else | ||
477 | { | ||
478 | /* Unlock and exit */ | ||
479 | SDL_UnlockMutex(m); | ||
480 | } | ||
481 | |||
482 | return 0; | ||
483 | } | ||
484 | |||
485 | unsigned int create_thread(void (*function)(void), | ||
486 | void* stack, size_t stack_size, | ||
487 | unsigned flags, const char *name) | ||
488 | { | ||
489 | struct thread_entry *thread; | ||
490 | SDL_Thread* t; | ||
491 | SDL_sem *s; | ||
492 | |||
493 | THREAD_SDL_DEBUGF("Creating thread: (%s)\n", name ? name : ""); | ||
494 | |||
495 | thread = find_empty_thread_slot(); | ||
496 | if (thread == NULL) | ||
497 | { | ||
498 | DEBUGF("Failed to find thread slot\n"); | ||
499 | return 0; | ||
500 | } | ||
501 | |||
502 | s = SDL_CreateSemaphore(0); | ||
503 | if (s == NULL) | ||
504 | { | ||
505 | DEBUGF("Failed to create semaphore\n"); | ||
506 | return 0; | ||
507 | } | ||
508 | |||
509 | t = SDL_CreateThread(runthread, thread); | ||
510 | if (t == NULL) | ||
511 | { | ||
512 | DEBUGF("Failed to create SDL thread\n"); | ||
513 | SDL_DestroySemaphore(s); | ||
514 | return 0; | ||
515 | } | ||
516 | |||
517 | thread->stack = stack; | ||
518 | thread->stack_size = stack_size; | ||
519 | thread->name = name; | ||
520 | thread->state = (flags & CREATE_THREAD_FROZEN) ? | ||
521 | STATE_FROZEN : STATE_RUNNING; | ||
522 | thread->context.start = function; | ||
523 | thread->context.t = t; | ||
524 | thread->context.s = s; | ||
525 | |||
526 | THREAD_SDL_DEBUGF("New Thread: %d (%s)\n", | ||
527 | thread - threads, THREAD_SDL_GET_NAME(thread)); | ||
528 | |||
529 | return thread->id; | ||
530 | } | ||
531 | |||
532 | void init_threads(void) | ||
533 | { | ||
534 | /* Main thread is already initialized */ | ||
535 | if (cores[CURRENT_CORE].running != &threads[0]) | ||
536 | { | ||
537 | THREAD_PANICF("Wrong main thread in init_threads: %p\n", | ||
538 | cores[CURRENT_CORE].running); | ||
539 | } | ||
540 | |||
541 | THREAD_SDL_DEBUGF("First Thread: %d (%s)\n", | ||
542 | 0, THREAD_SDL_GET_NAME(&threads[0])); | ||
543 | } | ||
544 | |||
545 | #ifndef ALLOW_REMOVE_THREAD | ||
546 | static void remove_thread(unsigned int thread_id) | ||
547 | #else | ||
548 | void remove_thread(unsigned int thread_id) | ||
549 | #endif | ||
550 | { | ||
551 | struct thread_entry *current = cores[CURRENT_CORE].running; | ||
552 | struct thread_entry *thread = thread_id_entry(thread_id); | ||
553 | |||
554 | SDL_Thread *t; | ||
555 | SDL_sem *s; | ||
556 | |||
557 | if (thread_id != THREAD_ID_CURRENT && thread->id != thread_id) | ||
558 | return; | ||
559 | |||
560 | int oldlevel = disable_irq_save(); | ||
561 | |||
562 | t = thread->context.t; | ||
563 | s = thread->context.s; | ||
564 | thread->context.t = NULL; | ||
565 | |||
566 | if (thread != current) | ||
567 | { | ||
568 | switch (thread->state) | ||
569 | { | ||
570 | case STATE_BLOCKED: | ||
571 | case STATE_BLOCKED_W_TMO: | ||
572 | /* Remove thread from object it's waiting on */ | ||
573 | remove_from_list_l(thread->bqp, thread); | ||
574 | |||
575 | #ifdef HAVE_WAKEUP_EXT_CB | ||
576 | if (thread->wakeup_ext_cb != NULL) | ||
577 | thread->wakeup_ext_cb(thread); | ||
578 | #endif | ||
579 | break; | ||
580 | } | ||
581 | |||
582 | SDL_SemPost(s); | ||
583 | } | ||
584 | |||
585 | THREAD_SDL_DEBUGF("Removing thread: %d (%s)\n", | ||
586 | thread - threads, THREAD_SDL_GET_NAME(thread)); | ||
587 | |||
588 | new_thread_id(thread->id, thread); | ||
589 | thread->state = STATE_KILLED; | ||
590 | thread_queue_wake(&thread->queue); | ||
591 | |||
592 | SDL_DestroySemaphore(s); | ||
593 | |||
594 | if (thread == current) | ||
595 | { | ||
596 | /* Do a graceful exit - perform the longjmp back into the thread | ||
597 | function to return */ | ||
598 | restore_irq(oldlevel); | ||
599 | longjmp(thread_jmpbufs[current - threads], 1); | ||
600 | } | ||
601 | |||
602 | SDL_KillThread(t); | ||
603 | restore_irq(oldlevel); | ||
604 | } | ||
605 | |||
606 | void thread_exit(void) | ||
607 | { | ||
608 | remove_thread(THREAD_ID_CURRENT); | ||
609 | } | ||
610 | |||
611 | void thread_wait(unsigned int thread_id) | ||
612 | { | ||
613 | struct thread_entry *current = cores[CURRENT_CORE].running; | ||
614 | struct thread_entry *thread = thread_id_entry(thread_id); | ||
615 | |||
616 | if (thread_id == THREAD_ID_CURRENT || | ||
617 | (thread->id == thread_id && thread->state != STATE_KILLED)) | ||
618 | { | ||
619 | current->bqp = &thread->queue; | ||
620 | block_thread(current); | ||
621 | switch_thread(); | ||
622 | } | ||
623 | } | ||
624 | |||
625 | int thread_stack_usage(const struct thread_entry *thread) | ||
626 | { | ||
627 | return 50; | ||
628 | (void)thread; | ||
629 | } | ||
630 | |||
631 | /* Return name if one or ID if none */ | ||
632 | void thread_get_name(char *buffer, int size, | ||
633 | struct thread_entry *thread) | ||
634 | { | ||
635 | if (size <= 0) | ||
636 | return; | ||
637 | |||
638 | *buffer = '\0'; | ||
639 | |||
640 | if (thread) | ||
641 | { | ||
642 | /* Display thread name if one or ID if none */ | ||
643 | bool named = thread->name && *thread->name; | ||
644 | const char *fmt = named ? "%s" : "%08lX"; | ||
645 | intptr_t name = named ? | ||
646 | (intptr_t)thread->name : (intptr_t)thread; | ||
647 | snprintf(buffer, size, fmt, name); | ||
648 | } | ||
649 | } | ||
diff --git a/uisimulator/sdl/thread-sdl.h b/uisimulator/sdl/thread-sdl.h deleted file mode 100644 index f221aa5a72..0000000000 --- a/uisimulator/sdl/thread-sdl.h +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef __THREADSDL_H__ | ||
23 | #define __THREADSDL_H__ | ||
24 | |||
25 | #include "SDL_thread.h" | ||
26 | |||
27 | extern SDL_Thread *gui_thread; /* The "main" thread */ | ||
28 | void thread_sdl_thread_lock(void *me); | ||
29 | void * thread_sdl_thread_unlock(void); | ||
30 | void thread_sdl_exception_wait(void); | ||
31 | bool thread_sdl_init(void *param); /* Init the sim threading API - thread created calls app_main */ | ||
32 | void thread_sdl_shutdown(void); /* Shut down all kernel threads gracefully */ | ||
33 | void thread_sdl_lock(void); /* Sync with SDL threads */ | ||
34 | void thread_sdl_unlock(void); /* Sync with SDL threads */ | ||
35 | |||
36 | #endif /* #ifndef __THREADSDL_H__ */ | ||
37 | |||
diff --git a/uisimulator/sdl/timefuncs.h b/uisimulator/sdl/timefuncs.h deleted file mode 100644 index de17fcdc73..0000000000 --- a/uisimulator/sdl/timefuncs.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #include <time.h> | ||
2 | #include <stdbool.h> | ||
3 | |||
4 | /* struct tm defined */ | ||
5 | struct tm *get_time(void); | ||
6 | int set_time(const struct tm *tm); | ||
7 | bool valid_time(const struct tm *tm); | ||
diff --git a/uisimulator/sdl/timer.c b/uisimulator/sdl/timer.c deleted file mode 100644 index 369aeab929..0000000000 --- a/uisimulator/sdl/timer.c +++ /dev/null | |||
@@ -1,61 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id: timer.h 13806 2007-07-06 21:36:32Z jethead71 $ | ||
9 | * | ||
10 | * Copyright (C) 2005 Kévin Ferrare | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "timer.h" | ||
23 | #include <SDL_timer.h> | ||
24 | |||
25 | static int timer_prio = -1; | ||
26 | void (*global_timer_callback)(void); | ||
27 | SDL_TimerID timerId; | ||
28 | |||
29 | Uint32 SDL_timer_callback(Uint32 interval, void *param){ | ||
30 | (void)param; | ||
31 | global_timer_callback(); | ||
32 | return(interval); | ||
33 | } | ||
34 | |||
35 | #define cycles_to_miliseconds(cycles) \ | ||
36 | ((int)((1000*cycles)/TIMER_FREQ)) | ||
37 | |||
38 | bool timer_register(int reg_prio, void (*unregister_callback)(void), | ||
39 | long cycles, void (*timer_callback)(void)) | ||
40 | { | ||
41 | (void)unregister_callback; | ||
42 | if (reg_prio <= timer_prio || cycles == 0) | ||
43 | return false; | ||
44 | timer_prio=reg_prio; | ||
45 | global_timer_callback=timer_callback; | ||
46 | timerId=SDL_AddTimer(cycles_to_miliseconds(cycles), SDL_timer_callback, 0); | ||
47 | return true; | ||
48 | } | ||
49 | |||
50 | bool timer_set_period(long cycles) | ||
51 | { | ||
52 | SDL_RemoveTimer (timerId); | ||
53 | timerId=SDL_AddTimer(cycles_to_miliseconds(cycles), SDL_timer_callback, 0); | ||
54 | return true; | ||
55 | } | ||
56 | |||
57 | void timer_unregister(void) | ||
58 | { | ||
59 | SDL_RemoveTimer (timerId); | ||
60 | timer_prio = -1; | ||
61 | } | ||
diff --git a/uisimulator/sdl/uisdl.c b/uisimulator/sdl/uisdl.c deleted file mode 100644 index 8cf4b42ba0..0000000000 --- a/uisimulator/sdl/uisdl.c +++ /dev/null | |||
@@ -1,368 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 by Daniel Everton <dan@iocaine.org> | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include <stdlib.h> | ||
23 | #include <string.h> | ||
24 | #include <setjmp.h> | ||
25 | #include "autoconf.h" | ||
26 | #include "button.h" | ||
27 | #include "system-sdl.h" | ||
28 | #include "thread.h" | ||
29 | #include "kernel.h" | ||
30 | #include "uisdl.h" | ||
31 | #include "lcd-sdl.h" | ||
32 | #ifdef HAVE_LCD_BITMAP | ||
33 | #include "lcd-bitmap.h" | ||
34 | #elif defined(HAVE_LCD_CHARCELLS) | ||
35 | #include "lcd-charcells.h" | ||
36 | #endif | ||
37 | #ifdef HAVE_REMOTE_LCD | ||
38 | #include "lcd-remote-bitmap.h" | ||
39 | #endif | ||
40 | #include "thread-sdl.h" | ||
41 | #include "SDL_mutex.h" | ||
42 | #include "SDL_thread.h" | ||
43 | #include "math.h" | ||
44 | |||
45 | |||
46 | /* extern functions */ | ||
47 | extern void new_key(int key); | ||
48 | extern int xy2button( int x, int y); | ||
49 | void button_event(int key, bool pressed); | ||
50 | |||
51 | SDL_Surface *gui_surface; | ||
52 | bool background = true; /* use backgrounds by default */ | ||
53 | #ifdef HAVE_REMOTE_LCD | ||
54 | static bool showremote = true; /* include remote by default */ | ||
55 | #endif | ||
56 | bool mapping = false; | ||
57 | bool debug_buttons = false; | ||
58 | |||
59 | bool lcd_display_redraw = true; /* Used for player simulator */ | ||
60 | char having_new_lcd = true; /* Used for player simulator */ | ||
61 | bool sim_alarm_wakeup = false; | ||
62 | const char *sim_root_dir = NULL; | ||
63 | |||
64 | bool debug_audio = false; | ||
65 | |||
66 | bool debug_wps = false; | ||
67 | int wps_verbose_level = 3; | ||
68 | |||
69 | |||
70 | void irq_button_event(int key, bool pressed) { | ||
71 | sim_enter_irq_handler(); | ||
72 | button_event( key, pressed ); | ||
73 | sim_exit_irq_handler(); | ||
74 | } | ||
75 | |||
76 | int sqr( int a ) { | ||
77 | return a*a; | ||
78 | } | ||
79 | |||
80 | void gui_message_loop(void) | ||
81 | { | ||
82 | SDL_Event event; | ||
83 | bool done = false; | ||
84 | static int x,y,xybutton = 0; | ||
85 | |||
86 | while(!done && SDL_WaitEvent(&event)) | ||
87 | { | ||
88 | switch(event.type) | ||
89 | { | ||
90 | case SDL_KEYDOWN: | ||
91 | irq_button_event(event.key.keysym.sym, true); | ||
92 | break; | ||
93 | case SDL_KEYUP: | ||
94 | irq_button_event(event.key.keysym.sym, false); | ||
95 | case SDL_MOUSEBUTTONDOWN: | ||
96 | switch ( event.button.button ) { | ||
97 | #ifdef HAVE_SCROLLWHEEL | ||
98 | case SDL_BUTTON_WHEELUP: | ||
99 | irq_button_event( SDLK_UP, true ); | ||
100 | break; | ||
101 | case SDL_BUTTON_WHEELDOWN: | ||
102 | irq_button_event( SDLK_DOWN, true ); | ||
103 | break; | ||
104 | #endif | ||
105 | case SDL_BUTTON_LEFT: | ||
106 | case SDL_BUTTON_MIDDLE: | ||
107 | if ( mapping && background ) { | ||
108 | x = event.button.x; | ||
109 | y = event.button.y; | ||
110 | } | ||
111 | if ( background ) { | ||
112 | xybutton = xy2button( event.button.x, event.button.y ); | ||
113 | if( xybutton ) | ||
114 | irq_button_event( xybutton, true ); | ||
115 | } | ||
116 | break; | ||
117 | default: | ||
118 | break; | ||
119 | } | ||
120 | |||
121 | if (debug_wps && event.button.button == 1) | ||
122 | { | ||
123 | if ( background ) | ||
124 | #ifdef HAVE_REMOTE | ||
125 | if ( event.button.y < UI_REMOTE_POSY ) /* Main Screen */ | ||
126 | printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); | ||
127 | else | ||
128 | printf("Mouse at: (%d, %d)\n", event.button.x - UI_REMOTE_POSX -1 , event.button.y - UI_REMOTE_POSY - 1 ); | ||
129 | #else | ||
130 | printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 ); | ||
131 | #endif | ||
132 | else | ||
133 | if ( event.button.y/display_zoom < LCD_HEIGHT ) /* Main Screen */ | ||
134 | printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom ); | ||
135 | #ifdef HAVE_REMOTE | ||
136 | else | ||
137 | printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom - LCD_HEIGHT ); | ||
138 | #endif | ||
139 | } | ||
140 | break; | ||
141 | case SDL_MOUSEBUTTONUP: | ||
142 | switch ( event.button.button ) { | ||
143 | /* The scrollwheel button up events are ignored as they are queued immediately */ | ||
144 | case SDL_BUTTON_LEFT: | ||
145 | case SDL_BUTTON_MIDDLE: | ||
146 | if ( mapping && background ) { | ||
147 | printf(" { SDLK_, %d, %d, %d, \"\" },\n", x, y, (int)sqrt( sqr(x-(int)event.button.x) + sqr(y-(int)event.button.y)) ); | ||
148 | } | ||
149 | if ( background && xybutton ) { | ||
150 | irq_button_event( xybutton, false ); | ||
151 | xybutton = 0; | ||
152 | } | ||
153 | #ifdef HAVE_TOUCHSCREEN | ||
154 | else { | ||
155 | irq_button_event(BUTTON_TOUCHSCREEN, false); | ||
156 | } | ||
157 | #endif | ||
158 | break; | ||
159 | default: | ||
160 | break; | ||
161 | } | ||
162 | break; | ||
163 | |||
164 | |||
165 | case SDL_QUIT: | ||
166 | done = true; | ||
167 | break; | ||
168 | default: | ||
169 | /*printf("Unhandled event\n"); */ | ||
170 | break; | ||
171 | } | ||
172 | } | ||
173 | } | ||
174 | |||
175 | bool gui_startup(void) | ||
176 | { | ||
177 | SDL_Surface *picture_surface; | ||
178 | int width, height; | ||
179 | |||
180 | if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER)) { | ||
181 | fprintf(stderr, "fatal: %s\n", SDL_GetError()); | ||
182 | return false; | ||
183 | } | ||
184 | |||
185 | atexit(SDL_Quit); | ||
186 | |||
187 | /* Try and load the background image. If it fails go without */ | ||
188 | if (background) { | ||
189 | picture_surface = SDL_LoadBMP("UI256.bmp"); | ||
190 | if (picture_surface == NULL) { | ||
191 | background = false; | ||
192 | fprintf(stderr, "warn: %s\n", SDL_GetError()); | ||
193 | } | ||
194 | } | ||
195 | |||
196 | /* Set things up */ | ||
197 | if (background) | ||
198 | { | ||
199 | width = UI_WIDTH; | ||
200 | height = UI_HEIGHT; | ||
201 | } | ||
202 | else | ||
203 | { | ||
204 | #ifdef HAVE_REMOTE_LCD | ||
205 | if (showremote) | ||
206 | { | ||
207 | width = SIM_LCD_WIDTH > SIM_REMOTE_WIDTH ? SIM_LCD_WIDTH : SIM_REMOTE_WIDTH; | ||
208 | height = SIM_LCD_HEIGHT + SIM_REMOTE_HEIGHT; | ||
209 | } | ||
210 | else | ||
211 | #endif | ||
212 | { | ||
213 | width = SIM_LCD_WIDTH; | ||
214 | height = SIM_LCD_HEIGHT; | ||
215 | } | ||
216 | } | ||
217 | |||
218 | |||
219 | if ((gui_surface = SDL_SetVideoMode(width * display_zoom, height * display_zoom, 24, SDL_HWSURFACE|SDL_DOUBLEBUF)) == NULL) { | ||
220 | fprintf(stderr, "fatal: %s\n", SDL_GetError()); | ||
221 | return false; | ||
222 | } | ||
223 | |||
224 | SDL_WM_SetCaption(UI_TITLE, NULL); | ||
225 | |||
226 | sim_lcd_init(); | ||
227 | #ifdef HAVE_REMOTE_LCD | ||
228 | if (showremote) | ||
229 | sim_lcd_remote_init(); | ||
230 | #endif | ||
231 | |||
232 | SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); | ||
233 | |||
234 | if (background && picture_surface != NULL) { | ||
235 | SDL_BlitSurface(picture_surface, NULL, gui_surface, NULL); | ||
236 | SDL_UpdateRect(gui_surface, 0, 0, 0, 0); | ||
237 | } | ||
238 | |||
239 | return true; | ||
240 | } | ||
241 | |||
242 | bool gui_shutdown(void) | ||
243 | { | ||
244 | /* Order here is relevent to prevent deadlocks and use of destroyed | ||
245 | sync primitives by kernel threads */ | ||
246 | thread_sdl_shutdown(); | ||
247 | sim_kernel_shutdown(); | ||
248 | return true; | ||
249 | } | ||
250 | |||
251 | #if defined(WIN32) && defined(main) | ||
252 | /* Don't use SDL_main on windows -> no more stdio redirection */ | ||
253 | #undef main | ||
254 | #endif | ||
255 | |||
256 | int main(int argc, char *argv[]) | ||
257 | { | ||
258 | if (argc >= 1) | ||
259 | { | ||
260 | int x; | ||
261 | for (x = 1; x < argc; x++) | ||
262 | { | ||
263 | if (!strcmp("--debugaudio", argv[x])) | ||
264 | { | ||
265 | debug_audio = true; | ||
266 | printf("Writing debug audio file.\n"); | ||
267 | } | ||
268 | else if (!strcmp("--debugwps", argv[x])) | ||
269 | { | ||
270 | debug_wps = true; | ||
271 | printf("WPS debug mode enabled.\n"); | ||
272 | } | ||
273 | else if (!strcmp("--nobackground", argv[x])) | ||
274 | { | ||
275 | background = false; | ||
276 | printf("Disabling background image.\n"); | ||
277 | } | ||
278 | #ifdef HAVE_REMOTE_LCD | ||
279 | else if (!strcmp("--noremote", argv[x])) | ||
280 | { | ||
281 | showremote = false; | ||
282 | background = false; | ||
283 | printf("Disabling remote image.\n"); | ||
284 | } | ||
285 | #endif | ||
286 | else if (!strcmp("--old_lcd", argv[x])) | ||
287 | { | ||
288 | having_new_lcd = false; | ||
289 | printf("Using old LCD layout.\n"); | ||
290 | } | ||
291 | else if (!strcmp("--zoom", argv[x])) | ||
292 | { | ||
293 | x++; | ||
294 | if(x < argc) | ||
295 | display_zoom=atoi(argv[x]); | ||
296 | else | ||
297 | display_zoom = 2; | ||
298 | printf("Window zoom is %d\n", display_zoom); | ||
299 | } | ||
300 | else if (!strcmp("--alarm", argv[x])) | ||
301 | { | ||
302 | sim_alarm_wakeup = true; | ||
303 | printf("Simulating alarm wakeup.\n"); | ||
304 | } | ||
305 | else if (!strcmp("--root", argv[x])) | ||
306 | { | ||
307 | x++; | ||
308 | if (x < argc) | ||
309 | { | ||
310 | sim_root_dir = argv[x]; | ||
311 | printf("Root directory: %s\n", sim_root_dir); | ||
312 | } | ||
313 | } | ||
314 | else if (!strcmp("--mapping", argv[x])) | ||
315 | { | ||
316 | mapping = true; | ||
317 | printf("Printing click coords with drag radii.\n"); | ||
318 | } | ||
319 | else if (!strcmp("--debugbuttons", argv[x])) | ||
320 | { | ||
321 | debug_buttons = true; | ||
322 | printf("Printing background button clicks.\n"); | ||
323 | } | ||
324 | else | ||
325 | { | ||
326 | printf("rockboxui\n"); | ||
327 | printf("Arguments:\n"); | ||
328 | printf(" --debugaudio \t Write raw PCM data to audiodebug.raw\n"); | ||
329 | printf(" --debugwps \t Print advanced WPS debug info\n"); | ||
330 | printf(" --nobackground \t Disable the background image\n"); | ||
331 | #ifdef HAVE_REMOTE_LCD | ||
332 | printf(" --noremote \t Disable the remote image (will disable backgrounds)\n"); | ||
333 | #endif | ||
334 | printf(" --old_lcd \t [Player] simulate old playermodel (ROM version<4.51)\n"); | ||
335 | printf(" --zoom [VAL]\t Window zoom (will disable backgrounds)\n"); | ||
336 | printf(" --alarm \t Simulate a wake-up on alarm\n"); | ||
337 | printf(" --root [DIR]\t Set root directory\n"); | ||
338 | printf(" --mapping \t Output coordinates and radius for mapping backgrounds\n"); | ||
339 | exit(0); | ||
340 | } | ||
341 | } | ||
342 | } | ||
343 | |||
344 | if (display_zoom > 1) { | ||
345 | background = false; | ||
346 | } | ||
347 | |||
348 | if (!sim_kernel_init()) { | ||
349 | fprintf(stderr, "sim_kernel_init failed\n"); | ||
350 | return -1; | ||
351 | } | ||
352 | |||
353 | if (!gui_startup()) { | ||
354 | fprintf(stderr, "gui_startup failed\n"); | ||
355 | return -1; | ||
356 | } | ||
357 | |||
358 | /* app_main will be called by the new main thread */ | ||
359 | if (!thread_sdl_init(NULL)) { | ||
360 | fprintf(stderr, "thread_sdl_init failed\n"); | ||
361 | return -1; | ||
362 | } | ||
363 | |||
364 | gui_message_loop(); | ||
365 | |||
366 | return gui_shutdown(); | ||
367 | } | ||
368 | |||
diff --git a/uisimulator/sdl/uisdl.h b/uisimulator/sdl/uisdl.h deleted file mode 100644 index dac84ffb74..0000000000 --- a/uisimulator/sdl/uisdl.h +++ /dev/null | |||
@@ -1,408 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Dan Everton | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef __UISDL_H__ | ||
23 | #define __UISDL_H__ | ||
24 | |||
25 | #include <stdbool.h> | ||
26 | #include "SDL.h" | ||
27 | #include "config.h" | ||
28 | |||
29 | /* colour definitions are R, G, B */ | ||
30 | |||
31 | #if defined(ARCHOS_RECORDER) | ||
32 | #define UI_TITLE "Jukebox Recorder" | ||
33 | #define UI_WIDTH 270 /* width of GUI window */ | ||
34 | #define UI_HEIGHT 406 /* height of GUI window */ | ||
35 | #define UI_LCD_POSX 80 /* x position of lcd */ | ||
36 | #define UI_LCD_POSY 104 /* y position of lcd */ | ||
37 | |||
38 | #elif defined(ARCHOS_PLAYER) | ||
39 | #define UI_TITLE "Jukebox Player" | ||
40 | #define UI_WIDTH 284 /* width of GUI window */ | ||
41 | #define UI_HEIGHT 420 /* height of GUI window */ | ||
42 | #define UI_LCD_POSX 75 /* x position of lcd */ | ||
43 | #define UI_LCD_POSY 116 /* y position of lcd */ | ||
44 | |||
45 | #elif defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) | ||
46 | #define UI_TITLE "Jukebox FM Recorder" | ||
47 | #define UI_WIDTH 285 /* width of GUI window */ | ||
48 | #define UI_HEIGHT 414 /* height of GUI window */ | ||
49 | #define UI_LCD_POSX 87 /* x position of lcd */ | ||
50 | #define UI_LCD_POSY 77 /* y position of lcd */ | ||
51 | |||
52 | #elif defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM) | ||
53 | #define UI_TITLE "Ondio" | ||
54 | #define UI_WIDTH 155 /* width of GUI window */ | ||
55 | #define UI_HEIGHT 334 /* height of GUI window */ | ||
56 | #define UI_LCD_POSX 21 /* x position of lcd */ | ||
57 | #define UI_LCD_POSY 82 /* y position of lcd */ | ||
58 | |||
59 | #elif defined(IRIVER_H120) || defined(IRIVER_H100) | ||
60 | #define UI_TITLE "iriver H1x0" | ||
61 | #define UI_WIDTH 379 /* width of GUI window */ | ||
62 | #define UI_HEIGHT 508 /* height of GUI window */ | ||
63 | #define UI_LCD_POSX 109 /* x position of lcd */ | ||
64 | #define UI_LCD_POSY 23 /* y position of lcd */ | ||
65 | #define UI_REMOTE_POSX 50 /* x position of remote lcd */ | ||
66 | #define UI_REMOTE_POSY 403 /* y position of remote lcd */ | ||
67 | |||
68 | #elif defined(IRIVER_H300) | ||
69 | #define UI_TITLE "iriver H300" | ||
70 | #define UI_WIDTH 288 /* width of GUI window */ | ||
71 | #define UI_HEIGHT 581 /* height of GUI window */ | ||
72 | #define UI_LCD_POSX 26 /* x position of lcd */ | ||
73 | #define UI_LCD_POSY 36 /* y position of lcd */ | ||
74 | #define UI_REMOTE_POSX 12 /* x position of remote lcd */ | ||
75 | #define UI_REMOTE_POSY 478 /* y position of remote lcd */ | ||
76 | |||
77 | #elif defined(IPOD_1G2G) | ||
78 | #define UI_TITLE "iPod 1G/2G" | ||
79 | #define UI_WIDTH 224 /* width of GUI window */ | ||
80 | #define UI_HEIGHT 382 /* height of GUI window */ | ||
81 | #define UI_LCD_POSX 32 /* x position of lcd */ | ||
82 | #define UI_LCD_POSY 12 /* y position of lcd */ | ||
83 | |||
84 | #elif defined(IPOD_3G) | ||
85 | #define UI_TITLE "iPod 3G" | ||
86 | #define UI_WIDTH 218 /* width of GUI window */ | ||
87 | #define UI_HEIGHT 389 /* height of GUI window */ | ||
88 | #define UI_LCD_POSX 29 /* x position of lcd */ | ||
89 | #define UI_LCD_POSY 16 /* y position of lcd */ | ||
90 | |||
91 | #elif defined(IPOD_4G) | ||
92 | #define UI_TITLE "iPod 4G" | ||
93 | #define UI_WIDTH 196 /* width of GUI window */ | ||
94 | #define UI_HEIGHT 370 /* height of GUI window */ | ||
95 | #define UI_LCD_POSX 19 /* x position of lcd */ | ||
96 | #define UI_LCD_POSY 14 /* y position of lcd */ | ||
97 | |||
98 | #elif defined(IPOD_MINI) || defined(IPOD_MINI2G) | ||
99 | #define UI_TITLE "iPod mini" | ||
100 | #define UI_WIDTH 191 /* width of GUI window */ | ||
101 | #define UI_HEIGHT 365 /* height of GUI window */ | ||
102 | #define UI_LCD_POSX 24 /* x position of lcd */ | ||
103 | #define UI_LCD_POSY 17 /* y position of lcd */ | ||
104 | |||
105 | #elif defined(IPOD_COLOR) | ||
106 | #define UI_TITLE "iPod Color" | ||
107 | #define UI_WIDTH 261 /* width of GUI window */ | ||
108 | #define UI_HEIGHT 493 /* height of GUI window */ | ||
109 | #define UI_LCD_POSX 21 /* x position of lcd */ | ||
110 | #define UI_LCD_POSY 16 /* y position of lcd */ | ||
111 | |||
112 | #elif defined(IPOD_NANO) | ||
113 | #define UI_TITLE "iPod Nano" | ||
114 | #define UI_WIDTH 199 /* width of GUI window */ | ||
115 | #define UI_HEIGHT 421 /* height of GUI window */ | ||
116 | #define UI_LCD_POSX 13 /* x position of lcd */ | ||
117 | #define UI_LCD_POSY 14 /* y position of lcd */ | ||
118 | |||
119 | #elif defined(IPOD_NANO2G) | ||
120 | #define UI_TITLE "iPod Nano 2G" | ||
121 | #define UI_WIDTH 235 /* width of GUI window */ | ||
122 | #define UI_HEIGHT 537 /* height of GUI window */ | ||
123 | #define UI_LCD_POSX 29 /* x position of lcd */ | ||
124 | #define UI_LCD_POSY 33 /* y position of lcd */ | ||
125 | |||
126 | #elif defined(IPOD_VIDEO) | ||
127 | #define UI_TITLE "iPod Video" | ||
128 | #define UI_WIDTH 350 /* width of GUI window */ | ||
129 | #define UI_HEIGHT 591 /* height of GUI window */ | ||
130 | #define UI_LCD_POSX 14 /* x position of lcd */ | ||
131 | #define UI_LCD_POSY 12 /* y position of lcd */ | ||
132 | |||
133 | #elif defined(IAUDIO_X5) | ||
134 | #define UI_TITLE "iAudio X5" | ||
135 | #define UI_WIDTH 300 /* width of GUI window */ | ||
136 | #define UI_HEIGHT 558 /* height of GUI window */ | ||
137 | #define UI_LCD_POSX 55 /* x position of lcd */ | ||
138 | #define UI_LCD_POSY 61 /* y position of lcd */ | ||
139 | #define UI_REMOTE_POSX 12 /* x position of remote lcd */ | ||
140 | #define UI_REMOTE_POSY 462 /* y position of remote lcd */ | ||
141 | |||
142 | #elif defined(IAUDIO_M5) | ||
143 | #define UI_TITLE "iAudio M5" | ||
144 | #define UI_WIDTH 374 /* width of GUI window */ | ||
145 | #define UI_HEIGHT 650 /* height of GUI window */ | ||
146 | #define UI_LCD_POSX 82 /* x position of lcd */ | ||
147 | #define UI_LCD_POSY 74 /* y position of lcd */ | ||
148 | #define UI_REMOTE_POSX 59 /* x position of remote lcd */ | ||
149 | #define UI_REMOTE_POSY 509 /* y position of remote lcd */ | ||
150 | |||
151 | #elif defined(IAUDIO_M3) | ||
152 | #define UI_TITLE "iAudio M3" | ||
153 | #define UI_WIDTH 397 /* width of GUI window */ | ||
154 | #define UI_HEIGHT 501 /* height of GUI window */ | ||
155 | #define UI_LCD_POSX 92 /* x position of lcd */ | ||
156 | #define UI_LCD_POSY 348 /* y position of lcd */ | ||
157 | |||
158 | #elif defined(GIGABEAT_F) | ||
159 | #define UI_TITLE "Toshiba Gigabeat" | ||
160 | #define UI_WIDTH 401 /* width of GUI window */ | ||
161 | #define UI_HEIGHT 655 /* height of GUI window */ | ||
162 | #define UI_LCD_POSX 48 /* x position of lcd */ | ||
163 | #define UI_LCD_POSY 60 /* y position of lcd */ | ||
164 | |||
165 | #elif defined(GIGABEAT_S) | ||
166 | #define UI_TITLE "Toshiba Gigabeat" | ||
167 | #define UI_WIDTH 450 /* width of GUI window */ | ||
168 | #define UI_HEIGHT 688 /* height of GUI window */ | ||
169 | #define UI_LCD_POSX 96 /* x position of lcd */ | ||
170 | #define UI_LCD_POSY 90 /* y position of lcd */ | ||
171 | |||
172 | #elif defined(MROBE_500) | ||
173 | #if LCD_WIDTH==320 | ||
174 | #define UI_TITLE "Olympus M:Robe 500" | ||
175 | #define UI_WIDTH 450 /* width of GUI window */ | ||
176 | #define UI_HEIGHT 350 /* height of GUI window */ | ||
177 | #define UI_LCD_POSX 65 /* x position of lcd */ | ||
178 | #define UI_LCD_POSY 30 /* y position of lcd */ | ||
179 | #define UI_REMOTE_POSX 36 /* x position of remote lcd */ | ||
180 | #define UI_REMOTE_POSY 318 /* y position of remote lcd */ | ||
181 | #else | ||
182 | #define UI_TITLE "Olympus M:Robe 500" | ||
183 | #define UI_WIDTH 895 /* width of GUI window */ | ||
184 | #define UI_HEIGHT 646 /* height of GUI window */ | ||
185 | #define UI_LCD_POSX 129 /* x position of lcd */ | ||
186 | #define UI_LCD_POSY 60 /* y position of lcd */ | ||
187 | #define UI_REMOTE_POSX 37 /* x position of remote lcd */ | ||
188 | #define UI_REMOTE_POSY 615 /* y position of remote lcd */ | ||
189 | #endif | ||
190 | |||
191 | #elif defined(IRIVER_H10) | ||
192 | #define UI_TITLE "iriver H10 20Gb" | ||
193 | #define UI_WIDTH 392 /* width of GUI window */ | ||
194 | #define UI_HEIGHT 391 /* height of GUI window */ | ||
195 | #define UI_LCD_POSX 111 /* x position of lcd */ | ||
196 | #define UI_LCD_POSY 30 /* y position of lcd */ | ||
197 | |||
198 | #elif defined(IRIVER_H10_5GB) | ||
199 | #define UI_TITLE "iriver H10 5/6Gb" | ||
200 | #define UI_WIDTH 353 /* width of GUI window */ | ||
201 | #define UI_HEIGHT 460 /* height of GUI window */ | ||
202 | #define UI_LCD_POSX 112 /* x position of lcd */ | ||
203 | #define UI_LCD_POSY 45 /* y position of lcd */ | ||
204 | |||
205 | #elif defined(SANSA_E200) || defined(SANSA_E200V2) | ||
206 | #ifdef SANSA_E200 | ||
207 | #define UI_TITLE "Sansa e200" | ||
208 | #else | ||
209 | #define UI_TITLE "Sansa e200v2" | ||
210 | #endif | ||
211 | #define UI_WIDTH 260 /* width of GUI window */ | ||
212 | #define UI_HEIGHT 502 /* height of GUI window */ | ||
213 | #define UI_LCD_POSX 42 /* x position of lcd */ | ||
214 | #define UI_LCD_POSY 37 /* y position of lcd */ | ||
215 | |||
216 | #elif defined(SANSA_C200) || defined(SANSA_C200V2) | ||
217 | #ifdef SANSA_C200 | ||
218 | #define UI_TITLE "Sansa c200" | ||
219 | #else | ||
220 | #define UI_TITLE "Sansa c200v2" | ||
221 | #endif | ||
222 | #define UI_WIDTH 350 /* width of GUI window */ | ||
223 | #define UI_HEIGHT 152 /* height of GUI window */ | ||
224 | #define UI_LCD_POSX 42 /* x position of lcd */ | ||
225 | #define UI_LCD_POSY 35 /* y position of lcd */ | ||
226 | |||
227 | #elif defined(IRIVER_IFP7XX) | ||
228 | #define UI_TITLE "iriver iFP7xx" | ||
229 | #define UI_WIDTH 425 /* width of GUI window */ | ||
230 | #define UI_HEIGHT 183 /* height of GUI window */ | ||
231 | #define UI_LCD_POSX 115 /* x position of lcd */ | ||
232 | #define UI_LCD_POSY 54 /* y position of lcd */ | ||
233 | |||
234 | #elif defined(ARCHOS_AV300) | ||
235 | #define UI_TITLE "Archos AV300" | ||
236 | /* We are temporarily using a 2bpp LCD driver and dummy bitmap */ | ||
237 | #define UI_WIDTH 420 /* width of GUI window */ | ||
238 | #define UI_HEIGHT 340 /* height of GUI window */ | ||
239 | #define UI_LCD_POSX 50 /* x position of lcd */ | ||
240 | #define UI_LCD_POSY 50 /* y position of lcd */ | ||
241 | |||
242 | #elif defined(MROBE_100) | ||
243 | #define UI_TITLE "Olympus M:Robe 100" | ||
244 | #define UI_WIDTH 247 /* width of GUI window */ | ||
245 | #define UI_HEIGHT 462 /* height of GUI window */ | ||
246 | #define UI_LCD_POSX 43 /* x position of lcd */ | ||
247 | #define UI_LCD_POSY 25 /* y position of lcd */ | ||
248 | #define UI_REMOTE_POSX 34 /* x position of remote lcd */ | ||
249 | #define UI_REMOTE_POSY 432 /* y position of remote lcd */ | ||
250 | |||
251 | #elif defined(COWON_D2) | ||
252 | #define UI_TITLE "Cowon D2" | ||
253 | #define UI_WIDTH 472 /* width of GUI window */ | ||
254 | #define UI_HEIGHT 368 /* height of GUI window */ | ||
255 | #define UI_LCD_POSX 58 /* x position of lcd */ | ||
256 | #define UI_LCD_POSY 67 /* y position of lcd */ | ||
257 | |||
258 | #elif defined(IAUDIO_7) | ||
259 | #define UI_TITLE "iAudio7" | ||
260 | #define UI_WIDTH 494 /* width of GUI window */ | ||
261 | #define UI_HEIGHT 214 /* height of GUI window */ | ||
262 | #define UI_LCD_POSX 131 /* x position of lcd */ | ||
263 | #define UI_LCD_POSY 38 /* y position of lcd */ | ||
264 | |||
265 | #elif defined(CREATIVE_ZVM) || defined(CREATIVE_ZVM60GB) | ||
266 | #ifdef CREATIVE_ZVM | ||
267 | #define UI_TITLE "Creative Zen Vision:M 30GB" | ||
268 | #else | ||
269 | #define UI_TITLE "Creative Zen Vision:M 60GB" | ||
270 | #endif | ||
271 | #define UI_WIDTH 383 /* width of GUI window */ | ||
272 | #define UI_HEIGHT 643 /* height of GUI window */ | ||
273 | #define UI_LCD_POSX 31 /* x position of lcd */ | ||
274 | #define UI_LCD_POSY 62 /* y position of lcd */ | ||
275 | |||
276 | #elif defined(CREATIVE_ZV) | ||
277 | #define UI_TITLE "Creative Zen Vision" | ||
278 | #define UI_WIDTH 1054 /* width of GUI window */ | ||
279 | #define UI_HEIGHT 643 /* height of GUI window */ | ||
280 | #define UI_LCD_POSX 129 /* x position of lcd */ | ||
281 | #define UI_LCD_POSY 85 /* y position of lcd */ | ||
282 | |||
283 | #elif defined(MEIZU_M6SL) | ||
284 | #define UI_TITLE "Meizu M6" | ||
285 | #define UI_WIDTH 512 /* width of GUI window */ | ||
286 | #define UI_HEIGHT 322 /* height of GUI window */ | ||
287 | #define UI_LCD_POSX 39 /* x position of lcd */ | ||
288 | #define UI_LCD_POSY 38 /* y position of lcd */ | ||
289 | |||
290 | #elif defined(SANSA_FUZE) || defined(SANSA_FUZEV2) | ||
291 | #ifdef SANSA_FUZE | ||
292 | #define UI_TITLE "Sansa Fuze" | ||
293 | #else | ||
294 | #define UI_TITLE "Sansa Fuzev2" | ||
295 | #endif | ||
296 | #define UI_WIDTH 279 /* width of GUI window */ | ||
297 | #define UI_HEIGHT 449 /* height of GUI window */ | ||
298 | #define UI_LCD_POSX 30 /* x position of lcd */ | ||
299 | #define UI_LCD_POSY 31 /* y position of lcd */ | ||
300 | |||
301 | #elif defined(SANSA_CLIP) || defined(SANSA_CLIPV2) | ||
302 | #if defined(SANSA_CLIP) | ||
303 | #define CLIP_VERSION "" | ||
304 | #elif defined(SANSA_CLIPV2) | ||
305 | #define CLIP_VERSION "v2" | ||
306 | #endif | ||
307 | #define UI_TITLE "Sansa Clip"CLIP_VERSION | ||
308 | #define UI_WIDTH 205 /* width of GUI window */ | ||
309 | #define UI_HEIGHT 325 /* height of GUI window */ | ||
310 | #define UI_LCD_POSX 38 /* x position of lcd */ | ||
311 | #define UI_LCD_POSY 38 /* y position of lcd */ | ||
312 | |||
313 | #elif defined(SANSA_CLIPPLUS) | ||
314 | #define UI_TITLE "Sansa Clip+" | ||
315 | #define UI_WIDTH 205 /* width of GUI window */ | ||
316 | #define UI_HEIGHT 325 /* height of GUI window */ | ||
317 | #define UI_LCD_POSX 42 /* x position of lcd */ | ||
318 | #define UI_LCD_POSY 42 /* y position of lcd */ | ||
319 | |||
320 | |||
321 | |||
322 | #elif defined(PHILIPS_SA9200) | ||
323 | #define UI_TITLE "Philips GoGear SA9200" | ||
324 | #define UI_WIDTH 233 /* width of GUI window */ | ||
325 | #define UI_HEIGHT 435 /* height of GUI window */ | ||
326 | #define UI_LCD_POSX 50 /* x position of lcd */ | ||
327 | #define UI_LCD_POSY 50 /* y position of lcd */ | ||
328 | |||
329 | #elif defined(PHILIPS_HDD1630) | ||
330 | #define UI_TITLE "Philips GoGear HDD1630" | ||
331 | #define UI_WIDTH 407 /* width of GUI window */ | ||
332 | #define UI_HEIGHT 391 /* height of GUI window */ | ||
333 | #define UI_LCD_POSX 143 /* x position of lcd */ | ||
334 | #define UI_LCD_POSY 27 /* y position of lcd */ | ||
335 | |||
336 | #elif defined(SANSA_M200V4) | ||
337 | #define UI_TITLE "sansa m200v4" | ||
338 | #define UI_WIDTH 350 /* width of GUI window */ | ||
339 | #define UI_HEIGHT 168 /* height of GUI window */ | ||
340 | #define UI_LCD_POSX 42 /* x position of lcd */ | ||
341 | #define UI_LCD_POSY 55 /* y position of lcd */ | ||
342 | |||
343 | #elif defined(ONDA_VX747) || defined(ONDA_VX747P) | ||
344 | #ifdef ONDA_VX747 | ||
345 | #define UI_TITLE "Onda VX747" | ||
346 | #else | ||
347 | #define UI_TITLE "Onda VX747+" | ||
348 | #endif | ||
349 | #define UI_WIDTH 340 /* width of GUI window */ | ||
350 | #define UI_HEIGHT 601 /* height of GUI window */ | ||
351 | #define UI_LCD_POSX 45 /* x position of lcd */ | ||
352 | #define UI_LCD_POSY 90 /* y position of lcd */ | ||
353 | |||
354 | #elif defined(ONDA_VX777) | ||
355 | #define UI_TITLE "Onda VX777" | ||
356 | #define UI_WIDTH 306 /* width of GUI window */ | ||
357 | #define UI_HEIGHT 558 /* height of GUI window */ | ||
358 | #define UI_LCD_POSX 32 /* x position of lcd */ | ||
359 | #define UI_LCD_POSY 81 /* y position of lcd */ | ||
360 | |||
361 | #elif defined(SAMSUNG_YH820) | ||
362 | #define UI_TITLE "Samsung YH-820" | ||
363 | #define UI_WIDTH 368 /* width of GUI window */ | ||
364 | #define UI_HEIGHT 428 /* height of GUI window */ | ||
365 | #define UI_LCD_POSX 120 /* x position of lcd */ | ||
366 | #define UI_LCD_POSY 75 /* y position of lcd */ | ||
367 | |||
368 | #elif defined(SAMSUNG_YH920) || defined(SAMSUNG_YH925) | ||
369 | #ifdef SAMSUNG_YH920 | ||
370 | #define UI_TITLE "Samsung YH-920" | ||
371 | #else | ||
372 | #define UI_TITLE "Samsung YH-925" | ||
373 | #endif | ||
374 | #define UI_WIDTH 408 /* width of GUI window */ | ||
375 | #define UI_HEIGHT 454 /* height of GUI window */ | ||
376 | #define UI_LCD_POSX 124 /* x position of lcd */ | ||
377 | #define UI_LCD_POSY 42 /* y position of lcd */ | ||
378 | |||
379 | #elif defined(MINI2440) | ||
380 | #define UI_TITLE "Mini2440" | ||
381 | #define UI_WIDTH 441 /* width of GUI window */ | ||
382 | #define UI_HEIGHT 436 /* height of GUI window */ | ||
383 | #define UI_LCD_POSX 148 /* x position of lcd */ | ||
384 | #define UI_LCD_POSY 50 /* y position of lcd */ | ||
385 | |||
386 | #elif defined(PBELL_VIBE500) | ||
387 | #define UI_TITLE "Packard Bell Vibe 500" | ||
388 | #define UI_WIDTH 287 /* width of GUI window */ | ||
389 | #define UI_HEIGHT 488 /* height of GUI window */ | ||
390 | #define UI_LCD_POSX 64 /* x position of lcd */ | ||
391 | #define UI_LCD_POSY 61 /* y position of lcd */ | ||
392 | |||
393 | #elif defined(MPIO_HD200) | ||
394 | #define UI_TITLE "MPIO HD200" | ||
395 | #define UI_WIDTH 430 /* width of GUI window */ | ||
396 | #define UI_HEIGHT 479 /* height of GUI window */ | ||
397 | #define UI_LCD_POSX 101 | ||
398 | #define UI_LCD_POSY 195 | ||
399 | |||
400 | #else | ||
401 | #error no UI defines | ||
402 | #endif | ||
403 | extern SDL_Surface *gui_surface; | ||
404 | extern bool background; /* True if the background image is enabled */ | ||
405 | extern int display_zoom; | ||
406 | |||
407 | #endif /* #ifndef __UISDL_H__ */ | ||
408 | |||