summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2008-03-14 00:17:59 +0000
committerJens Arnold <amiconn@rockbox.org>2008-03-14 00:17:59 +0000
commit919c20669bf7570275c2650434409a885c842d6c (patch)
treea77a009d0a44de163ad8107899161b0ef335462c
parentab974bc86efbdce30e6ca6688401d9a329e91f15 (diff)
downloadrockbox-919c20669bf7570275c2650434409a885c842d6c.tar.gz
rockbox-919c20669bf7570275c2650434409a885c842d6c.zip
More M3 work: Rockbox logo, keymap, sim definitions, sim bitmap. Simulator builds and works now, but for some reason it tries to build plugins even though they're deactivated through configure... The keymap probably needs further refinement.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16658 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/bitmaps/native/SOURCES2
-rw-r--r--apps/bitmaps/native/rockboxlogo.128x42x2.bmpbin0 -> 2808 bytes
-rw-r--r--apps/keymaps/keymap-m3.c488
-rw-r--r--uisimulator/sdl/UI-m3.bmpbin0 -> 398852 bytes
-rw-r--r--uisimulator/sdl/button.c30
-rw-r--r--uisimulator/sdl/lcd-bitmap.c5
-rw-r--r--uisimulator/sdl/uisdl.h13
7 files changed, 537 insertions, 1 deletions
diff --git a/apps/bitmaps/native/SOURCES b/apps/bitmaps/native/SOURCES
index a64c209672..841dd52c69 100644
--- a/apps/bitmaps/native/SOURCES
+++ b/apps/bitmaps/native/SOURCES
@@ -7,6 +7,8 @@ rockboxlogo.160x53x1.bmp
7#else 7#else
8rockboxlogo.112x30x1.bmp 8rockboxlogo.112x30x1.bmp
9#endif 9#endif
10#elif (LCD_WIDTH == 128) && (LCD_DEPTH == 2)
11rockboxlogo.128x42x2.bmp
10#elif (LCD_WIDTH == 128) && (LCD_DEPTH == 16) 12#elif (LCD_WIDTH == 128) && (LCD_DEPTH == 16)
11rockboxlogo.128x40x16.bmp 13rockboxlogo.128x40x16.bmp
12#elif (LCD_WIDTH == 132) && (LCD_DEPTH == 16) 14#elif (LCD_WIDTH == 132) && (LCD_DEPTH == 16)
diff --git a/apps/bitmaps/native/rockboxlogo.128x42x2.bmp b/apps/bitmaps/native/rockboxlogo.128x42x2.bmp
new file mode 100644
index 0000000000..fa12aa4bd7
--- /dev/null
+++ b/apps/bitmaps/native/rockboxlogo.128x42x2.bmp
Binary files differ
diff --git a/apps/keymaps/keymap-m3.c b/apps/keymaps/keymap-m3.c
new file mode 100644
index 0000000000..5f02bfeb69
--- /dev/null
+++ b/apps/keymaps/keymap-m3.c
@@ -0,0 +1,488 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 Jens Arnold
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/* *
21 * Button Code Definitions for iaudio M3 targets
22 */
23
24#include "config.h"
25#include "action.h"
26#include "button.h"
27#include "settings.h"
28
29/* CONTEXT_CUSTOM's used in this file...
30
31CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions)
32
33
34*/
35
36/** Keep things alphabetized for easy reference but standard contexts can
37 ** be first and sub-alphebetized.
38 **/
39
40/** Standard Button Contexts **/
41static const struct button_mapping button_context_standard[] = {
42 { ACTION_STD_PREV, BUTTON_VOL_UP, BUTTON_NONE },
43 { ACTION_STD_PREVREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
44 { ACTION_STD_NEXT, BUTTON_VOL_DOWN, BUTTON_NONE },
45 { ACTION_STD_NEXTREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
46
47 { ACTION_STD_CONTEXT, BUTTON_MODE|BUTTON_REPEAT, BUTTON_MODE },
48 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
49 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
50 { ACTION_STD_OK, BUTTON_PLAY, BUTTON_NONE },
51 { ACTION_STD_MENU, BUTTON_REC|BUTTON_REL, BUTTON_REC },
52 { ACTION_STD_QUICKSCREEN, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
53
54 LAST_ITEM_IN_LIST
55}; /* button_context_standard */
56
57static const struct button_mapping remote_button_context_standard[] = {
58 { ACTION_STD_PREV, BUTTON_VOL_UP, BUTTON_NONE },
59 { ACTION_STD_PREVREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
60 { ACTION_STD_NEXT, BUTTON_VOL_DOWN, BUTTON_NONE },
61 { ACTION_STD_NEXTREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
62
63 { ACTION_STD_CONTEXT, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
64 { ACTION_STD_CANCEL, BUTTON_RC_REW, BUTTON_NONE },
65 { ACTION_STD_OK, BUTTON_RC_FF, BUTTON_NONE },
66 { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE },
67 { ACTION_STD_MENU, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU },
68 { ACTION_STD_QUICKSCREEN, BUTTON_RC_MENU|BUTTON_REPEAT, BUTTON_RC_MENU },
69
70 LAST_ITEM_IN_LIST
71}; /* remote_button_context_standard */
72
73/** Bookmark Screen **/
74static const struct button_mapping button_context_bmark[] = {
75 { ACTION_BMS_DELETE, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
76
77 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
78}; /* button_context_settings_bmark */
79
80static const struct button_mapping remote_button_context_bmark[] = {
81 { ACTION_BMS_DELETE, BUTTON_RC_REC|BUTTON_REPEAT, BUTTON_RC_REC },
82
83 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
84}; /* button_context_settings_bmark */
85
86/** FM Radio Screen **/
87static const struct button_mapping button_context_radio[] = {
88 { ACTION_FM_MENU, BUTTON_MODE|BUTTON_REPEAT, BUTTON_MODE },
89 { ACTION_FM_PRESET, BUTTON_MODE|BUTTON_REL, BUTTON_MODE },
90 { ACTION_FM_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
91 { ACTION_FM_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
92 { ACTION_FM_MODE, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
93 { ACTION_FM_EXIT, BUTTON_REC|BUTTON_REL, BUTTON_REC },
94 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
95 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
96 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
97
98 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
99}; /* button_context_radio */
100
101static const struct button_mapping remote_button_context_radio[] = {
102 { ACTION_FM_MENU, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
103 { ACTION_FM_PRESET, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE },
104 { ACTION_FM_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
105 { ACTION_FM_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
106 { ACTION_FM_MODE, BUTTON_RC_REC|BUTTON_REPEAT, BUTTON_RC_REC },
107 { ACTION_FM_EXIT, BUTTON_RC_MENU, BUTTON_NONE },
108 { ACTION_STD_PREVREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
109 { ACTION_STD_NEXT, BUTTON_RC_FF, BUTTON_NONE },
110 { ACTION_STD_NEXTREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
111
112 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
113}; /* remote_button_context_radio */
114
115/** Keyboard **/
116static const struct button_mapping button_context_keyboard[] = {
117 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
118 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
119 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
120 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
121 { ACTION_KBD_UP, BUTTON_VOL_UP, BUTTON_NONE },
122 { ACTION_KBD_UP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
123 { ACTION_KBD_DOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
124 { ACTION_KBD_DOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
125 { ACTION_KBD_PAGE_FLIP, BUTTON_MODE, BUTTON_NONE },
126 { ACTION_KBD_SELECT, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
127 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
128 { ACTION_KBD_ABORT, BUTTON_REC, BUTTON_NONE },
129
130 LAST_ITEM_IN_LIST
131}; /* button_context_keyboard */
132
133static const struct button_mapping remote_button_context_keyboard[] = {
134 { ACTION_KBD_LEFT, BUTTON_RC_REW, BUTTON_NONE },
135 { ACTION_KBD_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
136 { ACTION_KBD_RIGHT, BUTTON_RC_FF, BUTTON_NONE },
137 { ACTION_KBD_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
138 { ACTION_KBD_UP, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
139 { ACTION_KBD_UP, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
140 { ACTION_KBD_DOWN, BUTTON_RC_VOL_UP, BUTTON_NONE },
141 { ACTION_KBD_DOWN, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
142 { ACTION_KBD_PAGE_FLIP, BUTTON_RC_MODE, BUTTON_NONE },
143 { ACTION_KBD_SELECT, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_PLAY },
144 { ACTION_KBD_DONE, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
145 { ACTION_KBD_ABORT, BUTTON_RC_REC, BUTTON_NONE },
146
147 LAST_ITEM_IN_LIST
148}; /* remote_button_context_keyboard */
149
150/** Pitchscreen **/
151static const struct button_mapping button_context_pitchscreen[] = {
152 { ACTION_PS_INC_SMALL, BUTTON_VOL_UP, BUTTON_NONE },
153 { ACTION_PS_INC_BIG, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
154 { ACTION_PS_DEC_SMALL, BUTTON_VOL_DOWN, BUTTON_NONE },
155 { ACTION_PS_DEC_BIG, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
156 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
157 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
158 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
159 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
160 { ACTION_PS_TOGGLE_MODE, BUTTON_MODE, BUTTON_NONE },
161 { ACTION_PS_RESET, BUTTON_REC, BUTTON_NONE },
162 { ACTION_PS_EXIT, BUTTON_PLAY, BUTTON_NONE },
163
164 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
165}; /* button_context_pitchscreen */
166
167static const struct button_mapping remote_button_context_pitchscreen[] = {
168 { ACTION_PS_INC_SMALL, BUTTON_RC_VOL_UP, BUTTON_NONE },
169 { ACTION_PS_INC_BIG, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
170 { ACTION_PS_DEC_SMALL, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
171 { ACTION_PS_DEC_BIG, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
172 { ACTION_PS_NUDGE_LEFT, BUTTON_RC_REW, BUTTON_NONE },
173 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_RC_REW|BUTTON_REL, BUTTON_NONE },
174 { ACTION_PS_NUDGE_RIGHT, BUTTON_RC_FF, BUTTON_NONE },
175 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RC_FF|BUTTON_REL, BUTTON_NONE },
176 { ACTION_PS_TOGGLE_MODE, BUTTON_RC_MODE, BUTTON_NONE },
177 { ACTION_PS_RESET, BUTTON_RC_REC, BUTTON_NONE },
178 { ACTION_PS_EXIT, BUTTON_RC_PLAY, BUTTON_NONE },
179
180 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
181}; /* remote_button_context_pitchscreen */
182
183/** Quickscreen **/
184static const struct button_mapping button_context_quickscreen[] = {
185 { ACTION_QS_DOWNINV, BUTTON_VOL_UP, BUTTON_NONE },
186 { ACTION_QS_DOWNINV, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
187 { ACTION_QS_DOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
188 { ACTION_QS_DOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
189 { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE },
190 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
191 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
192 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
193 { ACTION_STD_CANCEL, BUTTON_REC, BUTTON_NONE },
194
195 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
196}; /* button_context_quickscreen */
197
198static const struct button_mapping remote_button_context_quickscreen[] = {
199 { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP, BUTTON_NONE },
200 { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
201 { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
202 { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
203 { ACTION_QS_LEFT, BUTTON_RC_REW, BUTTON_NONE },
204 { ACTION_QS_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
205 { ACTION_QS_RIGHT, BUTTON_RC_FF, BUTTON_NONE },
206 { ACTION_QS_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
207 { ACTION_STD_CANCEL, BUTTON_RC_REC, BUTTON_NONE },
208
209 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
210}; /* remote_button_context_quickscreen */
211
212/** Recording Screen **/
213static const struct button_mapping button_context_recscreen[] = {
214 { ACTION_REC_PAUSE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
215 { ACTION_STD_CANCEL, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
216 { ACTION_REC_NEWFILE, BUTTON_REC|BUTTON_REL, BUTTON_REC },
217 { ACTION_STD_MENU, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
218 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
219 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
220 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
221 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
222
223 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
224}; /* button_context_recscreen */
225
226static const struct button_mapping remote_button_context_recscreen[] = {
227 { ACTION_REC_PAUSE, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
228 { ACTION_STD_CANCEL, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
229 { ACTION_REC_NEWFILE, BUTTON_RC_REC, BUTTON_NONE },
230 { ACTION_STD_MENU, BUTTON_RC_MENU, BUTTON_NONE },
231 { ACTION_SETTINGS_INC, BUTTON_RC_FF, BUTTON_NONE },
232 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
233 { ACTION_SETTINGS_DEC, BUTTON_RC_REW, BUTTON_NONE },
234 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
235
236 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
237}; /* remote_button_context_recscreen */
238
239/** Settings - General Mappings **/
240static const struct button_mapping button_context_settings[] = {
241 { ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE },
242 { ACTION_SETTINGS_INCREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
243 { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
244 { ACTION_SETTINGS_DECREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
245 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
246 { ACTION_STD_CANCEL, BUTTON_REC, BUTTON_NONE },
247
248 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
249}; /* button_context_settings */
250
251static const struct button_mapping remote_button_context_settings[] = {
252 { ACTION_SETTINGS_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
253 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
254 { ACTION_SETTINGS_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
255 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
256 { ACTION_STD_PREV, BUTTON_RC_REW, BUTTON_NONE },
257 { ACTION_STD_CANCEL, BUTTON_RC_REC, BUTTON_NONE },
258
259 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
260}; /* remote_button_context_settings */
261
262/** Settings - Using Sliders **/
263static const struct button_mapping button_context_settings_r_is_inc[] = {
264 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
265 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
266 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
267 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
268 { ACTION_STD_CANCEL, BUTTON_REC, BUTTON_NONE },
269
270 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
271}; /* button_context_settings_r_is_inc */
272
273static const struct button_mapping remote_button_context_settings_r_is_inc[] = {
274 { ACTION_SETTINGS_INC, BUTTON_RC_FF, BUTTON_NONE },
275 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
276 { ACTION_SETTINGS_DEC, BUTTON_RC_REW, BUTTON_NONE },
277 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_REW|BUTTON_REPEAT,BUTTON_NONE },
278 { ACTION_STD_CANCEL, BUTTON_RC_REC, BUTTON_NONE },
279
280 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
281}; /* remote_button_context_settings_r_is_inc */
282
283/** Tree **/
284static const struct button_mapping button_context_tree[] = {
285 { ACTION_NONE, BUTTON_PLAY, BUTTON_NONE },
286 { ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
287 { ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
288
289 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
290}; /* button_context_tree */
291
292static const struct button_mapping remote_button_context_tree[] = {
293 { ACTION_NONE, BUTTON_RC_PLAY, BUTTON_NONE },
294 { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
295 { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
296
297 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
298}; /* remote_button_context_tree */
299
300static const struct button_mapping button_context_tree_scroll_lr[] = {
301 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
302 { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
303 { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
304 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
305 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
306 { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
307 { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
308 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
309 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
310
311 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
312}; /* button_context_tree_scroll_lr */
313
314static const struct button_mapping remote_button_context_tree_scroll_lr[] = {
315 { ACTION_NONE, BUTTON_RC_REW, BUTTON_NONE },
316 { ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
317 { ACTION_TREE_ROOT_INIT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW },
318 { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
319 { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT },
320 { ACTION_NONE, BUTTON_RC_FF, BUTTON_NONE },
321 { ACTION_STD_OK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF },
322 { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
323 { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT },
324
325 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
326}; /* remote_button_context_tree_scroll_lr */
327
328/** While-Playing Screen (WPS) **/
329static const struct button_mapping button_context_wps[] = {
330 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
331 { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
332 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
333 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
334 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
335 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
336 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
337 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
338
339 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
340 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
341 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
342 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
343
344 { ACTION_WPS_BROWSE, BUTTON_MODE|BUTTON_REL, BUTTON_MODE },
345 { ACTION_WPS_CONTEXT, BUTTON_MODE|BUTTON_REPEAT, BUTTON_MODE },
346 { ACTION_WPS_MENU, BUTTON_REC|BUTTON_REL, BUTTON_REC },
347 { ACTION_WPS_QUICKSCREEN, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
348
349 LAST_ITEM_IN_LIST
350}; /* button_context_wps */
351
352static const struct button_mapping remote_button_context_wps[] = {
353 { ACTION_WPS_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
354 { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
355 { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
356 { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
357 { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT },
358 { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF },
359 { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
360 { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT },
361
362 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
363 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
364 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
365 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
366
367 { ACTION_WPS_BROWSE, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE },
368 { ACTION_WPS_CONTEXT, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
369 { ACTION_WPS_MENU, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU },
370 { ACTION_WPS_QUICKSCREEN, BUTTON_RC_MENU|BUTTON_REPEAT, BUTTON_RC_MENU },
371
372 LAST_ITEM_IN_LIST
373}; /* remote_button_context_wps */
374
375/** Yes/No Screen **/
376static const struct button_mapping button_context_yesnoscreen[] = {
377 { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
378 LAST_ITEM_IN_LIST
379}; /* button_context_yesnoscreen */
380
381static const struct button_mapping remote_button_context_yesnoscreen[] = {
382 { ACTION_YESNO_ACCEPT, BUTTON_RC_PLAY, BUTTON_NONE },
383 LAST_ITEM_IN_LIST
384}; /* remote_button_context_yesnoscreen */
385
386
387static const struct button_mapping* get_context_mapping_remote( int context )
388{
389 context ^= CONTEXT_REMOTE;
390
391 switch (context)
392 {
393 /* anything that uses remote_button_context_standard */
394 default:
395 return remote_button_context_standard;
396
397 /* remote contexts with special mapping */
398 case CONTEXT_BOOKMARKSCREEN:
399 return remote_button_context_bmark;
400
401 case CONTEXT_FM:
402 return remote_button_context_radio;
403
404 case CONTEXT_KEYBOARD:
405 return remote_button_context_keyboard;
406
407 case CONTEXT_PITCHSCREEN:
408 return remote_button_context_pitchscreen;
409
410 case CONTEXT_QUICKSCREEN:
411 return remote_button_context_quickscreen;
412
413 case CONTEXT_RECSCREEN:
414 return remote_button_context_recscreen;
415
416 case CONTEXT_SETTINGS:
417 return remote_button_context_settings;
418
419 case CONTEXT_SETTINGS_EQ:
420 return remote_button_context_settings_r_is_inc;
421
422 case CONTEXT_TREE:
423 case CONTEXT_MAINMENU:
424 if (global_settings.hold_lr_for_scroll_in_list)
425 return remote_button_context_tree_scroll_lr;
426 /* else fall through to CONTEXT_TREE|CONTEXT_CUSTOM */
427 case CONTEXT_TREE|CONTEXT_CUSTOM:
428 return remote_button_context_tree;
429
430 case CONTEXT_WPS:
431 return remote_button_context_wps;
432
433 case CONTEXT_YESNOSCREEN:
434 return remote_button_context_yesnoscreen;
435 }
436}
437
438const struct button_mapping* get_context_mapping(int context)
439{
440 if (context & CONTEXT_REMOTE)
441 return get_context_mapping_remote(context);
442
443 switch (context)
444 {
445 /* anything that uses button_context_standard */
446 default:
447 return button_context_standard;
448
449 /* contexts with special mapping */
450 case CONTEXT_BOOKMARKSCREEN:
451 return button_context_bmark;
452
453 case CONTEXT_FM:
454 return button_context_radio;
455
456 case CONTEXT_KEYBOARD:
457 return button_context_keyboard;
458
459 case CONTEXT_PITCHSCREEN:
460 return button_context_pitchscreen;
461
462 case CONTEXT_QUICKSCREEN:
463 return button_context_quickscreen;
464
465 case CONTEXT_RECSCREEN:
466 return button_context_recscreen;
467
468 case CONTEXT_SETTINGS:
469 return button_context_settings;
470
471 case CONTEXT_SETTINGS_EQ:
472 return button_context_settings_r_is_inc;
473
474 case CONTEXT_TREE:
475 case CONTEXT_MAINMENU:
476 if (global_settings.hold_lr_for_scroll_in_list)
477 return button_context_tree_scroll_lr;
478 /* else fall through to CONTEXT_TREE|CONTEXT_CUSTOM */
479 case CONTEXT_TREE|CONTEXT_CUSTOM:
480 return button_context_tree;
481
482 case CONTEXT_WPS:
483 return button_context_wps;
484
485 case CONTEXT_YESNOSCREEN:
486 return button_context_yesnoscreen;
487 }
488}
diff --git a/uisimulator/sdl/UI-m3.bmp b/uisimulator/sdl/UI-m3.bmp
new file mode 100644
index 0000000000..add298cc89
--- /dev/null
+++ b/uisimulator/sdl/UI-m3.bmp
Binary files differ
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c
index 967f41baf7..03f7dc1e96 100644
--- a/uisimulator/sdl/button.c
+++ b/uisimulator/sdl/button.c
@@ -262,6 +262,36 @@ void button_event(int key, bool pressed)
262 new_btn = BUTTON_SELECT; 262 new_btn = BUTTON_SELECT;
263 break; 263 break;
264 264
265#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
266 case SDLK_KP4:
267 case SDLK_LEFT:
268 new_btn = BUTTON_LEFT;
269 break;
270 case SDLK_KP6:
271 case SDLK_RIGHT:
272 new_btn = BUTTON_RIGHT;
273 break;
274 case SDLK_KP8:
275 case SDLK_UP:
276 new_btn = BUTTON_VOL_UP;
277 break;
278 case SDLK_KP2:
279 case SDLK_DOWN:
280 new_btn = BUTTON_VOL_DOWN;
281 break;
282 case SDLK_KP_PERIOD:
283 case SDLK_INSERT:
284 new_btn = BUTTON_MODE;
285 break;
286 case SDLK_KP_DIVIDE:
287 case SDLK_F1:
288 new_btn = BUTTON_REC;
289 break;
290 case SDLK_KP5:
291 case SDLK_SPACE:
292 new_btn = BUTTON_PLAY;
293 break;
294
265#elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \ 295#elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
266 || (CONFIG_KEYPAD == IPOD_4G_PAD) 296 || (CONFIG_KEYPAD == IPOD_4G_PAD)
267 case SDLK_KP4: 297 case SDLK_KP4:
diff --git a/uisimulator/sdl/lcd-bitmap.c b/uisimulator/sdl/lcd-bitmap.c
index 438b133804..fa3e5d2b0d 100644
--- a/uisimulator/sdl/lcd-bitmap.c
+++ b/uisimulator/sdl/lcd-bitmap.c
@@ -45,8 +45,11 @@ static unsigned long get_lcd_pixel(int x, int y)
45#elif LCD_DEPTH == 2 45#elif LCD_DEPTH == 2
46#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 46#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
47 return ((lcd_framebuffer[y][x/4] >> (2 * (~x & 3))) & 3); 47 return ((lcd_framebuffer[y][x/4] >> (2 * (~x & 3))) & 3);
48#else 48#elif LCD_PIXELFORMAT == VERTICAL_PACKING
49 return ((lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3); 49 return ((lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3);
50#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED
51 unsigned bits = (lcd_framebuffer[y/8][x] >> (y & 7)) & 0x0101;
52 return (bits | (bits >> 7)) & 3;
50#endif 53#endif
51#elif LCD_DEPTH == 16 54#elif LCD_DEPTH == 16
52#if LCD_PIXELFORMAT == RGB565SWAPPED 55#if LCD_PIXELFORMAT == RGB565SWAPPED
diff --git a/uisimulator/sdl/uisdl.h b/uisimulator/sdl/uisdl.h
index 3503d296f7..37989a682b 100644
--- a/uisimulator/sdl/uisdl.h
+++ b/uisimulator/sdl/uisdl.h
@@ -232,6 +232,19 @@
232#define UI_REMOTE_WIDTH 128 232#define UI_REMOTE_WIDTH 128
233#define UI_REMOTE_HEIGHT 96 233#define UI_REMOTE_HEIGHT 96
234 234
235#elif defined(IAUDIO_M3)
236#define UI_TITLE "iAudio M3"
237#define UI_WIDTH 397 /* width of GUI window */
238#define UI_HEIGHT 501 /* height of GUI window */
239#define UI_LCD_POSX 92 /* x position of lcd */
240#define UI_LCD_POSY 348 /* y position of lcd */
241#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no bklight) */
242#define UI_LCD_BGCOLORLIGHT 130, 180, 250 /* bkgnd color of LCD (bklight) */
243#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
244#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
245#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
246#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
247
235#elif defined(GIGABEAT_F) 248#elif defined(GIGABEAT_F)
236#define UI_TITLE "Toshiba Gigabeat" 249#define UI_TITLE "Toshiba Gigabeat"
237#define UI_WIDTH 401 /* width of GUI window */ 250#define UI_WIDTH 401 /* width of GUI window */