summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-10-08 09:47:40 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-10-11 16:37:17 -0400
commit2a471e288c16b91a7186a60b3fb84dd55a494c7a (patch)
tree3e746212c5fa69b59f61d19b6e29d11aa8a5e31b
parent5efaa9ef8073bb216e3dcdbb4476f2fa7c672b76 (diff)
downloadrockbox-2a471e288c16b91a7186a60b3fb84dd55a494c7a.tar.gz
rockbox-2a471e288c16b91a7186a60b3fb84dd55a494c7a.zip
New port: AIGO EROS Q / EROS K
The Q and K have a slightly different case, but the hardware under the shell is completely identical. These models are rebadged versions: * Hifiwalker H2 (== Q) * AGPTek H3 (== K) * Surfans F20 (== K) Other notes: * Significant improvements in the shared Hiby-platform launcher/loader * SD card can theoretically be hot-swapped now * Support external USB mass storage! * Some consolidation of Hiby-platform targets * Some consolidation of plugin keymaps Todo/known issues: * Keymaps need to be gone over properly * Convert to HAVE_SCROLLWHEEL? Change-Id: I5a8a4f22c38a5b69392ca7c0a8ad8c4e07d9523c
-rw-r--r--apps/SOURCES2
-rw-r--r--apps/bitmaps/native/SOURCES2
-rw-r--r--apps/debug_menu.c2
-rw-r--r--apps/keymaps/keymap-erosq.c256
-rw-r--r--apps/plugins/battery_bench.c97
-rw-r--r--apps/plugins/blackjack.c50
-rw-r--r--apps/plugins/brickmania.c35
-rw-r--r--apps/plugins/calculator.c45
-rw-r--r--apps/plugins/calendar.c38
-rw-r--r--apps/plugins/chessbox/chessbox_pgn.h34
-rw-r--r--apps/plugins/chessclock.c41
-rw-r--r--apps/plugins/chip8.c50
-rw-r--r--apps/plugins/chopper.c31
-rw-r--r--apps/plugins/clix.c20
-rw-r--r--apps/plugins/cube.c40
-rw-r--r--apps/plugins/doom/i_video.c45
-rw-r--r--apps/plugins/fft/fft.c39
-rw-r--r--apps/plugins/flipit.c56
-rw-r--r--apps/plugins/fractals/fractal.h33
-rw-r--r--apps/plugins/goban/goban.h35
-rw-r--r--apps/plugins/imageviewer/imageviewer_button.h29
-rw-r--r--apps/plugins/invadrox.c63
-rw-r--r--apps/plugins/jewels.c71
-rw-r--r--apps/plugins/lib/keymaps.h26
-rw-r--r--apps/plugins/lib/pluginlib_actions.c27
-rw-r--r--apps/plugins/midi/midiplay.c37
-rw-r--r--apps/plugins/minesweeper.c31
-rw-r--r--apps/plugins/mp3_encoder.c80
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c22
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c55
-rw-r--r--apps/plugins/oscilloscope.c71
-rw-r--r--apps/plugins/pacbox/pacbox.h25
-rw-r--r--apps/plugins/pegbox.c57
-rw-r--r--apps/plugins/pong.c25
-rw-r--r--apps/plugins/reversi/reversi-gui.h53
-rw-r--r--apps/plugins/rockblox.c42
-rw-r--r--apps/plugins/rockboy/rockboy.c30
-rw-r--r--apps/plugins/sliding_puzzle.c36
-rw-r--r--apps/plugins/snake.c20
-rw-r--r--apps/plugins/snake2.c21
-rw-r--r--apps/plugins/sokoban.c62
-rw-r--r--apps/plugins/solitaire.c53
-rw-r--r--apps/plugins/spacerocks.c36
-rw-r--r--apps/plugins/star.c62
-rw-r--r--apps/plugins/stopwatch.c62
-rw-r--r--apps/plugins/sudoku/sudoku.h37
-rw-r--r--apps/plugins/text_viewer/tv_button.h12
-rw-r--r--apps/plugins/vu_meter.c49
-rw-r--r--apps/plugins/wormlet.c21
-rw-r--r--apps/plugins/xobox.c40
-rw-r--r--apps/plugins/zxbox/keymaps.h20
-rw-r--r--apps/plugins/zxbox/zxbox_keyb.c29
-rw-r--r--bootloader/SOURCES2
-rw-r--r--bootloader/rocker_linux.c114
-rw-r--r--firmware/SOURCES12
-rw-r--r--firmware/asm/SOURCES4
-rw-r--r--firmware/drivers/audio/erosqlinux_codec.c181
-rw-r--r--firmware/export/audiohw.h2
-rw-r--r--firmware/export/config.h3
-rw-r--r--firmware/export/config/agptekrocker.h1
-rw-r--r--firmware/export/config/aigoerosq.h132
-rw-r--r--firmware/export/config/fiiom3k.h2
-rw-r--r--firmware/export/config/xduoox20.h2
-rw-r--r--firmware/export/config/xduoox3ii.h1
-rw-r--r--firmware/export/erosqlinux_codec.h13
-rw-r--r--firmware/export/rbpaths.h6
-rw-r--r--firmware/export/system.h2
-rw-r--r--firmware/font.c2
-rw-r--r--firmware/target/hosted/aigo/adc-target.h0
-rw-r--r--firmware/target/hosted/aigo/button-erosq.c188
-rw-r--r--firmware/target/hosted/aigo/button-target.h45
-rw-r--r--firmware/target/hosted/aigo/debug-erosq.c1
-rw-r--r--firmware/target/hosted/aigo/erosq.make49
-rw-r--r--firmware/target/hosted/aigo/lcd-target.h32
-rw-r--r--firmware/target/hosted/aigo/power-erosq.c74
-rw-r--r--firmware/target/hosted/aigo/power-erosq.h31
-rw-r--r--firmware/target/hosted/aigo/powermgmt-erosq.c61
-rw-r--r--firmware/target/hosted/aigo/system-target.h28
-rw-r--r--firmware/target/hosted/aigo/usb-erosq.c118
-rw-r--r--firmware/target/hosted/filesystem-app.c6
-rw-r--r--firmware/target/hosted/xduoo/button-target.h1
-rw-r--r--tools/builds.pm4
-rwxr-xr-xtools/configure32
-rwxr-xr-xtools/hiby_patcher.pl77
-rw-r--r--tools/root.make6
-rw-r--r--wps/WPSLIST4
86 files changed, 2095 insertions, 1396 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index 54f7461e05..4ae04a4cf8 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -302,4 +302,6 @@ keymaps/keymap-xduoox3ii.c
302keymaps/keymap-xduoox20.c 302keymaps/keymap-xduoox20.c
303#elif CONFIG_KEYPAD == FIIO_M3K_PAD 303#elif CONFIG_KEYPAD == FIIO_M3K_PAD
304keymaps/keymap-fiiom3k.c 304keymaps/keymap-fiiom3k.c
305#elif CONFIG_KEYPAD == EROSQ_PAD
306keymaps/keymap-erosq.c
305#endif 307#endif
diff --git a/apps/bitmaps/native/SOURCES b/apps/bitmaps/native/SOURCES
index 201ffc4ad3..1d1fcd4783 100644
--- a/apps/bitmaps/native/SOURCES
+++ b/apps/bitmaps/native/SOURCES
@@ -46,7 +46,7 @@ toolsicon.130x130x16.bmp
46hibyicon.70x70x16.bmp 46hibyicon.70x70x16.bmp
47rockboxicon.70x70x16.bmp 47rockboxicon.70x70x16.bmp
48toolsicon.70x70x16.bmp 48toolsicon.70x70x16.bmp
49#elif (defined(XDUOO_X3II) || defined(XDUOO_X20)) 49#elif (defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(EROS_Q))
50hibyicon.130x130x16.bmp 50hibyicon.130x130x16.bmp
51rockboxicon.130x130x16.bmp 51rockboxicon.130x130x16.bmp
52toolsicon.130x130x16.bmp 52toolsicon.130x130x16.bmp
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 59d7227f0b..44e56cdd02 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -2525,7 +2525,7 @@ static const struct {
2525 { "Screendump", dbg_screendump }, 2525 { "Screendump", dbg_screendump },
2526#endif 2526#endif
2527 { "Skin Engine RAM usage", dbg_skin_engine }, 2527 { "Skin Engine RAM usage", dbg_skin_engine },
2528#if ((CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SONY_NWZ_LINUX) || defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20)) && !defined(SIMULATOR) 2528#if ((CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SONY_NWZ_LINUX) || defined(HIBY_LINUX) || defined(FIIO_M3K)) && !defined(SIMULATOR)
2529 { "View HW info", dbg_hw_info }, 2529 { "View HW info", dbg_hw_info },
2530#endif 2530#endif
2531#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 2531#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
diff --git a/apps/keymaps/keymap-erosq.c b/apps/keymaps/keymap-erosq.c
new file mode 100644
index 0000000000..0a18fc5cf5
--- /dev/null
+++ b/apps/keymaps/keymap-erosq.c
@@ -0,0 +1,256 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2020 Solomon Peachy
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20
21#include "config.h"
22#include "action.h"
23#include "button.h"
24#include "settings.h"
25
26/* {Action Code, Button code, Prereq button code } */
27
28/*
29 * The format of the list is as follows
30 * { Action Code, Button code, Prereq button code }
31 * if there's no need to check the previous button's value, use BUTTON_NONE
32 * Insert LAST_ITEM_IN_LIST at the end of each mapping
33 */
34static const struct button_mapping button_context_standard[] = {
35 { ACTION_STD_PREV, BUTTON_SCROLL_BACK, BUTTON_NONE },
36 { ACTION_STD_PREV, BUTTON_PREV, BUTTON_NONE },
37 { ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
38 { ACTION_STD_NEXT, BUTTON_SCROLL_FWD, BUTTON_NONE },
39 { ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
40 { ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
41 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
42 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
43 { ACTION_STD_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
44 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
45
46/* ACTION_STD_QUICKSCREEN,
47 * ACTION_STD_KEYLOCK
48 * ACTION_STD_REC
49 * ACTION_STD_HOTKEY
50 */
51
52 LAST_ITEM_IN_LIST
53}; /* button_context_standard */
54
55static const struct button_mapping button_context_mainmenu[] = {
56 { ACTION_TREE_WPS, BUTTON_BACK, BUTTON_NONE },
57
58 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_TREE),
59}; /* button_context_mainmenu as with sansa clip mapping - "back" button returns you to WPS */
60
61static const struct button_mapping button_context_wps[] = {
62 { ACTION_WPS_BROWSE, BUTTON_BACK|BUTTON_REL, BUTTON_BACK },
63 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
64 { ACTION_WPS_SEEKBACK, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
65 { ACTION_WPS_SEEKFWD, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
66 { ACTION_WPS_STOPSEEK, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT|BUTTON_REPEAT },
67 { ACTION_WPS_STOPSEEK, BUTTON_PREV|BUTTON_REL, BUTTON_PREV|BUTTON_REPEAT },
68 { ACTION_WPS_SKIPNEXT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT },
69 { ACTION_WPS_SKIPPREV, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
70 { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
71 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
72 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
73 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
74 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
75/* ACTION_WPS_ID3SCREEN optional */
76 { ACTION_WPS_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
77// { ACTION_WPS_QUICKSCREEN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
78 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, /* this should be the same as ACTION_STD_MENU */
79/* ACTION_WPS_VIEW_PLAYLIST
80 * ACTION_WPS_LIST_BOOKMARKS, optional
81 * ACTION_WPS_CREATE_BOOKMARK, optional
82 */
83
84 { ACTION_STD_KEYLOCK, BUTTON_POWER, BUTTON_NONE },
85
86 LAST_ITEM_IN_LIST
87}; /* button_context_wps */
88
89static const struct button_mapping button_context_settings[] = {
90 { ACTION_SETTINGS_INC, BUTTON_SCROLL_FWD, BUTTON_NONE },
91// { ACTION_SETTINGS_INCREPEAT, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
92 { ACTION_SETTINGS_INCBIGSTEP, BUTTON_VOL_UP, BUTTON_NONE },
93 { ACTION_SETTINGS_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE },
94// { ACTION_SETTINGS_DECREPEAT, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
95 { ACTION_SETTINGS_DECBIGSTEP, BUTTON_VOL_DOWN, BUTTON_NONE },
96/* ACTION_SETTINGS_DECBIGSTEP */
97 { ACTION_SETTINGS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
98/* ACTION_SETTINGS_SET, Used by touchscreen targets */
99 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
100}; /* button_context_settings */
101
102static const struct button_mapping button_context_list[] = {
103/* ACTION_LISTTREE_PGUP, optional
104 * ACTION_LISTTREE_PGDOWN, optional
105 */
106
107#ifdef HAVE_VOLUME_IN_LIST
108 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
109 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
110 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
111 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
112#endif
113 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
114}; /* button_context_list */
115
116#if 0 // XXX?
117static const struct button_mapping button_context_tree[] = {
118/* ACTION_TREE_ROOT_INIT,
119 * ACTION_TREE_PGLEFT, optional
120 * ACTION_TREE_PGRIGHT, optional
121 * ACTION_TREE_STOP,
122 * ACTION_TREE_WPS,
123 * ACTION_TREE_HOTKEY,
124 */
125/* { ACTION_TREE_WPS, BUTTON_UP|BUTTON_REL, BUTTON_UP },
126 * { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
127 * { ACTION_TREE_HOTKEY, BUTTON_REC|BUTTON_REL, BUTTON_REC },
128 */
129 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
130}; /* button_context_tree */
131#endif
132
133static const struct button_mapping button_context_yesno[] = {
134 { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
135
136 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
137}; /* button_context_settings_yesno */
138
139static const struct button_mapping button_context_quickscreen[] = {
140 { ACTION_QS_TOP, BUTTON_PREV|BUTTON_REL, BUTTON_NONE },
141 { ACTION_QS_TOP, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
142 { ACTION_QS_DOWN, BUTTON_SCROLL_FWD|BUTTON_REL, BUTTON_NONE },
143 { ACTION_QS_LEFT, BUTTON_SCROLL_BACK|BUTTON_REL, BUTTON_NONE },
144 { ACTION_QS_RIGHT, BUTTON_NEXT|BUTTON_REL, BUTTON_NONE },
145 { ACTION_QS_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
146 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
147
148 LAST_ITEM_IN_LIST
149}; /* button_context_quickscreen */
150
151static const struct button_mapping button_context_settings_time[] = {
152 { ACTION_STD_PREV, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
153 { ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_PREV },
154 { ACTION_STD_NEXT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT },
155 { ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NEXT },
156 { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REPEAT, BUTTON_BACK },
157 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
158 { ACTION_SETTINGS_INC, BUTTON_SCROLL_FWD, BUTTON_NONE },
159// { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
160 { ACTION_SETTINGS_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE },
161// { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
162
163 LAST_ITEM_IN_LIST
164 //LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
165}; /* button_context_settings_time */
166
167static const struct button_mapping button_context_pitchscreen[] = {
168 { ACTION_PS_INC_SMALL, BUTTON_SCROLL_FWD, BUTTON_NONE },
169 { ACTION_PS_INC_BIG, BUTTON_VOL_UP, BUTTON_NONE },
170 { ACTION_PS_DEC_SMALL, BUTTON_SCROLL_BACK, BUTTON_NONE },
171 { ACTION_PS_DEC_BIG, BUTTON_VOL_DOWN, BUTTON_NONE },
172 { ACTION_PS_NUDGE_LEFT, BUTTON_PREV, BUTTON_NONE },
173/* { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, */
174 { ACTION_PS_NUDGE_RIGHT, BUTTON_NEXT, BUTTON_NONE },
175/* { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, */
176 { ACTION_PS_TOGGLE_MODE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
177 { ACTION_PS_RESET, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
178 { ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE },
179 { ACTION_PS_SLOWER, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
180 { ACTION_PS_FASTER, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
181
182 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
183}; /* button_context_pitchscreen */
184
185static const struct button_mapping button_context_keyboard[] = {
186 { ACTION_KBD_LEFT, BUTTON_SCROLL_FWD, BUTTON_NONE },
187 { ACTION_KBD_RIGHT, BUTTON_SCROLL_BACK, BUTTON_NONE },
188 { ACTION_KBD_CURSOR_LEFT, BUTTON_PREV, BUTTON_NONE },
189 { ACTION_KBD_CURSOR_RIGHT, BUTTON_NEXT, BUTTON_NONE },
190 { ACTION_KBD_UP, BUTTON_VOL_DOWN, BUTTON_NONE },
191 { ACTION_KBD_UP, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
192 { ACTION_KBD_DOWN, BUTTON_VOL_UP, BUTTON_NONE },
193 { ACTION_KBD_DOWN, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
194 { ACTION_KBD_PAGE_FLIP, BUTTON_MENU, BUTTON_NONE },
195 { ACTION_KBD_BACKSPACE, BUTTON_BACK, BUTTON_NONE },
196 { ACTION_KBD_BACKSPACE, BUTTON_BACK|BUTTON_REPEAT, BUTTON_NONE },
197 { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE },
198 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
199 { ACTION_KBD_ABORT, BUTTON_POWER, BUTTON_NONE },
200 { ACTION_KBD_MORSE_INPUT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
201 { ACTION_KBD_MORSE_SELECT, BUTTON_PLAY|BUTTON_REL, BUTTON_NONE },
202
203 LAST_ITEM_IN_LIST
204}; /* button_context_keyboard */
205
206static const struct button_mapping button_context_bmark[] = {
207 { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
208
209 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
210}; /* button_context_bmark */
211
212/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
213const struct button_mapping* get_context_mapping(int context)
214{
215 switch (context)
216 {
217 case CONTEXT_STD:
218 return button_context_standard;
219
220 case CONTEXT_WPS:
221 return button_context_wps;
222
223 case CONTEXT_MAINMENU:
224 return button_context_mainmenu;
225 case CONTEXT_TREE:
226 case CONTEXT_LIST:
227 return button_context_list;
228
229 case CONTEXT_SETTINGS:
230 case CONTEXT_SETTINGS_EQ:
231 return button_context_settings;
232
233 case CONTEXT_SETTINGS_TIME:
234 return button_context_settings_time;
235
236 case CONTEXT_YESNOSCREEN:
237 return button_context_yesno;
238
239 case CONTEXT_BOOKMARKSCREEN:
240 return button_context_bmark;
241
242 case CONTEXT_QUICKSCREEN:
243 return button_context_quickscreen;
244
245 case CONTEXT_PITCHSCREEN:
246 return button_context_pitchscreen;
247
248 case CONTEXT_KEYBOARD:
249 case CONTEXT_MORSE_INPUT:
250 return button_context_keyboard;
251
252 default:
253 return button_context_standard;
254 }
255 return button_context_standard;
256}
diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c
index f68e3ed5a3..bb431e3e04 100644
--- a/apps/plugins/battery_bench.c
+++ b/apps/plugins/battery_bench.c
@@ -24,7 +24,6 @@
24#include "plugin.h" 24#include "plugin.h"
25#include "lang_enum.h" 25#include "lang_enum.h"
26 26
27
28#define BATTERY_LOG HOME_DIR"/battery_bench.txt" 27#define BATTERY_LOG HOME_DIR"/battery_bench.txt"
29#define BUF_SIZE 16000 28#define BUF_SIZE 16000
30 29
@@ -83,7 +82,17 @@
83#define BATTERY_ON_TXT "SELECT - start" 82#define BATTERY_ON_TXT "SELECT - start"
84#define BATTERY_OFF_TXT "HOME" 83#define BATTERY_OFF_TXT "HOME"
85 84
86#elif CONFIG_KEYPAD == IRIVER_H10_PAD 85#elif (CONFIG_KEYPAD == IRIVER_H10_PAD || \
86 CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD || \
87 CONFIG_KEYPAD == SONY_NWZ_PAD || \
88 CONFIG_KEYPAD == AGPTEK_ROCKER_PAD || \
89 CONFIG_KEYPAD == XDUOO_X3_PAD || \
90 CONFIG_KEYPAD == IHIFI_770_PAD || \
91 CONFIG_KEYPAD == IHIFI_800_PAD || \
92 CONFIG_KEYPAD == XDUOO_X3II_PAD || \
93 CONFIG_KEYPAD == XDUOO_X20_PAD || \
94 CONFIG_KEYPAD == FIIO_M3K_PAD || \
95 CONFIG_KEYPAD == EROSQ_PAD)
87 96
88#define BATTERY_ON BUTTON_PLAY 97#define BATTERY_ON BUTTON_PLAY
89#define BATTERY_OFF BUTTON_POWER 98#define BATTERY_OFF BUTTON_POWER
@@ -177,7 +186,7 @@
177 186
178#elif (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) || \ 187#elif (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) || \
179 (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) 188 (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD)
180 189
181#define BATTERY_ON BUTTON_LEFT 190#define BATTERY_ON BUTTON_LEFT
182#define BATTERY_OFF BUTTON_RIGHT 191#define BATTERY_OFF BUTTON_RIGHT
183#define BATTERY_ON_TXT "LEFT" 192#define BATTERY_ON_TXT "LEFT"
@@ -214,12 +223,6 @@
214#define BATTERY_ON_TXT "SELECT - start" 223#define BATTERY_ON_TXT "SELECT - start"
215#define BATTERY_OFF_TXT "POWER" 224#define BATTERY_OFF_TXT "POWER"
216 225
217#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
218#define BATTERY_ON BUTTON_PLAY
219#define BATTERY_OFF BUTTON_POWER
220#define BATTERY_ON_TXT "PLAY - start"
221#define BATTERY_OFF_TXT "POWER"
222
223#elif (CONFIG_KEYPAD == HM60X_PAD) || (CONFIG_KEYPAD == HM801_PAD) 226#elif (CONFIG_KEYPAD == HM60X_PAD) || (CONFIG_KEYPAD == HM801_PAD)
224#define BATTERY_ON BUTTON_SELECT 227#define BATTERY_ON BUTTON_SELECT
225#define BATTERY_OFF BUTTON_POWER 228#define BATTERY_OFF BUTTON_POWER
@@ -227,12 +230,6 @@
227 230
228#define BATTERY_OFF_TXT "POWER" 231#define BATTERY_OFF_TXT "POWER"
229 232
230#elif CONFIG_KEYPAD == SONY_NWZ_PAD
231#define BATTERY_ON BUTTON_PLAY
232#define BATTERY_OFF BUTTON_POWER
233#define BATTERY_ON_TXT "PLAY - start"
234#define BATTERY_OFF_TXT "Power"
235
236#elif CONFIG_KEYPAD == DX50_PAD 233#elif CONFIG_KEYPAD == DX50_PAD
237#define BATTERY_ON BUTTON_PLAY 234#define BATTERY_ON BUTTON_PLAY
238#define BATTERY_OFF BUTTON_POWER_LONG 235#define BATTERY_OFF BUTTON_POWER_LONG
@@ -245,53 +242,8 @@
245#define BATTERY_OFF_TXT "Power" 242#define BATTERY_OFF_TXT "Power"
246#define BATTERY_ON_TXT "Menu - start" 243#define BATTERY_ON_TXT "Menu - start"
247 244
248#elif CONFIG_KEYPAD == AGPTEK_ROCKER_PAD 245#elif defined(HAVE_TOUCHSCREEN)
249#define BATTERY_ON BUTTON_LEFT
250#define BATTERY_OFF BUTTON_RIGHT
251#define BATTERY_OFF_TXT "Right"
252#define BATTERY_ON_TXT "Left - start"
253 246
254#elif CONFIG_KEYPAD == XDUOO_X3_PAD
255#define BATTERY_ON BUTTON_PLAY
256#define BATTERY_OFF BUTTON_POWER
257#define BATTERY_ON_TXT "PLAY - start"
258#define BATTERY_OFF_TXT "POWER"
259
260#elif CONFIG_KEYPAD == IHIFI_770_PAD
261#define BATTERY_ON BUTTON_PLAY
262#define BATTERY_OFF BUTTON_POWER
263#define BATTERY_ON_TXT "PLAY - start"
264#define BATTERY_OFF_TXT "POWER"
265
266#elif CONFIG_KEYPAD == IHIFI_800_PAD
267#define BATTERY_ON BUTTON_PLAY
268#define BATTERY_OFF BUTTON_POWER
269#define BATTERY_ON_TXT "PLAY - start"
270#define BATTERY_OFF_TXT "POWER"
271
272#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
273#define BATTERY_ON BUTTON_PLAY
274#define BATTERY_OFF BUTTON_POWER
275#define BATTERY_ON_TXT "Play - start"
276#define BATTERY_OFF_TXT "POWER"
277
278#elif CONFIG_KEYPAD == XDUOO_X20_PAD
279#define BATTERY_ON BUTTON_PLAY
280#define BATTERY_OFF BUTTON_POWER
281#define BATTERY_ON_TXT "Play - start"
282#define BATTERY_OFF_TXT "POWER"
283
284#elif CONFIG_KEYPAD == FIIO_M3K_PAD
285#define BATTERY_ON BUTTON_PLAY
286#define BATTERY_OFF BUTTON_POWER
287#define BATTERY_ON_TXT "Play - start"
288#define BATTERY_OFF_TXT "POWER"
289
290#else
291#error No keymap defined!
292#endif
293
294#ifdef HAVE_TOUCHSCREEN
295#ifndef BATTERY_ON 247#ifndef BATTERY_ON
296#define BATTERY_ON BUTTON_CENTER 248#define BATTERY_ON BUTTON_CENTER
297#endif 249#endif
@@ -304,6 +256,9 @@
304#ifndef BATTERY_OFF_TXT 256#ifndef BATTERY_OFF_TXT
305#define BATTERY_OFF_TXT "TOPLEFT" 257#define BATTERY_OFF_TXT "TOPLEFT"
306#endif 258#endif
259
260#else
261#error No keymap defined!
307#endif 262#endif
308 263
309/****************************** Plugin Entry Point ****************************/ 264/****************************** Plugin Entry Point ****************************/
@@ -375,7 +330,7 @@ static bool exit_tsr(bool reenter)
375#define BIT_CHARGING 0x2 330#define BIT_CHARGING 0x2
376#define BIT_USB_POWER 0x4 331#define BIT_USB_POWER 0x4
377 332
378#define HMS(x) (x)/3600,((x)%3600)/60,((x)%3600)%60 333#define HMS(x) (x)/3600,((x)%3600)/60,((x)%3600)%60
379 334
380#if CONFIG_CHARGING || defined(HAVE_USB_POWER) 335#if CONFIG_CHARGING || defined(HAVE_USB_POWER)
381static unsigned int charge_state(void) 336static unsigned int charge_state(void)
@@ -476,7 +431,7 @@ static void thread(void)
476 rb->register_storage_idle_func(flush_buffer); 431 rb->register_storage_idle_func(flush_buffer);
477#endif 432#endif
478 } 433 }
479 434
480 /* What to do when the measurement buffer is full: 435 /* What to do when the measurement buffer is full:
481 1) save our measurements to disk but waste some power doing so? 436 1) save our measurements to disk but waste some power doing so?
482 2) throw away measurements to save some power? 437 2) throw away measurements to save some power?
@@ -486,12 +441,12 @@ static void thread(void)
486 if (buf_idx == BUF_ELEMENTS) { 441 if (buf_idx == BUF_ELEMENTS) {
487 flush_buffer(); 442 flush_buffer();
488 } 443 }
489 444
490 /* sleep some time until next measurement */ 445 /* sleep some time until next measurement */
491 rb->queue_wait_w_tmo(&thread_q, &ev, sleep_time); 446 rb->queue_wait_w_tmo(&thread_q, &ev, sleep_time);
492 switch (ev.id) 447 switch (ev.id)
493 { 448 {
494 case SYS_USB_CONNECTED: 449 case SYS_USB_CONNECTED:
495 in_usb_mode = true; 450 in_usb_mode = true;
496 rb->usb_acknowledge(SYS_USB_CONNECTED_ACK); 451 rb->usb_acknowledge(SYS_USB_CONNECTED_ACK);
497 break; 452 break;
@@ -516,7 +471,7 @@ static void thread(void)
516#else 471#else
517 flush_buffer(); 472 flush_buffer();
518#endif 473#endif
519 474
520 /* log end of bench and exit reason */ 475 /* log end of bench and exit reason */
521 fd = rb->open(BATTERY_LOG, O_RDWR | O_CREAT | O_APPEND, 0666); 476 fd = rb->open(BATTERY_LOG, O_RDWR | O_CREAT | O_APPEND, 0666);
522 if (fd >= 0) 477 if (fd >= 0)
@@ -565,7 +520,7 @@ enum plugin_status plugin_start(const void* parameter)
565 rb->lcd_remote_putsxy,LCD_REMOTE_WIDTH,2); 520 rb->lcd_remote_putsxy,LCD_REMOTE_WIDTH,2);
566 rb->lcd_remote_update(); 521 rb->lcd_remote_update();
567#endif 522#endif
568 523
569 do 524 do
570 { 525 {
571 button = rb->button_get(true); 526 button = rb->button_get(true);
@@ -574,10 +529,10 @@ enum plugin_status plugin_start(const void* parameter)
574 case BATTERY_ON: 529 case BATTERY_ON:
575#ifdef BATTERY_RC_ON 530#ifdef BATTERY_RC_ON
576 case BATTERY_RC_ON: 531 case BATTERY_RC_ON:
577#endif 532#endif
578 on = true; 533 on = true;
579 break; 534 break;
580 case BATTERY_OFF: 535 case BATTERY_OFF:
581#ifdef BATTERY_RC_OFF 536#ifdef BATTERY_RC_OFF
582 case BATTERY_RC_OFF: 537 case BATTERY_RC_OFF:
583#endif 538#endif
@@ -588,7 +543,7 @@ enum plugin_status plugin_start(const void* parameter)
588 return PLUGIN_USB_CONNECTED; 543 return PLUGIN_USB_CONNECTED;
589 } 544 }
590 }while(!on); 545 }while(!on);
591 546
592 fd = rb->open(BATTERY_LOG, O_RDONLY); 547 fd = rb->open(BATTERY_LOG, O_RDONLY);
593 if (fd < 0) 548 if (fd < 0)
594 { 549 {
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index b2e0383187..b5e58c5914 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -543,39 +543,7 @@ enum {
543#define BJACK_QUIT_NAME "Volume up" 543#define BJACK_QUIT_NAME "Volume up"
544#define BJACK_DOUBLE_NAME "Option+Down" 544#define BJACK_DOUBLE_NAME "Option+Down"
545 545
546#elif CONFIG_KEYPAD == XDUOO_X3_PAD 546#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
547#define BJACK_SELECT_NAME "PLAY"
548#define BJACK_STAY_NAME "NEXT"
549#define BJACK_QUIT_NAME "POWER"
550#define BJACK_DOUBLE_NAME "PREV"
551#define BJACK_SELECT BUTTON_PLAY
552#define BJACK_QUIT BUTTON_POWER
553#define BJACK_MAX BUTTON_VOL_UP
554#define BJACK_MIN BUTTON_VOL_DOWN
555#define BJACK_STAY BUTTON_NEXT
556#define BJACK_DOUBLEDOWN BUTTON_PREV
557#define BJACK_UP BUTTON_HOME
558#define BJACK_DOWN BUTTON_OPTION
559#define BJACK_RIGHT BUTTON_NEXT
560#define BJACK_LEFT BUTTON_PREV
561
562#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
563#define BJACK_SELECT_NAME "PLAY"
564#define BJACK_STAY_NAME "NEXT"
565#define BJACK_QUIT_NAME "POWER"
566#define BJACK_DOUBLE_NAME "PREV"
567#define BJACK_SELECT BUTTON_PLAY
568#define BJACK_QUIT BUTTON_POWER
569#define BJACK_MAX BUTTON_VOL_UP
570#define BJACK_MIN BUTTON_VOL_DOWN
571#define BJACK_STAY BUTTON_NEXT
572#define BJACK_DOUBLEDOWN BUTTON_PREV
573#define BJACK_UP BUTTON_HOME
574#define BJACK_DOWN BUTTON_OPTION
575#define BJACK_RIGHT BUTTON_NEXT
576#define BJACK_LEFT BUTTON_PREV
577
578#elif CONFIG_KEYPAD == XDUOO_X20_PAD
579#define BJACK_SELECT_NAME "PLAY" 547#define BJACK_SELECT_NAME "PLAY"
580#define BJACK_STAY_NAME "NEXT" 548#define BJACK_STAY_NAME "NEXT"
581#define BJACK_QUIT_NAME "POWER" 549#define BJACK_QUIT_NAME "POWER"
@@ -607,7 +575,7 @@ enum {
607#define BJACK_RIGHT BUTTON_NEXT 575#define BJACK_RIGHT BUTTON_NEXT
608#define BJACK_LEFT BUTTON_PREV 576#define BJACK_LEFT BUTTON_PREV
609 577
610#elif CONFIG_KEYPAD == IHIFI_770_PAD 578#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
611#define BJACK_SELECT_NAME "PLAY" 579#define BJACK_SELECT_NAME "PLAY"
612#define BJACK_STAY_NAME "NEXT" 580#define BJACK_STAY_NAME "NEXT"
613#define BJACK_QUIT_NAME "POWER" 581#define BJACK_QUIT_NAME "POWER"
@@ -623,7 +591,7 @@ enum {
623#define BJACK_RIGHT BUTTON_NEXT 591#define BJACK_RIGHT BUTTON_NEXT
624#define BJACK_LEFT BUTTON_PREV 592#define BJACK_LEFT BUTTON_PREV
625 593
626#elif CONFIG_KEYPAD == IHIFI_800_PAD 594#elif CONFIG_KEYPAD == EROSQ_PAD
627#define BJACK_SELECT_NAME "PLAY" 595#define BJACK_SELECT_NAME "PLAY"
628#define BJACK_STAY_NAME "NEXT" 596#define BJACK_STAY_NAME "NEXT"
629#define BJACK_QUIT_NAME "POWER" 597#define BJACK_QUIT_NAME "POWER"
@@ -632,12 +600,12 @@ enum {
632#define BJACK_QUIT BUTTON_POWER 600#define BJACK_QUIT BUTTON_POWER
633#define BJACK_MAX BUTTON_VOL_UP 601#define BJACK_MAX BUTTON_VOL_UP
634#define BJACK_MIN BUTTON_VOL_DOWN 602#define BJACK_MIN BUTTON_VOL_DOWN
635#define BJACK_STAY BUTTON_NEXT 603#define BJACK_STAY BUTTON_MENU
636#define BJACK_DOUBLEDOWN BUTTON_PREV 604#define BJACK_DOUBLEDOWN BUTTON_BACK
637#define BJACK_UP BUTTON_HOME 605#define BJACK_UP BUTTON_PREV
638#define BJACK_DOWN (BUTTON_POWER | BUTTON_HOME) 606#define BJACK_DOWN BUTTON_NEXT
639#define BJACK_RIGHT BUTTON_NEXT 607#define BJACK_RIGHT BUTTON_SCROLL_FWD
640#define BJACK_LEFT BUTTON_PREV 608#define BJACK_LEFT BUTTON_SCROLL_BACK
641 609
642#else 610#else
643#error No keymap defined! 611#error No keymap defined!
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 4452f23357..4f4ffc8df6 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -41,9 +41,6 @@
41#include "pluginbitmaps/brickmania_break.h" 41#include "pluginbitmaps/brickmania_break.h"
42#endif 42#endif
43 43
44
45
46
47/* 44/*
48 * 45 *
49 * Keymaps 46 * Keymaps
@@ -307,27 +304,7 @@ CONFIG_KEYPAD == SANSA_CONNECT_PAD
307#define UP BUTTON_UP 304#define UP BUTTON_UP
308#define DOWN BUTTON_DOWN 305#define DOWN BUTTON_DOWN
309 306
310#elif CONFIG_KEYPAD == XDUOO_X3_PAD 307#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
311#define QUIT BUTTON_POWER
312#define LEFT BUTTON_PREV
313#define RIGHT BUTTON_NEXT
314#define ALTLEFT BUTTON_VOL_DOWN
315#define ALTRIGHT BUTTON_VOL_UP
316#define SELECT BUTTON_PLAY
317#define UP BUTTON_HOME
318#define DOWN BUTTON_OPTION
319
320#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
321#define QUIT BUTTON_POWER
322#define LEFT BUTTON_PREV
323#define RIGHT BUTTON_NEXT
324#define ALTLEFT BUTTON_VOL_DOWN
325#define ALTRIGHT BUTTON_VOL_UP
326#define SELECT BUTTON_PLAY
327#define UP BUTTON_HOME
328#define DOWN BUTTON_OPTION
329
330#elif CONFIG_KEYPAD == XDUOO_X20_PAD
331#define QUIT BUTTON_POWER 308#define QUIT BUTTON_POWER
332#define LEFT BUTTON_PREV 309#define LEFT BUTTON_PREV
333#define RIGHT BUTTON_NEXT 310#define RIGHT BUTTON_NEXT
@@ -347,7 +324,7 @@ CONFIG_KEYPAD == SANSA_CONNECT_PAD
347#define UP BUTTON_HOME 324#define UP BUTTON_HOME
348#define DOWN BUTTON_OPTION 325#define DOWN BUTTON_OPTION
349 326
350#elif CONFIG_KEYPAD == IHIFI_770_PAD 327#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
351#define QUIT BUTTON_POWER 328#define QUIT BUTTON_POWER
352#define LEFT BUTTON_HOME 329#define LEFT BUTTON_HOME
353#define RIGHT BUTTON_VOL_DOWN 330#define RIGHT BUTTON_VOL_DOWN
@@ -357,12 +334,10 @@ CONFIG_KEYPAD == SANSA_CONNECT_PAD
357#define UP BUTTON_PREV 334#define UP BUTTON_PREV
358#define DOWN BUTTON_NEXT 335#define DOWN BUTTON_NEXT
359 336
360#elif CONFIG_KEYPAD == IHIFI_800_PAD 337#elif CONFIG_KEYPAD == EROSQ_PAD
361#define QUIT BUTTON_POWER 338#define QUIT BUTTON_POWER
362#define LEFT BUTTON_HOME 339#define LEFT BUTTON_SCROLL_BACK
363#define RIGHT BUTTON_VOL_DOWN 340#define RIGHT BUTTON_SCROLL_FWD
364#define ALTLEFT (BUTTON_POWER | BUTTON_HOME)
365#define ALTRIGHT (BUTTON_POWER | BUTTON_VOL_UP)
366#define SELECT BUTTON_PLAY 341#define SELECT BUTTON_PLAY
367#define UP BUTTON_PREV 342#define UP BUTTON_PREV
368#define DOWN BUTTON_NEXT 343#define DOWN BUTTON_NEXT
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index f02f99ee0d..77f79f9057 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -493,29 +493,7 @@ F3: equal to "="
493#define CALCULATOR_CALC BUTTON_VOLUP 493#define CALCULATOR_CALC BUTTON_VOLUP
494#define CALCULATOR_CLEAR (BUTTON_SELECT|BUTTON_REPEAT) 494#define CALCULATOR_CLEAR (BUTTON_SELECT|BUTTON_REPEAT)
495 495
496#elif CONFIG_KEYPAD == XDUOO_X3_PAD 496#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
497#define CALCULATOR_LEFT BUTTON_PREV
498#define CALCULATOR_RIGHT BUTTON_NEXT
499#define CALCULATOR_UP BUTTON_HOME
500#define CALCULATOR_DOWN BUTTON_OPTION
501#define CALCULATOR_QUIT BUTTON_POWER
502#define CALCULATOR_INPUT_CALC_PRE (BUTTON_OPTION|BUTTON_REPEAT)
503#define CALCULATOR_INPUT (BUTTON_PLAY|BUTTON_REL)
504#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT)
505#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT)
506
507#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
508#define CALCULATOR_LEFT BUTTON_PREV
509#define CALCULATOR_RIGHT BUTTON_NEXT
510#define CALCULATOR_UP BUTTON_HOME
511#define CALCULATOR_DOWN BUTTON_OPTION
512#define CALCULATOR_QUIT BUTTON_POWER
513#define CALCULATOR_INPUT_CALC_PRE (BUTTON_OPTION|BUTTON_REPEAT)
514#define CALCULATOR_INPUT (BUTTON_PLAY|BUTTON_REL)
515#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT)
516#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT)
517
518#elif CONFIG_KEYPAD == XDUOO_X20_PAD
519#define CALCULATOR_LEFT BUTTON_PREV 497#define CALCULATOR_LEFT BUTTON_PREV
520#define CALCULATOR_RIGHT BUTTON_NEXT 498#define CALCULATOR_RIGHT BUTTON_NEXT
521#define CALCULATOR_UP BUTTON_HOME 499#define CALCULATOR_UP BUTTON_HOME
@@ -537,7 +515,7 @@ F3: equal to "="
537#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT) 515#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT)
538#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT) 516#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT)
539 517
540#elif CONFIG_KEYPAD == IHIFI_770_PAD 518#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
541#define CALCULATOR_LEFT BUTTON_HOME 519#define CALCULATOR_LEFT BUTTON_HOME
542#define CALCULATOR_RIGHT BUTTON_VOL_DOWN 520#define CALCULATOR_RIGHT BUTTON_VOL_DOWN
543#define CALCULATOR_UP BUTTON_PREV 521#define CALCULATOR_UP BUTTON_PREV
@@ -548,16 +526,15 @@ F3: equal to "="
548#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT) 526#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT)
549#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT) 527#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT)
550 528
551#elif CONFIG_KEYPAD == IHIFI_800_PAD 529#elif CONFIG_KEYPAD == EROSQ_PAD
552#define CALCULATOR_LEFT BUTTON_HOME 530#define CALCULATOR_LEFT BUTTON_SCROLL_BACK
553#define CALCULATOR_RIGHT BUTTON_VOL_DOWN 531#define CALCULATOR_RIGHT BUTTON_SCROLL_FWD
554#define CALCULATOR_UP BUTTON_PREV 532#define CALCULATOR_UP BUTTON_PREV
555#define CALCULATOR_DOWN BUTTON_NEXT 533#define CALCULATOR_DOWN BUTTON_NEXT
556#define CALCULATOR_QUIT BUTTON_POWER 534#define CALCULATOR_QUIT BUTTON_POWER
557#define CALCULATOR_INPUT_CALC_PRE (BUTTON_HOME|BUTTON_REPEAT) 535#define CALCULATOR_INPUT BUTTON_PLAY
558#define CALCULATOR_INPUT (BUTTON_PLAY|BUTTON_REL) 536#define CALCULATOR_CALC BUTTON_MENU
559#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT) 537#define CALCULATOR_CLEAR BUTTON_BACK
560#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT)
561 538
562#else 539#else
563#error No keymap defined! 540#error No keymap defined!
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c
index 89dcc61714..59aba941ae 100644
--- a/apps/plugins/calendar.c
+++ b/apps/plugins/calendar.c
@@ -381,27 +381,7 @@
381#define CALENDAR_NEXT_MONTH (BUTTON_VOLDOWN) 381#define CALENDAR_NEXT_MONTH (BUTTON_VOLDOWN)
382#define CALENDAR_PREV_MONTH (BUTTON_VOLUP) 382#define CALENDAR_PREV_MONTH (BUTTON_VOLUP)
383 383
384#elif CONFIG_KEYPAD == XDUOO_X3_PAD 384#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
385#define CALENDAR_QUIT BUTTON_POWER
386#define CALENDAR_SELECT BUTTON_PLAY
387#define CALENDAR_NEXT_WEEK BUTTON_OPTION
388#define CALENDAR_PREV_WEEK BUTTON_HOME
389#define CALENDAR_NEXT_DAY BUTTON_NEXT
390#define CALENDAR_PREV_DAY BUTTON_PREV
391#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP
392#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN
393
394#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
395#define CALENDAR_QUIT BUTTON_POWER
396#define CALENDAR_SELECT BUTTON_PLAY
397#define CALENDAR_NEXT_WEEK BUTTON_OPTION
398#define CALENDAR_PREV_WEEK BUTTON_HOME
399#define CALENDAR_NEXT_DAY BUTTON_NEXT
400#define CALENDAR_PREV_DAY BUTTON_PREV
401#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP
402#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN
403
404#elif CONFIG_KEYPAD == XDUOO_X20_PAD
405#define CALENDAR_QUIT BUTTON_POWER 385#define CALENDAR_QUIT BUTTON_POWER
406#define CALENDAR_SELECT BUTTON_PLAY 386#define CALENDAR_SELECT BUTTON_PLAY
407#define CALENDAR_NEXT_WEEK BUTTON_OPTION 387#define CALENDAR_NEXT_WEEK BUTTON_OPTION
@@ -421,7 +401,7 @@
421#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP 401#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP
422#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN 402#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN
423 403
424#elif CONFIG_KEYPAD == IHIFI_770_PAD 404#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
425#define CALENDAR_QUIT BUTTON_POWER 405#define CALENDAR_QUIT BUTTON_POWER
426#define CALENDAR_SELECT BUTTON_PLAY 406#define CALENDAR_SELECT BUTTON_PLAY
427#define CALENDAR_NEXT_WEEK (BUTTON_POWER | BUTTON_VOL_DOWN) 407#define CALENDAR_NEXT_WEEK (BUTTON_POWER | BUTTON_VOL_DOWN)
@@ -431,15 +411,15 @@
431#define CALENDAR_NEXT_MONTH BUTTON_VOL_DOWN 411#define CALENDAR_NEXT_MONTH BUTTON_VOL_DOWN
432#define CALENDAR_PREV_MONTH BUTTON_VOL_UP 412#define CALENDAR_PREV_MONTH BUTTON_VOL_UP
433 413
434#elif CONFIG_KEYPAD == IHIFI_800_PAD 414#elif CONFIG_KEYPAD == EROSQ_PAD
435#define CALENDAR_QUIT BUTTON_POWER 415#define CALENDAR_QUIT BUTTON_POWER
436#define CALENDAR_SELECT BUTTON_PLAY 416#define CALENDAR_SELECT BUTTON_PLAY
437#define CALENDAR_NEXT_WEEK (BUTTON_POWER | BUTTON_VOL_DOWN) 417#define CALENDAR_NEXT_WEEK BUTTON_NEXT
438#define CALENDAR_PREV_WEEK (BUTTON_POWER | BUTTON_VOL_UP) 418#define CALENDAR_PREV_WEEK BUTTON_PREV
439#define CALENDAR_NEXT_DAY BUTTON_NEXT 419#define CALENDAR_NEXT_DAY BUTTON_SCROLL_FWD
440#define CALENDAR_PREV_DAY BUTTON_PREV 420#define CALENDAR_PREV_DAY BUTTON_SCROLL_BACK
441#define CALENDAR_NEXT_MONTH BUTTON_VOL_DOWN 421#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP
442#define CALENDAR_PREV_MONTH BUTTON_VOL_UP 422#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN
443 423
444#else 424#else
445#error "No keypad setting." 425#error "No keypad setting."
diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h
index 567dcb1acb..e9b66787ee 100644
--- a/apps/plugins/chessbox/chessbox_pgn.h
+++ b/apps/plugins/chessbox/chessbox_pgn.h
@@ -525,21 +525,7 @@
525#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT) 525#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT)
526#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT) 526#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT)
527 527
528#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 528#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
529#define CB_SELECT BUTTON_PLAY
530#define CB_UP BUTTON_HOME
531#define CB_DOWN BUTTON_OPTION
532#define CB_LEFT BUTTON_PREV
533#define CB_RIGHT BUTTON_NEXT
534#define CB_PLAY BUTTON_VOL_UP
535#define CB_LEVEL BUTTON_VOL_DOWN
536#define CB_MENU BUTTON_POWER
537#define CB_SCROLL_UP (BUTTON_HOME|BUTTON_REPEAT)
538#define CB_SCROLL_DOWN (BUTTON_OPTION|BUTTON_REPEAT)
539#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT)
540#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT)
541
542#elif CONFIG_KEYPAD == XDUOO_X20_PAD
543#define CB_SELECT BUTTON_PLAY 529#define CB_SELECT BUTTON_PLAY
544#define CB_UP BUTTON_HOME 530#define CB_UP BUTTON_HOME
545#define CB_DOWN BUTTON_OPTION 531#define CB_DOWN BUTTON_OPTION
@@ -567,7 +553,7 @@
567#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT) 553#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT)
568#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT) 554#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT)
569 555
570#elif CONFIG_KEYPAD == IHIFI_770_PAD 556#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
571#define CB_SELECT BUTTON_PLAY 557#define CB_SELECT BUTTON_PLAY
572#define CB_UP BUTTON_PREV 558#define CB_UP BUTTON_PREV
573#define CB_DOWN BUTTON_NEXT 559#define CB_DOWN BUTTON_NEXT
@@ -581,19 +567,19 @@
581#define CB_SCROLL_LEFT (BUTTON_HOME|BUTTON_REPEAT) 567#define CB_SCROLL_LEFT (BUTTON_HOME|BUTTON_REPEAT)
582#define CB_SCROLL_RIGHT (BUTTON_VOL_UP|BUTTON_REPEAT) 568#define CB_SCROLL_RIGHT (BUTTON_VOL_UP|BUTTON_REPEAT)
583 569
584#elif CONFIG_KEYPAD == IHIFI_800_PAD 570#elif CONFIG_KEYPAD == EROSQ_PAD
585#define CB_SELECT BUTTON_PLAY 571#define CB_SELECT BUTTON_PLAY
586#define CB_UP BUTTON_PREV 572#define CB_UP BUTTON_PREV
587#define CB_DOWN BUTTON_NEXT 573#define CB_DOWN BUTTON_NEXT
588#define CB_LEFT BUTTON_HOME 574#define CB_LEFT BUTTON_SCROLL_BACK
589#define CB_RIGHT BUTTON_VOL_DOWN 575#define CB_RIGHT BUTTON_SCROLL_FWD
590#define CB_PLAY BUTTON_VOL_UP 576#define CB_PLAY BUTTON_VOL_DOWN
591#define CB_LEVEL (BUTTON_PLAY|BUTTON_REPEAT) 577#define CB_MENU BUTTON_MENU
592#define CB_MENU BUTTON_POWER 578#define CB_LEVEL BUTTON_VOL_UP
593#define CB_SCROLL_UP (BUTTON_PREV|BUTTON_REPEAT) 579#define CB_SCROLL_UP (BUTTON_PREV|BUTTON_REPEAT)
594#define CB_SCROLL_DOWN (BUTTON_NEXT|BUTTON_REPEAT) 580#define CB_SCROLL_DOWN (BUTTON_NEXT|BUTTON_REPEAT)
595#define CB_SCROLL_LEFT (BUTTON_HOME|BUTTON_REPEAT) 581#define CB_SCROLL_LEFT (BUTTON_SCROLL_BACK|BUTTON_REPEAT)
596#define CB_SCROLL_RIGHT (BUTTON_VOL_UP|BUTTON_REPEAT) 582#define CB_SCROLL_RIGHT (BUTTON_SCROLL_FWD|BUTTON_REPEAT)
597 583
598#else 584#else
599#error No keymap defined! 585#error No keymap defined!
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index aee9c9f8e7..27b3990b8b 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -366,27 +366,7 @@
366#define CHC_SETTINGS_CANCEL BUTTON_RIGHT 366#define CHC_SETTINGS_CANCEL BUTTON_RIGHT
367#define CHC_SETTINGS_OK (BUTTON_SELECT|BUTTON_REPEAT) 367#define CHC_SETTINGS_OK (BUTTON_SELECT|BUTTON_REPEAT)
368 368
369#elif CONFIG_KEYPAD == XDUOO_X3_PAD 369#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) || (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
370#define CHC_QUIT BUTTON_POWER
371#define CHC_STARTSTOP BUTTON_PLAY
372#define CHC_RESET BUTTON_OPTION
373#define CHC_MENU BUTTON_HOME
374#define CHC_SETTINGS_INC BUTTON_NEXT
375#define CHC_SETTINGS_DEC BUTTON_PREV
376#define CHC_SETTINGS_OK BUTTON_PLAY
377#define CHC_SETTINGS_CANCEL BUTTON_POWER
378
379#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
380#define CHC_QUIT BUTTON_POWER
381#define CHC_STARTSTOP BUTTON_PLAY
382#define CHC_RESET BUTTON_OPTION
383#define CHC_MENU BUTTON_HOME
384#define CHC_SETTINGS_INC BUTTON_NEXT
385#define CHC_SETTINGS_DEC BUTTON_PREV
386#define CHC_SETTINGS_OK BUTTON_PLAY
387#define CHC_SETTINGS_CANCEL BUTTON_POWER
388
389#elif CONFIG_KEYPAD == XDUOO_X20_PAD
390#define CHC_QUIT BUTTON_POWER 370#define CHC_QUIT BUTTON_POWER
391#define CHC_STARTSTOP BUTTON_PLAY 371#define CHC_STARTSTOP BUTTON_PLAY
392#define CHC_RESET BUTTON_OPTION 372#define CHC_RESET BUTTON_OPTION
@@ -406,7 +386,7 @@
406#define CHC_SETTINGS_OK BUTTON_PLAY 386#define CHC_SETTINGS_OK BUTTON_PLAY
407#define CHC_SETTINGS_CANCEL BUTTON_POWER 387#define CHC_SETTINGS_CANCEL BUTTON_POWER
408 388
409#elif CONFIG_KEYPAD == IHIFI_770_PAD 389#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
410#define CHC_QUIT BUTTON_POWER 390#define CHC_QUIT BUTTON_POWER
411#define CHC_STARTSTOP BUTTON_PLAY 391#define CHC_STARTSTOP BUTTON_PLAY
412#define CHC_RESET (BUTTON_PLAY|BUTTON_REPEAT) 392#define CHC_RESET (BUTTON_PLAY|BUTTON_REPEAT)
@@ -416,15 +396,15 @@
416#define CHC_SETTINGS_OK BUTTON_PLAY 396#define CHC_SETTINGS_OK BUTTON_PLAY
417#define CHC_SETTINGS_CANCEL BUTTON_HOME 397#define CHC_SETTINGS_CANCEL BUTTON_HOME
418 398
419#elif CONFIG_KEYPAD == IHIFI_800_PAD 399#elif CONFIG_KEYPAD == EROSQ_PAD
420#define CHC_QUIT BUTTON_POWER 400#define CHC_QUIT BUTTON_POWER
421#define CHC_STARTSTOP BUTTON_PLAY 401#define CHC_STARTSTOP BUTTON_PLAY
422#define CHC_RESET (BUTTON_PLAY|BUTTON_REPEAT) 402#define CHC_RESET BUTTON_BACK
423#define CHC_MENU BUTTON_HOME 403#define CHC_MENU BUTTON_MENU
424#define CHC_SETTINGS_INC BUTTON_VOL_UP 404#define CHC_SETTINGS_INC BUTTON_NEXT
425#define CHC_SETTINGS_DEC BUTTON_VOL_DOWN 405#define CHC_SETTINGS_DEC BUTTON_PREV
426#define CHC_SETTINGS_OK BUTTON_PLAY 406#define CHC_SETTINGS_OK BUTTON_PLAY
427#define CHC_SETTINGS_CANCEL BUTTON_HOME 407#define CHC_SETTINGS_CANCEL BUTTON_POWER
428 408
429#else 409#else
430#error No keymap defined! 410#error No keymap defined!
@@ -481,7 +461,7 @@ static struct {
481} timer_holder[MAX_PLAYERS]; 461} timer_holder[MAX_PLAYERS];
482 462
483static int run_timer(int nr); 463static int run_timer(int nr);
484static int chessclock_set_int(char* string, 464static int chessclock_set_int(char* string,
485 int* variable, 465 int* variable,
486 int step, 466 int step,
487 int min, 467 int min,
@@ -784,7 +764,7 @@ static int run_timer(int nr)
784 return retval; 764 return retval;
785} 765}
786 766
787static int chessclock_set_int(char* string, 767static int chessclock_set_int(char* string,
788 int* variable, 768 int* variable,
789 int step, 769 int step,
790 int min, 770 int min,
@@ -856,4 +836,3 @@ static char * show_time(int seconds)
856 rb->snprintf(buf, sizeof(buf), "%02d:%02d", seconds/60, seconds%60); 836 rb->snprintf(buf, sizeof(buf), "%02d:%02d", seconds/60, seconds%60);
857 return buf; 837 return buf;
858} 838}
859
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index bbea442d8e..84e8e709c4 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -57,7 +57,7 @@
57#ifndef EXTERN 57#ifndef EXTERN
58#define EXTERN extern 58#define EXTERN extern
59#endif 59#endif
60 60
61typedef unsigned char byte; /* sizeof(byte)==1 */ 61typedef unsigned char byte; /* sizeof(byte)==1 */
62typedef unsigned short word; /* sizeof(word)>=2 */ 62typedef unsigned short word; /* sizeof(word)>=2 */
63 63
@@ -390,11 +390,11 @@ static void op_system (word opcode)
390 break; 390 break;
391 case 0xfc: 391 case 0xfc:
392 scroll_left(); 392 scroll_left();
393 break; 393 break;
394 case 0xfd: 394 case 0xfd:
395 DBG_(printf("SUPER: quit the emulator\n")); 395 DBG_(printf("SUPER: quit the emulator\n"));
396 chip8_reset(); 396 chip8_reset();
397 break; 397 break;
398 case 0xfe: 398 case 0xfe:
399 DBG_(printf("SUPER: set CHIP-8 graphic mode\n")); 399 DBG_(printf("SUPER: set CHIP-8 graphic mode\n"));
400 memset (chip8_display,0,sizeof(chip8_display)); 400 memset (chip8_display,0,sizeof(chip8_display));
@@ -404,7 +404,7 @@ static void op_system (word opcode)
404 DBG_(printf("SUPER: set SCHIP graphic mode\n")); 404 DBG_(printf("SUPER: set SCHIP graphic mode\n"));
405 memset (chip8_display,0,sizeof(chip8_display)); 405 memset (chip8_display,0,sizeof(chip8_display));
406 chip8_super = 1; 406 chip8_super = 1;
407 break; 407 break;
408#endif 408#endif
409 case 0xe0: 409 case 0xe0:
410 memset (chip8_display,0,sizeof(chip8_display)); 410 memset (chip8_display,0,sizeof(chip8_display));
@@ -553,7 +553,7 @@ static void op_sprite (word opcode)
553 x &= 64-1; 553 x &= 64-1;
554 y &= 32-1; 554 y &= 32-1;
555 q=chip8_display+y*CHIP8_WIDTH*2; 555 q=chip8_display+y*CHIP8_WIDTH*2;
556 if(n == 0) 556 if(n == 0)
557 n = 16; 557 n = 16;
558 if (n+y>32) 558 if (n+y>32)
559 n=32-y; 559 n=32-y;
@@ -838,7 +838,7 @@ STATIC void chip8_execute(void)
838 --chip8_regs.delay; 838 --chip8_regs.delay;
839 if (chip8_regs.sound) 839 if (chip8_regs.sound)
840 if (--chip8_regs.sound == 0) 840 if (--chip8_regs.sound == 0)
841 chip8_sound_off(); 841 chip8_sound_off();
842 842
843 /* Update the machine status */ 843 /* Update the machine status */
844 chip8_interrupt (); 844 chip8_interrupt ();
@@ -1092,7 +1092,7 @@ CONFIG_KEYPAD == SANSA_M200_PAD
1092#define CHIP8_KEY8 BUTTON_DOWN 1092#define CHIP8_KEY8 BUTTON_DOWN
1093#define CHIP8_KEY9 BUTTON_VIEW 1093#define CHIP8_KEY9 BUTTON_VIEW
1094#define CHIP8_KEY0 BUTTON_VOL_DOWN 1094#define CHIP8_KEY0 BUTTON_VOL_DOWN
1095 1095
1096#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD 1096#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
1097#define CHIP8_OFF BUTTON_POWER 1097#define CHIP8_OFF BUTTON_POWER
1098#define CHIP8_KEY1 BUTTON_LEFT 1098#define CHIP8_KEY1 BUTTON_LEFT
@@ -1251,23 +1251,7 @@ CONFIG_KEYPAD == MROBE500_PAD
1251#define CHIP8_KEY6 BUTTON_RIGHT 1251#define CHIP8_KEY6 BUTTON_RIGHT
1252#define CHIP8_KEY8 BUTTON_LEFT 1252#define CHIP8_KEY8 BUTTON_LEFT
1253 1253
1254#elif CONFIG_KEYPAD == XDUOO_X3_PAD 1254#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
1255#define CHIP8_OFF BUTTON_POWER
1256#define CHIP8_KEY2 BUTTON_HOME
1257#define CHIP8_KEY4 BUTTON_PREV
1258#define CHIP8_KEY5 BUTTON_PLAY
1259#define CHIP8_KEY6 BUTTON_NEXT
1260#define CHIP8_KEY8 BUTTON_OPTION
1261
1262#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
1263#define CHIP8_OFF BUTTON_POWER
1264#define CHIP8_KEY2 BUTTON_HOME
1265#define CHIP8_KEY4 BUTTON_PREV
1266#define CHIP8_KEY5 BUTTON_PLAY
1267#define CHIP8_KEY6 BUTTON_NEXT
1268#define CHIP8_KEY8 BUTTON_OPTION
1269
1270#elif CONFIG_KEYPAD == XDUOO_X20_PAD
1271#define CHIP8_OFF BUTTON_POWER 1255#define CHIP8_OFF BUTTON_POWER
1272#define CHIP8_KEY2 BUTTON_HOME 1256#define CHIP8_KEY2 BUTTON_HOME
1273#define CHIP8_KEY4 BUTTON_PREV 1257#define CHIP8_KEY4 BUTTON_PREV
@@ -1283,7 +1267,7 @@ CONFIG_KEYPAD == MROBE500_PAD
1283#define CHIP8_KEY6 BUTTON_NEXT 1267#define CHIP8_KEY6 BUTTON_NEXT
1284#define CHIP8_KEY8 BUTTON_OPTION 1268#define CHIP8_KEY8 BUTTON_OPTION
1285 1269
1286#elif CONFIG_KEYPAD == IHIFI_770_PAD 1270#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
1287#define CHIP8_OFF BUTTON_POWER 1271#define CHIP8_OFF BUTTON_POWER
1288#define CHIP8_KEY2 BUTTON_NEXT 1272#define CHIP8_KEY2 BUTTON_NEXT
1289#define CHIP8_KEY4 BUTTON_HOME 1273#define CHIP8_KEY4 BUTTON_HOME
@@ -1291,12 +1275,12 @@ CONFIG_KEYPAD == MROBE500_PAD
1291#define CHIP8_KEY6 BUTTON_VOL_DOWN 1275#define CHIP8_KEY6 BUTTON_VOL_DOWN
1292#define CHIP8_KEY8 BUTTON_PREV 1276#define CHIP8_KEY8 BUTTON_PREV
1293 1277
1294#elif CONFIG_KEYPAD == IHIFI_800_PAD 1278#elif CONFIG_KEYPAD == EROSQ_PAD
1295#define CHIP8_OFF BUTTON_POWER 1279#define CHIP8_OFF BUTTON_POWER
1296#define CHIP8_KEY2 BUTTON_NEXT 1280#define CHIP8_KEY2 BUTTON_NEXT
1297#define CHIP8_KEY4 BUTTON_HOME 1281#define CHIP8_KEY4 BUTTON_MENU
1298#define CHIP8_KEY5 BUTTON_VOL_UP 1282#define CHIP8_KEY5 BUTTON_PLAY
1299#define CHIP8_KEY6 BUTTON_VOL_DOWN 1283#define CHIP8_KEY6 BUTTON_BACK
1300#define CHIP8_KEY8 BUTTON_PREV 1284#define CHIP8_KEY8 BUTTON_PREV
1301 1285
1302#else 1286#else
@@ -1342,15 +1326,15 @@ static unsigned long cycles; /* Number of update cycles (50Hz) */
1342/****************************************************************************/ 1326/****************************************************************************/
1343/* Turn sound on */ 1327/* Turn sound on */
1344/****************************************************************************/ 1328/****************************************************************************/
1345static void chip8_sound_on (void) 1329static void chip8_sound_on (void)
1346{ 1330{
1347} 1331}
1348 1332
1349/****************************************************************************/ 1333/****************************************************************************/
1350/* Turn sound off */ 1334/* Turn sound off */
1351/****************************************************************************/ 1335/****************************************************************************/
1352static void chip8_sound_off (void) 1336static void chip8_sound_off (void)
1353{ 1337{
1354} 1338}
1355 1339
1356/****************************************************************************/ 1340/****************************************************************************/
@@ -1587,7 +1571,7 @@ enum plugin_status plugin_start(const void* parameter)
1587 } 1571 }
1588 else 1572 else
1589 { 1573 {
1590 filename = (char*) parameter; 1574 filename = (char*) parameter;
1591 } 1575 }
1592 1576
1593 /* now go ahead and have fun! */ 1577 /* now go ahead and have fun! */
diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c
index 6e9f923460..35c80a960b 100644
--- a/apps/plugins/chopper.c
+++ b/apps/plugins/chopper.c
@@ -198,32 +198,7 @@ CONFIG_KEYPAD == MROBE500_PAD
198#define ACTION BUTTON_SELECT 198#define ACTION BUTTON_SELECT
199#define ACTIONTEXT "Select" 199#define ACTIONTEXT "Select"
200 200
201#elif CONFIG_KEYPAD == XDUOO_X3_PAD 201#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD || CONFIG_KEYPAD == FIIO_M3K_PAD || CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD || CONFIG_KEYPAD == EROSQ_PAD
202#define QUIT BUTTON_POWER
203#define ACTION BUTTON_PLAY
204#define ACTIONTEXT "PLAY"
205
206#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
207#define QUIT BUTTON_POWER
208#define ACTION BUTTON_PLAY
209#define ACTIONTEXT "PLAY"
210
211#elif CONFIG_KEYPAD == XDUOO_X20_PAD
212#define QUIT BUTTON_POWER
213#define ACTION BUTTON_PLAY
214#define ACTIONTEXT "PLAY"
215
216#elif CONFIG_KEYPAD == FIIO_M3K_PAD
217#define QUIT BUTTON_POWER
218#define ACTION BUTTON_PLAY
219#define ACTIONTEXT "PLAY"
220
221#elif CONFIG_KEYPAD == IHIFI_770_PAD
222#define QUIT BUTTON_POWER
223#define ACTION BUTTON_PLAY
224#define ACTIONTEXT "PLAY"
225
226#elif CONFIG_KEYPAD == IHIFI_800_PAD
227#define QUIT BUTTON_POWER 202#define QUIT BUTTON_POWER
228#define ACTION BUTTON_PLAY 203#define ACTION BUTTON_PLAY
229#define ACTIONTEXT "PLAY" 204#define ACTIONTEXT "PLAY"
@@ -735,7 +710,7 @@ static void chopDrawScene(void)
735#elif LCD_DEPTH == 2 710#elif LCD_DEPTH == 2
736 rb->lcd_set_foreground(LCD_WHITE); 711 rb->lcd_set_foreground(LCD_WHITE);
737#endif 712#endif
738 713
739#if LCD_WIDTH <= 128 714#if LCD_WIDTH <= 128
740 rb->snprintf(s, sizeof(s), "Dist: %d", score); 715 rb->snprintf(s, sizeof(s), "Dist: %d", score);
741#else 716#else
@@ -781,7 +756,7 @@ static int chopMenu(int menunum)
781 { "Normal", -1 }, 756 { "Normal", -1 },
782 { "Steep", -1 }, 757 { "Steep", -1 },
783 }; 758 };
784 759
785 MENUITEM_STRINGLIST(menu,"Chopper Menu",chopMenuCb, 760 MENUITEM_STRINGLIST(menu,"Chopper Menu",chopMenuCb,
786 "Resume Game","Start New Game", 761 "Resume Game","Start New Game",
787 "Level","Playback Control","Quit"); 762 "Level","Playback Control","Quit");
diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c
index d6b28b54b9..08264e8490 100644
--- a/apps/plugins/clix.c
+++ b/apps/plugins/clix.c
@@ -284,15 +284,7 @@
284#define CLIX_BUTTON_RIGHT BUTTON_NEXT 284#define CLIX_BUTTON_RIGHT BUTTON_NEXT
285#define CLIX_BUTTON_CLICK BUTTON_PLAY 285#define CLIX_BUTTON_CLICK BUTTON_PLAY
286 286
287#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 287#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
288#define CLIX_BUTTON_QUIT BUTTON_POWER
289#define CLIX_BUTTON_UP BUTTON_HOME
290#define CLIX_BUTTON_DOWN BUTTON_OPTION
291#define CLIX_BUTTON_LEFT BUTTON_PREV
292#define CLIX_BUTTON_RIGHT BUTTON_NEXT
293#define CLIX_BUTTON_CLICK BUTTON_PLAY
294
295#elif CONFIG_KEYPAD == XDUOO_X20_PAD
296#define CLIX_BUTTON_QUIT BUTTON_POWER 288#define CLIX_BUTTON_QUIT BUTTON_POWER
297#define CLIX_BUTTON_UP BUTTON_HOME 289#define CLIX_BUTTON_UP BUTTON_HOME
298#define CLIX_BUTTON_DOWN BUTTON_OPTION 290#define CLIX_BUTTON_DOWN BUTTON_OPTION
@@ -308,7 +300,7 @@
308#define CLIX_BUTTON_RIGHT BUTTON_NEXT 300#define CLIX_BUTTON_RIGHT BUTTON_NEXT
309#define CLIX_BUTTON_CLICK BUTTON_PLAY 301#define CLIX_BUTTON_CLICK BUTTON_PLAY
310 302
311#elif CONFIG_KEYPAD == IHIFI_770_PAD 303#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
312#define CLIX_BUTTON_QUIT BUTTON_POWER 304#define CLIX_BUTTON_QUIT BUTTON_POWER
313#define CLIX_BUTTON_UP BUTTON_PREV 305#define CLIX_BUTTON_UP BUTTON_PREV
314#define CLIX_BUTTON_DOWN BUTTON_NEXT 306#define CLIX_BUTTON_DOWN BUTTON_NEXT
@@ -316,13 +308,13 @@
316#define CLIX_BUTTON_RIGHT BUTTON_VOL_DOWN 308#define CLIX_BUTTON_RIGHT BUTTON_VOL_DOWN
317#define CLIX_BUTTON_CLICK BUTTON_VOL_UP 309#define CLIX_BUTTON_CLICK BUTTON_VOL_UP
318 310
319#elif CONFIG_KEYPAD == IHIFI_800_PAD 311#elif CONFIG_KEYPAD == EROSQ_PAD
320#define CLIX_BUTTON_QUIT BUTTON_POWER 312#define CLIX_BUTTON_QUIT BUTTON_POWER
321#define CLIX_BUTTON_UP BUTTON_PREV 313#define CLIX_BUTTON_UP BUTTON_PREV
322#define CLIX_BUTTON_DOWN BUTTON_NEXT 314#define CLIX_BUTTON_DOWN BUTTON_NEXT
323#define CLIX_BUTTON_LEFT BUTTON_HOME 315#define CLIX_BUTTON_LEFT BUTTON_SCROLL_BACK
324#define CLIX_BUTTON_RIGHT BUTTON_VOL_DOWN 316#define CLIX_BUTTON_RIGHT BUTTON_SCROLL_FWD
325#define CLIX_BUTTON_CLICK BUTTON_VOL_UP 317#define CLIX_BUTTON_CLICK BUTTON_PLAY
326 318
327#else 319#else
328#error "no keymap" 320#error "no keymap"
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index 87ab5c1102..416bf1105d 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -370,27 +370,7 @@
370#define CUBE_HIGHSPEED (BUTTON_SELECT | BUTTON_REPEAT) 370#define CUBE_HIGHSPEED (BUTTON_SELECT | BUTTON_REPEAT)
371#define CUBE_PAUSE (BUTTON_LEFT | BUTTON_REPEAT) 371#define CUBE_PAUSE (BUTTON_LEFT | BUTTON_REPEAT)
372 372
373#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) 373#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) || (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
374#define CUBE_QUIT BUTTON_POWER
375#define CUBE_NEXT BUTTON_NEXT
376#define CUBE_PREV BUTTON_PREV
377#define CUBE_INC BUTTON_VOL_UP
378#define CUBE_DEC BUTTON_VOL_DOWN
379#define CUBE_MODE BUTTON_OPTION
380#define CUBE_PAUSE BUTTON_HOME
381#define CUBE_HIGHSPEED BUTTON_PLAY
382
383#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD)
384#define CUBE_QUIT BUTTON_POWER
385#define CUBE_NEXT BUTTON_NEXT
386#define CUBE_PREV BUTTON_PREV
387#define CUBE_INC BUTTON_VOL_UP
388#define CUBE_DEC BUTTON_VOL_DOWN
389#define CUBE_MODE BUTTON_OPTION
390#define CUBE_PAUSE BUTTON_HOME
391#define CUBE_HIGHSPEED BUTTON_PLAY
392
393#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
394#define CUBE_QUIT BUTTON_POWER 374#define CUBE_QUIT BUTTON_POWER
395#define CUBE_NEXT BUTTON_NEXT 375#define CUBE_NEXT BUTTON_NEXT
396#define CUBE_PREV BUTTON_PREV 376#define CUBE_PREV BUTTON_PREV
@@ -410,7 +390,7 @@
410#define CUBE_PAUSE BUTTON_HOME 390#define CUBE_PAUSE BUTTON_HOME
411#define CUBE_HIGHSPEED BUTTON_PLAY 391#define CUBE_HIGHSPEED BUTTON_PLAY
412 392
413#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 393#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
414#define CUBE_QUIT BUTTON_POWER 394#define CUBE_QUIT BUTTON_POWER
415#define CUBE_NEXT BUTTON_NEXT 395#define CUBE_NEXT BUTTON_NEXT
416#define CUBE_PREV BUTTON_PREV 396#define CUBE_PREV BUTTON_PREV
@@ -420,14 +400,14 @@
420#define CUBE_PAUSE BUTTON_HOME 400#define CUBE_PAUSE BUTTON_HOME
421#define CUBE_HIGHSPEED BUTTON_PLAY 401#define CUBE_HIGHSPEED BUTTON_PLAY
422 402
423#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 403#elif CONFIG_KEYPAD == EROSQ_PAD
424#define CUBE_QUIT BUTTON_POWER 404#define CUBE_QUIT BUTTON_POWER
425#define CUBE_NEXT BUTTON_NEXT 405#define CUBE_NEXT BUTTON_NEXT
426#define CUBE_PREV BUTTON_PREV 406#define CUBE_PREV BUTTON_PREV
427#define CUBE_INC BUTTON_VOL_UP 407#define CUBE_INC BUTTON_SCROLL_FWD
428#define CUBE_DEC BUTTON_VOL_DOWN 408#define CUBE_DEC BUTTON_SCROLL_BACK
429#define CUBE_MODE (BUTTON_HOME | BUTTON_POWER) 409#define CUBE_MODE BUTTON_MENU
430#define CUBE_PAUSE BUTTON_HOME 410#define CUBE_PAUSE BUTTON_BACK
431#define CUBE_HIGHSPEED BUTTON_PLAY 411#define CUBE_HIGHSPEED BUTTON_PLAY
432 412
433#else 413#else
@@ -666,7 +646,7 @@ static void cube_draw(void)
666 { 646 {
667#if LCD_DEPTH > 1 || defined(USEGSLIB) 647#if LCD_DEPTH > 1 || defined(USEGSLIB)
668 case SOLID: 648 case SOLID:
669 649
670 old_foreground = mylcd_get_foreground(); 650 old_foreground = mylcd_get_foreground();
671 for (i = 0; i < 6; i++) 651 for (i = 0; i < 6; i++)
672 { 652 {
@@ -882,7 +862,7 @@ enum plugin_status plugin_start(const void* parameter)
882 t_disp = DISP_TIME; 862 t_disp = DISP_TIME;
883 redraw = true; 863 redraw = true;
884 break; 864 break;
885 865
886 case CUBE_NEXT: 866 case CUBE_NEXT:
887 if (++curr > 2) 867 if (++curr > 2)
888 curr = 0; 868 curr = 0;
@@ -947,5 +927,3 @@ enum plugin_status plugin_start(const void* parameter)
947 927
948 return PLUGIN_OK; 928 return PLUGIN_OK;
949} 929}
950
951
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index cd3cd90edd..1fb913fbed 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -566,18 +566,7 @@ void I_ShutdownGraphics(void)
566#define DOOMBUTTON_ENTER BUTTON_PLAY 566#define DOOMBUTTON_ENTER BUTTON_PLAY
567#define DOOMBUTTON_WEAPON BUTTON_VOL_UP 567#define DOOMBUTTON_WEAPON BUTTON_VOL_UP
568 568
569#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 569#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
570#define DOOMBUTTON_UP BUTTON_HOME
571#define DOOMBUTTON_DOWN BUTTON_OPTION
572#define DOOMBUTTON_LEFT BUTTON_PREV
573#define DOOMBUTTON_RIGHT BUTTON_NEXT
574#define DOOMBUTTON_SHOOT BUTTON_PLAY
575#define DOOMBUTTON_OPEN (BUTTON_HOME | BUTTON_POWER)
576#define DOOMBUTTON_ESC BUTTON_POWER
577#define DOOMBUTTON_ENTER BUTTON_PLAY
578#define DOOMBUTTON_WEAPON BUTTON_VOL_UP
579
580#elif CONFIG_KEYPAD == XDUOO_X20_PAD
581#define DOOMBUTTON_UP BUTTON_HOME 570#define DOOMBUTTON_UP BUTTON_HOME
582#define DOOMBUTTON_DOWN BUTTON_OPTION 571#define DOOMBUTTON_DOWN BUTTON_OPTION
583#define DOOMBUTTON_LEFT BUTTON_PREV 572#define DOOMBUTTON_LEFT BUTTON_PREV
@@ -599,7 +588,7 @@ void I_ShutdownGraphics(void)
599#define DOOMBUTTON_ENTER BUTTON_PLAY 588#define DOOMBUTTON_ENTER BUTTON_PLAY
600#define DOOMBUTTON_WEAPON BUTTON_VOL_UP 589#define DOOMBUTTON_WEAPON BUTTON_VOL_UP
601 590
602#elif CONFIG_KEYPAD == IHIFI_770_PAD 591#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
603#define DOOMBUTTON_UP BUTTON_PREV 592#define DOOMBUTTON_UP BUTTON_PREV
604#define DOOMBUTTON_DOWN BUTTON_NEXT 593#define DOOMBUTTON_DOWN BUTTON_NEXT
605#define DOOMBUTTON_LEFT BUTTON_HOME 594#define DOOMBUTTON_LEFT BUTTON_HOME
@@ -611,17 +600,17 @@ void I_ShutdownGraphics(void)
611#define DOOMBUTTON_WEAPON (BUTTON_PLAY|BUTTON_REPEAT) 600#define DOOMBUTTON_WEAPON (BUTTON_PLAY|BUTTON_REPEAT)
612#define DOOMBUTTON_MAP (BUTTON_POWER|BUTTON_REPEAT) 601#define DOOMBUTTON_MAP (BUTTON_POWER|BUTTON_REPEAT)
613 602
614#elif CONFIG_KEYPAD == IHIFI_800_PAD 603#elif CONFIG_KEYPAD == EROSQ_PAD
615#define DOOMBUTTON_UP BUTTON_PREV 604#define DOOMBUTTON_UP BUTTON_PREV
616#define DOOMBUTTON_DOWN BUTTON_NEXT 605#define DOOMBUTTON_DOWN BUTTON_NEXT
617#define DOOMBUTTON_LEFT BUTTON_HOME 606#define DOOMBUTTON_LEFT BUTTON_SCROLL_BACK
618#define DOOMBUTTON_RIGHT BUTTON_VOL_DOWN 607#define DOOMBUTTON_RIGHT BUTTON_SCROLL_FWD
619#define DOOMBUTTON_OPEN BUTTON_PLAY 608#define DOOMBUTTON_SHOOT BUTTON_PLAY
620#define DOOMBUTTON_ESC BUTTON_POWER 609#define DOOMBUTTON_OPEN BUTTON_BACK
621#define DOOMBUTTON_ENTER BUTTON_VOL_UP 610#define DOOMBUTTON_ESC BUTTON_MENU
622#define DOOMBUTTON_SHOOT BUTTON_VOL_UP 611#define DOOMBUTTON_ENTER BUTTON_PLAY
623#define DOOMBUTTON_WEAPON (BUTTON_PLAY|BUTTON_REPEAT) 612#define DOOMBUTTON_WEAPON BUTTON_VOL_UP
624#define DOOMBUTTON_MAP (BUTTON_POWER|BUTTON_REPEAT) 613#define DOOMBUTTON_MAP BUTTON_VOL_DOWN
625 614
626#else 615#else
627#error Keymap not defined! 616#error Keymap not defined!
@@ -745,7 +734,7 @@ static inline void getkey()
745 D_PostEvent(&event); 734 D_PostEvent(&event);
746 } 735 }
747#endif 736#endif
748#endif 737#endif
749 newbuttonstate = rb->button_status(); 738 newbuttonstate = rb->button_status();
750#ifdef DOOMBUTTON_SCROLLWHEEL 739#ifdef DOOMBUTTON_SCROLLWHEEL
751 newbuttonstate |= read_scroll_wheel(); 740 newbuttonstate |= read_scroll_wheel();
@@ -954,7 +943,7 @@ void I_FinishUpdate (void)
954{ 943{
955 int count; 944 int count;
956 byte *src = d_screens[0]; 945 byte *src = d_screens[0];
957 946
958#if (CONFIG_LCD == LCD_H300) && !defined(SIMULATOR) 947#if (CONFIG_LCD == LCD_H300) && !defined(SIMULATOR)
959 count = SCREENWIDTH*SCREENHEIGHT; 948 count = SCREENWIDTH*SCREENHEIGHT;
960 949
@@ -1091,7 +1080,7 @@ void I_FinishUpdate (void)
1091 *dst++ = palette[*src++]; 1080 *dst++ = palette[*src++];
1092 while (--count); 1081 while (--count);
1093 } 1082 }
1094 rb->lcd_update(); 1083 rb->lcd_update();
1095#else /* !HAVE_LCD_COLOR */ 1084#else /* !HAVE_LCD_COLOR */
1096 1085
1097 unsigned char *dst; 1086 unsigned char *dst;
@@ -1108,8 +1097,8 @@ void I_FinishUpdate (void)
1108 1097
1109 grey_ub_gray_bitmap(greybuffer, 0, y, SCREENWIDTH, 1); 1098 grey_ub_gray_bitmap(greybuffer, 0, y, SCREENWIDTH, 1);
1110 } 1099 }
1111#endif 1100#endif
1112#endif 1101#endif
1113} 1102}
1114 1103
1115// 1104//
@@ -1136,7 +1125,7 @@ void I_InitGraphics(void)
1136 printf("Starting Graphics engine\n"); 1125 printf("Starting Graphics engine\n");
1137 1126
1138 noprintf=1; 1127 noprintf=1;
1139 1128
1140#if defined(HAVE_LCD_MODES) 1129#if defined(HAVE_LCD_MODES)
1141#if (HAVE_LCD_MODES & LCD_MODE_PAL256) 1130#if (HAVE_LCD_MODES & LCD_MODE_PAL256)
1142 rb->lcd_set_mode(LCD_MODE_PAL256); 1131 rb->lcd_set_mode(LCD_MODE_PAL256);
diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c
index eeb6611488..4719446475 100644
--- a/apps/plugins/fft/fft.c
+++ b/apps/plugins/fft/fft.c
@@ -334,16 +334,7 @@ GREY_INFO_STRUCT
334# define FFT_AMP_SCALE BUTTON_PLAY 334# define FFT_AMP_SCALE BUTTON_PLAY
335# define FFT_QUIT BUTTON_POWER 335# define FFT_QUIT BUTTON_POWER
336 336
337#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) 337#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
338# define FFT_PREV_GRAPH BUTTON_PREV
339# define FFT_NEXT_GRAPH BUTTON_NEXT
340# define FFT_ORIENTATION BUTTON_HOME
341# define FFT_FREQ_SCALE BUTTON_OPTION
342# define FFT_WINDOW (BUTTON_HOME|BUTTON_POWER)
343# define FFT_AMP_SCALE BUTTON_PLAY
344# define FFT_QUIT BUTTON_POWER
345
346#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
347# define FFT_PREV_GRAPH BUTTON_PREV 338# define FFT_PREV_GRAPH BUTTON_PREV
348# define FFT_NEXT_GRAPH BUTTON_NEXT 339# define FFT_NEXT_GRAPH BUTTON_NEXT
349# define FFT_ORIENTATION BUTTON_HOME 340# define FFT_ORIENTATION BUTTON_HOME
@@ -361,7 +352,7 @@ GREY_INFO_STRUCT
361# define FFT_AMP_SCALE BUTTON_PLAY 352# define FFT_AMP_SCALE BUTTON_PLAY
362# define FFT_QUIT BUTTON_POWER 353# define FFT_QUIT BUTTON_POWER
363 354
364#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 355#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
365# define FFT_PREV_GRAPH BUTTON_PREV 356# define FFT_PREV_GRAPH BUTTON_PREV
366# define FFT_NEXT_GRAPH BUTTON_NEXT 357# define FFT_NEXT_GRAPH BUTTON_NEXT
367# define FFT_ORIENTATION BUTTON_HOME 358# define FFT_ORIENTATION BUTTON_HOME
@@ -370,13 +361,13 @@ GREY_INFO_STRUCT
370# define FFT_AMP_SCALE BUTTON_PLAY 361# define FFT_AMP_SCALE BUTTON_PLAY
371# define FFT_QUIT BUTTON_POWER 362# define FFT_QUIT BUTTON_POWER
372 363
373#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 364#elif (CONFIG_KEYPAD == EROSQ_PAD)
374# define FFT_PREV_GRAPH BUTTON_PREV 365# define FFT_PREV_GRAPH BUTTON_SCROLL_BACK
375# define FFT_NEXT_GRAPH BUTTON_NEXT 366# define FFT_NEXT_GRAPH BUTTON_SCROLL_FWD
376# define FFT_ORIENTATION BUTTON_HOME 367# define FFT_ORIENTATION BUTTON_VOL_UP
377# define FFT_FREQ_SCALE BUTTON_VOL_UP 368# define FFT_FREQ_SCALE BUTTON_VOL_DOWN
378# define FFT_WINDOW BUTTON_VOL_DOWN 369# define FFT_WINDOW BUTTON_BACK
379# define FFT_AMP_SCALE BUTTON_PLAY 370# define FFT_AMP_SCALE BUTTON_MENU
380# define FFT_QUIT BUTTON_POWER 371# define FFT_QUIT BUTTON_POWER
381 372
382#elif !defined(HAVE_TOUCHSCREEN) 373#elif !defined(HAVE_TOUCHSCREEN)
@@ -530,7 +521,7 @@ static struct fft_config
530 int amp_scale; 521 int amp_scale;
531 int freq_scale; 522 int freq_scale;
532 int window_func; 523 int window_func;
533} fft_disk = 524} fft_disk =
534{ 525{
535 /* Defaults */ 526 /* Defaults */
536 .orientation = FFT_OR_VERT, 527 .orientation = FFT_OR_VERT,
@@ -647,7 +638,7 @@ static void apply_window_func(enum fft_window_func mode)
647/* Calculates the magnitudes from complex numbers and returns the maximum */ 638/* Calculates the magnitudes from complex numbers and returns the maximum */
648static unsigned calc_magnitudes(enum fft_amp_scale scale) 639static unsigned calc_magnitudes(enum fft_amp_scale scale)
649{ 640{
650 /* A major assumption made when calculating the Q*MAX constants 641 /* A major assumption made when calculating the Q*MAX constants
651 * is that the maximum magnitude is 29 bits long. */ 642 * is that the maximum magnitude is 29 bits long. */
652 unsigned this_max = 0; 643 unsigned this_max = 0;
653 kiss_fft_cpx *this_output = output[output_head] + 1; /* skip DC */ 644 kiss_fft_cpx *this_output = output[output_head] + 1; /* skip DC */
@@ -806,7 +797,7 @@ static void draw_lines_vertical(unsigned this_max, unsigned graph_max)
806 { 797 {
807 int bins_acc = LCD_WIDTH / 2; 798 int bins_acc = LCD_WIDTH / 2;
808 unsigned bins_max = 0; 799 unsigned bins_max = 0;
809 800
810 for(int i = 0, x = 0; i < ARRAYLEN_PLOT; ++i) 801 for(int i = 0, x = 0; i < ARRAYLEN_PLOT; ++i)
811 { 802 {
812 unsigned bin = plot[i]; 803 unsigned bin = plot[i];
@@ -1107,7 +1098,7 @@ static inline bool fft_get_fft(void)
1107 /* This block can introduce discontinuities in our data. Meaning, the 1098 /* This block can introduce discontinuities in our data. Meaning, the
1108 * FFT will not be done a continuous segment of the signal. Which can 1099 * FFT will not be done a continuous segment of the signal. Which can
1109 * be bad. Or not. 1100 * be bad. Or not.
1110 * 1101 *
1111 * Anyway, this is a demo, not a scientific tool. If you want accuracy, 1102 * Anyway, this is a demo, not a scientific tool. If you want accuracy,
1112 * do a proper spectrum analysis.*/ 1103 * do a proper spectrum analysis.*/
1113 1104
@@ -1409,7 +1400,7 @@ static void fft_setting_update(unsigned which)
1409 [FFT_OR_HORZ] = draw_bars_horizontal, 1400 [FFT_OR_HORZ] = draw_bars_horizontal,
1410 [FFT_OR_VERT] = draw_bars_vertical, 1401 [FFT_OR_VERT] = draw_bars_vertical,
1411 }, 1402 },
1412 [FFT_DM_SPECTROGRAM] = 1403 [FFT_DM_SPECTROGRAM] =
1413 { 1404 {
1414 [FFT_OR_HORZ] = draw_spectrogram_horizontal, 1405 [FFT_OR_HORZ] = draw_spectrogram_horizontal,
1415 [FFT_OR_VERT] = draw_spectrogram_vertical, 1406 [FFT_OR_VERT] = draw_spectrogram_vertical,
@@ -1533,7 +1524,7 @@ static void fft_cleanup(void)
1533{ 1524{
1534 myosd_destroy(); 1525 myosd_destroy();
1535 1526
1536 fft_close_fft(); 1527 fft_close_fft();
1537 1528
1538#ifdef HAVE_ADJUSTABLE_CPU_FREQ 1529#ifdef HAVE_ADJUSTABLE_CPU_FREQ
1539 rb->cancel_cpu_boost(); 1530 rb->cancel_cpu_boost();
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index 4fe0681417..a4d59fff3d 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -436,31 +436,7 @@
436#define FLIPIT_STEP_BY_STEP (BUTTON_LEFT|BUTTON_VOLUP) 436#define FLIPIT_STEP_BY_STEP (BUTTON_LEFT|BUTTON_VOLUP)
437#define FLIPIT_TOGGLE BUTTON_SELECT 437#define FLIPIT_TOGGLE BUTTON_SELECT
438 438
439#elif CONFIG_KEYPAD == XDUOO_X3_PAD 439#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
440
441#define FLIPIT_LEFT BUTTON_PREV
442#define FLIPIT_RIGHT BUTTON_NEXT
443#define FLIPIT_UP BUTTON_HOME
444#define FLIPIT_DOWN BUTTON_OPTION
445#define FLIPIT_QUIT BUTTON_POWER
446#define FLIPIT_SHUFFLE (BUTTON_HOME | BUTTON_PREV)
447#define FLIPIT_SOLVE (BUTTON_HOME | BUTTON_NEXT)
448#define FLIPIT_STEP_BY_STEP (BUTTON_HOME | BUTTON_PLAY)
449#define FLIPIT_TOGGLE BUTTON_PLAY
450
451#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
452
453#define FLIPIT_LEFT BUTTON_PREV
454#define FLIPIT_RIGHT BUTTON_NEXT
455#define FLIPIT_UP BUTTON_HOME
456#define FLIPIT_DOWN BUTTON_OPTION
457#define FLIPIT_QUIT BUTTON_POWER
458#define FLIPIT_SHUFFLE (BUTTON_HOME | BUTTON_PREV)
459#define FLIPIT_SOLVE (BUTTON_HOME | BUTTON_NEXT)
460#define FLIPIT_STEP_BY_STEP (BUTTON_HOME | BUTTON_PLAY)
461#define FLIPIT_TOGGLE BUTTON_PLAY
462
463#elif CONFIG_KEYPAD == XDUOO_X20_PAD
464 440
465#define FLIPIT_LEFT BUTTON_PREV 441#define FLIPIT_LEFT BUTTON_PREV
466#define FLIPIT_RIGHT BUTTON_NEXT 442#define FLIPIT_RIGHT BUTTON_NEXT
@@ -484,7 +460,7 @@
484#define FLIPIT_STEP_BY_STEP (BUTTON_HOME | BUTTON_PLAY) 460#define FLIPIT_STEP_BY_STEP (BUTTON_HOME | BUTTON_PLAY)
485#define FLIPIT_TOGGLE BUTTON_PLAY 461#define FLIPIT_TOGGLE BUTTON_PLAY
486 462
487#elif CONFIG_KEYPAD == IHIFI_770_PAD 463#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
488 464
489#define FLIPIT_LEFT BUTTON_HOME 465#define FLIPIT_LEFT BUTTON_HOME
490#define FLIPIT_RIGHT BUTTON_VOL_DOWN 466#define FLIPIT_RIGHT BUTTON_VOL_DOWN
@@ -496,16 +472,16 @@
496#define FLIPIT_STEP_BY_STEP (BUTTON_POWER | BUTTON_PLAY) 472#define FLIPIT_STEP_BY_STEP (BUTTON_POWER | BUTTON_PLAY)
497#define FLIPIT_TOGGLE BUTTON_PLAY 473#define FLIPIT_TOGGLE BUTTON_PLAY
498 474
499#elif CONFIG_KEYPAD == IHIFI_800_PAD 475#elif CONFIG_KEYPAD == EROSQ_PAD
500 476
501#define FLIPIT_LEFT BUTTON_HOME 477#define FLIPIT_LEFT BUTTON_SCROLL_BACK
502#define FLIPIT_RIGHT BUTTON_VOL_DOWN 478#define FLIPIT_RIGHT BUTTON_SCROLL_FWD
503#define FLIPIT_UP BUTTON_PREV 479#define FLIPIT_UP BUTTON_PREV
504#define FLIPIT_DOWN BUTTON_NEXT 480#define FLIPIT_DOWN BUTTON_NEXT
505#define FLIPIT_QUIT BUTTON_POWER 481#define FLIPIT_QUIT BUTTON_POWER
506#define FLIPIT_SHUFFLE (BUTTON_POWER | BUTTON_PREV) 482#define FLIPIT_SHUFFLE BUTTON_MENU
507#define FLIPIT_SOLVE (BUTTON_POWER | BUTTON_NEXT) 483#define FLIPIT_SOLVE BUTTON_VOL_DOWN
508#define FLIPIT_STEP_BY_STEP (BUTTON_POWER | BUTTON_PLAY) 484#define FLIPIT_STEP_BY_STEP BUTTON_VOL_UP
509#define FLIPIT_TOGGLE BUTTON_PLAY 485#define FLIPIT_TOGGLE BUTTON_PLAY
510 486
511#else 487#else
@@ -562,8 +538,8 @@ static int cursor_pos, moves;
562/* draw a spot at the coordinates (x,y), range of p is 0-19 */ 538/* draw a spot at the coordinates (x,y), range of p is 0-19 */
563static void draw_spot(int p) 539static void draw_spot(int p)
564{ 540{
565 rb->lcd_bitmap_part( flipit_tokens, 0, spots[p] * TK_HEIGHT, 541 rb->lcd_bitmap_part( flipit_tokens, 0, spots[p] * TK_HEIGHT,
566 STRIDE(SCREEN_MAIN, BMPWIDTH_flipit_tokens, 542 STRIDE(SCREEN_MAIN, BMPWIDTH_flipit_tokens,
567 BMPHEIGHT_flipit_tokens), 543 BMPHEIGHT_flipit_tokens),
568 GRID_LEFT + (p%5) * (TK_WIDTH+TK_SPACE), 544 GRID_LEFT + (p%5) * (TK_WIDTH+TK_SPACE),
569 GRID_TOP + (p/5) * (TK_HEIGHT+TK_SPACE), 545 GRID_TOP + (p/5) * (TK_HEIGHT+TK_SPACE),
@@ -571,7 +547,7 @@ static void draw_spot(int p)
571} 547}
572 548
573/* draw the cursor at the current cursor position */ 549/* draw the cursor at the current cursor position */
574static void draw_cursor(void) 550static void draw_cursor(void)
575{ 551{
576#ifdef HAVE_LCD_COLOR 552#ifdef HAVE_LCD_COLOR
577 rb->lcd_bitmap_transparent( flipit_cursor, 553 rb->lcd_bitmap_transparent( flipit_cursor,
@@ -612,7 +588,7 @@ static inline void clear_cursor(void)
612} 588}
613 589
614/* check if the puzzle is finished */ 590/* check if the puzzle is finished */
615static bool flipit_finished(void) 591static bool flipit_finished(void)
616{ 592{
617 int i; 593 int i;
618 for (i=0; i<20; i++) 594 for (i=0; i<20; i++)
@@ -653,7 +629,7 @@ static void flipit_toggle(void)
653} 629}
654 630
655/* move the cursor in any direction */ 631/* move the cursor in any direction */
656static void move_cursor(int x, int y) 632static void move_cursor(int x, int y)
657{ 633{
658 if (!(flipit_finished())) { 634 if (!(flipit_finished())) {
659 clear_cursor(); 635 clear_cursor();
@@ -665,7 +641,7 @@ static void move_cursor(int x, int y)
665} 641}
666 642
667/* initialize the board */ 643/* initialize the board */
668static void flipit_init(void) 644static void flipit_init(void)
669{ 645{
670 int i; 646 int i;
671 647
@@ -690,7 +666,7 @@ static void flipit_init(void)
690} 666}
691 667
692/* the main game loop */ 668/* the main game loop */
693static bool flipit_loop(void) 669static bool flipit_loop(void)
694{ 670{
695 int i; 671 int i;
696 int button; 672 int button;
@@ -775,7 +751,7 @@ static bool flipit_loop(void)
775 /*move cursor though the entire field*/ 751 /*move cursor though the entire field*/
776#ifdef FLIPIT_SCROLLWHEEL 752#ifdef FLIPIT_SCROLLWHEEL
777 case FLIPIT_PREV: 753 case FLIPIT_PREV:
778 case FLIPIT_PREV|BUTTON_REPEAT: 754 case FLIPIT_PREV|BUTTON_REPEAT:
779 if ((cursor_pos)%5 == 0) { 755 if ((cursor_pos)%5 == 0) {
780 move_cursor(-1, -1); 756 move_cursor(-1, -1);
781 } 757 }
diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h
index 45de45c5cd..d4d013550e 100644
--- a/apps/plugins/fractals/fractal.h
+++ b/apps/plugins/fractals/fractal.h
@@ -458,19 +458,7 @@
458#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV) 458#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV)
459#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER) 459#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER)
460 460
461#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 461#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
462#define FRACTAL_QUIT BUTTON_POWER
463#define FRACTAL_UP BUTTON_HOME
464#define FRACTAL_DOWN BUTTON_OPTION
465#define FRACTAL_LEFT BUTTON_PREV
466#define FRACTAL_RIGHT BUTTON_NEXT
467#define FRACTAL_ZOOM_IN BUTTON_VOL_UP
468#define FRACTAL_ZOOM_OUT BUTTON_VOL_DOWN
469#define FRACTAL_PRECISION_INC (BUTTON_PLAY | BUTTON_NEXT)
470#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV)
471#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER)
472
473#elif CONFIG_KEYPAD == XDUOO_X20_PAD
474#define FRACTAL_QUIT BUTTON_POWER 462#define FRACTAL_QUIT BUTTON_POWER
475#define FRACTAL_UP BUTTON_HOME 463#define FRACTAL_UP BUTTON_HOME
476#define FRACTAL_DOWN BUTTON_OPTION 464#define FRACTAL_DOWN BUTTON_OPTION
@@ -494,7 +482,7 @@
494#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV) 482#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV)
495#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER) 483#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER)
496 484
497#elif CONFIG_KEYPAD == IHIFI_770_PAD 485#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
498#define FRACTAL_QUIT BUTTON_POWER 486#define FRACTAL_QUIT BUTTON_POWER
499#define FRACTAL_UP BUTTON_PREV 487#define FRACTAL_UP BUTTON_PREV
500#define FRACTAL_DOWN BUTTON_NEXT 488#define FRACTAL_DOWN BUTTON_NEXT
@@ -506,17 +494,17 @@
506#define FRACTAL_PRECISION_DEC (BUTTON_POWER | BUTTON_PREV) 494#define FRACTAL_PRECISION_DEC (BUTTON_POWER | BUTTON_PREV)
507#define FRACTAL_RESET (BUTTON_POWER | BUTTON_HOME) 495#define FRACTAL_RESET (BUTTON_POWER | BUTTON_HOME)
508 496
509#elif CONFIG_KEYPAD == IHIFI_800_PAD 497#elif CONFIG_KEYPAD == EROSQ_PAD
510#define FRACTAL_QUIT BUTTON_POWER 498#define FRACTAL_QUIT BUTTON_POWER
511#define FRACTAL_UP BUTTON_PREV 499#define FRACTAL_UP BUTTON_PREV
512#define FRACTAL_DOWN BUTTON_NEXT 500#define FRACTAL_DOWN BUTTON_NEXT
513#define FRACTAL_LEFT BUTTON_HOME 501#define FRACTAL_LEFT BUTTON_SCROLL_BACK
514#define FRACTAL_RIGHT BUTTON_VOL_DOWN 502#define FRACTAL_RIGHT BUTTON_SCROLL_FWD
515#define FRACTAL_ZOOM_IN (BUTTON_POWER | BUTTON_VOL_UP) 503#define FRACTAL_ZOOM_IN BUTTON_VOL_UP
516#define FRACTAL_ZOOM_OUT (BUTTON_POWER | BUTTON_VOL_DOWN) 504#define FRACTAL_ZOOM_OUT BUTTON_VOL_DOWN
517#define FRACTAL_PRECISION_INC (BUTTON_POWER | BUTTON_NEXT) 505#define FRACTAL_PRECISION_INC BUTTON_MENU
518#define FRACTAL_PRECISION_DEC (BUTTON_POWER | BUTTON_PREV) 506#define FRACTAL_PRECISION_DEC BUTTON_BACK
519#define FRACTAL_RESET (BUTTON_POWER | BUTTON_HOME) 507#define FRACTAL_RESET BUTTON_PLAY
520 508
521#else 509#else
522#error No keymap defined! 510#error No keymap defined!
@@ -555,4 +543,3 @@
555#endif 543#endif
556 544
557#endif 545#endif
558
diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h
index c6a10e3944..db70216464 100644
--- a/apps/plugins/goban/goban.h
+++ b/apps/plugins/goban/goban.h
@@ -443,19 +443,7 @@
443#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT 443#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
444#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_PWRALT 444#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_PWRALT
445 445
446#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) 446#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
447#define GBN_BUTTON_UP BUTTON_HOME
448#define GBN_BUTTON_DOWN BUTTON_OPTION
449#define GBN_BUTTON_LEFT BUTTON_PREV
450#define GBN_BUTTON_RIGHT BUTTON_NEXT
451#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
452#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
453#define GBN_BUTTON_MENU BUTTON_POWER
454#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
455#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
456#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER
457
458#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
459#define GBN_BUTTON_UP BUTTON_HOME 447#define GBN_BUTTON_UP BUTTON_HOME
460#define GBN_BUTTON_DOWN BUTTON_OPTION 448#define GBN_BUTTON_DOWN BUTTON_OPTION
461#define GBN_BUTTON_LEFT BUTTON_PREV 449#define GBN_BUTTON_LEFT BUTTON_PREV
@@ -479,7 +467,7 @@
479#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT 467#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
480#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER 468#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER
481 469
482#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 470#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
483 471
484#define GBN_BUTTON_UP BUTTON_PREV 472#define GBN_BUTTON_UP BUTTON_PREV
485#define GBN_BUTTON_DOWN BUTTON_NEXT 473#define GBN_BUTTON_DOWN BUTTON_NEXT
@@ -492,18 +480,17 @@
492#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT 480#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
493#define GBN_BUTTON_NEXT_VAR BUTTON_POWER | BUTTON_HOME 481#define GBN_BUTTON_NEXT_VAR BUTTON_POWER | BUTTON_HOME
494 482
495#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 483#elif (CONFIG_KEYPAD == EROSQ_PAD)
496
497#define GBN_BUTTON_UP BUTTON_PREV 484#define GBN_BUTTON_UP BUTTON_PREV
498#define GBN_BUTTON_DOWN BUTTON_NEXT 485#define GBN_BUTTON_DOWN BUTTON_NEXT
499#define GBN_BUTTON_LEFT BUTTON_HOME 486#define GBN_BUTTON_LEFT BUTTON_SCROLL_BACK
500#define GBN_BUTTON_RIGHT BUTTON_VOL_DOWN 487#define GBN_BUTTON_RIGHT BUTTON_SCROLL_FWD
501#define GBN_BUTTON_RETREAT BUTTON_POWER | BUTTON_VOL_DOWN 488#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
502#define GBN_BUTTON_ADVANCE BUTTON_POWER | BUTTON_VOL_UP 489#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
503#define GBN_BUTTON_MENU BUTTON_POWER 490#define GBN_BUTTON_MENU BUTTON_MENU
504#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL 491#define GBN_BUTTON_PLAY BUTTON_PLAY
505#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT 492#define GBN_BUTTON_CONTEXT BUTTON_MENU | BUTTON_REPEAT
506#define GBN_BUTTON_NEXT_VAR BUTTON_POWER | BUTTON_HOME 493#define GBN_BUTTON_NEXT_VAR BUTTON_BACK
507 494
508#else 495#else
509#error Unsupported keypad 496#error Unsupported keypad
diff --git a/apps/plugins/imageviewer/imageviewer_button.h b/apps/plugins/imageviewer/imageviewer_button.h
index e637a09ca9..4559a7b3a3 100644
--- a/apps/plugins/imageviewer/imageviewer_button.h
+++ b/apps/plugins/imageviewer/imageviewer_button.h
@@ -476,22 +476,7 @@
476#define IMGVIEW_MENU BUTTON_POWER 476#define IMGVIEW_MENU BUTTON_POWER
477#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_PWRALT) 477#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_PWRALT)
478 478
479#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 479#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
480#define IMGVIEW_ZOOM_PRE BUTTON_PLAY
481#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL)
482#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT)
483#define IMGVIEW_UP BUTTON_HOME
484#define IMGVIEW_DOWN BUTTON_OPTION
485#define IMGVIEW_LEFT BUTTON_PREV
486#define IMGVIEW_RIGHT BUTTON_NEXT
487#define IMGVIEW_NEXT BUTTON_VOL_UP
488#define IMGVIEW_NEXT_REPEAT (BUTTON_VOL_UP|BUTTON_REPEAT)
489#define IMGVIEW_PREVIOUS BUTTON_VOL_DOWN
490#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_VOL_DOWN|BUTTON_REPEAT)
491#define IMGVIEW_MENU BUTTON_POWER
492#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER)
493
494#elif CONFIG_KEYPAD == XDUOO_X20_PAD
495#define IMGVIEW_ZOOM_PRE BUTTON_PLAY 480#define IMGVIEW_ZOOM_PRE BUTTON_PLAY
496#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL) 481#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL)
497#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT) 482#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT)
@@ -521,7 +506,7 @@
521#define IMGVIEW_MENU BUTTON_POWER 506#define IMGVIEW_MENU BUTTON_POWER
522#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER) 507#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER)
523 508
524#elif CONFIG_KEYPAD == IHIFI_770_PAD 509#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
525#define IMGVIEW_ZOOM_PRE BUTTON_PLAY 510#define IMGVIEW_ZOOM_PRE BUTTON_PLAY
526#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL) 511#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL)
527#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT) 512#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT)
@@ -536,20 +521,20 @@
536#define IMGVIEW_MENU BUTTON_POWER 521#define IMGVIEW_MENU BUTTON_POWER
537#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER) 522#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER)
538 523
539#elif CONFIG_KEYPAD == IHIFI_800_PAD 524#elif CONFIG_KEYPAD == EROSQ_PAD
540#define IMGVIEW_ZOOM_PRE BUTTON_PLAY 525#define IMGVIEW_ZOOM_PRE BUTTON_PLAY
541#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL) 526#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL)
542#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT) 527#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT)
543#define IMGVIEW_UP BUTTON_PREV 528#define IMGVIEW_UP BUTTON_PREV
544#define IMGVIEW_DOWN BUTTON_NEXT 529#define IMGVIEW_DOWN BUTTON_NEXT
545#define IMGVIEW_LEFT BUTTON_HOME 530#define IMGVIEW_LEFT BUTTON_SCROLL_BACK
546#define IMGVIEW_RIGHT (BUTTON_PLAY|BUTTON_POWER) 531#define IMGVIEW_RIGHT BUTTON_SCROLL_FWD
547#define IMGVIEW_NEXT BUTTON_VOL_UP 532#define IMGVIEW_NEXT BUTTON_VOL_UP
548#define IMGVIEW_NEXT_REPEAT (BUTTON_VOL_UP|BUTTON_REPEAT) 533#define IMGVIEW_NEXT_REPEAT (BUTTON_VOL_UP|BUTTON_REPEAT)
549#define IMGVIEW_PREVIOUS BUTTON_VOL_DOWN 534#define IMGVIEW_PREVIOUS BUTTON_VOL_DOWN
550#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_VOL_DOWN|BUTTON_REPEAT) 535#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_VOL_DOWN|BUTTON_REPEAT)
551#define IMGVIEW_MENU BUTTON_POWER 536#define IMGVIEW_MENU BUTTON_MENU
552#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER) 537#define IMGVIEW_SLIDE_SHOW BUTTON_BACK
553 538
554#else 539#else
555#error No keymap defined! 540#error No keymap defined!
diff --git a/apps/plugins/invadrox.c b/apps/plugins/invadrox.c
index 5e3cb12163..57d6fabe8d 100644
--- a/apps/plugins/invadrox.c
+++ b/apps/plugins/invadrox.c
@@ -268,14 +268,7 @@ CONFIG_KEYPAD == MROBE500_PAD
268#define QUIT BUTTON_POWER 268#define QUIT BUTTON_POWER
269#define FIRE BUTTON_MENU 269#define FIRE BUTTON_MENU
270 270
271#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 271#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
272
273#define QUIT BUTTON_POWER
274#define LEFT BUTTON_HOME
275#define RIGHT BUTTON_VOL_DOWN
276#define FIRE BUTTON_VOL_UP
277
278#elif CONFIG_KEYPAD == XDUOO_X20_PAD
279 272
280#define QUIT BUTTON_POWER 273#define QUIT BUTTON_POWER
281#define LEFT BUTTON_HOME 274#define LEFT BUTTON_HOME
@@ -289,19 +282,19 @@ CONFIG_KEYPAD == MROBE500_PAD
289#define RIGHT BUTTON_VOL_DOWN 282#define RIGHT BUTTON_VOL_DOWN
290#define FIRE BUTTON_VOL_UP 283#define FIRE BUTTON_VOL_UP
291 284
292#elif CONFIG_KEYPAD == IHIFI_770_PAD 285#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
293 286
294#define QUIT BUTTON_POWER 287#define QUIT BUTTON_POWER
295#define LEFT BUTTON_HOME 288#define LEFT BUTTON_HOME
296#define RIGHT BUTTON_VOL_DOWN 289#define RIGHT BUTTON_VOL_DOWN
297#define FIRE BUTTON_VOL_UP 290#define FIRE BUTTON_VOL_UP
298 291
299#elif CONFIG_KEYPAD == IHIFI_800_PAD 292#elif CONFIG_KEYPAD == EROSQ_PAD
300 293
301#define QUIT BUTTON_POWER 294#define QUIT BUTTON_POWER
302#define LEFT BUTTON_HOME 295#define LEFT BUTTON_SCROLL_BACK
303#define RIGHT BUTTON_VOL_DOWN 296#define RIGHT BUTTON_SCROLL_FWD
304#define FIRE BUTTON_VOL_UP 297#define FIRE BUTTON_PLAY
305 298
306#else 299#else
307 #error INVADROX: Unsupported keypad 300 #error INVADROX: Unsupported keypad
@@ -829,8 +822,8 @@ static void draw_number(int x, int y, int num, int digits)
829 d = num % 10; 822 d = num % 10;
830 num = num / 10; 823 num = num / 10;
831 rb->lcd_bitmap_part(invadrox_numbers, d * NUMBERS_WIDTH, 0, 824 rb->lcd_bitmap_part(invadrox_numbers, d * NUMBERS_WIDTH, 0,
832 STRIDE( SCREEN_MAIN, 825 STRIDE( SCREEN_MAIN,
833 BMPWIDTH_invadrox_numbers, 826 BMPWIDTH_invadrox_numbers,
834 BMPHEIGHT_invadrox_numbers), 827 BMPHEIGHT_invadrox_numbers),
835 x + i * (NUMBERS_WIDTH + NUM_SPACING), y, 828 x + i * (NUMBERS_WIDTH + NUM_SPACING), y,
836 NUMBERS_WIDTH, FONT_HEIGHT); 829 NUMBERS_WIDTH, FONT_HEIGHT);
@@ -861,17 +854,17 @@ static void draw_lives(void)
861 int i; 854 int i;
862 /* Lives num */ 855 /* Lives num */
863 rb->lcd_bitmap_part(invadrox_numbers, lives * NUMBERS_WIDTH, 0, 856 rb->lcd_bitmap_part(invadrox_numbers, lives * NUMBERS_WIDTH, 0,
864 STRIDE( SCREEN_MAIN, 857 STRIDE( SCREEN_MAIN,
865 BMPWIDTH_invadrox_numbers, 858 BMPWIDTH_invadrox_numbers,
866 BMPHEIGHT_invadrox_numbers), 859 BMPHEIGHT_invadrox_numbers),
867 PLAYFIELD_X + LIVES_X, PLAYFIELD_Y + 2, 860 PLAYFIELD_X + LIVES_X, PLAYFIELD_Y + 2,
868 NUMBERS_WIDTH, FONT_HEIGHT); 861 NUMBERS_WIDTH, FONT_HEIGHT);
869 862
870 /* Ships */ 863 /* Ships */
871 for (i = 0; i < (lives - 1); i++) { 864 for (i = 0; i < (lives - 1); i++) {
872 rb->lcd_bitmap_part(invadrox_ships, 0, 0, 865 rb->lcd_bitmap_part(invadrox_ships, 0, 0,
873 STRIDE( SCREEN_MAIN, 866 STRIDE( SCREEN_MAIN,
874 BMPWIDTH_invadrox_ships, 867 BMPWIDTH_invadrox_ships,
875 BMPHEIGHT_invadrox_ships), 868 BMPHEIGHT_invadrox_ships),
876 PLAYFIELD_X + LIVES_X + SHIP_WIDTH + i * (SHIP_WIDTH + NUM_SPACING), 869 PLAYFIELD_X + LIVES_X + SHIP_WIDTH + i * (SHIP_WIDTH + NUM_SPACING),
877 PLAYFIELD_Y + 1, SHIP_WIDTH, SHIP_HEIGHT); 870 PLAYFIELD_Y + 1, SHIP_WIDTH, SHIP_HEIGHT);
@@ -893,11 +886,11 @@ static inline void draw_aliens(void)
893 int i; 886 int i;
894 887
895 for (i = 0; i < 5 * ALIENS; i++) { 888 for (i = 0; i < 5 * ALIENS; i++) {
896 rb->lcd_bitmap_part(invadrox_aliens, aliens[i].x & 1 ? ALIEN_WIDTH : 0, 889 rb->lcd_bitmap_part(invadrox_aliens, aliens[i].x & 1 ? ALIEN_WIDTH : 0,
897 aliens[i].type * ALIEN_HEIGHT, 890 aliens[i].type * ALIEN_HEIGHT,
898 STRIDE( SCREEN_MAIN, 891 STRIDE( SCREEN_MAIN,
899 BMPWIDTH_invadrox_aliens, 892 BMPWIDTH_invadrox_aliens,
900 BMPHEIGHT_invadrox_aliens), 893 BMPHEIGHT_invadrox_aliens),
901 PLAYFIELD_X + LIVES_X + aliens[i].x * ALIEN_SPEED, 894 PLAYFIELD_X + LIVES_X + aliens[i].x * ALIEN_SPEED,
902 ALIEN_START_Y + aliens[i].y * ALIEN_HEIGHT, 895 ALIEN_START_Y + aliens[i].y * ALIEN_HEIGHT,
903 ALIEN_WIDTH, ALIEN_HEIGHT); 896 ALIEN_WIDTH, ALIEN_HEIGHT);
@@ -1035,11 +1028,11 @@ static bool move_aliens(void)
1035 x = PLAYFIELD_X + LIVES_X + aliens[curr_alien].x * ALIEN_SPEED; 1028 x = PLAYFIELD_X + LIVES_X + aliens[curr_alien].x * ALIEN_SPEED;
1036 y = ALIEN_START_Y + aliens[curr_alien].y * ALIEN_HEIGHT; 1029 y = ALIEN_START_Y + aliens[curr_alien].y * ALIEN_HEIGHT;
1037 rb->lcd_bitmap_part(invadrox_aliens, 1030 rb->lcd_bitmap_part(invadrox_aliens,
1038 aliens[curr_alien].x & 1 ? ALIEN_WIDTH : 0, 1031 aliens[curr_alien].x & 1 ? ALIEN_WIDTH : 0,
1039 aliens[curr_alien].type * ALIEN_HEIGHT, 1032 aliens[curr_alien].type * ALIEN_HEIGHT,
1040 STRIDE( SCREEN_MAIN, 1033 STRIDE( SCREEN_MAIN,
1041 BMPWIDTH_invadrox_aliens, 1034 BMPWIDTH_invadrox_aliens,
1042 BMPHEIGHT_invadrox_aliens), 1035 BMPHEIGHT_invadrox_aliens),
1043 x, y, ALIEN_WIDTH, ALIEN_HEIGHT); 1036 x, y, ALIEN_WIDTH, ALIEN_HEIGHT);
1044 1037
1045 if (!next_alien()) { 1038 if (!next_alien()) {
@@ -1068,9 +1061,9 @@ static inline void draw_ship(void)
1068 1061
1069 /* Draw ship */ 1062 /* Draw ship */
1070 rb->lcd_bitmap_part(invadrox_ships, 0, ship_frame * SHIP_HEIGHT, 1063 rb->lcd_bitmap_part(invadrox_ships, 0, ship_frame * SHIP_HEIGHT,
1071 STRIDE( SCREEN_MAIN, 1064 STRIDE( SCREEN_MAIN,
1072 BMPWIDTH_invadrox_ships, 1065 BMPWIDTH_invadrox_ships,
1073 BMPHEIGHT_invadrox_ships), 1066 BMPHEIGHT_invadrox_ships),
1074 ship_x, SHIP_Y, SHIP_WIDTH, SHIP_HEIGHT); 1067 ship_x, SHIP_Y, SHIP_WIDTH, SHIP_HEIGHT);
1075 if (ship_hit) { 1068 if (ship_hit) {
1076 /* Alternate between frame 1 and 2 during hit */ 1069 /* Alternate between frame 1 and 2 during hit */
@@ -1095,7 +1088,7 @@ static inline void fire_alpha(int xc, int yc, unsigned color)
1095 1088
1096 rb->lcd_set_foreground(color); 1089 rb->lcd_set_foreground(color);
1097 rb->lcd_set_drawmode(DRMODE_FG); 1090 rb->lcd_set_drawmode(DRMODE_FG);
1098 1091
1099 rb->lcd_mono_bitmap(invadrox_fire, xc - (FIRE_WIDTH/2), yc, FIRE_WIDTH, FIRE_HEIGHT); 1092 rb->lcd_mono_bitmap(invadrox_fire, xc - (FIRE_WIDTH/2), yc, FIRE_WIDTH, FIRE_HEIGHT);
1100 1093
1101 rb->lcd_set_foreground(LCD_BLACK); 1094 rb->lcd_set_foreground(LCD_BLACK);
@@ -1311,9 +1304,9 @@ static inline void draw_bomb(int i)
1311{ 1304{
1312 rb->lcd_bitmap_part(invadrox_bombs, bombs[i].type * BOMB_WIDTH, 1305 rb->lcd_bitmap_part(invadrox_bombs, bombs[i].type * BOMB_WIDTH,
1313 bombs[i].frame * BOMB_HEIGHT, 1306 bombs[i].frame * BOMB_HEIGHT,
1314 STRIDE( SCREEN_MAIN, 1307 STRIDE( SCREEN_MAIN,
1315 BMPWIDTH_invadrox_bombs, 1308 BMPWIDTH_invadrox_bombs,
1316 BMPHEIGHT_invadrox_bombs), 1309 BMPHEIGHT_invadrox_bombs),
1317 bombs[i].x, bombs[i].y, 1310 bombs[i].x, bombs[i].y,
1318 BOMB_WIDTH, BOMB_HEIGHT); 1311 BOMB_WIDTH, BOMB_HEIGHT);
1319 /* Advance frame */ 1312 /* Advance frame */
@@ -1415,9 +1408,9 @@ static void move_bombs(void)
1415 bombs[i].state = S_EXPLODE * 4; 1408 bombs[i].state = S_EXPLODE * 4;
1416 bombs[i].target = TARGET_SHIP; 1409 bombs[i].target = TARGET_SHIP;
1417 rb->lcd_bitmap_part(invadrox_ships, 0, 1 * SHIP_HEIGHT, 1410 rb->lcd_bitmap_part(invadrox_ships, 0, 1 * SHIP_HEIGHT,
1418 STRIDE( SCREEN_MAIN, 1411 STRIDE( SCREEN_MAIN,
1419 BMPWIDTH_invadrox_ships, 1412 BMPWIDTH_invadrox_ships,
1420 BMPHEIGHT_invadrox_ships), 1413 BMPHEIGHT_invadrox_ships),
1421 ship_x, SHIP_Y, 1414 ship_x, SHIP_Y,
1422 SHIP_WIDTH, SHIP_HEIGHT); 1415 SHIP_WIDTH, SHIP_HEIGHT);
1423 break; 1416 break;
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index 64a15ff4fc..b58c47dd12 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -347,27 +347,7 @@ CONFIG_KEYPAD == MROBE500_PAD
347#define JEWELS_CANCEL BUTTON_POWER 347#define JEWELS_CANCEL BUTTON_POWER
348#define HK_CANCEL "Power" 348#define HK_CANCEL "Power"
349 349
350#elif CONFIG_KEYPAD == XDUOO_X3_PAD 350#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
351#define JEWELS_UP BUTTON_HOME
352#define JEWELS_DOWN BUTTON_OPTION
353#define JEWELS_LEFT BUTTON_PREV
354#define JEWELS_RIGHT BUTTON_NEXT
355#define JEWELS_SELECT BUTTON_PLAY
356#define JEWELS_CANCEL BUTTON_POWER
357#define HK_SELECT "PLAY"
358#define HK_CANCEL "POWER"
359
360#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
361#define JEWELS_UP BUTTON_HOME
362#define JEWELS_DOWN BUTTON_OPTION
363#define JEWELS_LEFT BUTTON_PREV
364#define JEWELS_RIGHT BUTTON_NEXT
365#define JEWELS_SELECT BUTTON_PLAY
366#define JEWELS_CANCEL BUTTON_POWER
367#define HK_SELECT "PLAY"
368#define HK_CANCEL "POWER"
369
370#elif CONFIG_KEYPAD == XDUOO_X20_PAD
371#define JEWELS_UP BUTTON_HOME 351#define JEWELS_UP BUTTON_HOME
372#define JEWELS_DOWN BUTTON_OPTION 352#define JEWELS_DOWN BUTTON_OPTION
373#define JEWELS_LEFT BUTTON_PREV 353#define JEWELS_LEFT BUTTON_PREV
@@ -387,7 +367,7 @@ CONFIG_KEYPAD == MROBE500_PAD
387#define HK_SELECT "PLAY" 367#define HK_SELECT "PLAY"
388#define HK_CANCEL "POWER" 368#define HK_CANCEL "POWER"
389 369
390#elif CONFIG_KEYPAD == IHIFI_770_PAD 370#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
391#define JEWELS_UP BUTTON_PREV 371#define JEWELS_UP BUTTON_PREV
392#define JEWELS_DOWN BUTTON_NEXT 372#define JEWELS_DOWN BUTTON_NEXT
393#define JEWELS_LEFT BUTTON_HOME 373#define JEWELS_LEFT BUTTON_HOME
@@ -397,15 +377,16 @@ CONFIG_KEYPAD == MROBE500_PAD
397#define HK_SELECT "PLAY" 377#define HK_SELECT "PLAY"
398#define HK_CANCEL "POWER" 378#define HK_CANCEL "POWER"
399 379
400#elif CONFIG_KEYPAD == IHIFI_800_PAD 380#elif CONFIG_KEYPAD == EROSQ_PAD
401#define JEWELS_UP BUTTON_PREV 381#define JEWELS_UP BUTTON_PREV
402#define JEWELS_DOWN BUTTON_NEXT 382#define JEWELS_DOWN BUTTON_NEXT
403#define JEWELS_LEFT BUTTON_HOME 383#define JEWELS_LEFT BUTTON_SCROLL_BACK
404#define JEWELS_RIGHT BUTTON_VOL_DOWN 384#define JEWELS_RIGHT BUTTON_SCROLL_FWD
405#define JEWELS_SELECT BUTTON_PLAY 385#define JEWELS_SELECT BUTTON_PLAY
406#define JEWELS_CANCEL BUTTON_POWER 386#define JEWELS_CANCEL BUTTON_BACK
407#define HK_SELECT "PLAY" 387#define HK_SELECT "PLAY"
408#define HK_CANCEL "POWER" 388#define HK_CANCEL "BACK"
389
409 390
410#else 391#else
411#error No keymap defined! 392#error No keymap defined!
@@ -662,14 +643,14 @@ static void jewels_drawboard(struct game_context* bj) {
662 TILE_WIDTH, TILE_HEIGHT); 643 TILE_WIDTH, TILE_HEIGHT);
663 rb->lcd_bitmap_transparent_part(jewels, 644 rb->lcd_bitmap_transparent_part(jewels,
664 0, TILE_HEIGHT*(bj->playboard[i+1][j].type), 645 0, TILE_HEIGHT*(bj->playboard[i+1][j].type),
665 STRIDE( SCREEN_MAIN, 646 STRIDE( SCREEN_MAIN,
666 BMPWIDTH_jewels, BMPHEIGHT_jewels), 647 BMPWIDTH_jewels, BMPHEIGHT_jewels),
667 j*TILE_WIDTH, i*TILE_HEIGHT+YOFS, 648 j*TILE_WIDTH, i*TILE_HEIGHT+YOFS,
668 TILE_WIDTH, TILE_HEIGHT); 649 TILE_WIDTH, TILE_HEIGHT);
669#else 650#else
670 rb->lcd_bitmap_part(jewels, 651 rb->lcd_bitmap_part(jewels,
671 0, TILE_HEIGHT*(bj->playboard[i+1][j].type), 652 0, TILE_HEIGHT*(bj->playboard[i+1][j].type),
672 STRIDE( SCREEN_MAIN, 653 STRIDE( SCREEN_MAIN,
673 BMPWIDTH_jewels, BMPHEIGHT_jewels), 654 BMPWIDTH_jewels, BMPHEIGHT_jewels),
674 j*TILE_WIDTH, i*TILE_HEIGHT+YOFS, 655 j*TILE_WIDTH, i*TILE_HEIGHT+YOFS,
675 TILE_WIDTH, TILE_HEIGHT); 656 TILE_WIDTH, TILE_HEIGHT);
@@ -685,7 +666,7 @@ static void jewels_drawboard(struct game_context* bj) {
685 666
686 rb->lcd_hline(BJ_WIDTH*TILE_WIDTH, LCD_WIDTH-1, 18); 667 rb->lcd_hline(BJ_WIDTH*TILE_WIDTH, LCD_WIDTH-1, 18);
687 rb->lcd_hline(BJ_WIDTH*TILE_WIDTH, LCD_WIDTH-1, LCD_HEIGHT-10); 668 rb->lcd_hline(BJ_WIDTH*TILE_WIDTH, LCD_WIDTH-1, LCD_HEIGHT-10);
688 669
689 /* draw progress bar */ 670 /* draw progress bar */
690#ifdef HAVE_LCD_COLOR 671#ifdef HAVE_LCD_COLOR
691 rb->lcd_set_foreground(LCD_RGBPACK(104, 63, 63)); 672 rb->lcd_set_foreground(LCD_RGBPACK(104, 63, 63));
@@ -708,7 +689,7 @@ static void jewels_drawboard(struct game_context* bj) {
708 (LCD_WIDTH-BJ_WIDTH*TILE_WIDTH)/2, 689 (LCD_WIDTH-BJ_WIDTH*TILE_WIDTH)/2,
709 ((LCD_HEIGHT-10)-18)*tempscore/size+1); 690 ((LCD_HEIGHT-10)-18)*tempscore/size+1);
710#endif 691#endif
711 692
712 /* print text */ 693 /* print text */
713 rb->lcd_getstringsize(title, &w, &h); 694 rb->lcd_getstringsize(title, &w, &h);
714 rb->lcd_putsxy(LCD_WIDTH-(LCD_WIDTH-BJ_WIDTH*TILE_WIDTH)/2-w/2, 1, title); 695 rb->lcd_putsxy(LCD_WIDTH-(LCD_WIDTH-BJ_WIDTH*TILE_WIDTH)/2-w/2, 1, title);
@@ -730,7 +711,7 @@ static void jewels_drawboard(struct game_context* bj) {
730 rb->lcd_hline(0, LCD_WIDTH-1, 8*TILE_HEIGHT+YOFS); 711 rb->lcd_hline(0, LCD_WIDTH-1, 8*TILE_HEIGHT+YOFS);
731 rb->lcd_hline(0, LCD_WIDTH-1, LCD_HEIGHT-14); 712 rb->lcd_hline(0, LCD_WIDTH-1, LCD_HEIGHT-14);
732 rb->lcd_vline(LCD_WIDTH/2, LCD_HEIGHT-14, LCD_HEIGHT-1); 713 rb->lcd_vline(LCD_WIDTH/2, LCD_HEIGHT-14, LCD_HEIGHT-1);
733 714
734 /* draw progress bar */ 715 /* draw progress bar */
735#ifdef HAVE_LCD_COLOR 716#ifdef HAVE_LCD_COLOR
736 rb->lcd_set_foreground(LCD_RGBPACK(104, 63, 63)); 717 rb->lcd_set_foreground(LCD_RGBPACK(104, 63, 63));
@@ -751,10 +732,10 @@ static void jewels_drawboard(struct game_context* bj) {
751 LCD_WIDTH*tempscore/size+1, 732 LCD_WIDTH*tempscore/size+1,
752 (LCD_HEIGHT-14-(8*TILE_HEIGHT+YOFS))/2); 733 (LCD_HEIGHT-14-(8*TILE_HEIGHT+YOFS))/2);
753#endif 734#endif
754 735
755 /* print text */ 736 /* print text */
756 rb->lcd_putsxyf(1, LCD_HEIGHT-10, "%s %d", title, bj->level); 737 rb->lcd_putsxyf(1, LCD_HEIGHT-10, "%s %d", title, bj->level);
757 738
758 if (bj->type == GAME_TYPE_NORMAL) { 739 if (bj->type == GAME_TYPE_NORMAL) {
759 rb->snprintf(str, 6, "%d", (bj->level-1)*LEVEL_PTS+bj->score); 740 rb->snprintf(str, 6, "%d", (bj->level-1)*LEVEL_PTS+bj->score);
760 rb->lcd_getstringsize(str, &w, &h); 741 rb->lcd_getstringsize(str, &w, &h);
@@ -796,7 +777,7 @@ static void jewels_drawboard(struct game_context* bj) {
796 /* print text */ 777 /* print text */
797 rb->lcd_putsxyf(1, LCD_HEIGHT-(LCD_HEIGHT-(8*TILE_HEIGHT+YOFS))/2-3,"%s %d", 778 rb->lcd_putsxyf(1, LCD_HEIGHT-(LCD_HEIGHT-(8*TILE_HEIGHT+YOFS))/2-3,"%s %d",
798 title, bj->level); 779 title, bj->level);
799 780
800 if (bj->type == GAME_TYPE_NORMAL) { 781 if (bj->type == GAME_TYPE_NORMAL) {
801 rb->snprintf(str, 6, "%d", (bj->level-1)*LEVEL_PTS+bj->score); 782 rb->snprintf(str, 6, "%d", (bj->level-1)*LEVEL_PTS+bj->score);
802 rb->lcd_getstringsize(str, &w, &h); 783 rb->lcd_getstringsize(str, &w, &h);
@@ -881,8 +862,8 @@ static void jewels_putjewels(struct game_context* bj){
881#ifdef HAVE_LCD_COLOR 862#ifdef HAVE_LCD_COLOR
882 rb->lcd_bitmap_transparent_part(jewels, 0, 863 rb->lcd_bitmap_transparent_part(jewels, 0,
883 TILE_HEIGHT*(bj->playboard[i][j].type), 864 TILE_HEIGHT*(bj->playboard[i][j].type),
884 STRIDE( SCREEN_MAIN, 865 STRIDE( SCREEN_MAIN,
885 BMPWIDTH_jewels, 866 BMPWIDTH_jewels,
886 BMPHEIGHT_jewels), 867 BMPHEIGHT_jewels),
887 j*TILE_WIDTH, 868 j*TILE_WIDTH,
888 (i-1)*TILE_HEIGHT+YOFS+ 869 (i-1)*TILE_HEIGHT+YOFS+
@@ -891,8 +872,8 @@ static void jewels_putjewels(struct game_context* bj){
891#else 872#else
892 rb->lcd_bitmap_part(jewels, 0, 873 rb->lcd_bitmap_part(jewels, 0,
893 TILE_HEIGHT*(bj->playboard[i][j].type), 874 TILE_HEIGHT*(bj->playboard[i][j].type),
894 STRIDE( SCREEN_MAIN, 875 STRIDE( SCREEN_MAIN,
895 BMPWIDTH_jewels, 876 BMPWIDTH_jewels,
896 BMPHEIGHT_jewels), 877 BMPHEIGHT_jewels),
897 j*TILE_WIDTH, 878 j*TILE_WIDTH,
898 (i-1)*TILE_HEIGHT+YOFS+ 879 (i-1)*TILE_HEIGHT+YOFS+
@@ -1113,7 +1094,7 @@ static unsigned int jewels_swapjewels(struct game_context* bj,
1113 rb->lcd_bitmap_transparent_part(jewels, 1094 rb->lcd_bitmap_transparent_part(jewels,
1114 0, TILE_HEIGHT*(bj->playboard 1095 0, TILE_HEIGHT*(bj->playboard
1115 [y+1+vertmod][x+horzmod].type), 1096 [y+1+vertmod][x+horzmod].type),
1116 STRIDE( SCREEN_MAIN, 1097 STRIDE( SCREEN_MAIN,
1117 BMPWIDTH_jewels, BMPHEIGHT_jewels), 1098 BMPWIDTH_jewels, BMPHEIGHT_jewels),
1118 (x+horzmod)*TILE_WIDTH-horzmod* 1099 (x+horzmod)*TILE_WIDTH-horzmod*
1119 ((((movelen<<10)*k)/8)>>10), 1100 ((((movelen<<10)*k)/8)>>10),
@@ -1122,7 +1103,7 @@ static unsigned int jewels_swapjewels(struct game_context* bj,
1122 TILE_WIDTH, TILE_HEIGHT); 1103 TILE_WIDTH, TILE_HEIGHT);
1123 rb->lcd_bitmap_transparent_part(jewels, 1104 rb->lcd_bitmap_transparent_part(jewels,
1124 0, TILE_HEIGHT*(bj->playboard[y+1][x].type), 1105 0, TILE_HEIGHT*(bj->playboard[y+1][x].type),
1125 STRIDE( SCREEN_MAIN, 1106 STRIDE( SCREEN_MAIN,
1126 BMPWIDTH_jewels, BMPHEIGHT_jewels), 1107 BMPWIDTH_jewels, BMPHEIGHT_jewels),
1127 x*TILE_WIDTH+horzmod* 1108 x*TILE_WIDTH+horzmod*
1128 ((((movelen<<10)*k)/8)>>10), 1109 ((((movelen<<10)*k)/8)>>10),
@@ -1133,7 +1114,7 @@ static unsigned int jewels_swapjewels(struct game_context* bj,
1133 rb->lcd_bitmap_part(jewels, 1114 rb->lcd_bitmap_part(jewels,
1134 0, TILE_HEIGHT*(bj->playboard 1115 0, TILE_HEIGHT*(bj->playboard
1135 [y+1+vertmod][x+horzmod].type), 1116 [y+1+vertmod][x+horzmod].type),
1136 STRIDE( SCREEN_MAIN, 1117 STRIDE( SCREEN_MAIN,
1137 BMPWIDTH_jewels, BMPHEIGHT_jewels), 1118 BMPWIDTH_jewels, BMPHEIGHT_jewels),
1138 (x+horzmod)*TILE_WIDTH-horzmod* 1119 (x+horzmod)*TILE_WIDTH-horzmod*
1139 ((((movelen<<10)*k)/8)>>10), 1120 ((((movelen<<10)*k)/8)>>10),
@@ -1143,7 +1124,7 @@ static unsigned int jewels_swapjewels(struct game_context* bj,
1143 rb->lcd_set_drawmode(DRMODE_FG); 1124 rb->lcd_set_drawmode(DRMODE_FG);
1144 rb->lcd_bitmap_part(jewels, 1125 rb->lcd_bitmap_part(jewels,
1145 0, TILE_HEIGHT*(bj->playboard[y+1][x].type), 1126 0, TILE_HEIGHT*(bj->playboard[y+1][x].type),
1146 STRIDE( SCREEN_MAIN, 1127 STRIDE( SCREEN_MAIN,
1147 BMPWIDTH_jewels, BMPHEIGHT_jewels), 1128 BMPWIDTH_jewels, BMPHEIGHT_jewels),
1148 x*TILE_WIDTH+horzmod* 1129 x*TILE_WIDTH+horzmod*
1149 ((((movelen<<10)*k)/8)>>10), 1130 ((((movelen<<10)*k)/8)>>10),
@@ -1430,7 +1411,7 @@ static bool jewels_help(void)
1430{ 1411{
1431 static char *help_text[] = { 1412 static char *help_text[] = {
1432 "Jewels", "", "Aim", "", 1413 "Jewels", "", "Aim", "",
1433 "Swap", "pairs", "of", "jewels", "to", "form", "connected", 1414 "Swap", "pairs", "of", "jewels", "to", "form", "connected",
1434 "segments", "of", "three", "or", "more", "of", "the", "same", 1415 "segments", "of", "three", "or", "more", "of", "the", "same",
1435 "type.", "", 1416 "type.", "",
1436 "The", "goal", "of", "the", "game", "is", "to", "score", "as", "many", 1417 "The", "goal", "of", "the", "game", "is", "to", "score", "as", "many",
diff --git a/apps/plugins/lib/keymaps.h b/apps/plugins/lib/keymaps.h
index 2865f9cdd7..7c1b998400 100644
--- a/apps/plugins/lib/keymaps.h
+++ b/apps/plugins/lib/keymaps.h
@@ -215,23 +215,7 @@
215#define BTN_FIRE BUTTON_MENU 215#define BTN_FIRE BUTTON_MENU
216#define BTN_PAUSE BUTTON_POWER 216#define BTN_PAUSE BUTTON_POWER
217 217
218#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) 218#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) || (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
219#define BTN_UP BUTTON_VOL_UP
220#define BTN_DOWN BUTTON_VOL_DOWN
221#define BTN_LEFT BUTTON_PREV
222#define BTN_RIGHT BUTTON_NEXT
223#define BTN_FIRE BUTTON_PLAY
224#define BTN_PAUSE BUTTON_POWER
225
226#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD)
227#define BTN_UP BUTTON_VOL_UP
228#define BTN_DOWN BUTTON_VOL_DOWN
229#define BTN_LEFT BUTTON_PREV
230#define BTN_RIGHT BUTTON_NEXT
231#define BTN_FIRE BUTTON_PLAY
232#define BTN_PAUSE BUTTON_POWER
233
234#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
235#define BTN_UP BUTTON_VOL_UP 219#define BTN_UP BUTTON_VOL_UP
236#define BTN_DOWN BUTTON_VOL_DOWN 220#define BTN_DOWN BUTTON_VOL_DOWN
237#define BTN_LEFT BUTTON_PREV 221#define BTN_LEFT BUTTON_PREV
@@ -247,15 +231,15 @@
247#define BTN_FIRE BUTTON_PLAY 231#define BTN_FIRE BUTTON_PLAY
248#define BTN_PAUSE BUTTON_POWER 232#define BTN_PAUSE BUTTON_POWER
249 233
250#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 234#elif (CONFIG_KEYPAD == EROSQ_PAD)
251#define BTN_UP BUTTON_PREV 235#define BTN_UP BUTTON_PREV
252#define BTN_DOWN BUTTON_NEXT 236#define BTN_DOWN BUTTON_NEXT
253#define BTN_LEFT BUTTON_HOME 237#define BTN_LEFT BUTTON_SCROLL_BACK
254#define BTN_RIGHT BUTTON_VOL_DOWN 238#define BTN_RIGHT BUTTON_SCROLL_FWD
255#define BTN_FIRE BUTTON_PLAY 239#define BTN_FIRE BUTTON_PLAY
256#define BTN_PAUSE BUTTON_POWER 240#define BTN_PAUSE BUTTON_POWER
257 241
258#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 242#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
259#define BTN_UP BUTTON_PREV 243#define BTN_UP BUTTON_PREV
260#define BTN_DOWN BUTTON_NEXT 244#define BTN_DOWN BUTTON_NEXT
261#define BTN_LEFT BUTTON_HOME 245#define BTN_LEFT BUTTON_HOME
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index 480dc446cb..4d2a08cf47 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -68,7 +68,7 @@ const struct button_mapping pla_remote_ctx[] =
68#endif /* HAVE_REMOTE_LCD */ 68#endif /* HAVE_REMOTE_LCD */
69 69
70/* these were taken from the bubbles plugin, so may need tweaking */ 70/* these were taken from the bubbles plugin, so may need tweaking */
71const struct button_mapping pla_main_ctx[] = 71const struct button_mapping pla_main_ctx[] =
72{ 72{
73 /* Touchscreens */ 73 /* Touchscreens */
74#ifdef HAVE_TOUCHSCREEN 74#ifdef HAVE_TOUCHSCREEN
@@ -242,6 +242,15 @@ const struct button_mapping pla_main_ctx[] =
242 { PLA_DOWN_REPEAT, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_NONE }, 242 { PLA_DOWN_REPEAT, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_NONE },
243 { PLA_LEFT_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE }, 243 { PLA_LEFT_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
244 { PLA_RIGHT_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE }, 244 { PLA_RIGHT_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
245#elif (CONFIG_KEYPAD == EROSQ_PAD)
246 { PLA_UP, BUTTON_NEXT, BUTTON_NONE },
247 { PLA_DOWN, BUTTON_PREV, BUTTON_NONE },
248 { PLA_LEFT, BUTTON_SCROLL_BACK, BUTTON_NONE },
249 { PLA_RIGHT, BUTTON_SCROLL_FWD, BUTTON_NONE },
250 { PLA_UP_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
251 { PLA_DOWN_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
252// { PLA_LEFT_REPEAT, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
253// { PLA_RIGHT_REPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
245#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 254#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
246 { PLA_UP, BUTTON_PREV, BUTTON_NONE }, 255 { PLA_UP, BUTTON_PREV, BUTTON_NONE },
247 { PLA_DOWN, BUTTON_NEXT, BUTTON_NONE }, 256 { PLA_DOWN, BUTTON_NEXT, BUTTON_NONE },
@@ -407,19 +416,19 @@ const struct button_mapping pla_main_ctx[] =
407 {PLA_SELECT, BUTTON_OK, BUTTON_NONE}, 416 {PLA_SELECT, BUTTON_OK, BUTTON_NONE},
408 {PLA_SELECT_REL, BUTTON_OK|BUTTON_REL, BUTTON_OK }, 417 {PLA_SELECT_REL, BUTTON_OK|BUTTON_REL, BUTTON_OK },
409 {PLA_SELECT_REPEAT, BUTTON_OK|BUTTON_REPEAT, BUTTON_NONE}, 418 {PLA_SELECT_REPEAT, BUTTON_OK|BUTTON_REPEAT, BUTTON_NONE},
410#elif (CONFIG_KEYPAD == MPIO_HD200_PAD) 419#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
411 {PLA_CANCEL, BUTTON_REC, BUTTON_NONE}, 420 {PLA_CANCEL, BUTTON_REC, BUTTON_NONE},
412 {PLA_EXIT, (BUTTON_REC|BUTTON_PLAY), BUTTON_NONE}, 421 {PLA_EXIT, (BUTTON_REC|BUTTON_PLAY), BUTTON_NONE},
413 {PLA_SELECT, BUTTON_FUNC, BUTTON_NONE}, 422 {PLA_SELECT, BUTTON_FUNC, BUTTON_NONE},
414 {PLA_SELECT_REL, BUTTON_FUNC|BUTTON_REL, BUTTON_FUNC}, 423 {PLA_SELECT_REL, BUTTON_FUNC|BUTTON_REL, BUTTON_FUNC},
415 {PLA_SELECT_REPEAT, BUTTON_FUNC|BUTTON_REPEAT, BUTTON_NONE}, 424 {PLA_SELECT_REPEAT, BUTTON_FUNC|BUTTON_REPEAT, BUTTON_NONE},
416#elif (CONFIG_KEYPAD == MPIO_HD300_PAD) 425#elif (CONFIG_KEYPAD == MPIO_HD300_PAD)
417 {PLA_CANCEL, BUTTON_MENU, BUTTON_NONE}, 426 {PLA_CANCEL, BUTTON_MENU, BUTTON_NONE},
418 {PLA_EXIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE}, 427 {PLA_EXIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE},
419 {PLA_SELECT, BUTTON_ENTER, BUTTON_NONE}, 428 {PLA_SELECT, BUTTON_ENTER, BUTTON_NONE},
420 {PLA_SELECT_REL, BUTTON_ENTER|BUTTON_REL, BUTTON_ENTER}, 429 {PLA_SELECT_REL, BUTTON_ENTER|BUTTON_REL, BUTTON_ENTER},
421 {PLA_SELECT_REPEAT, BUTTON_ENTER|BUTTON_REPEAT, BUTTON_NONE}, 430 {PLA_SELECT_REPEAT, BUTTON_ENTER|BUTTON_REPEAT, BUTTON_NONE},
422#elif (CONFIG_KEYPAD == RK27XX_GENERIC_PAD) 431#elif (CONFIG_KEYPAD == RK27XX_GENERIC_PAD)
423 {PLA_CANCEL, BUTTON_M, BUTTON_NONE}, 432 {PLA_CANCEL, BUTTON_M, BUTTON_NONE},
424 {PLA_EXIT, BUTTON_M|BUTTON_REPEAT, BUTTON_NONE}, 433 {PLA_EXIT, BUTTON_M|BUTTON_REPEAT, BUTTON_NONE},
425 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE}, 434 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
@@ -431,7 +440,7 @@ const struct button_mapping pla_main_ctx[] =
431 {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE}, 440 {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE},
432 {PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, 441 {PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT},
433 {PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, 442 {PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE},
434#elif (CONFIG_KEYPAD == AGPTEK_ROCKER_PAD) 443#elif (CONFIG_KEYPAD == AGPTEK_ROCKER_PAD)
435 {PLA_CANCEL, BUTTON_VOLUP, BUTTON_NONE}, 444 {PLA_CANCEL, BUTTON_VOLUP, BUTTON_NONE},
436 {PLA_EXIT, BUTTON_POWER, BUTTON_NONE}, 445 {PLA_EXIT, BUTTON_POWER, BUTTON_NONE},
437 {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE}, 446 {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE},
@@ -479,6 +488,12 @@ const struct button_mapping pla_main_ctx[] =
479 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE}, 488 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
480 {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY}, 489 {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
481 {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, 490 {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
491#elif (CONFIG_KEYPAD == EROSQ_PAD)
492 {PLA_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_BACK},
493 {PLA_EXIT, BUTTON_POWER, BUTTON_NONE},
494 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
495 {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
496 {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
482#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 497#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
483 {PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER}, 498 {PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER},
484 {PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE}, 499 {PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE},
@@ -501,7 +516,7 @@ const struct button_mapping pla_main_ctx[] =
501 516
502static struct button_mapping **plugin_context_order; 517static struct button_mapping **plugin_context_order;
503static int plugin_context_count = 0; 518static int plugin_context_count = 0;
504static int last_context = 0; /* index into plugin_context_order 519static int last_context = 0; /* index into plugin_context_order
505 of the last context returned */ 520 of the last context returned */
506 521
507static const struct button_mapping* get_context_map(int context) 522static const struct button_mapping* get_context_map(int context)
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index e34cedde21..641991cfeb 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -293,23 +293,7 @@
293#define MIDI_VOL_DOWN BUTTON_VOLDOWN 293#define MIDI_VOL_DOWN BUTTON_VOLDOWN
294#define MIDI_PLAYPAUSE BUTTON_SELECT 294#define MIDI_PLAYPAUSE BUTTON_SELECT
295 295
296#elif CONFIG_KEYPAD == XDUOO_X3_PAD 296#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
297#define MIDI_QUIT BUTTON_POWER
298#define MIDI_FFWD BUTTON_NEXT
299#define MIDI_REWIND BUTTON_PREV
300#define MIDI_VOL_UP BUTTON_VOL_UP
301#define MIDI_VOL_DOWN BUTTON_VOL_DOWN
302#define MIDI_PLAYPAUSE BUTTON_PLAY
303
304#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
305#define MIDI_QUIT BUTTON_POWER
306#define MIDI_FFWD BUTTON_NEXT
307#define MIDI_REWIND BUTTON_PREV
308#define MIDI_VOL_UP BUTTON_VOL_UP
309#define MIDI_VOL_DOWN BUTTON_VOL_DOWN
310#define MIDI_PLAYPAUSE BUTTON_PLAY
311
312#elif CONFIG_KEYPAD == XDUOO_X20_PAD
313#define MIDI_QUIT BUTTON_POWER 297#define MIDI_QUIT BUTTON_POWER
314#define MIDI_FFWD BUTTON_NEXT 298#define MIDI_FFWD BUTTON_NEXT
315#define MIDI_REWIND BUTTON_PREV 299#define MIDI_REWIND BUTTON_PREV
@@ -325,15 +309,7 @@
325#define MIDI_VOL_DOWN BUTTON_VOL_DOWN 309#define MIDI_VOL_DOWN BUTTON_VOL_DOWN
326#define MIDI_PLAYPAUSE BUTTON_PLAY 310#define MIDI_PLAYPAUSE BUTTON_PLAY
327 311
328#elif CONFIG_KEYPAD == IHIFI_770_PAD 312#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
329#define MIDI_QUIT BUTTON_POWER
330#define MIDI_FFWD BUTTON_VOL_DOWN
331#define MIDI_REWIND BUTTON_HOME
332#define MIDI_VOL_UP BUTTON_PREV
333#define MIDI_VOL_DOWN BUTTON_NEXT
334#define MIDI_PLAYPAUSE BUTTON_PLAY
335
336#elif CONFIG_KEYPAD == IHIFI_800_PAD
337#define MIDI_QUIT BUTTON_POWER 313#define MIDI_QUIT BUTTON_POWER
338#define MIDI_FFWD BUTTON_VOL_DOWN 314#define MIDI_FFWD BUTTON_VOL_DOWN
339#define MIDI_REWIND BUTTON_HOME 315#define MIDI_REWIND BUTTON_HOME
@@ -341,6 +317,14 @@
341#define MIDI_VOL_DOWN BUTTON_NEXT 317#define MIDI_VOL_DOWN BUTTON_NEXT
342#define MIDI_PLAYPAUSE BUTTON_PLAY 318#define MIDI_PLAYPAUSE BUTTON_PLAY
343 319
320#elif CONFIG_KEYPAD == EROSQ_PAD
321#define MIDI_QUIT BUTTON_POWER
322#define MIDI_FFWD BUTTON_NEXT
323#define MIDI_REWIND BUTTON_PREV
324#define MIDI_VOL_UP BUTTON_VOL_UP
325#define MIDI_VOL_DOWN BUTTON_VOL_DOWN
326#define MIDI_PLAYPAUSE BUTTON_PLAY
327
344#else 328#else
345#error No keymap defined! 329#error No keymap defined!
346#endif 330#endif
@@ -716,4 +700,3 @@ enum plugin_status plugin_start(const void* parameter)
716 return PLUGIN_ERROR; 700 return PLUGIN_ERROR;
717 return PLUGIN_OK; 701 return PLUGIN_OK;
718} 702}
719
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 5872973a45..11c0e86619 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -382,20 +382,7 @@ CONFIG_KEYPAD == MROBE500_PAD
382# define MINESWP_DISCOVER2 BUTTON_VOL_UP 382# define MINESWP_DISCOVER2 BUTTON_VOL_UP
383# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION) 383# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION)
384 384
385#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) 385#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
386# define MINESWP_LEFT BUTTON_PREV
387# define MINESWP_RIGHT BUTTON_NEXT
388# define MINESWP_UP BUTTON_HOME
389# define MINESWP_DOWN BUTTON_OPTION
390# define MINESWP_QUIT BUTTON_POWER
391# define MINESWP_TOGGLE_PRE BUTTON_PLAY
392# define MINESWP_TOGGLE (BUTTON_PLAY | BUTTON_REL)
393# define MINESWP_TOGGLE2 BUTTON_VOL_DOWN
394# define MINESWP_DISCOVER (BUTTON_PLAY | BUTTON_REPEAT)
395# define MINESWP_DISCOVER2 BUTTON_VOL_UP
396# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION)
397
398#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
399# define MINESWP_LEFT BUTTON_PREV 386# define MINESWP_LEFT BUTTON_PREV
400# define MINESWP_RIGHT BUTTON_NEXT 387# define MINESWP_RIGHT BUTTON_NEXT
401# define MINESWP_UP BUTTON_HOME 388# define MINESWP_UP BUTTON_HOME
@@ -421,7 +408,7 @@ CONFIG_KEYPAD == MROBE500_PAD
421# define MINESWP_DISCOVER2 BUTTON_VOL_UP 408# define MINESWP_DISCOVER2 BUTTON_VOL_UP
422# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION) 409# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION)
423 410
424#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 411#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
425# define MINESWP_LEFT BUTTON_HOME 412# define MINESWP_LEFT BUTTON_HOME
426# define MINESWP_RIGHT BUTTON_VOL_DOWN 413# define MINESWP_RIGHT BUTTON_VOL_DOWN
427# define MINESWP_UP BUTTON_PREV 414# define MINESWP_UP BUTTON_PREV
@@ -434,18 +421,16 @@ CONFIG_KEYPAD == MROBE500_PAD
434# define MINESWP_DISCOVER2 (BUTTON_POWER | BUTTON_VOL_DOWN) 421# define MINESWP_DISCOVER2 (BUTTON_POWER | BUTTON_VOL_DOWN)
435# define MINESWP_INFO (BUTTON_POWER | BUTTON_HOME) 422# define MINESWP_INFO (BUTTON_POWER | BUTTON_HOME)
436 423
437#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 424#elif (CONFIG_KEYPAD == EROSQ_PAD)
438# define MINESWP_LEFT BUTTON_HOME 425# define MINESWP_LEFT BUTTON_SCROLL_BACK
439# define MINESWP_RIGHT BUTTON_VOL_DOWN 426# define MINESWP_RIGHT BUTTON_SCROLL_FWD
440# define MINESWP_UP BUTTON_PREV 427# define MINESWP_UP BUTTON_PREV
441# define MINESWP_DOWN BUTTON_NEXT 428# define MINESWP_DOWN BUTTON_NEXT
442# define MINESWP_QUIT BUTTON_POWER 429# define MINESWP_QUIT BUTTON_POWER
443# define MINESWP_TOGGLE_PRE BUTTON_PLAY 430# define MINESWP_TOGGLE_PRE BUTTON_PLAY
444# define MINESWP_TOGGLE (BUTTON_POWER | BUTTON_PREV) 431# define MINESWP_TOGGLE (BUTTON_PLAY | BUTTON_REL)
445# define MINESWP_TOGGLE2 (BUTTON_POWER | BUTTON_NEXT) 432# define MINESWP_DISCOVER (BUTTON_PLAY | BUTTON_REPEAT)
446# define MINESWP_DISCOVER (BUTTON_POWER | BUTTON_VOL_UP) 433# define MINESWP_INFO BUTTON_VOL_UP
447# define MINESWP_DISCOVER2 (BUTTON_POWER | BUTTON_VOL_DOWN)
448# define MINESWP_INFO (BUTTON_POWER | BUTTON_HOME)
449 434
450#else 435#else
451#error No keymap defined! 436#error No keymap defined!
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index 0368edbc88..177835549c 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -152,7 +152,7 @@ static const uint8_t ht_count[2][2][16] =
152 { {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, /* table1 */ 152 { {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, /* table1 */
153 { 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 } } }; /* hleng1 */ 153 { 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 } } }; /* hleng1 */
154 154
155static const uint8_t t1HB[4] = {1,1,1,0}; 155static const uint8_t t1HB[4] = {1,1,1,0};
156static const uint8_t t2HB[9] = {1,2,1,3,1,1,3,2,0}; 156static const uint8_t t2HB[9] = {1,2,1,3,1,1,3,2,0};
157static const uint8_t t3HB[9] = {3,2,1,1,1,1,3,2,0}; 157static const uint8_t t3HB[9] = {3,2,1,1,1,1,3,2,0};
158static const uint8_t t5HB[16] = {1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0}; 158static const uint8_t t5HB[16] = {1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0};
@@ -802,7 +802,7 @@ static const int16_t win[18][4] = {
802 { 529, -831,-3747,-2387 }, 802 { 529, -831,-3747,-2387 },
803 { 362, -471,-3579,-2747 }, 803 { 362, -471,-3579,-2747 },
804 { 134, -146,-3352,-3072 } }; 804 { 134, -146,-3352,-3072 } };
805 805
806static char* mp3_enc_err[] = { 806static char* mp3_enc_err[] = {
807 /* 0 */ "", 807 /* 0 */ "",
808 /* 1 */ "Cannot open file.", 808 /* 1 */ "Cannot open file.",
@@ -880,21 +880,21 @@ static int wave_open(void)
880 880
881 if((wavfile = rb->open(wav_filename, O_RDONLY)) < 0) 881 if((wavfile = rb->open(wav_filename, O_RDONLY)) < 0)
882 return -1; 882 return -1;
883 883
884 if(!checkString(wavfile,"RIFF")) return -2; 884 if(!checkString(wavfile,"RIFF")) return -2;
885 Read32BitsLowHigh(wavfile); /* complete wave chunk size */ 885 Read32BitsLowHigh(wavfile); /* complete wave chunk size */
886 if(!checkString(wavfile,"WAVE")) return -3; 886 if(!checkString(wavfile,"WAVE")) return -3;
887 if(!checkString(wavfile,"fmt ")) return -4; 887 if(!checkString(wavfile,"fmt ")) return -4;
888 888
889 header_size = Read32BitsLowHigh(wavfile); /* chunk size */ 889 header_size = Read32BitsLowHigh(wavfile); /* chunk size */
890 wFormatTag = Read16BitsLowHigh(wavfile); 890 wFormatTag = Read16BitsLowHigh(wavfile);
891 891
892 cfg.channels = Read16BitsLowHigh(wavfile); 892 cfg.channels = Read16BitsLowHigh(wavfile);
893 cfg.samplerate = Read32BitsLowHigh(wavfile); 893 cfg.samplerate = Read32BitsLowHigh(wavfile);
894 /*dAvgBytesPerSec*/ Read32BitsLowHigh(wavfile); 894 /*dAvgBytesPerSec*/ Read32BitsLowHigh(wavfile);
895 /*wBlockAlign */ Read16BitsLowHigh(wavfile); 895 /*wBlockAlign */ Read16BitsLowHigh(wavfile);
896 bits_per_samp = Read16BitsLowHigh(wavfile); 896 bits_per_samp = Read16BitsLowHigh(wavfile);
897 897
898 if(wFormatTag != 0x0001) return -5; /* linear PCM required */ 898 if(wFormatTag != 0x0001) return -5; /* linear PCM required */
899 if(bits_per_samp != 16) return -6; /* 16 bps required */ 899 if(bits_per_samp != 16) return -6; /* 16 bps required */
900 if(cfg.channels > 2) return -7; /* <=2 channels required */ 900 if(cfg.channels > 2) return -7; /* <=2 channels required */
@@ -904,11 +904,11 @@ static int wave_open(void)
904 if((cfg.samplerate != 16000) && (cfg.samplerate != 22050) && 904 if((cfg.samplerate != 16000) && (cfg.samplerate != 22050) &&
905 (cfg.samplerate != 24000) && (cfg.samplerate != 32000) && 905 (cfg.samplerate != 24000) && (cfg.samplerate != 32000) &&
906 (cfg.samplerate != 44100) && (cfg.samplerate != 48000)) return -9; 906 (cfg.samplerate != 44100) && (cfg.samplerate != 48000)) return -9;
907 907
908 header_size = 0x28; 908 header_size = 0x28;
909 wav_size = rb->filesize(wavfile); 909 wav_size = rb->filesize(wavfile);
910 rb->lseek(wavfile, header_size, SEEK_SET); 910 rb->lseek(wavfile, header_size, SEEK_SET);
911 911
912 return 0; 912 return 0;
913} 913}
914 914
@@ -946,7 +946,7 @@ static void encodeSideInfo( side_info_t si[2][2] )
946{ 946{
947 int gr, ch, header; 947 int gr, ch, header;
948 uint32_t cc=0, sz=0; 948 uint32_t cc=0, sz=0;
949 949
950 /* 950 /*
951 * MPEG header layout: 951 * MPEG header layout:
952 * AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM 952 * AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
@@ -1053,7 +1053,7 @@ static void Huffmancodebits( short *ix, char *xr_sign, side_info_t *gi )
1053 1053
1054 if(bigvals > region2) 1054 if(bigvals > region2)
1055 bits += HuffmanCode(ix, xr_sign, region2, bigvals, gi->table_select[2]); 1055 bits += HuffmanCode(ix, xr_sign, region2, bigvals, gi->table_select[2]);
1056 1056
1057 if(count1 > bigvals) 1057 if(count1 > bigvals)
1058 bits += HuffmanCod1(ix, xr_sign, bigvals, count1, gi->table_select[3]); 1058 bits += HuffmanCod1(ix, xr_sign, bigvals, count1, gi->table_select[3]);
1059 1059
@@ -1251,7 +1251,7 @@ static int choose_table( short *ix, uint32_t begin, uint32_t end, int *bits )
1251{ 1251{
1252 uint32_t i; 1252 uint32_t i;
1253 int max, table0, table1; 1253 int max, table0, table1;
1254 1254
1255 for(i=begin,max=0; i<end; i++) 1255 for(i=begin,max=0; i<end; i++)
1256 if(ix[i] > max) 1256 if(ix[i] > max)
1257 max = ix[i]; 1257 max = ix[i];
@@ -1408,7 +1408,7 @@ static int calc_runlen( short *ix, side_info_t *si )
1408 int w = ix[i-2]; 1408 int w = ix[i-2];
1409 int x = ix[i-3]; 1409 int x = ix[i-3];
1410 int y = ix[i-4]; 1410 int y = ix[i-4];
1411 1411
1412 if((v | w | x | y) <= 1) 1412 if((v | w | x | y) <= 1)
1413 { 1413 {
1414 p = (y<<3) + (x<<2) + (w<<1) + (v); 1414 p = (y<<3) + (x<<2) + (w<<1) + (v);
@@ -1473,7 +1473,7 @@ static int quantize_int(int *xr, short *ix, side_info_t *si)
1473static void subdivide(side_info_t *si) 1473static void subdivide(side_info_t *si)
1474{ 1474{
1475 int scfb, count0, count1; 1475 int scfb, count0, count1;
1476 1476
1477 if( !si->address3 ) 1477 if( !si->address3 )
1478 { /* no bigvalue region */ 1478 { /* no bigvalue region */
1479 si->region_0_1 = 0; 1479 si->region_0_1 = 0;
@@ -1535,7 +1535,7 @@ static int quantize_and_count_bits(int *xr, short *ix, side_info_t *si)
1535 1535
1536/************************************************************************/ 1536/************************************************************************/
1537/* The code selects the best quantStep for a particular set of scalefacs*/ 1537/* The code selects the best quantStep for a particular set of scalefacs*/
1538/************************************************************************/ 1538/************************************************************************/
1539static int inner_loop(int *xr, int max_bits, side_info_t *si) 1539static int inner_loop(int *xr, int max_bits, side_info_t *si)
1540{ 1540{
1541 int bits; 1541 int bits;
@@ -1877,7 +1877,7 @@ void window_subband2(short *x1, int a[SBLIMIT])
1877 a[ 7] -= a[ 6]; 1877 a[ 7] -= a[ 6];
1878 a[22] -= a[ 7]; 1878 a[22] -= a[ 7];
1879 a[23] -= a[22]; 1879 a[23] -= a[22];
1880 1880
1881 xr = a[ 6]; a[ 6] = a[31] - xr; a[31] = a[31] + xr; 1881 xr = a[ 6]; a[ 6] = a[31] - xr; a[31] = a[31] + xr;
1882 xr = a[ 7]; a[ 7] = a[30] - xr; a[30] = a[30] + xr; 1882 xr = a[ 7]; a[ 7] = a[30] - xr; a[30] = a[30] + xr;
1883 xr = a[22]; a[22] = a[15] - xr; a[15] = a[15] + xr; 1883 xr = a[22]; a[22] = a[15] - xr; a[15] = a[15] + xr;
@@ -1897,23 +1897,23 @@ void window_subband2(short *x1, int a[SBLIMIT])
1897 xr = a[ 1] - a[13]; a[ 1] += a[13]; a[13] = shft9(xr) * wp[ -4*27+25]; 1897 xr = a[ 1] - a[13]; a[ 1] += a[13]; a[13] = shft9(xr) * wp[ -4*27+25];
1898 xr = a[16] - a[28]; a[16] += a[28]; a[28] = shft9(xr) * wp[ -4*27+25]; 1898 xr = a[16] - a[28]; a[16] += a[28]; a[28] = shft9(xr) * wp[ -4*27+25];
1899 xr =-a[17] + a[29]; a[17] += a[29]; a[29] = shft9(xr) * wp[ -4*27+25]; 1899 xr =-a[17] + a[29]; a[17] += a[29]; a[29] = shft9(xr) * wp[ -4*27+25];
1900 1900
1901 xr = SQRT * shft9(a[ 2] - a[10]); a[ 2] += a[10]; a[10] = xr; 1901 xr = SQRT * shft9(a[ 2] - a[10]); a[ 2] += a[10]; a[10] = xr;
1902 xr = SQRT * shft9(a[ 3] - a[11]); a[ 3] += a[11]; a[11] = xr; 1902 xr = SQRT * shft9(a[ 3] - a[11]); a[ 3] += a[11]; a[11] = xr;
1903 xr = SQRT * shft9(a[26] - a[18]); a[18] += a[26]; a[26] = xr - a[18]; 1903 xr = SQRT * shft9(a[26] - a[18]); a[18] += a[26]; a[26] = xr - a[18];
1904 xr = SQRT * shft9(a[27] - a[19]); a[19] += a[27]; a[27] = xr - a[19]; 1904 xr = SQRT * shft9(a[27] - a[19]); a[19] += a[27]; a[27] = xr - a[19];
1905 1905
1906 xr = a[ 2]; a[19] -= a[ 3]; a[ 3] -= xr; a[ 2] = a[31] - xr; a[31] += xr; 1906 xr = a[ 2]; a[19] -= a[ 3]; a[ 3] -= xr; a[ 2] = a[31] - xr; a[31] += xr;
1907 xr = a[ 3]; a[11] -= a[19]; a[18] -= xr; a[ 3] = a[30] - xr; a[30] += xr; 1907 xr = a[ 3]; a[11] -= a[19]; a[18] -= xr; a[ 3] = a[30] - xr; a[30] += xr;
1908 xr = a[18]; a[27] -= a[11]; a[19] -= xr; a[18] = a[15] - xr; a[15] += xr; 1908 xr = a[18]; a[27] -= a[11]; a[19] -= xr; a[18] = a[15] - xr; a[15] += xr;
1909 1909
1910 xr = a[19]; a[10] -= xr; a[19] = a[14] - xr; a[14] += xr; 1910 xr = a[19]; a[10] -= xr; a[19] = a[14] - xr; a[14] += xr;
1911 xr = a[10]; a[11] -= xr; a[10] = a[23] - xr; a[23] += xr; 1911 xr = a[10]; a[11] -= xr; a[10] = a[23] - xr; a[23] += xr;
1912 xr = a[11]; a[26] -= xr; a[11] = a[22] - xr; a[22] += xr; 1912 xr = a[11]; a[26] -= xr; a[11] = a[22] - xr; a[22] += xr;
1913 xr = a[26]; a[27] -= xr; a[26] = a[ 7] - xr; a[ 7] += xr; 1913 xr = a[26]; a[27] -= xr; a[26] = a[ 7] - xr; a[ 7] += xr;
1914 1914
1915 xr = a[27]; a[27] = a[6] - xr; a[6] += xr; 1915 xr = a[27]; a[27] = a[6] - xr; a[6] += xr;
1916 1916
1917 xr = SQRT * shft9(a[ 0] - a[ 4]); a[ 0] += a[ 4]; a[ 4] = xr; 1917 xr = SQRT * shft9(a[ 0] - a[ 4]); a[ 0] += a[ 4]; a[ 4] = xr;
1918 xr = SQRT * shft9(a[ 1] - a[ 5]); a[ 1] += a[ 5]; a[ 5] = xr; 1918 xr = SQRT * shft9(a[ 1] - a[ 5]); a[ 1] += a[ 5]; a[ 5] = xr;
1919 xr = SQRT * shft9(a[16] - a[20]); a[16] += a[20]; a[20] = xr; 1919 xr = SQRT * shft9(a[16] - a[20]); a[16] += a[20]; a[20] = xr;
@@ -1922,15 +1922,15 @@ void window_subband2(short *x1, int a[SBLIMIT])
1922 xr =-SQRT * shft9(a[ 9] - a[13]); a[ 9] += a[13]; a[13] = xr - a[ 9]; 1922 xr =-SQRT * shft9(a[ 9] - a[13]); a[ 9] += a[13]; a[13] = xr - a[ 9];
1923 xr =-SQRT * shft9(a[25] - a[29]); a[25] += a[29]; a[29] = xr - a[25]; 1923 xr =-SQRT * shft9(a[25] - a[29]); a[25] += a[29]; a[29] = xr - a[25];
1924 xr =-SQRT * shft9(a[24] + a[28]); a[24] -= a[28]; a[28] = xr - a[24]; 1924 xr =-SQRT * shft9(a[24] + a[28]); a[24] -= a[28]; a[28] = xr - a[24];
1925 1925
1926 xr = a[24] - a[16]; a[24] = xr; 1926 xr = a[24] - a[16]; a[24] = xr;
1927 xr = a[20] - xr; a[20] = xr; 1927 xr = a[20] - xr; a[20] = xr;
1928 xr = a[28] - xr; a[28] = xr; 1928 xr = a[28] - xr; a[28] = xr;
1929 1929
1930 xr = a[25] - a[17]; a[25] = xr; 1930 xr = a[25] - a[17]; a[25] = xr;
1931 xr = a[21] - xr; a[21] = xr; 1931 xr = a[21] - xr; a[21] = xr;
1932 xr = a[29] - xr; a[29] = xr; 1932 xr = a[29] - xr; a[29] = xr;
1933 1933
1934 xr = a[17] - a[1]; a[17] = xr; 1934 xr = a[17] - a[1]; a[17] = xr;
1935 xr = a[ 9] - xr; a[ 9] = xr; 1935 xr = a[ 9] - xr; a[ 9] = xr;
1936 xr = a[25] - xr; a[25] = xr; 1936 xr = a[25] - xr; a[25] = xr;
@@ -1938,7 +1938,7 @@ void window_subband2(short *x1, int a[SBLIMIT])
1938 xr = a[21] - xr; a[21] = xr; 1938 xr = a[21] - xr; a[21] = xr;
1939 xr = a[13] - xr; a[13] = xr; 1939 xr = a[13] - xr; a[13] = xr;
1940 xr = a[29] - xr; a[29] = xr; 1940 xr = a[29] - xr; a[29] = xr;
1941 1941
1942 xr = a[ 1] - a[0]; a[ 1] = xr; 1942 xr = a[ 1] - a[0]; a[ 1] = xr;
1943 xr = a[16] - xr; a[16] = xr; 1943 xr = a[16] - xr; a[16] = xr;
1944 xr = a[17] - xr; a[17] = xr; 1944 xr = a[17] - xr; a[17] = xr;
@@ -1954,7 +1954,7 @@ void window_subband2(short *x1, int a[SBLIMIT])
1954 xr = a[13] - xr; a[13] = xr; 1954 xr = a[13] - xr; a[13] = xr;
1955 xr = a[28] - xr; a[28] = xr; 1955 xr = a[28] - xr; a[28] = xr;
1956 xr = a[29] - xr; a[29] = xr; 1956 xr = a[29] - xr; a[29] = xr;
1957 1957
1958 xr = a[ 0]; a[ 0] += a[31]; a[31] -= xr; 1958 xr = a[ 0]; a[ 0] += a[31]; a[31] -= xr;
1959 xr = a[ 1]; a[ 1] += a[30]; a[30] -= xr; 1959 xr = a[ 1]; a[ 1] += a[30]; a[30] -= xr;
1960 xr = a[16]; a[16] += a[15]; a[15] -= xr; 1960 xr = a[16]; a[16] += a[15]; a[15] -= xr;
@@ -1994,7 +1994,7 @@ void mdct_long(int *out, int *in)
1994 ct = (tc1 - tc3 - tc4) * cx[6]; 1994 ct = (tc1 - tc3 - tc4) * cx[6];
1995 out[5] = ct + st; 1995 out[5] = ct + st;
1996 out[6] = ct - st; 1996 out[6] = ct - st;
1997 1997
1998 tc2 = (in[16] - in[10]) * cx[6]; 1998 tc2 = (in[16] - in[10]) * cx[6];
1999 ts6 = ts6 * cx[7] + in[4] * cx[8]; 1999 ts6 = ts6 * cx[7] + in[4] * cx[8];
2000 2000
@@ -2002,12 +2002,12 @@ void mdct_long(int *out, int *in)
2002 st = -ts5 * cx[4] + ts6 - ts7 * cx[5] + ts8 * cx[3]; 2002 st = -ts5 * cx[4] + ts6 - ts7 * cx[5] + ts8 * cx[3];
2003 out[1] = ct + st; 2003 out[1] = ct + st;
2004 out[2] = ct - st; 2004 out[2] = ct - st;
2005 2005
2006 ct = tc1 * cx[1] - tc2 - tc3 * cx[2] + tc4 * cx[0]; 2006 ct = tc1 * cx[1] - tc2 - tc3 * cx[2] + tc4 * cx[0];
2007 st = -ts5 * cx[5] + ts6 - ts7 * cx[3] + ts8 * cx[4]; 2007 st = -ts5 * cx[5] + ts6 - ts7 * cx[3] + ts8 * cx[4];
2008 out[ 9] = ct + st; 2008 out[ 9] = ct + st;
2009 out[10] = ct - st; 2009 out[10] = ct - st;
2010 2010
2011 ct = tc1 * cx[2] - tc2 + tc3 * cx[0] - tc4 * cx[1]; 2011 ct = tc1 * cx[2] - tc2 + tc3 * cx[0] - tc4 * cx[1];
2012 st = ts5 * cx[3] - ts6 + ts7 * cx[4] - ts8 * cx[5]; 2012 st = ts5 * cx[3] - ts6 + ts7 * cx[4] - ts8 * cx[5];
2013 out[13] = ct + st; 2013 out[13] = ct + st;
@@ -2089,7 +2089,7 @@ static void init_mp3_encoder_engine(bool stereo, int bitrate, uint16_t sample_ra
2089 cfg.mpg.smpl_id = find_samplerate_index(cfg.samplerate, &cfg.mpg.type); 2089 cfg.mpg.smpl_id = find_samplerate_index(cfg.samplerate, &cfg.mpg.type);
2090 cfg.mpg.bitr_id = find_bitrate_index(cfg.mpg.type, cfg.mpg.bitrate); 2090 cfg.mpg.bitr_id = find_bitrate_index(cfg.mpg.type, cfg.mpg.bitrate);
2091 cfg.mpg.num_bands = num_bands[stereo ? cfg.mpg.type : 2][cfg.mpg.bitr_id]; 2091 cfg.mpg.num_bands = num_bands[stereo ? cfg.mpg.type : 2][cfg.mpg.bitr_id];
2092 2092
2093 if(0 == cfg.mpg.type) 2093 if(0 == cfg.mpg.type)
2094 { /* use MPEG2 format */ 2094 { /* use MPEG2 format */
2095 cfg.smpl_per_frm = MAX_SAMP_PER_FRAME/2; 2095 cfg.smpl_per_frm = MAX_SAMP_PER_FRAME/2;
@@ -2172,13 +2172,13 @@ static void compress(void)
2172 { 2172 {
2173 if((frames & 7) == 0) 2173 if((frames & 7) == 0)
2174 { rb->lcd_clear_display(); 2174 { rb->lcd_clear_display();
2175 rb->lcd_putsxyf(4, 20, "Frame %d / %d", frames, 2175 rb->lcd_putsxyf(4, 20, "Frame %d / %d", frames,
2176 wav_size/cfg.smpl_per_frm/cfg.channels/2); 2176 wav_size/cfg.smpl_per_frm/cfg.channels/2);
2177 rb->lcd_update(); 2177 rb->lcd_update();
2178 } 2178 }
2179 /* encode one mp3 frame in this loop */ 2179 /* encode one mp3 frame in this loop */
2180 memset(CodedData.bbuf, 0, sizeof(CodedData.bbuf)); 2180 memset(CodedData.bbuf, 0, sizeof(CodedData.bbuf));
2181 2181
2182 if((cfg.slot_lag += cfg.frac_per_frame) >= 64) 2182 if((cfg.slot_lag += cfg.frac_per_frame) >= 64)
2183 { /* Padding for this frame */ 2183 { /* Padding for this frame */
2184 cfg.slot_lag -= 64; 2184 cfg.slot_lag -= 64;
@@ -2556,19 +2556,7 @@ CONFIG_KEYPAD == MROBE500_PAD
2556#define MP3ENC_DONE BUTTON_POWER 2556#define MP3ENC_DONE BUTTON_POWER
2557#define MP3ENC_SELECT BUTTON_SELECT 2557#define MP3ENC_SELECT BUTTON_SELECT
2558 2558
2559#elif CONFIG_KEYPAD == XDUOO_X3_PAD 2559#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
2560#define MP3ENC_PREV BUTTON_HOME
2561#define MP3ENC_NEXT BUTTON_OPTION
2562#define MP3ENC_DONE BUTTON_POWER
2563#define MP3ENC_SELECT BUTTON_PLAY
2564
2565#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
2566#define MP3ENC_PREV BUTTON_HOME
2567#define MP3ENC_NEXT BUTTON_OPTION
2568#define MP3ENC_DONE BUTTON_POWER
2569#define MP3ENC_SELECT BUTTON_PLAY
2570
2571#elif CONFIG_KEYPAD == XDUOO_X20_PAD
2572#define MP3ENC_PREV BUTTON_HOME 2560#define MP3ENC_PREV BUTTON_HOME
2573#define MP3ENC_NEXT BUTTON_OPTION 2561#define MP3ENC_NEXT BUTTON_OPTION
2574#define MP3ENC_DONE BUTTON_POWER 2562#define MP3ENC_DONE BUTTON_POWER
@@ -2580,13 +2568,13 @@ CONFIG_KEYPAD == MROBE500_PAD
2580#define MP3ENC_DONE BUTTON_POWER 2568#define MP3ENC_DONE BUTTON_POWER
2581#define MP3ENC_SELECT BUTTON_PLAY 2569#define MP3ENC_SELECT BUTTON_PLAY
2582 2570
2583#elif CONFIG_KEYPAD == IHIFI_770_PAD 2571#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
2584#define MP3ENC_PREV BUTTON_PREV 2572#define MP3ENC_PREV BUTTON_PREV
2585#define MP3ENC_NEXT BUTTON_NEXT 2573#define MP3ENC_NEXT BUTTON_NEXT
2586#define MP3ENC_DONE BUTTON_POWER 2574#define MP3ENC_DONE BUTTON_POWER
2587#define MP3ENC_SELECT BUTTON_PLAY 2575#define MP3ENC_SELECT BUTTON_PLAY
2588 2576
2589#elif CONFIG_KEYPAD == IHIFI_800_PAD 2577#elif CONFIG_KEYPAD == EROSQ_PAD
2590#define MP3ENC_PREV BUTTON_PREV 2578#define MP3ENC_PREV BUTTON_PREV
2591#define MP3ENC_NEXT BUTTON_NEXT 2579#define MP3ENC_NEXT BUTTON_NEXT
2592#define MP3ENC_DONE BUTTON_POWER 2580#define MP3ENC_DONE BUTTON_POWER
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index 43143bdaee..1bc7d4db96 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -316,17 +316,7 @@ struct mpeg_settings settings;
316#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN 316#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN
317#define MPEG_START_TIME_EXIT BUTTON_POWER 317#define MPEG_START_TIME_EXIT BUTTON_POWER
318 318
319#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 319#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
320#define MPEG_START_TIME_SELECT BUTTON_PLAY
321#define MPEG_START_TIME_LEFT BUTTON_PREV
322#define MPEG_START_TIME_RIGHT BUTTON_NEXT
323#define MPEG_START_TIME_UP BUTTON_HOME
324#define MPEG_START_TIME_DOWN BUTTON_OPTION
325#define MPEG_START_TIME_LEFT2 BUTTON_VOL_UP
326#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN
327#define MPEG_START_TIME_EXIT BUTTON_POWER
328
329#elif CONFIG_KEYPAD == XDUOO_X20_PAD
330#define MPEG_START_TIME_SELECT BUTTON_PLAY 320#define MPEG_START_TIME_SELECT BUTTON_PLAY
331#define MPEG_START_TIME_LEFT BUTTON_PREV 321#define MPEG_START_TIME_LEFT BUTTON_PREV
332#define MPEG_START_TIME_RIGHT BUTTON_NEXT 322#define MPEG_START_TIME_RIGHT BUTTON_NEXT
@@ -346,7 +336,7 @@ struct mpeg_settings settings;
346#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN 336#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN
347#define MPEG_START_TIME_EXIT BUTTON_POWER 337#define MPEG_START_TIME_EXIT BUTTON_POWER
348 338
349#elif CONFIG_KEYPAD == IHIFI_770_PAD 339#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
350#define MPEG_START_TIME_SELECT BUTTON_PLAY 340#define MPEG_START_TIME_SELECT BUTTON_PLAY
351#define MPEG_START_TIME_LEFT BUTTON_HOME 341#define MPEG_START_TIME_LEFT BUTTON_HOME
352#define MPEG_START_TIME_RIGHT BUTTON_VOL_DOWN 342#define MPEG_START_TIME_RIGHT BUTTON_VOL_DOWN
@@ -356,14 +346,12 @@ struct mpeg_settings settings;
356#define MPEG_START_TIME_RIGHT2 (BUTTON_POWER + BUTTON_VOL_DOWN) 346#define MPEG_START_TIME_RIGHT2 (BUTTON_POWER + BUTTON_VOL_DOWN)
357#define MPEG_START_TIME_EXIT BUTTON_POWER 347#define MPEG_START_TIME_EXIT BUTTON_POWER
358 348
359#elif CONFIG_KEYPAD == IHIFI_800_PAD 349#elif CONFIG_KEYPAD == EROSQ_PAD
360#define MPEG_START_TIME_SELECT BUTTON_PLAY 350#define MPEG_START_TIME_SELECT BUTTON_PLAY
361#define MPEG_START_TIME_LEFT BUTTON_HOME 351#define MPEG_START_TIME_LEFT BUTTON_SCROLL_BACK
362#define MPEG_START_TIME_RIGHT BUTTON_VOL_DOWN 352#define MPEG_START_TIME_RIGHT BUTTON_SCROLL_FWD
363#define MPEG_START_TIME_UP BUTTON_PREV 353#define MPEG_START_TIME_UP BUTTON_PREV
364#define MPEG_START_TIME_DOWN BUTTON_NEXT 354#define MPEG_START_TIME_DOWN BUTTON_NEXT
365#define MPEG_START_TIME_LEFT2 (BUTTON_POWER + BUTTON_HOME)
366#define MPEG_START_TIME_RIGHT2 (BUTTON_POWER + BUTTON_VOL_DOWN)
367#define MPEG_START_TIME_EXIT BUTTON_POWER 355#define MPEG_START_TIME_EXIT BUTTON_POWER
368 356
369#else 357#else
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 8028913c94..f86a6e55fd 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -23,9 +23,9 @@
23 23
24/**************************************************************************** 24/****************************************************************************
25 * NOTES: 25 * NOTES:
26 * 26 *
27 * mpegplayer is structured as follows: 27 * mpegplayer is structured as follows:
28 * 28 *
29 * +-->Video Thread-->Video Output-->LCD 29 * +-->Video Thread-->Video Output-->LCD
30 * | 30 * |
31 * UI-->Stream Manager-->+-->Audio Thread-->PCM buffer--Audio Device 31 * UI-->Stream Manager-->+-->Audio Thread-->PCM buffer--Audio Device
@@ -36,53 +36,53 @@
36 * | Disk I/O 36 * | Disk I/O
37 * Stream services 37 * Stream services
38 * (timing, etc.) 38 * (timing, etc.)
39 * 39 *
40 * Thread list: 40 * Thread list:
41 * 1) The main thread - Handles user input, settings, basic playback control 41 * 1) The main thread - Handles user input, settings, basic playback control
42 * and USB connect. 42 * and USB connect.
43 * 43 *
44 * 2) Stream Manager thread - Handles playback state, events from streams 44 * 2) Stream Manager thread - Handles playback state, events from streams
45 * such as when a stream is finished, stream commands, PCM state. The 45 * such as when a stream is finished, stream commands, PCM state. The
46 * layer in which this thread run also handles arbitration of data 46 * layer in which this thread run also handles arbitration of data
47 * requests between the streams and the disk buffer. The actual specific 47 * requests between the streams and the disk buffer. The actual specific
48 * transport layer code may get moved out to support multiple container 48 * transport layer code may get moved out to support multiple container
49 * formats. 49 * formats.
50 * 50 *
51 * 3) Buffer thread - Buffers data in the background, generates notifications 51 * 3) Buffer thread - Buffers data in the background, generates notifications
52 * to streams when their data has been buffered, and watches streams' 52 * to streams when their data has been buffered, and watches streams'
53 * progress to keep data available during playback. Handles synchronous 53 * progress to keep data available during playback. Handles synchronous
54 * random access requests when the file cache is missed. 54 * random access requests when the file cache is missed.
55 * 55 *
56 * 4) Video thread (running on the COP for PortalPlayer targets) - Decodes 56 * 4) Video thread (running on the COP for PortalPlayer targets) - Decodes
57 * the video stream and renders video frames to the LCD. Handles 57 * the video stream and renders video frames to the LCD. Handles
58 * miscellaneous video tasks like frame and thumbnail printing. 58 * miscellaneous video tasks like frame and thumbnail printing.
59 * 59 *
60 * 5) Audio thread (running on the main CPU to maintain consistency with the 60 * 5) Audio thread (running on the main CPU to maintain consistency with the
61 * audio FIQ hander on PP) - Decodes audio frames and places them into 61 * audio FIQ hander on PP) - Decodes audio frames and places them into
62 * the PCM buffer for rendering by the audio device. 62 * the PCM buffer for rendering by the audio device.
63 * 63 *
64 * Streams are neither aware of one another nor care about one another. All 64 * Streams are neither aware of one another nor care about one another. All
65 * streams shall have their own thread (unless it is _really_ efficient to 65 * streams shall have their own thread (unless it is _really_ efficient to
66 * have a single thread handle a couple minor streams). All coordination of 66 * have a single thread handle a couple minor streams). All coordination of
67 * the streams is done through the stream manager. The clocking is controlled 67 * the streams is done through the stream manager. The clocking is controlled
68 * by and exposed by the stream manager to other streams and implemented at 68 * by and exposed by the stream manager to other streams and implemented at
69 * the PCM level. 69 * the PCM level.
70 * 70 *
71 * Notes about MPEG files: 71 * Notes about MPEG files:
72 * 72 *
73 * MPEG System Clock is 27MHz - i.e. 27000000 ticks/second. 73 * MPEG System Clock is 27MHz - i.e. 27000000 ticks/second.
74 * 74 *
75 * FPS is represented in terms of a frame period - this is always an 75 * FPS is represented in terms of a frame period - this is always an
76 * integer number of 27MHz ticks. 76 * integer number of 27MHz ticks.
77 * 77 *
78 * e.g. 29.97fps (30000/1001) NTSC video has an exact frame period of 78 * e.g. 29.97fps (30000/1001) NTSC video has an exact frame period of
79 * 900900 27MHz ticks. 79 * 900900 27MHz ticks.
80 * 80 *
81 * In libmpeg2, info->sequence->frame_period contains the frame_period. 81 * In libmpeg2, info->sequence->frame_period contains the frame_period.
82 * 82 *
83 * Working with Rockbox's 100Hz tick, the common frame rates would need 83 * Working with Rockbox's 100Hz tick, the common frame rates would need
84 * to be as follows (1): 84 * to be as follows (1):
85 * 85 *
86 * FPS | 27Mhz | 100Hz | 44.1KHz | 48KHz 86 * FPS | 27Mhz | 100Hz | 44.1KHz | 48KHz
87 * --------|----------------------------------------------------------- 87 * --------|-----------------------------------------------------------
88 * 10* | 2700000 | 10 | 4410 | 4800 88 * 10* | 2700000 | 10 | 4410 | 4800
@@ -93,9 +93,9 @@
93 * 25 | 1080000 | 4 | 1764 | 1920 93 * 25 | 1080000 | 4 | 1764 | 1920
94 * 29.9700 | 900900 | 3.336667 | 1471,47 | 1601.6 94 * 29.9700 | 900900 | 3.336667 | 1471,47 | 1601.6
95 * 30 | 900000 | 3.333333 | 1470 | 1600 95 * 30 | 900000 | 3.333333 | 1470 | 1600
96 * 96 *
97 * *Unofficial framerates 97 * *Unofficial framerates
98 * 98 *
99 * (1) But we don't really care since the audio clock is used anyway and has 99 * (1) But we don't really care since the audio clock is used anyway and has
100 * very fine resolution ;-) 100 * very fine resolution ;-)
101 *****************************************************************************/ 101 *****************************************************************************/
@@ -450,16 +450,7 @@ CONFIG_KEYPAD == SANSA_M200_PAD
450#define MPEG_RW BUTTON_PREV 450#define MPEG_RW BUTTON_PREV
451#define MPEG_FF BUTTON_NEXT 451#define MPEG_FF BUTTON_NEXT
452 452
453#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 453#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
454#define MPEG_MENU BUTTON_PLAY
455#define MPEG_STOP BUTTON_POWER
456#define MPEG_PAUSE BUTTON_HOME
457#define MPEG_VOLDOWN BUTTON_VOL_DOWN
458#define MPEG_VOLUP BUTTON_VOL_UP
459#define MPEG_RW BUTTON_PREV
460#define MPEG_FF BUTTON_NEXT
461
462#elif CONFIG_KEYPAD == XDUOO_X20_PAD
463#define MPEG_MENU BUTTON_PLAY 454#define MPEG_MENU BUTTON_PLAY
464#define MPEG_STOP BUTTON_POWER 455#define MPEG_STOP BUTTON_POWER
465#define MPEG_PAUSE BUTTON_HOME 456#define MPEG_PAUSE BUTTON_HOME
@@ -477,7 +468,7 @@ CONFIG_KEYPAD == SANSA_M200_PAD
477#define MPEG_RW BUTTON_PREV 468#define MPEG_RW BUTTON_PREV
478#define MPEG_FF BUTTON_NEXT 469#define MPEG_FF BUTTON_NEXT
479 470
480#elif CONFIG_KEYPAD == IHIFI_770_PAD 471#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
481#define MPEG_MENU BUTTON_PLAY 472#define MPEG_MENU BUTTON_PLAY
482#define MPEG_STOP BUTTON_POWER 473#define MPEG_STOP BUTTON_POWER
483#define MPEG_PAUSE BUTTON_HOME 474#define MPEG_PAUSE BUTTON_HOME
@@ -486,10 +477,10 @@ CONFIG_KEYPAD == SANSA_M200_PAD
486#define MPEG_RW BUTTON_PREV 477#define MPEG_RW BUTTON_PREV
487#define MPEG_FF BUTTON_NEXT 478#define MPEG_FF BUTTON_NEXT
488 479
489#elif CONFIG_KEYPAD == IHIFI_800_PAD 480#elif CONFIG_KEYPAD == EROSQ_PAD
490#define MPEG_MENU BUTTON_PLAY 481#define MPEG_MENU BUTTON_MENU
491#define MPEG_STOP BUTTON_POWER 482#define MPEG_STOP BUTTON_POWER
492#define MPEG_PAUSE BUTTON_HOME 483#define MPEG_PAUSE BUTTON_PLAY
493#define MPEG_VOLDOWN BUTTON_VOL_DOWN 484#define MPEG_VOLDOWN BUTTON_VOL_DOWN
494#define MPEG_VOLUP BUTTON_VOL_UP 485#define MPEG_VOLUP BUTTON_VOL_UP
495#define MPEG_RW BUTTON_PREV 486#define MPEG_RW BUTTON_PREV
@@ -2508,7 +2499,7 @@ enum plugin_status plugin_start(const void* parameter)
2508 /* Enter button loop and process UI */ 2499 /* Enter button loop and process UI */
2509 next_action = button_loop(); 2500 next_action = button_loop();
2510 manual_skip = next_action & VIDEO_ACTION_MANUAL; 2501 manual_skip = next_action & VIDEO_ACTION_MANUAL;
2511 next_action &= ~VIDEO_ACTION_MANUAL; 2502 next_action &= ~VIDEO_ACTION_MANUAL;
2512 } 2503 }
2513 2504
2514 stream_close(); 2505 stream_close();
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 2cf9b96409..d8bef0ae7f 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -484,21 +484,7 @@
484#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN 484#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
485#define NEED_LASTBUTTON 485#define NEED_LASTBUTTON
486 486
487#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) 487#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
488#define OSCILLOSCOPE_QUIT BUTTON_POWER
489#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_PLAY
490#define OSCILLOSCOPE_DRAWMODE (BUTTON_PLAY | BUTTON_REL)
491#define OSCILLOSCOPE_ORIENTATION_PRE BUTTON_PLAY
492#define OSCILLOSCOPE_ORIENTATION (BUTTON_PLAY | BUTTON_REPEAT)
493#define OSCILLOSCOPE_ADVMODE BUTTON_HOME
494#define OSCILLOSCOPE_PAUSE BUTTON_OPTION
495#define OSCILLOSCOPE_SPEED_UP BUTTON_NEXT
496#define OSCILLOSCOPE_SPEED_DOWN BUTTON_PREV
497#define OSCILLOSCOPE_VOL_UP BUTTON_VOL_UP
498#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
499#define NEED_LASTBUTTON
500
501#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
502#define OSCILLOSCOPE_QUIT BUTTON_POWER 488#define OSCILLOSCOPE_QUIT BUTTON_POWER
503#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_PLAY 489#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_PLAY
504#define OSCILLOSCOPE_DRAWMODE (BUTTON_PLAY | BUTTON_REL) 490#define OSCILLOSCOPE_DRAWMODE (BUTTON_PLAY | BUTTON_REL)
@@ -526,7 +512,7 @@
526#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN 512#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
527#define NEED_LASTBUTTON 513#define NEED_LASTBUTTON
528 514
529#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 515#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
530#define OSCILLOSCOPE_QUIT BUTTON_POWER 516#define OSCILLOSCOPE_QUIT BUTTON_POWER
531#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_PLAY 517#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_PLAY
532#define OSCILLOSCOPE_DRAWMODE (BUTTON_PLAY | BUTTON_REL) 518#define OSCILLOSCOPE_DRAWMODE (BUTTON_PLAY | BUTTON_REL)
@@ -540,19 +526,16 @@
540#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN 526#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
541#define NEED_LASTBUTTON 527#define NEED_LASTBUTTON
542 528
543#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 529#elif CONFIG_KEYPAD == EROSQ_PAD
544#define OSCILLOSCOPE_QUIT BUTTON_POWER 530#define OSCILLOSCOPE_QUIT BUTTON_POWER
545#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_PLAY 531#define OSCILLOSCOPE_DRAWMODE BUTTON_PREV
546#define OSCILLOSCOPE_DRAWMODE (BUTTON_PLAY | BUTTON_REL) 532#define OSCILLOSCOPE_ADVMODE BUTTON_NEXT
547#define OSCILLOSCOPE_ORIENTATION_PRE BUTTON_PLAY 533#define OSCILLOSCOPE_ORIENTATION BUTTON_BACK
548#define OSCILLOSCOPE_ORIENTATION (BUTTON_PLAY | BUTTON_REPEAT) 534#define OSCILLOSCOPE_PAUSE BUTTON_PLAY
549#define OSCILLOSCOPE_ADVMODE BUTTON_HOME 535#define OSCILLOSCOPE_SPEED_UP BUTTON_SCROLL_FWD
550#define OSCILLOSCOPE_PAUSE (BUTTON_HOME | BUTTON_REPEAT) 536#define OSCILLOSCOPE_SPEED_DOWN BUTTON_SCROLL_BACK
551#define OSCILLOSCOPE_SPEED_UP BUTTON_NEXT 537#define OSCILLOSCOPE_VOL_UP BUTTON_VOL_UP
552#define OSCILLOSCOPE_SPEED_DOWN BUTTON_PREV 538#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
553#define OSCILLOSCOPE_VOL_UP BUTTON_VOL_UP
554#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
555#define NEED_LASTBUTTON
556 539
557#else 540#else
558#error No keymap defined! 541#error No keymap defined!
@@ -881,7 +864,7 @@ static void anim_draw_cursor_h(int x)
881{ 864{
882#if LCD_DEPTH > 1 865#if LCD_DEPTH > 1
883 rb->lcd_set_foreground(CURSOR_COLOR); 866 rb->lcd_set_foreground(CURSOR_COLOR);
884 rb->lcd_vline(x, 0, LCD_HEIGHT-1); 867 rb->lcd_vline(x, 0, LCD_HEIGHT-1);
885 rb->lcd_set_foreground(GRAPH_COLOR); 868 rb->lcd_set_foreground(GRAPH_COLOR);
886#else 869#else
887 rb->lcd_set_drawmode(DRMODE_COMPLEMENT); 870 rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
@@ -895,7 +878,7 @@ static void anim_draw_cursor_v(int y)
895{ 878{
896#if LCD_DEPTH > 1 /* cursor bar */ 879#if LCD_DEPTH > 1 /* cursor bar */
897 rb->lcd_set_foreground(CURSOR_COLOR); 880 rb->lcd_set_foreground(CURSOR_COLOR);
898 rb->lcd_hline(0, LCD_WIDTH-1, y); 881 rb->lcd_hline(0, LCD_WIDTH-1, y);
899 rb->lcd_set_foreground(GRAPH_COLOR); 882 rb->lcd_set_foreground(GRAPH_COLOR);
900#else 883#else
901 rb->lcd_set_drawmode(DRMODE_COMPLEMENT); 884 rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
@@ -1040,9 +1023,9 @@ static long anim_peaks_horizontal(void)
1040 } 1023 }
1041 else 1024 else
1042 { 1025 {
1043 left = last_left 1026 left = last_left
1044 + (LCD_WIDTH - last_pos) * (last_left - cur_left) / d; 1027 + (LCD_WIDTH - last_pos) * (last_left - cur_left) / d;
1045 right = last_right 1028 right = last_right
1046 + (LCD_WIDTH - last_pos) * (last_right - cur_right) / d; 1029 + (LCD_WIDTH - last_pos) * (last_right - cur_right) / d;
1047 1030
1048 rb->lcd_drawline( 1031 rb->lcd_drawline(
@@ -1066,7 +1049,7 @@ static long anim_peaks_horizontal(void)
1066 } 1049 }
1067 } 1050 }
1068 break; 1051 break;
1069 1052
1070 case DRAW_PIXEL: 1053 case DRAW_PIXEL:
1071 left = last_left; 1054 left = last_left;
1072 right = last_right; 1055 right = last_right;
@@ -1090,14 +1073,14 @@ static long anim_peaks_horizontal(void)
1090 1073
1091 last_left = cur_left; 1074 last_left = cur_left;
1092 last_right = cur_right; 1075 last_right = cur_right;
1093 1076
1094 if (full_update) 1077 if (full_update)
1095 { 1078 {
1096 osd_lcd_update(); 1079 osd_lcd_update();
1097 } 1080 }
1098 else 1081 else
1099 { 1082 {
1100 anim_draw_cursor_h(cur_x + 1); /* cursor bar */ 1083 anim_draw_cursor_h(cur_x + 1); /* cursor bar */
1101 1084
1102 if (cur_x > last_pos) 1085 if (cur_x > last_pos)
1103 { 1086 {
@@ -1164,7 +1147,7 @@ static long anim_peaks_vertical(void)
1164 cur_y -= shift; 1147 cur_y -= shift;
1165 last_pos -= shift; 1148 last_pos -= shift;
1166 } 1149 }
1167 else 1150 else
1168 { 1151 {
1169 cur_y -= LCD_HEIGHT; 1152 cur_y -= LCD_HEIGHT;
1170 } 1153 }
@@ -1219,7 +1202,7 @@ static long anim_peaks_vertical(void)
1219 } 1202 }
1220 else 1203 else
1221 { 1204 {
1222 left = last_left 1205 left = last_left
1223 + (LCD_HEIGHT - last_pos) * (last_left - cur_left) / d; 1206 + (LCD_HEIGHT - last_pos) * (last_left - cur_left) / d;
1224 right = last_right 1207 right = last_right
1225 + (LCD_HEIGHT - last_pos) * (last_right - cur_right) / d; 1208 + (LCD_HEIGHT - last_pos) * (last_right - cur_right) / d;
@@ -1245,7 +1228,7 @@ static long anim_peaks_vertical(void)
1245 } 1228 }
1246 } 1229 }
1247 break; 1230 break;
1248 1231
1249 case DRAW_PIXEL: 1232 case DRAW_PIXEL:
1250 left = last_left; 1233 left = last_left;
1251 right = last_right; 1234 right = last_right;
@@ -1269,7 +1252,7 @@ static long anim_peaks_vertical(void)
1269 1252
1270 last_left = cur_left; 1253 last_left = cur_left;
1271 last_right = cur_right; 1254 last_right = cur_right;
1272 1255
1273 if (full_update) 1256 if (full_update)
1274 { 1257 {
1275 osd_lcd_update(); 1258 osd_lcd_update();
@@ -1358,7 +1341,7 @@ static void waveform_buffer_done(void)
1358 1341
1359 waveform_buffer_have = have; 1342 waveform_buffer_have = have;
1360} 1343}
1361 1344
1362/* where the samples are obtained and buffered */ 1345/* where the samples are obtained and buffered */
1363static void waveform_buffer_callback(const void *start, size_t size) 1346static void waveform_buffer_callback(const void *start, size_t size)
1364{ 1347{
@@ -2053,7 +2036,7 @@ enum plugin_status plugin_start(const void* parameter)
2053 osc_popupmsg(OSC_MSG_GRAPHMODE, osc.graphmode); 2036 osc_popupmsg(OSC_MSG_GRAPHMODE, osc.graphmode);
2054 break; 2037 break;
2055#endif /* OSCILLOSCOPE_GRAPHMODE */ 2038#endif /* OSCILLOSCOPE_GRAPHMODE */
2056 2039
2057 case OSCILLOSCOPE_ORIENTATION: 2040 case OSCILLOSCOPE_ORIENTATION:
2058#ifdef OSCILLOSCOPE_ORIENTATION_PRE 2041#ifdef OSCILLOSCOPE_ORIENTATION_PRE
2059 if (lastbutton != OSCILLOSCOPE_ORIENTATION_PRE) 2042 if (lastbutton != OSCILLOSCOPE_ORIENTATION_PRE)
@@ -2075,7 +2058,7 @@ enum plugin_status plugin_start(const void* parameter)
2075 graphmode_pause_unpause(paused); 2058 graphmode_pause_unpause(paused);
2076 osc_popupmsg(OSC_MSG_PAUSED, paused ? 1 : 0); 2059 osc_popupmsg(OSC_MSG_PAUSED, paused ? 1 : 0);
2077 break; 2060 break;
2078 2061
2079 case OSCILLOSCOPE_SPEED_UP: 2062 case OSCILLOSCOPE_SPEED_UP:
2080 case OSCILLOSCOPE_SPEED_UP | BUTTON_REPEAT: 2063 case OSCILLOSCOPE_SPEED_UP | BUTTON_REPEAT:
2081 { 2064 {
@@ -2088,7 +2071,7 @@ enum plugin_status plugin_start(const void* parameter)
2088 osc_popupmsg(OSC_MSG_SPEED, *val); 2071 osc_popupmsg(OSC_MSG_SPEED, *val);
2089 break; 2072 break;
2090 } 2073 }
2091 2074
2092 case OSCILLOSCOPE_SPEED_DOWN: 2075 case OSCILLOSCOPE_SPEED_DOWN:
2093 case OSCILLOSCOPE_SPEED_DOWN | BUTTON_REPEAT: 2076 case OSCILLOSCOPE_SPEED_DOWN | BUTTON_REPEAT:
2094 { 2077 {
diff --git a/apps/plugins/pacbox/pacbox.h b/apps/plugins/pacbox/pacbox.h
index a687806d96..39583edbd4 100644
--- a/apps/plugins/pacbox/pacbox.h
+++ b/apps/plugins/pacbox/pacbox.h
@@ -364,16 +364,7 @@
364#define PACMAN_1UP BUTTON_VOLUP 364#define PACMAN_1UP BUTTON_VOLUP
365#define PACMAN_COIN BUTTON_VOLDOWN 365#define PACMAN_COIN BUTTON_VOLDOWN
366 366
367#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 367#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
368#define PACMAN_UP BUTTON_PREV
369#define PACMAN_DOWN BUTTON_NEXT
370#define PACMAN_LEFT BUTTON_HOME
371#define PACMAN_RIGHT BUTTON_VOL_DOWN
372#define PACMAN_MENU BUTTON_POWER
373#define PACMAN_1UP BUTTON_VOL_UP
374#define PACMAN_COIN BUTTON_PLAY
375
376#elif CONFIG_KEYPAD == XDUOO_X20_PAD
377#define PACMAN_UP BUTTON_PREV 368#define PACMAN_UP BUTTON_PREV
378#define PACMAN_DOWN BUTTON_NEXT 369#define PACMAN_DOWN BUTTON_NEXT
379#define PACMAN_LEFT BUTTON_HOME 370#define PACMAN_LEFT BUTTON_HOME
@@ -391,7 +382,8 @@
391#define PACMAN_1UP BUTTON_VOL_UP 382#define PACMAN_1UP BUTTON_VOL_UP
392#define PACMAN_COIN BUTTON_PLAY 383#define PACMAN_COIN BUTTON_PLAY
393 384
394#elif CONFIG_KEYPAD == IHIFI_770_PAD 385#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
386
395#define PACMAN_UP BUTTON_PREV 387#define PACMAN_UP BUTTON_PREV
396#define PACMAN_DOWN BUTTON_NEXT 388#define PACMAN_DOWN BUTTON_NEXT
397#define PACMAN_LEFT BUTTON_HOME 389#define PACMAN_LEFT BUTTON_HOME
@@ -400,13 +392,12 @@
400#define PACMAN_1UP BUTTON_VOL_UP 392#define PACMAN_1UP BUTTON_VOL_UP
401#define PACMAN_COIN BUTTON_PLAY 393#define PACMAN_COIN BUTTON_PLAY
402 394
403#elif CONFIG_KEYPAD == IHIFI_800_PAD 395#elif CONFIG_KEYPAD == EROSQ_PAD
404
405#define PACMAN_UP BUTTON_PREV 396#define PACMAN_UP BUTTON_PREV
406#define PACMAN_DOWN BUTTON_NEXT 397#define PACMAN_DOWN BUTTON_NEXT
407#define PACMAN_LEFT BUTTON_HOME 398#define PACMAN_LEFT BUTTON_SCROLL_BACK
408#define PACMAN_RIGHT BUTTON_VOL_DOWN 399#define PACMAN_RIGHT BUTTON_SCROLL_FWD
409#define PACMAN_MENU BUTTON_POWER 400#define PACMAN_MENU BUTTON_MENU
410#define PACMAN_1UP BUTTON_VOL_UP 401#define PACMAN_1UP BUTTON_VOL_UP
411#define PACMAN_COIN BUTTON_PLAY 402#define PACMAN_COIN BUTTON_PLAY
412 403
@@ -516,7 +507,7 @@
516 */ 507 */
517#if defined(TOSHIBA_GIGABEAT_S) || defined (TOSHIBA_GIGABEAT_F) || \ 508#if defined(TOSHIBA_GIGABEAT_S) || defined (TOSHIBA_GIGABEAT_F) || \
518 defined(SANSA_FUZEPLUS) 509 defined(SANSA_FUZEPLUS)
519/* Gigabeat S,F and Sansa Fuze+ can manage the full framerate 510/* Gigabeat S,F and Sansa Fuze+ can manage the full framerate
520 (1 in 1 frames) */ 511 (1 in 1 frames) */
521#define FPS 60 512#define FPS 60
522#elif defined(IPOD_NANO) 513#elif defined(IPOD_NANO)
diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c
index 5f947fe5f2..b700051081 100644
--- a/apps/plugins/pegbox.c
+++ b/apps/plugins/pegbox.c
@@ -626,7 +626,7 @@ CONFIG_KEYPAD == MROBE500_PAD
626#define LVL_UP_TEXT "VOL+" 626#define LVL_UP_TEXT "VOL+"
627#define LVL_DOWN_TEXT "VOL-" 627#define LVL_DOWN_TEXT "VOL-"
628 628
629#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 629#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
630#define PEGBOX_SELECT BUTTON_PLAY 630#define PEGBOX_SELECT BUTTON_PLAY
631#define PEGBOX_QUIT BUTTON_POWER 631#define PEGBOX_QUIT BUTTON_POWER
632#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME) 632#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME)
@@ -643,7 +643,7 @@ CONFIG_KEYPAD == MROBE500_PAD
643#define LVL_UP_TEXT "VOL+" 643#define LVL_UP_TEXT "VOL+"
644#define LVL_DOWN_TEXT "VOL-" 644#define LVL_DOWN_TEXT "VOL-"
645 645
646#elif CONFIG_KEYPAD == XDUOO_X20_PAD 646#elif CONFIG_KEYPAD == FIIO_M3K_PAD
647#define PEGBOX_SELECT BUTTON_PLAY 647#define PEGBOX_SELECT BUTTON_PLAY
648#define PEGBOX_QUIT BUTTON_POWER 648#define PEGBOX_QUIT BUTTON_POWER
649#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME) 649#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME)
@@ -660,16 +660,16 @@ CONFIG_KEYPAD == MROBE500_PAD
660#define LVL_UP_TEXT "VOL+" 660#define LVL_UP_TEXT "VOL+"
661#define LVL_DOWN_TEXT "VOL-" 661#define LVL_DOWN_TEXT "VOL-"
662 662
663#elif CONFIG_KEYPAD == FIIO_M3K_PAD 663#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
664#define PEGBOX_SELECT BUTTON_PLAY 664#define PEGBOX_SELECT BUTTON_PLAY
665#define PEGBOX_QUIT BUTTON_POWER 665#define PEGBOX_QUIT BUTTON_POWER
666#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME) 666#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME)
667#define PEGBOX_LVL_UP BUTTON_VOL_UP 667#define PEGBOX_LVL_UP (BUTTON_POWER | BUTTON_VOL_UP)
668#define PEGBOX_LVL_DOWN BUTTON_VOL_DOWN 668#define PEGBOX_LVL_DOWN (BUTTON_POWER | BUTTON_VOL_DOWN)
669#define PEGBOX_UP BUTTON_HOME 669#define PEGBOX_UP BUTTON_PREV
670#define PEGBOX_DOWN BUTTON_OPTION 670#define PEGBOX_DOWN BUTTON_NEXT
671#define PEGBOX_RIGHT BUTTON_NEXT 671#define PEGBOX_RIGHT BUTTON_HOME
672#define PEGBOX_LEFT BUTTON_PREV 672#define PEGBOX_LEFT BUTTON_VOL_DOWN
673 673
674#define SELECT_TEXT "PLAY" 674#define SELECT_TEXT "PLAY"
675#define QUIT_TEXT "POWER" 675#define QUIT_TEXT "POWER"
@@ -677,16 +677,16 @@ CONFIG_KEYPAD == MROBE500_PAD
677#define LVL_UP_TEXT "VOL+" 677#define LVL_UP_TEXT "VOL+"
678#define LVL_DOWN_TEXT "VOL-" 678#define LVL_DOWN_TEXT "VOL-"
679 679
680#elif CONFIG_KEYPAD == IHIFI_770_PAD 680#elif CONFIG_KEYPAD == FIIO_M3K_PAD
681#define PEGBOX_SELECT BUTTON_PLAY 681#define PEGBOX_SELECT BUTTON_PLAY
682#define PEGBOX_QUIT BUTTON_POWER 682#define PEGBOX_QUIT BUTTON_POWER
683#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME) 683#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME)
684#define PEGBOX_LVL_UP (BUTTON_POWER | BUTTON_VOL_UP) 684#define PEGBOX_LVL_UP BUTTON_VOL_UP
685#define PEGBOX_LVL_DOWN (BUTTON_POWER | BUTTON_VOL_DOWN) 685#define PEGBOX_LVL_DOWN BUTTON_VOL_DOWN
686#define PEGBOX_UP BUTTON_PREV 686#define PEGBOX_UP BUTTON_HOME
687#define PEGBOX_DOWN BUTTON_NEXT 687#define PEGBOX_DOWN BUTTON_OPTION
688#define PEGBOX_RIGHT BUTTON_HOME 688#define PEGBOX_RIGHT BUTTON_NEXT
689#define PEGBOX_LEFT BUTTON_VOL_DOWN 689#define PEGBOX_LEFT BUTTON_PREV
690 690
691#define SELECT_TEXT "PLAY" 691#define SELECT_TEXT "PLAY"
692#define QUIT_TEXT "POWER" 692#define QUIT_TEXT "POWER"
@@ -694,28 +694,24 @@ CONFIG_KEYPAD == MROBE500_PAD
694#define LVL_UP_TEXT "VOL+" 694#define LVL_UP_TEXT "VOL+"
695#define LVL_DOWN_TEXT "VOL-" 695#define LVL_DOWN_TEXT "VOL-"
696 696
697#elif CONFIG_KEYPAD == IHIFI_800_PAD 697#elif CONFIG_KEYPAD == EROSQ_PAD
698#define PEGBOX_SELECT BUTTON_PLAY 698#define PEGBOX_SELECT BUTTON_PLAY
699#define PEGBOX_QUIT BUTTON_POWER 699#define PEGBOX_QUIT BUTTON_POWER
700#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME) 700#define PEGBOX_RESTART BUTTON_BACK
701#define PEGBOX_LVL_UP (BUTTON_POWER | BUTTON_VOL_UP) 701#define PEGBOX_LVL_UP BUTTON_VOL_UP
702#define PEGBOX_LVL_DOWN (BUTTON_POWER | BUTTON_VOL_DOWN) 702#define PEGBOX_LVL_DOWN BUTTON_VOL_DOWN
703#define PEGBOX_UP BUTTON_PREV 703#define PEGBOX_UP BUTTON_PREV
704#define PEGBOX_DOWN BUTTON_NEXT 704#define PEGBOX_DOWN BUTTON_NEXT
705#define PEGBOX_RIGHT BUTTON_HOME 705#define PEGBOX_RIGHT BUTTON_SCROLL_FWD
706#define PEGBOX_LEFT BUTTON_VOL_DOWN 706#define PEGBOX_LEFT BUTTON_SCROLL_BACK
707 707
708#define SELECT_TEXT "PLAY" 708#define SELECT_TEXT "PLAY"
709#define QUIT_TEXT "POWER" 709#define QUIT_TEXT "POWER"
710#define RESTART_TEXT "HOME" 710#define RESTART_TEXT "BACK"
711#define LVL_UP_TEXT "VOL+" 711#define LVL_UP_TEXT "VOL+"
712#define LVL_DOWN_TEXT "VOL-" 712#define LVL_DOWN_TEXT "VOL-"
713 713
714#else 714#elif defined(HAVE_TOUCHSCREEN)
715#error Unsupported keymap!
716#endif
717
718#ifdef HAVE_TOUCHSCREEN
719#ifndef PEGBOX_QUIT 715#ifndef PEGBOX_QUIT
720#define PEGBOX_QUIT BUTTON_TOPLEFT 716#define PEGBOX_QUIT BUTTON_TOPLEFT
721#endif 717#endif
@@ -758,9 +754,10 @@ CONFIG_KEYPAD == MROBE500_PAD
758#ifndef LVL_DOWN_TEXT 754#ifndef LVL_DOWN_TEXT
759#define LVL_DOWN_TEXT "BOTTOMRIGHT" 755#define LVL_DOWN_TEXT "BOTTOMRIGHT"
760#endif 756#endif
757#else
758#error Unsupported keymap!
761#endif 759#endif
762 760
763
764/* get several sizes from the bitmaps */ 761/* get several sizes from the bitmaps */
765#ifdef BMPWIDTH_pegbox_pieces 762#ifdef BMPWIDTH_pegbox_pieces
766#define PIECE_WIDTH BMPWIDTH_pegbox_pieces 763#define PIECE_WIDTH BMPWIDTH_pegbox_pieces
@@ -1083,7 +1080,7 @@ static void pegbox_draw_board(struct game_context* pb)
1083 1080
1084 if(type != SPACE) { 1081 if(type != SPACE) {
1085 rb->lcd_bitmap_part(pegbox_pieces, 0, (type-1)*PIECE_HEIGHT, 1082 rb->lcd_bitmap_part(pegbox_pieces, 0, (type-1)*PIECE_HEIGHT,
1086 STRIDE( SCREEN_MAIN, 1083 STRIDE( SCREEN_MAIN,
1087 BMPWIDTH_pegbox_pieces,BMPHEIGHT_pegbox_pieces), 1084 BMPWIDTH_pegbox_pieces,BMPHEIGHT_pegbox_pieces),
1088 c * PIECE_WIDTH + BOARD_X, 1085 c * PIECE_WIDTH + BOARD_X,
1089 r * PIECE_HEIGHT + BOARD_Y, PIECE_WIDTH, 1086 r * PIECE_HEIGHT + BOARD_Y, PIECE_WIDTH,
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index 41525f3ffe..d5952aac35 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -293,15 +293,7 @@ CONFIG_KEYPAD == MROBE500_PAD
293#define PONG_RIGHT_UP BUTTON_HOME 293#define PONG_RIGHT_UP BUTTON_HOME
294#define PONG_RIGHT_DOWN BUTTON_NEXT 294#define PONG_RIGHT_DOWN BUTTON_NEXT
295 295
296#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 296#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
297#define PONG_QUIT BUTTON_POWER
298#define PONG_PAUSE BUTTON_PLAY
299#define PONG_LEFT_UP BUTTON_PREV
300#define PONG_LEFT_DOWN BUTTON_OPTION
301#define PONG_RIGHT_UP BUTTON_HOME
302#define PONG_RIGHT_DOWN BUTTON_NEXT
303
304#elif CONFIG_KEYPAD == XDUOO_X20_PAD
305#define PONG_QUIT BUTTON_POWER 297#define PONG_QUIT BUTTON_POWER
306#define PONG_PAUSE BUTTON_PLAY 298#define PONG_PAUSE BUTTON_PLAY
307#define PONG_LEFT_UP BUTTON_PREV 299#define PONG_LEFT_UP BUTTON_PREV
@@ -317,7 +309,7 @@ CONFIG_KEYPAD == MROBE500_PAD
317#define PONG_RIGHT_UP BUTTON_HOME 309#define PONG_RIGHT_UP BUTTON_HOME
318#define PONG_RIGHT_DOWN BUTTON_NEXT 310#define PONG_RIGHT_DOWN BUTTON_NEXT
319 311
320#elif CONFIG_KEYPAD == IHIFI_770_PAD 312#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
321#define PONG_QUIT BUTTON_POWER 313#define PONG_QUIT BUTTON_POWER
322#define PONG_PAUSE BUTTON_PREV 314#define PONG_PAUSE BUTTON_PREV
323#define PONG_LEFT_UP BUTTON_PLAY 315#define PONG_LEFT_UP BUTTON_PLAY
@@ -325,13 +317,14 @@ CONFIG_KEYPAD == MROBE500_PAD
325#define PONG_RIGHT_UP BUTTON_VOL_UP 317#define PONG_RIGHT_UP BUTTON_VOL_UP
326#define PONG_RIGHT_DOWN BUTTON_VOL_DOWN 318#define PONG_RIGHT_DOWN BUTTON_VOL_DOWN
327 319
328#elif CONFIG_KEYPAD == IHIFI_800_PAD 320#elif CONFIG_KEYPAD == EROSQ_PAD
329#define PONG_QUIT BUTTON_POWER 321#define PONG_QUIT BUTTON_POWER
330#define PONG_PAUSE BUTTON_PREV 322#define PONG_PAUSE BUTTON_PLAY
331#define PONG_LEFT_UP BUTTON_PLAY 323#define PONG_LEFT_UP BUTTON_SCROLL_BACK
332#define PONG_LEFT_DOWN BUTTON_HOME 324#define PONG_LEFT_DOWN BUTTON_SCROLL_FWD
333#define PONG_RIGHT_UP BUTTON_VOL_UP 325#define PONG_RIGHT_UP BUTTON_PREV
334#define PONG_RIGHT_DOWN BUTTON_VOL_DOWN 326#define PONG_RIGHT_DOWN BUTTON_NEXT
327
335 328
336#else 329#else
337#error No keymap defined! 330#error No keymap defined!
diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h
index 1547e52573..0a2348a28d 100644
--- a/apps/plugins/reversi/reversi-gui.h
+++ b/apps/plugins/reversi/reversi-gui.h
@@ -45,9 +45,9 @@
45#define REVERSI_BUTTON_LEFT (BUTTON_LEFT | BUTTON_SCROLL_BACK) 45#define REVERSI_BUTTON_LEFT (BUTTON_LEFT | BUTTON_SCROLL_BACK)
46#define REVERSI_BUTTON_RIGHT (BUTTON_RIGHT | BUTTON_SCROLL_FWD) 46#define REVERSI_BUTTON_RIGHT (BUTTON_RIGHT | BUTTON_SCROLL_FWD)
47#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT 47#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT
48#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS 48#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
49#define REVERSI_BUTTON_MENU BUTTON_SELECT 49#define REVERSI_BUTTON_MENU BUTTON_SELECT
50#define REVERSI_BUTTON_MENU_LONGPRESS 50#define REVERSI_BUTTON_MENU_LONGPRESS
51 51
52#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) 52#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
53#define REVERSI_BUTTON_QUIT BUTTON_POWER 53#define REVERSI_BUTTON_QUIT BUTTON_POWER
@@ -96,9 +96,9 @@
96#define REVERSI_BUTTON_LEFT BUTTON_LEFT 96#define REVERSI_BUTTON_LEFT BUTTON_LEFT
97#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT 97#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT
98#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT 98#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT
99#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS 99#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
100#define REVERSI_BUTTON_MENU BUTTON_SELECT 100#define REVERSI_BUTTON_MENU BUTTON_SELECT
101#define REVERSI_BUTTON_MENU_LONGPRESS 101#define REVERSI_BUTTON_MENU_LONGPRESS
102 102
103#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) 103#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
104#define REVERSI_BUTTON_QUIT (BUTTON_HOME|BUTTON_REPEAT) 104#define REVERSI_BUTTON_QUIT (BUTTON_HOME|BUTTON_REPEAT)
@@ -107,9 +107,9 @@
107#define REVERSI_BUTTON_LEFT BUTTON_LEFT 107#define REVERSI_BUTTON_LEFT BUTTON_LEFT
108#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT 108#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT
109#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT 109#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT
110#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS 110#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
111#define REVERSI_BUTTON_MENU BUTTON_SELECT 111#define REVERSI_BUTTON_MENU BUTTON_SELECT
112#define REVERSI_BUTTON_MENU_LONGPRESS 112#define REVERSI_BUTTON_MENU_LONGPRESS
113 113
114#elif CONFIG_KEYPAD == MROBE500_PAD 114#elif CONFIG_KEYPAD == MROBE500_PAD
115#define REVERSI_BUTTON_QUIT BUTTON_POWER 115#define REVERSI_BUTTON_QUIT BUTTON_POWER
@@ -233,17 +233,17 @@
233#define REVERSI_BUTTON_UP BUTTON_REW 233#define REVERSI_BUTTON_UP BUTTON_REW
234#define REVERSI_BUTTON_DOWN BUTTON_FF 234#define REVERSI_BUTTON_DOWN BUTTON_FF
235#define REVERSI_BUTTON_LEFT BUTTON_VOL_DOWN 235#define REVERSI_BUTTON_LEFT BUTTON_VOL_DOWN
236#define REVERSI_BUTTON_RIGHT BUTTON_VOL_UP 236#define REVERSI_BUTTON_RIGHT BUTTON_VOL_UP
237#define REVERSI_BUTTON_MAKE_MOVE BUTTON_FUNC 237#define REVERSI_BUTTON_MAKE_MOVE BUTTON_FUNC
238#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS 238#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
239#define REVERSI_BUTTON_MENU BUTTON_FUNC 239#define REVERSI_BUTTON_MENU BUTTON_FUNC
240#define REVERSI_BUTTON_MENU_LONGPRESS 240#define REVERSI_BUTTON_MENU_LONGPRESS
241 241
242#elif CONFIG_KEYPAD == MPIO_HD300_PAD 242#elif CONFIG_KEYPAD == MPIO_HD300_PAD
243#define REVERSI_BUTTON_UP BUTTON_UP 243#define REVERSI_BUTTON_UP BUTTON_UP
244#define REVERSI_BUTTON_DOWN BUTTON_DOWN 244#define REVERSI_BUTTON_DOWN BUTTON_DOWN
245#define REVERSI_BUTTON_LEFT BUTTON_REW 245#define REVERSI_BUTTON_LEFT BUTTON_REW
246#define REVERSI_BUTTON_RIGHT BUTTON_FF 246#define REVERSI_BUTTON_RIGHT BUTTON_FF
247#define REVERSI_BUTTON_MAKE_MOVE BUTTON_ENTER 247#define REVERSI_BUTTON_MAKE_MOVE BUTTON_ENTER
248#define REVERSI_BUTTON_MENU BUTTON_MENU 248#define REVERSI_BUTTON_MENU BUTTON_MENU
249 249
@@ -251,7 +251,7 @@
251#define REVERSI_BUTTON_UP BUTTON_UP 251#define REVERSI_BUTTON_UP BUTTON_UP
252#define REVERSI_BUTTON_DOWN BUTTON_DOWN 252#define REVERSI_BUTTON_DOWN BUTTON_DOWN
253#define REVERSI_BUTTON_LEFT BUTTON_LEFT 253#define REVERSI_BUTTON_LEFT BUTTON_LEFT
254#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT 254#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT
255#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAYPAUSE 255#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAYPAUSE
256#define REVERSI_BUTTON_MENU BUTTON_BACK 256#define REVERSI_BUTTON_MENU BUTTON_BACK
257 257
@@ -269,7 +269,7 @@
269#define REVERSI_BUTTON_UP BUTTON_UP 269#define REVERSI_BUTTON_UP BUTTON_UP
270#define REVERSI_BUTTON_DOWN BUTTON_DOWN 270#define REVERSI_BUTTON_DOWN BUTTON_DOWN
271#define REVERSI_BUTTON_LEFT BUTTON_LEFT 271#define REVERSI_BUTTON_LEFT BUTTON_LEFT
272#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT 272#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT
273#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT 273#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT
274#define REVERSI_BUTTON_MENU BUTTON_POWER 274#define REVERSI_BUTTON_MENU BUTTON_POWER
275 275
@@ -319,18 +319,7 @@
319#define REVERSI_BUTTON_MENU BUTTON_PLAY 319#define REVERSI_BUTTON_MENU BUTTON_PLAY
320#define REVERSI_BUTTON_MENU_LONGPRESS 320#define REVERSI_BUTTON_MENU_LONGPRESS
321 321
322#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 322#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
323#define REVERSI_BUTTON_QUIT BUTTON_POWER
324#define REVERSI_BUTTON_UP BUTTON_HOME
325#define REVERSI_BUTTON_DOWN BUTTON_OPTION
326#define REVERSI_BUTTON_LEFT BUTTON_PREV
327#define REVERSI_BUTTON_RIGHT BUTTON_NEXT
328#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY
329#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
330#define REVERSI_BUTTON_MENU BUTTON_PLAY
331#define REVERSI_BUTTON_MENU_LONGPRESS
332
333#elif CONFIG_KEYPAD == XDUOO_X20_PAD
334#define REVERSI_BUTTON_QUIT BUTTON_POWER 323#define REVERSI_BUTTON_QUIT BUTTON_POWER
335#define REVERSI_BUTTON_UP BUTTON_HOME 324#define REVERSI_BUTTON_UP BUTTON_HOME
336#define REVERSI_BUTTON_DOWN BUTTON_OPTION 325#define REVERSI_BUTTON_DOWN BUTTON_OPTION
@@ -352,27 +341,25 @@
352#define REVERSI_BUTTON_MENU BUTTON_PLAY 341#define REVERSI_BUTTON_MENU BUTTON_PLAY
353#define REVERSI_BUTTON_MENU_LONGPRESS 342#define REVERSI_BUTTON_MENU_LONGPRESS
354 343
355#elif CONFIG_KEYPAD == IHIFI_770_PAD 344#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
356#define REVERSI_BUTTON_QUIT BUTTON_POWER 345#define REVERSI_BUTTON_QUIT BUTTON_POWER
357#define REVERSI_BUTTON_UP BUTTON_PREV 346#define REVERSI_BUTTON_UP BUTTON_PREV
358#define REVERSI_BUTTON_DOWN BUTTON_NEXT 347#define REVERSI_BUTTON_DOWN BUTTON_NEXT
359#define REVERSI_BUTTON_LEFT BUTTON_PREV 348#define REVERSI_BUTTON_LEFT BUTTON_PREV
360#define REVERSI_BUTTON_RIGHT BUTTON_VOL_DOWN 349#define REVERSI_BUTTON_RIGHT BUTTON_VOL_DOWN
361#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY 350#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY
362#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS 351#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
363#define REVERSI_BUTTON_MENU BUTTON_PLAY 352#define REVERSI_BUTTON_MENU BUTTON_PLAY
364#define REVERSI_BUTTON_MENU_LONGPRESS 353#define REVERSI_BUTTON_MENU_LONGPRESS
365 354
366#elif CONFIG_KEYPAD == IHIFI_800_PAD 355#elif CONFIG_KEYPAD == EROSQ_PAD
367#define REVERSI_BUTTON_QUIT BUTTON_POWER 356#define REVERSI_BUTTON_QUIT BUTTON_POWER
368#define REVERSI_BUTTON_UP BUTTON_PREV 357#define REVERSI_BUTTON_UP BUTTON_PREV
369#define REVERSI_BUTTON_DOWN BUTTON_NEXT 358#define REVERSI_BUTTON_DOWN BUTTON_NEXT
370#define REVERSI_BUTTON_LEFT BUTTON_PREV 359#define REVERSI_BUTTON_LEFT BUTTON_SCROLL_BACK
371#define REVERSI_BUTTON_RIGHT BUTTON_VOL_DOWN 360#define REVERSI_BUTTON_RIGHT BUTTON_SCROLL_FWD
372#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY 361#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY
373#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS 362#define REVERSI_BUTTON_MENU BUTTON_MENU
374#define REVERSI_BUTTON_MENU BUTTON_PLAY
375#define REVERSI_BUTTON_MENU_LONGPRESS
376 363
377#else 364#else
378#error No keymap defined! 365#error No keymap defined!
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index ec6d892a0b..6a8b50a68d 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -431,31 +431,7 @@
431#define ROCKBLOX_ROTATE_CCW BUTTON_VOLDOWN 431#define ROCKBLOX_ROTATE_CCW BUTTON_VOLDOWN
432#define ROCKBLOX_DOWN BUTTON_DOWN 432#define ROCKBLOX_DOWN BUTTON_DOWN
433 433
434#elif CONFIG_KEYPAD == XDUOO_X3_PAD 434#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) || (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
435
436#define ROCKBLOX_OFF BUTTON_POWER
437#define ROCKBLOX_ROTATE_CCW BUTTON_HOME
438#define ROCKBLOX_ROTATE_CCW2 BUTTON_VOL_DOWN
439#define ROCKBLOX_ROTATE_CW BUTTON_VOL_UP
440#define ROCKBLOX_DOWN BUTTON_OPTION
441#define ROCKBLOX_LEFT BUTTON_PREV
442#define ROCKBLOX_RIGHT BUTTON_NEXT
443#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL)
444#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT)
445
446#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
447
448#define ROCKBLOX_OFF BUTTON_POWER
449#define ROCKBLOX_ROTATE_CCW BUTTON_HOME
450#define ROCKBLOX_ROTATE_CCW2 BUTTON_VOL_DOWN
451#define ROCKBLOX_ROTATE_CW BUTTON_VOL_UP
452#define ROCKBLOX_DOWN BUTTON_OPTION
453#define ROCKBLOX_LEFT BUTTON_PREV
454#define ROCKBLOX_RIGHT BUTTON_NEXT
455#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL)
456#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT)
457
458#elif CONFIG_KEYPAD == XDUOO_X20_PAD
459 435
460#define ROCKBLOX_OFF BUTTON_POWER 436#define ROCKBLOX_OFF BUTTON_POWER
461#define ROCKBLOX_ROTATE_CCW BUTTON_HOME 437#define ROCKBLOX_ROTATE_CCW BUTTON_HOME
@@ -479,7 +455,7 @@
479#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL) 455#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL)
480#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT) 456#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT)
481 457
482#elif CONFIG_KEYPAD == IHIFI_770_PAD 458#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
483 459
484#define ROCKBLOX_OFF BUTTON_POWER 460#define ROCKBLOX_OFF BUTTON_POWER
485#define ROCKBLOX_ROTATE_CCW BUTTON_HOME 461#define ROCKBLOX_ROTATE_CCW BUTTON_HOME
@@ -491,17 +467,15 @@
491#define ROCKBLOX_DROP (BUTTON_POWER|BUTTON_PLAY) 467#define ROCKBLOX_DROP (BUTTON_POWER|BUTTON_PLAY)
492#define ROCKBLOX_RESTART (BUTTON_POWER|BUTTON_REPEAT) 468#define ROCKBLOX_RESTART (BUTTON_POWER|BUTTON_REPEAT)
493 469
494#elif CONFIG_KEYPAD == IHIFI_800_PAD 470#elif CONFIG_KEYPAD == EROSQ_PAD
495
496#define ROCKBLOX_OFF BUTTON_POWER 471#define ROCKBLOX_OFF BUTTON_POWER
497#define ROCKBLOX_ROTATE_CCW BUTTON_HOME 472#define ROCKBLOX_ROTATE_CCW BUTTON_SCROLL_BACK
498#define ROCKBLOX_ROTATE_CCW2 BUTTON_VOL_DOWN 473#define ROCKBLOX_ROTATE_CW BUTTON_SCROLL_FWD
499#define ROCKBLOX_ROTATE_CW BUTTON_VOL_UP 474#define ROCKBLOX_DOWN BUTTON_MENU
500#define ROCKBLOX_DOWN BUTTON_PLAY
501#define ROCKBLOX_LEFT BUTTON_PREV 475#define ROCKBLOX_LEFT BUTTON_PREV
502#define ROCKBLOX_RIGHT BUTTON_NEXT 476#define ROCKBLOX_RIGHT BUTTON_NEXT
503#define ROCKBLOX_DROP (BUTTON_POWER|BUTTON_PLAY) 477#define ROCKBLOX_DROP BUTTON_PLAY
504#define ROCKBLOX_RESTART (BUTTON_POWER|BUTTON_REPEAT) 478#define ROCKBLOX_RESTART BUTTON_BACK
505 479
506#else 480#else
507#error No keymap defined! 481#error No keymap defined!
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index c96946cf7d..75de5230f2 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -425,17 +425,7 @@ static void setoptions (void)
425 options.SELECT = BUTTON_VOL_UP; 425 options.SELECT = BUTTON_VOL_UP;
426 options.MENU = BUTTON_POWER; 426 options.MENU = BUTTON_POWER;
427 427
428#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 428#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
429 options.UP = BUTTON_PREV;
430 options.DOWN = BUTTON_NEXT;
431
432 options.A = BUTTON_HOME;
433 options.B = BUTTON_OPTION;
434 options.START = BUTTON_VOL_DOWN;
435 options.SELECT = BUTTON_VOL_UP;
436 options.MENU = BUTTON_POWER;
437
438#elif CONFIG_KEYPAD == XDUOO_X20_PAD
439 options.UP = BUTTON_PREV; 429 options.UP = BUTTON_PREV;
440 options.DOWN = BUTTON_NEXT; 430 options.DOWN = BUTTON_NEXT;
441 431
@@ -455,7 +445,7 @@ static void setoptions (void)
455 options.SELECT = BUTTON_VOL_UP; 445 options.SELECT = BUTTON_VOL_UP;
456 options.MENU = BUTTON_POWER; 446 options.MENU = BUTTON_POWER;
457 447
458#elif CONFIG_KEYPAD == IHIFI_770_PAD 448#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
459 options.UP = BUTTON_PREV; 449 options.UP = BUTTON_PREV;
460 options.DOWN = BUTTON_NEXT; 450 options.DOWN = BUTTON_NEXT;
461 451
@@ -465,14 +455,16 @@ static void setoptions (void)
465 options.SELECT = BUTTON_HOME; 455 options.SELECT = BUTTON_HOME;
466 options.MENU = BUTTON_POWER; 456 options.MENU = BUTTON_POWER;
467 457
468#elif CONFIG_KEYPAD == IHIFI_800_PAD 458#elif CONFIG_KEYPAD == EROSQ_PAD
469 options.UP = BUTTON_PREV; 459 options.UP = BUTTON_PREV;
470 options.DOWN = BUTTON_NEXT; 460 options.DOWN = BUTTON_NEXT;
461 options.LEFT = BUTTON_SCROLL_BACK;
462 options.RIGHT = BUTTON_SCROLL_FWD;
471 463
472 options.A = BUTTON_VOL_UP; 464 options.A = BUTTON_MENU;
473 options.B = BUTTON_VOL_DOWN; 465 options.B = BUTTON_BACK;
474 options.START = BUTTON_PLAY; 466 options.START = BUTTON_VOL_DOWN;
475 options.SELECT = BUTTON_HOME; 467 options.SELECT = BUTTON_VOL_UP;
476 options.MENU = BUTTON_POWER; 468 options.MENU = BUTTON_POWER;
477 469
478#else 470#else
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index 7683016066..8c70f6b4a6 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -63,7 +63,7 @@
63#define PUZZLE_PICTURE BUTTON_A 63#define PUZZLE_PICTURE BUTTON_A
64 64
65#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \ 65#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \
66(CONFIG_KEYPAD == SANSA_C200_PAD) 66(CONFIG_KEYPAD == SANSA_C200_PAD)
67#define PUZZLE_QUIT BUTTON_POWER 67#define PUZZLE_QUIT BUTTON_POWER
68#define PUZZLE_LEFT BUTTON_LEFT 68#define PUZZLE_LEFT BUTTON_LEFT
69#define PUZZLE_RIGHT BUTTON_RIGHT 69#define PUZZLE_RIGHT BUTTON_RIGHT
@@ -312,16 +312,7 @@ CONFIG_KEYPAD == MROBE500_PAD
312#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_PWRALT) 312#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_PWRALT)
313#define PUZZLE_PICTURE BUTTON_PLAY 313#define PUZZLE_PICTURE BUTTON_PLAY
314 314
315#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) 315#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
316#define PUZZLE_QUIT BUTTON_POWER
317#define PUZZLE_LEFT BUTTON_PREV
318#define PUZZLE_RIGHT BUTTON_NEXT
319#define PUZZLE_UP BUTTON_HOME
320#define PUZZLE_DOWN BUTTON_OPTION
321#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER)
322#define PUZZLE_PICTURE BUTTON_PLAY
323
324#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
325#define PUZZLE_QUIT BUTTON_POWER 316#define PUZZLE_QUIT BUTTON_POWER
326#define PUZZLE_LEFT BUTTON_PREV 317#define PUZZLE_LEFT BUTTON_PREV
327#define PUZZLE_RIGHT BUTTON_NEXT 318#define PUZZLE_RIGHT BUTTON_NEXT
@@ -339,7 +330,7 @@ CONFIG_KEYPAD == MROBE500_PAD
339#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER) 330#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER)
340#define PUZZLE_PICTURE BUTTON_PLAY 331#define PUZZLE_PICTURE BUTTON_PLAY
341 332
342#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 333#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
343#define PUZZLE_QUIT BUTTON_POWER 334#define PUZZLE_QUIT BUTTON_POWER
344#define PUZZLE_LEFT BUTTON_HOME 335#define PUZZLE_LEFT BUTTON_HOME
345#define PUZZLE_RIGHT BUTTON_VOL_DOWN 336#define PUZZLE_RIGHT BUTTON_VOL_DOWN
@@ -348,15 +339,16 @@ CONFIG_KEYPAD == MROBE500_PAD
348#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER) 339#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER)
349#define PUZZLE_PICTURE BUTTON_PLAY 340#define PUZZLE_PICTURE BUTTON_PLAY
350 341
351#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 342#elif (CONFIG_KEYPAD == EROSQ_PAD)
352#define PUZZLE_QUIT BUTTON_POWER 343#define PUZZLE_QUIT BUTTON_POWER
353#define PUZZLE_LEFT BUTTON_HOME 344#define PUZZLE_LEFT BUTTON_SCROLL_BACK
354#define PUZZLE_RIGHT BUTTON_VOL_DOWN 345#define PUZZLE_RIGHT BUTTON_SCROLL_FWD
355#define PUZZLE_UP BUTTON_PREV 346#define PUZZLE_UP BUTTON_PREV
356#define PUZZLE_DOWN BUTTON_NEXT 347#define PUZZLE_DOWN BUTTON_NEXT
357#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER) 348#define PUZZLE_SHUFFLE BUTTON_BACK
358#define PUZZLE_PICTURE BUTTON_PLAY 349#define PUZZLE_PICTURE BUTTON_PLAY
359 350
351
360#else 352#else
361#error No keymap defined! 353#error No keymap defined!
362#endif 354#endif
@@ -383,13 +375,13 @@ CONFIG_KEYPAD == MROBE500_PAD
383#ifndef PUZZLE_PICTURE 375#ifndef PUZZLE_PICTURE
384#define PUZZLE_PICTURE BUTTON_CENTER 376#define PUZZLE_PICTURE BUTTON_CENTER
385#endif 377#endif
386#ifndef PUZZLE_QUIT_TEXT 378#ifndef PUZZLE_QUIT_TEXT
387#define PUZZLE_QUIT_TEXT "[TOPLEFT]" 379#define PUZZLE_QUIT_TEXT "[TOPLEFT]"
388#endif 380#endif
389#ifndef PUZZLE_SHUFFLE_TEXT 381#ifndef PUZZLE_SHUFFLE_TEXT
390#define PUZZLE_SHUFFLE_TEXT "[BOTTOMLEFT]" 382#define PUZZLE_SHUFFLE_TEXT "[BOTTOMLEFT]"
391#endif 383#endif
392#ifndef PUZZLE_PICTURE_TEXT 384#ifndef PUZZLE_PICTURE_TEXT
393#define PUZZLE_PICTURE_TEXT "[CENTER]" 385#define PUZZLE_PICTURE_TEXT "[CENTER]"
394#endif 386#endif
395#endif 387#endif
@@ -563,7 +555,7 @@ static void draw_spot(int p, int x, int y)
563 an appropriate hole graphic */ 555 an appropriate hole graphic */
564 rb->lcd_bitmap_part(sliding_puzzle, ((p-1)%SPOTS_X)*SPOTS_WIDTH, 556 rb->lcd_bitmap_part(sliding_puzzle, ((p-1)%SPOTS_X)*SPOTS_WIDTH,
565 ((p-1)/SPOTS_X)*SPOTS_HEIGHT, 557 ((p-1)/SPOTS_X)*SPOTS_HEIGHT,
566 STRIDE( SCREEN_MAIN, 558 STRIDE( SCREEN_MAIN,
567 BMPWIDTH_sliding_puzzle, BMPHEIGHT_sliding_puzzle), 559 BMPWIDTH_sliding_puzzle, BMPHEIGHT_sliding_puzzle),
568 x, y, SPOTS_WIDTH, SPOTS_HEIGHT); 560 x, y, SPOTS_WIDTH, SPOTS_HEIGHT);
569#else 561#else
@@ -580,8 +572,8 @@ static void draw_spot(int p, int x, int y)
580 { 572 {
581 rb->lcd_bitmap_part( puzzle_bmp_ptr, ((p-1)%SPOTS_X)*SPOTS_WIDTH, 573 rb->lcd_bitmap_part( puzzle_bmp_ptr, ((p-1)%SPOTS_X)*SPOTS_WIDTH,
582 ((p-1)/SPOTS_X)*SPOTS_HEIGHT, 574 ((p-1)/SPOTS_X)*SPOTS_HEIGHT,
583 STRIDE( SCREEN_MAIN, 575 STRIDE( SCREEN_MAIN,
584 BMPWIDTH_sliding_puzzle, BMPHEIGHT_sliding_puzzle), 576 BMPWIDTH_sliding_puzzle, BMPHEIGHT_sliding_puzzle),
585 x, y, SPOTS_WIDTH, SPOTS_HEIGHT); 577 x, y, SPOTS_WIDTH, SPOTS_HEIGHT);
586 } else { 578 } else {
587 rb->lcd_drawrect(x, y, SPOTS_WIDTH, SPOTS_HEIGHT); 579 rb->lcd_drawrect(x, y, SPOTS_WIDTH, SPOTS_HEIGHT);
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index ebfb39c9a7..0f2bcdce6c 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -24,7 +24,7 @@ Snake!
24 24
25by Itai Shaked 25by Itai Shaked
26 26
27ok, a little explanation - 27ok, a little explanation -
28board holds the snake and apple position - 1+ - snake body (the number 28board holds the snake and apple position - 1+ - snake body (the number
29represents the age [1 is the snake's head]). 29represents the age [1 is the snake's head]).
30-1 is an apple, and 0 is a clear spot. 30-1 is an apple, and 0 is a clear spot.
@@ -273,15 +273,7 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
273#define SNAKE_DOWN BUTTON_OPTION 273#define SNAKE_DOWN BUTTON_OPTION
274#define SNAKE_PLAYPAUSE BUTTON_PLAY 274#define SNAKE_PLAYPAUSE BUTTON_PLAY
275 275
276#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 276#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
277#define SNAKE_QUIT BUTTON_POWER
278#define SNAKE_LEFT BUTTON_PREV
279#define SNAKE_RIGHT BUTTON_NEXT
280#define SNAKE_UP BUTTON_HOME
281#define SNAKE_DOWN BUTTON_OPTION
282#define SNAKE_PLAYPAUSE BUTTON_PLAY
283
284#elif CONFIG_KEYPAD == XDUOO_X20_PAD
285#define SNAKE_QUIT BUTTON_POWER 277#define SNAKE_QUIT BUTTON_POWER
286#define SNAKE_LEFT BUTTON_PREV 278#define SNAKE_LEFT BUTTON_PREV
287#define SNAKE_RIGHT BUTTON_NEXT 279#define SNAKE_RIGHT BUTTON_NEXT
@@ -297,7 +289,7 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
297#define SNAKE_DOWN BUTTON_OPTION 289#define SNAKE_DOWN BUTTON_OPTION
298#define SNAKE_PLAYPAUSE BUTTON_PLAY 290#define SNAKE_PLAYPAUSE BUTTON_PLAY
299 291
300#elif CONFIG_KEYPAD == IHIFI_770_PAD 292#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
301#define SNAKE_QUIT BUTTON_POWER 293#define SNAKE_QUIT BUTTON_POWER
302#define SNAKE_LEFT BUTTON_HOME 294#define SNAKE_LEFT BUTTON_HOME
303#define SNAKE_RIGHT BUTTON_VOL_DOWN 295#define SNAKE_RIGHT BUTTON_VOL_DOWN
@@ -305,10 +297,10 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
305#define SNAKE_DOWN BUTTON_NEXT 297#define SNAKE_DOWN BUTTON_NEXT
306#define SNAKE_PLAYPAUSE BUTTON_PLAY 298#define SNAKE_PLAYPAUSE BUTTON_PLAY
307 299
308#elif CONFIG_KEYPAD == IHIFI_800_PAD 300#elif CONFIG_KEYPAD == EROSQ_PAD
309#define SNAKE_QUIT BUTTON_POWER 301#define SNAKE_QUIT BUTTON_POWER
310#define SNAKE_LEFT BUTTON_HOME 302#define SNAKE_LEFT BUTTON_SCROLL_BACK
311#define SNAKE_RIGHT BUTTON_VOL_DOWN 303#define SNAKE_RIGHT BUTTON_SCROLL_FWD
312#define SNAKE_UP BUTTON_PREV 304#define SNAKE_UP BUTTON_PREV
313#define SNAKE_DOWN BUTTON_NEXT 305#define SNAKE_DOWN BUTTON_NEXT
314#define SNAKE_PLAYPAUSE BUTTON_PLAY 306#define SNAKE_PLAYPAUSE BUTTON_PLAY
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index 77400dfff1..464af413f9 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -401,16 +401,7 @@ CONFIG_KEYPAD == MROBE500_PAD
401#define SNAKE2_PLAYPAUSE BUTTON_PLAY 401#define SNAKE2_PLAYPAUSE BUTTON_PLAY
402#define SNAKE2_PLAYPAUSE_TEXT "PLAY" 402#define SNAKE2_PLAYPAUSE_TEXT "PLAY"
403 403
404#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) 404#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
405#define SNAKE2_LEFT BUTTON_PREV
406#define SNAKE2_RIGHT BUTTON_NEXT
407#define SNAKE2_UP BUTTON_HOME
408#define SNAKE2_DOWN BUTTON_OPTION
409#define SNAKE2_QUIT BUTTON_POWER
410#define SNAKE2_PLAYPAUSE BUTTON_PLAY
411#define SNAKE2_PLAYPAUSE_TEXT "PLAY"
412
413#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
414#define SNAKE2_LEFT BUTTON_PREV 405#define SNAKE2_LEFT BUTTON_PREV
415#define SNAKE2_RIGHT BUTTON_NEXT 406#define SNAKE2_RIGHT BUTTON_NEXT
416#define SNAKE2_UP BUTTON_HOME 407#define SNAKE2_UP BUTTON_HOME
@@ -428,7 +419,7 @@ CONFIG_KEYPAD == MROBE500_PAD
428#define SNAKE2_PLAYPAUSE BUTTON_PLAY 419#define SNAKE2_PLAYPAUSE BUTTON_PLAY
429#define SNAKE2_PLAYPAUSE_TEXT "PLAY" 420#define SNAKE2_PLAYPAUSE_TEXT "PLAY"
430 421
431#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 422#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
432#define SNAKE2_LEFT BUTTON_HOME 423#define SNAKE2_LEFT BUTTON_HOME
433#define SNAKE2_RIGHT BUTTON_VOL_DOWN 424#define SNAKE2_RIGHT BUTTON_VOL_DOWN
434#define SNAKE2_UP BUTTON_PREV 425#define SNAKE2_UP BUTTON_PREV
@@ -437,9 +428,9 @@ CONFIG_KEYPAD == MROBE500_PAD
437#define SNAKE2_PLAYPAUSE BUTTON_PLAY 428#define SNAKE2_PLAYPAUSE BUTTON_PLAY
438#define SNAKE2_PLAYPAUSE_TEXT "PLAY" 429#define SNAKE2_PLAYPAUSE_TEXT "PLAY"
439 430
440#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 431#elif (CONFIG_KEYPAD == EROSQ_PAD)
441#define SNAKE2_LEFT BUTTON_HOME 432#define SNAKE2_LEFT BUTTON_SCROLL_BACK
442#define SNAKE2_RIGHT BUTTON_VOL_DOWN 433#define SNAKE2_RIGHT BUTTON_SCROLL_FWD
443#define SNAKE2_UP BUTTON_PREV 434#define SNAKE2_UP BUTTON_PREV
444#define SNAKE2_DOWN BUTTON_NEXT 435#define SNAKE2_DOWN BUTTON_NEXT
445#define SNAKE2_QUIT BUTTON_POWER 436#define SNAKE2_QUIT BUTTON_POWER
@@ -451,7 +442,7 @@ CONFIG_KEYPAD == MROBE500_PAD
451#endif 442#endif
452 443
453#ifdef HAVE_TOUCHSCREEN 444#ifdef HAVE_TOUCHSCREEN
454#ifndef SNAKE2_LEFT 445#ifndef SNAKE2_LEFT
455#define SNAKE2_LEFT BUTTON_MIDLEFT 446#define SNAKE2_LEFT BUTTON_MIDLEFT
456#endif 447#endif
457#ifndef SNAKE2_RIGHT 448#ifndef SNAKE2_RIGHT
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index da3c303ace..e779722790 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -631,23 +631,7 @@
631#define BUTTON_SAVE BUTTON_PLAY 631#define BUTTON_SAVE BUTTON_PLAY
632#define BUTTON_SAVE_NAME "PLAY" 632#define BUTTON_SAVE_NAME "PLAY"
633 633
634#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 634#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
635#define SOKOBAN_LEFT BUTTON_PREV
636#define SOKOBAN_RIGHT BUTTON_NEXT
637#define SOKOBAN_UP BUTTON_HOME
638#define SOKOBAN_DOWN BUTTON_OPTION
639#define SOKOBAN_MENU BUTTON_POWER
640#define SOKOBAN_UNDO_PRE BUTTON_PLAY
641#define SOKOBAN_UNDO (BUTTON_PLAY | BUTTON_REL)
642#define SOKOBAN_REDO (BUTTON_POWER | BUTTON_PLAY)
643#define SOKOBAN_LEVEL_DOWN BUTTON_VOL_DOWN
644#define SOKOBAN_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_NEXT)
645#define SOKOBAN_LEVEL_UP BUTTON_VOL_UP
646#define SOKOBAN_PAUSE BUTTON_PLAY
647#define BUTTON_SAVE BUTTON_PLAY
648#define BUTTON_SAVE_NAME "PLAY"
649
650#elif CONFIG_KEYPAD == XDUOO_X20_PAD
651#define SOKOBAN_LEFT BUTTON_PREV 635#define SOKOBAN_LEFT BUTTON_PREV
652#define SOKOBAN_RIGHT BUTTON_NEXT 636#define SOKOBAN_RIGHT BUTTON_NEXT
653#define SOKOBAN_UP BUTTON_HOME 637#define SOKOBAN_UP BUTTON_HOME
@@ -679,7 +663,7 @@
679#define BUTTON_SAVE BUTTON_PLAY 663#define BUTTON_SAVE BUTTON_PLAY
680#define BUTTON_SAVE_NAME "PLAY" 664#define BUTTON_SAVE_NAME "PLAY"
681 665
682#elif CONFIG_KEYPAD == IHIFI_770_PAD 666#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
683#define SOKOBAN_LEFT BUTTON_HOME 667#define SOKOBAN_LEFT BUTTON_HOME
684#define SOKOBAN_RIGHT BUTTON_VOL_DOWN 668#define SOKOBAN_RIGHT BUTTON_VOL_DOWN
685#define SOKOBAN_UP BUTTON_PREV 669#define SOKOBAN_UP BUTTON_PREV
@@ -695,18 +679,18 @@
695#define BUTTON_SAVE BUTTON_PLAY 679#define BUTTON_SAVE BUTTON_PLAY
696#define BUTTON_SAVE_NAME "PLAY" 680#define BUTTON_SAVE_NAME "PLAY"
697 681
698#elif CONFIG_KEYPAD == IHIFI_800_PAD 682#elif CONFIG_KEYPAD == EROSQ_PAD
699#define SOKOBAN_LEFT BUTTON_HOME 683#define SOKOBAN_LEFT BUTTON_SCROLL_BACK
700#define SOKOBAN_RIGHT BUTTON_VOL_DOWN 684#define SOKOBAN_RIGHT BUTTON_SCROLL_FWD
701#define SOKOBAN_UP BUTTON_PREV 685#define SOKOBAN_UP BUTTON_PREV
702#define SOKOBAN_DOWN BUTTON_NEXT 686#define SOKOBAN_DOWN BUTTON_NEXT
703#define SOKOBAN_MENU BUTTON_POWER 687#define SOKOBAN_MENU BUTTON_MENU
704#define SOKOBAN_UNDO_PRE BUTTON_PLAY 688#define SOKOBAN_UNDO_PRE BUTTON_PLAY
705#define SOKOBAN_UNDO (BUTTON_PLAY | BUTTON_REL) 689#define SOKOBAN_UNDO (BUTTON_PLAY | BUTTON_REL)
706#define SOKOBAN_REDO (BUTTON_POWER | BUTTON_PLAY) 690#define SOKOBAN_REDO (BUTTON_POWER | BUTTON_PLAY)
707#define SOKOBAN_LEVEL_DOWN (BUTTON_POWER | BUTTON_VOL_DOWN) 691#define SOKOBAN_LEVEL_DOWN BUTTON_VOL_DOWN
708#define SOKOBAN_LEVEL_REPEAT (BUTTON_POWER | BUTTON_HOME) 692#define SOKOBAN_LEVEL_REPEAT BUTTON_BACK
709#define SOKOBAN_LEVEL_UP (BUTTON_POWER | BUTTON_VOL_UP) 693#define SOKOBAN_LEVEL_UP BUTTON_VOL_UP
710#define SOKOBAN_PAUSE BUTTON_PLAY 694#define SOKOBAN_PAUSE BUTTON_PLAY
711#define BUTTON_SAVE BUTTON_PLAY 695#define BUTTON_SAVE BUTTON_PLAY
712#define BUTTON_SAVE_NAME "PLAY" 696#define BUTTON_SAVE_NAME "PLAY"
@@ -1286,56 +1270,56 @@ static void update_screen(void)
1286 1270
1287 case ' ': /* floor */ 1271 case ' ': /* floor */
1288 rb->lcd_bitmap_part(sokoban_tiles, 0, 0*SOKOBAN_TILESIZE, 1272 rb->lcd_bitmap_part(sokoban_tiles, 0, 0*SOKOBAN_TILESIZE,
1289 STRIDE( SCREEN_MAIN, 1273 STRIDE( SCREEN_MAIN,
1290 BMPWIDTH_sokoban_tiles, 1274 BMPWIDTH_sokoban_tiles,
1291 BMPHEIGHT_sokoban_tiles), 1275 BMPHEIGHT_sokoban_tiles),
1292 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE); 1276 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE);
1293 break; 1277 break;
1294 1278
1295 case '#': /* wall */ 1279 case '#': /* wall */
1296 rb->lcd_bitmap_part(sokoban_tiles, 0, 1*SOKOBAN_TILESIZE, 1280 rb->lcd_bitmap_part(sokoban_tiles, 0, 1*SOKOBAN_TILESIZE,
1297 STRIDE( SCREEN_MAIN, 1281 STRIDE( SCREEN_MAIN,
1298 BMPWIDTH_sokoban_tiles, 1282 BMPWIDTH_sokoban_tiles,
1299 BMPHEIGHT_sokoban_tiles), 1283 BMPHEIGHT_sokoban_tiles),
1300 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE); 1284 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE);
1301 break; 1285 break;
1302 1286
1303 case '$': /* box */ 1287 case '$': /* box */
1304 rb->lcd_bitmap_part(sokoban_tiles, 0, 2*SOKOBAN_TILESIZE, 1288 rb->lcd_bitmap_part(sokoban_tiles, 0, 2*SOKOBAN_TILESIZE,
1305 STRIDE( SCREEN_MAIN, 1289 STRIDE( SCREEN_MAIN,
1306 BMPWIDTH_sokoban_tiles, 1290 BMPWIDTH_sokoban_tiles,
1307 BMPHEIGHT_sokoban_tiles), 1291 BMPHEIGHT_sokoban_tiles),
1308 c, r, SOKOBAN_TILESIZE,SOKOBAN_TILESIZE); 1292 c, r, SOKOBAN_TILESIZE,SOKOBAN_TILESIZE);
1309 break; 1293 break;
1310 1294
1311 case '*': /* box on goal */ 1295 case '*': /* box on goal */
1312 rb->lcd_bitmap_part(sokoban_tiles, 0, 3*SOKOBAN_TILESIZE, 1296 rb->lcd_bitmap_part(sokoban_tiles, 0, 3*SOKOBAN_TILESIZE,
1313 STRIDE( SCREEN_MAIN, 1297 STRIDE( SCREEN_MAIN,
1314 BMPWIDTH_sokoban_tiles, 1298 BMPWIDTH_sokoban_tiles,
1315 BMPHEIGHT_sokoban_tiles), 1299 BMPHEIGHT_sokoban_tiles),
1316 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE); 1300 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE);
1317 break; 1301 break;
1318 1302
1319 case '.': /* goal */ 1303 case '.': /* goal */
1320 rb->lcd_bitmap_part(sokoban_tiles, 0, 4*SOKOBAN_TILESIZE, 1304 rb->lcd_bitmap_part(sokoban_tiles, 0, 4*SOKOBAN_TILESIZE,
1321 STRIDE( SCREEN_MAIN, 1305 STRIDE( SCREEN_MAIN,
1322 BMPWIDTH_sokoban_tiles, 1306 BMPWIDTH_sokoban_tiles,
1323 BMPHEIGHT_sokoban_tiles), 1307 BMPHEIGHT_sokoban_tiles),
1324 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE); 1308 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE);
1325 break; 1309 break;
1326 1310
1327 case '@': /* player */ 1311 case '@': /* player */
1328 rb->lcd_bitmap_part(sokoban_tiles, 0, 5*SOKOBAN_TILESIZE, 1312 rb->lcd_bitmap_part(sokoban_tiles, 0, 5*SOKOBAN_TILESIZE,
1329 STRIDE( SCREEN_MAIN, 1313 STRIDE( SCREEN_MAIN,
1330 BMPWIDTH_sokoban_tiles, 1314 BMPWIDTH_sokoban_tiles,
1331 BMPHEIGHT_sokoban_tiles), 1315 BMPHEIGHT_sokoban_tiles),
1332 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE); 1316 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE);
1333 break; 1317 break;
1334 1318
1335 case '+': /* player on goal */ 1319 case '+': /* player on goal */
1336 rb->lcd_bitmap_part(sokoban_tiles, 0, 6*SOKOBAN_TILESIZE, 1320 rb->lcd_bitmap_part(sokoban_tiles, 0, 6*SOKOBAN_TILESIZE,
1337 STRIDE( SCREEN_MAIN, 1321 STRIDE( SCREEN_MAIN,
1338 BMPWIDTH_sokoban_tiles, 1322 BMPWIDTH_sokoban_tiles,
1339 BMPHEIGHT_sokoban_tiles), 1323 BMPHEIGHT_sokoban_tiles),
1340 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE); 1324 c, r, SOKOBAN_TILESIZE, SOKOBAN_TILESIZE);
1341 break; 1325 break;
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 1996dc97e7..6c496663cf 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -646,26 +646,7 @@ CONFIG_KEYPAD == MROBE500_PAD
646# define HK_CUR2STACK "DBL PLAY" 646# define HK_CUR2STACK "DBL PLAY"
647# define HK_REM2STACK "NEXT" 647# define HK_REM2STACK "NEXT"
648 648
649#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 649#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
650# define SOL_QUIT BUTTON_POWER
651# define SOL_UP BUTTON_HOME
652# define SOL_DOWN BUTTON_OPTION
653# define SOL_LEFT BUTTON_PREV
654# define SOL_RIGHT BUTTON_NEXT
655# define SOL_MOVE_PRE BUTTON_PLAY
656# define SOL_MOVE (BUTTON_PLAY | BUTTON_REL)
657# define SOL_DRAW (BUTTON_POWER | BUTTON_REPEAT)
658# define SOL_REM2CUR BUTTON_VOL_DOWN
659# define SOL_CUR2STACK_PRE BUTTON_PLAY
660# define SOL_CUR2STACK (BUTTON_PLAY | BUTTON_REPEAT)
661# define SOL_REM2STACK BUTTON_VOL_UP
662# define HK_MOVE "PLAY"
663# define HK_DRAW "DBL HOME"
664# define HK_REM2CUR "PREV"
665# define HK_CUR2STACK "DBL PLAY"
666# define HK_REM2STACK "NEXT"
667
668#elif CONFIG_KEYPAD == XDUOO_X20_PAD
669# define SOL_QUIT BUTTON_POWER 650# define SOL_QUIT BUTTON_POWER
670# define SOL_UP BUTTON_HOME 651# define SOL_UP BUTTON_HOME
671# define SOL_DOWN BUTTON_OPTION 652# define SOL_DOWN BUTTON_OPTION
@@ -703,7 +684,7 @@ CONFIG_KEYPAD == MROBE500_PAD
703# define HK_CUR2STACK "DBL PLAY" 684# define HK_CUR2STACK "DBL PLAY"
704# define HK_REM2STACK "NEXT" 685# define HK_REM2STACK "NEXT"
705 686
706#elif CONFIG_KEYPAD == IHIFI_770_PAD 687#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
707# define SOL_QUIT BUTTON_POWER 688# define SOL_QUIT BUTTON_POWER
708# define SOL_UP BUTTON_PREV 689# define SOL_UP BUTTON_PREV
709# define SOL_DOWN BUTTON_NEXT 690# define SOL_DOWN BUTTON_NEXT
@@ -722,24 +703,24 @@ CONFIG_KEYPAD == MROBE500_PAD
722# define HK_CUR2STACK "DBL PLAY" 703# define HK_CUR2STACK "DBL PLAY"
723# define HK_REM2STACK "POWER+" 704# define HK_REM2STACK "POWER+"
724 705
725#elif CONFIG_KEYPAD == IHIFI_800_PAD 706#elif CONFIG_KEYPAD == EROSQ_PAD
726# define SOL_QUIT BUTTON_POWER 707# define SOL_QUIT BUTTON_POWER
727# define SOL_UP BUTTON_PREV 708# define SOL_UP BUTTON_PREV
728# define SOL_DOWN BUTTON_NEXT 709# define SOL_DOWN BUTTON_NEXT
729# define SOL_LEFT BUTTON_HOME 710# define SOL_LEFT BUTTON_SCROLL_BACK
730# define SOL_RIGHT BUTTON_VOL_DOWN 711# define SOL_RIGHT BUTTON_SCROLL_FWD
731# define SOL_MOVE_PRE BUTTON_VOL_UP 712# define SOL_MOVE_PRE BUTTON_PLAY
732# define SOL_MOVE (BUTTON_PLAY | BUTTON_REL) 713# define SOL_MOVE (BUTTON_PLAY | BUTTON_REL)
733# define SOL_DRAW (BUTTON_POWER | BUTTON_REPEAT) 714# define SOL_DRAW (BUTTON_POWER | BUTTON_REPEAT)
734# define SOL_REM2CUR (BUTTON_POWER | BUTTON_VOL_DOWN) 715# define SOL_REM2CUR BUTTON_VOL_DOWN
735# define SOL_CUR2STACK_PRE BUTTON_PLAY 716# define SOL_CUR2STACK_PRE BUTTON_PLAY
736# define SOL_CUR2STACK (BUTTON_PLAY | BUTTON_REPEAT) 717# define SOL_CUR2STACK (BUTTON_PLAY | BUTTON_REPEAT)
737# define SOL_REM2STACK (BUTTON_POWER | BUTTON_VOL_UP) 718# define SOL_REM2STACK BUTTON_VOL_UP
738# define HK_MOVE "PLAY" 719# define HK_MOVE "PLAY"
739# define HK_DRAW "DBL POWER" 720# define HK_DRAW "DBL HOME"
740# define HK_REM2CUR "POWER" 721# define HK_REM2CUR "PREV"
741# define HK_CUR2STACK "DBL PLAY" 722# define HK_CUR2STACK "DBL PLAY"
742# define HK_REM2STACK "POWER+" 723# define HK_REM2STACK "NEXT"
743 724
744#else 725#else
745#error No keymap defined! 726#error No keymap defined!
@@ -950,8 +931,8 @@ static void draw_card( card_t *card, int x, int y,
950 if( card->known ) 931 if( card->known )
951 { 932 {
952 rb->lcd_bitmap_part( card_deck, CARD_GFX_WIDTH * card->num, 933 rb->lcd_bitmap_part( card_deck, CARD_GFX_WIDTH * card->num,
953 CARD_GFX_HEIGHT * card->suit, 934 CARD_GFX_HEIGHT * card->suit,
954 STRIDE(SCREEN_MAIN, 935 STRIDE(SCREEN_MAIN,
955 BMPWIDTH_card_deck, BMPHEIGHT_card_deck), 936 BMPWIDTH_card_deck, BMPHEIGHT_card_deck),
956 x+1, y+1, CARD_GFX_WIDTH, CARD_GFX_HEIGHT ); 937 x+1, y+1, CARD_GFX_WIDTH, CARD_GFX_HEIGHT );
957 } 938 }
@@ -967,7 +948,7 @@ static void draw_card( card_t *card, int x, int y,
967static void draw_empty_stack( int s, int x, int y, bool cursor ) 948static void draw_empty_stack( int s, int x, int y, bool cursor )
968{ 949{
969 rb->lcd_bitmap_part( solitaire_suitsi, 0, 950 rb->lcd_bitmap_part( solitaire_suitsi, 0,
970 CARD_GFX_HEIGHT * s, 951 CARD_GFX_HEIGHT * s,
971 STRIDE( SCREEN_MAIN, 952 STRIDE( SCREEN_MAIN,
972 BMPWIDTH_solitaire_suitsi, BMPHEIGHT_solitaire_suitsi), 953 BMPWIDTH_solitaire_suitsi, BMPHEIGHT_solitaire_suitsi),
973 x+1, y+1, CARD_GFX_WIDTH, CARD_GFX_HEIGHT ); 954 x+1, y+1, CARD_GFX_WIDTH, CARD_GFX_HEIGHT );
@@ -1618,11 +1599,11 @@ static int save_game( void )
1618static int load_game( void ) 1599static int load_game( void )
1619{ 1600{
1620 int checksum, retval; 1601 int checksum, retval;
1621 1602
1622 int fd = open_save_file( O_RDONLY ); 1603 int fd = open_save_file( O_RDONLY );
1623 if( fd < 0 ) 1604 if( fd < 0 )
1624 return -1; 1605 return -1;
1625 1606
1626 retval = 0; /* Assume good case */ 1607 retval = 0; /* Assume good case */
1627 if( ( rb->lseek( fd, -(off_t)sizeof( int ), SEEK_END ) == -((ssize_t)sizeof( int ))-1 ) 1608 if( ( rb->lseek( fd, -(off_t)sizeof( int ), SEEK_END ) == -((ssize_t)sizeof( int ))-1 )
1628 || ( rb->read( fd, &checksum, sizeof( int ) ) < ((ssize_t)sizeof( int )) ) 1609 || ( rb->read( fd, &checksum, sizeof( int ) ) < ((ssize_t)sizeof( int )) )
@@ -1646,7 +1627,7 @@ static int load_game( void )
1646 rb->splash( 2*HZ, "Save file was corrupted. Aborting." ); 1627 rb->splash( 2*HZ, "Save file was corrupted. Aborting." );
1647 retval = -3; 1628 retval = -3;
1648 } 1629 }
1649 1630
1650 rb->close( fd ); 1631 rb->close( fd );
1651 delete_save_file(); 1632 delete_save_file();
1652 return retval; 1633 return retval;
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index 1b3bdda0d1..67816120a1 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -327,25 +327,7 @@
327#define AST_RIGHT BUTTON_RIGHT 327#define AST_RIGHT BUTTON_RIGHT
328#define AST_FIRE BUTTON_SELECT 328#define AST_FIRE BUTTON_SELECT
329 329
330#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) 330#elif (CONFIG_KEYPAD == XDUOO_X3_PAD) || (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
331#define AST_PAUSE BUTTON_VOL_UP
332#define AST_QUIT BUTTON_POWER
333#define AST_THRUST BUTTON_HOME
334#define AST_HYPERSPACE BUTTON_OPTION
335#define AST_LEFT BUTTON_PREV
336#define AST_RIGHT BUTTON_NEXT
337#define AST_FIRE BUTTON_PLAY
338
339#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD)
340#define AST_PAUSE BUTTON_VOL_UP
341#define AST_QUIT BUTTON_POWER
342#define AST_THRUST BUTTON_HOME
343#define AST_HYPERSPACE BUTTON_OPTION
344#define AST_LEFT BUTTON_PREV
345#define AST_RIGHT BUTTON_NEXT
346#define AST_FIRE BUTTON_PLAY
347
348#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
349#define AST_PAUSE BUTTON_VOL_UP 331#define AST_PAUSE BUTTON_VOL_UP
350#define AST_QUIT BUTTON_POWER 332#define AST_QUIT BUTTON_POWER
351#define AST_THRUST BUTTON_HOME 333#define AST_THRUST BUTTON_HOME
@@ -363,7 +345,7 @@
363#define AST_RIGHT BUTTON_NEXT 345#define AST_RIGHT BUTTON_NEXT
364#define AST_FIRE BUTTON_PLAY 346#define AST_FIRE BUTTON_PLAY
365 347
366#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 348#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
367#define AST_PAUSE BUTTON_PLAY 349#define AST_PAUSE BUTTON_PLAY
368#define AST_QUIT BUTTON_POWER 350#define AST_QUIT BUTTON_POWER
369#define AST_THRUST BUTTON_NEXT 351#define AST_THRUST BUTTON_NEXT
@@ -372,14 +354,14 @@
372#define AST_RIGHT BUTTON_VOL_DOWN 354#define AST_RIGHT BUTTON_VOL_DOWN
373#define AST_FIRE BUTTON_VOL_UP 355#define AST_FIRE BUTTON_VOL_UP
374 356
375#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 357#elif (CONFIG_KEYPAD == EROSQ_PAD)
376#define AST_PAUSE BUTTON_PLAY 358#define AST_PAUSE BUTTON_PREV
377#define AST_QUIT BUTTON_POWER 359#define AST_QUIT BUTTON_POWER
378#define AST_THRUST BUTTON_NEXT 360#define AST_THRUST BUTTON_PLAY
379#define AST_HYPERSPACE BUTTON_PREV 361#define AST_HYPERSPACE BUTTON_MENU
380#define AST_LEFT BUTTON_HOME 362#define AST_LEFT BUTTON_SCROLL_BACK
381#define AST_RIGHT BUTTON_VOL_DOWN 363#define AST_RIGHT BUTTON_SCROLL_FWD
382#define AST_FIRE BUTTON_VOL_UP 364#define AST_FIRE BUTTON_BACK
383 365
384#else 366#else
385#error No keymap defined! 367#error No keymap defined!
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index cf8522fbac..e44c867cdc 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -588,23 +588,7 @@
588#define STAR_LEVEL_DOWN_NAME "PLAY + PREV" 588#define STAR_LEVEL_DOWN_NAME "PLAY + PREV"
589#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION" 589#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION"
590 590
591#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 591#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
592#define STAR_QUIT BUTTON_POWER
593#define STAR_LEFT BUTTON_PREV
594#define STAR_RIGHT BUTTON_NEXT
595#define STAR_UP BUTTON_HOME
596#define STAR_DOWN BUTTON_OPTION
597#define STAR_TOGGLE_CONTROL BUTTON_PLAY
598#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_NEXT)
599#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_PREV)
600#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_OPTION)
601#define STAR_TOGGLE_CONTROL_NAME "PLAY"
602#define STAR_QUIT_NAME "POWER"
603#define STAR_LEVEL_UP_NAME "PLAY + NEXT"
604#define STAR_LEVEL_DOWN_NAME "PLAY + PREV"
605#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION"
606
607#elif CONFIG_KEYPAD == XDUOO_X20_PAD
608#define STAR_QUIT BUTTON_POWER 592#define STAR_QUIT BUTTON_POWER
609#define STAR_LEFT BUTTON_PREV 593#define STAR_LEFT BUTTON_PREV
610#define STAR_RIGHT BUTTON_NEXT 594#define STAR_RIGHT BUTTON_NEXT
@@ -636,7 +620,7 @@
636#define STAR_LEVEL_DOWN_NAME "PLAY + PREV" 620#define STAR_LEVEL_DOWN_NAME "PLAY + PREV"
637#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION" 621#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION"
638 622
639#elif CONFIG_KEYPAD == IHIFI_770_PAD 623#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
640#define STAR_QUIT BUTTON_POWER 624#define STAR_QUIT BUTTON_POWER
641#define STAR_LEFT BUTTON_HOME 625#define STAR_LEFT BUTTON_HOME
642#define STAR_RIGHT BUTTON_VOL_DOWN 626#define STAR_RIGHT BUTTON_VOL_DOWN
@@ -652,21 +636,21 @@
652#define STAR_LEVEL_DOWN_NAME "POWER + VOL-" 636#define STAR_LEVEL_DOWN_NAME "POWER + VOL-"
653#define STAR_LEVEL_REPEAT_NAME "POWER + HOME" 637#define STAR_LEVEL_REPEAT_NAME "POWER + HOME"
654 638
655#elif CONFIG_KEYPAD == IHIFI_800_PAD 639#elif CONFIG_KEYPAD == EROSQ_PAD
656#define STAR_QUIT BUTTON_POWER 640#define STAR_QUIT BUTTON_POWER
657#define STAR_LEFT BUTTON_HOME 641#define STAR_LEFT BUTTON_SCROLL_BACK
658#define STAR_RIGHT BUTTON_VOL_DOWN 642#define STAR_RIGHT BUTTON_SCROLL_FWD
659#define STAR_UP BUTTON_PREV 643#define STAR_UP BUTTON_PREV
660#define STAR_DOWN BUTTON_NEXT 644#define STAR_DOWN BUTTON_NEXT
661#define STAR_TOGGLE_CONTROL BUTTON_PLAY 645#define STAR_TOGGLE_CONTROL BUTTON_PLAY
662#define STAR_LEVEL_UP (BUTTON_POWER | BUTTON_VOL_UP) 646#define STAR_LEVEL_UP BUTTON_VOL_UP
663#define STAR_LEVEL_DOWN (BUTTON_POWER | BUTTON_VOL_DOWN) 647#define STAR_LEVEL_DOWN BUTTON_VOL_DOWN
664#define STAR_LEVEL_REPEAT (BUTTON_POWER | BUTTON_HOME) 648#define STAR_LEVEL_REPEAT BUTTON_BACK
665#define STAR_TOGGLE_CONTROL_NAME "PLAY" 649#define STAR_TOGGLE_CONTROL_NAME "PLAY"
666#define STAR_QUIT_NAME "POWER" 650#define STAR_QUIT_NAME "POWER"
667#define STAR_LEVEL_UP_NAME "POWER + VOL+" 651#define STAR_LEVEL_UP_NAME "VOL UP"
668#define STAR_LEVEL_DOWN_NAME "POWER + VOL-" 652#define STAR_LEVEL_DOWN_NAME "VOL DN"
669#define STAR_LEVEL_REPEAT_NAME "POWER + HOME" 653#define STAR_LEVEL_REPEAT_NAME "BACK"
670 654
671#else 655#else
672#error No keymap defined! 656#error No keymap defined!
@@ -1035,8 +1019,8 @@ static void star_display_board_info(int current_level)
1035 label_pos_y, "C:"); 1019 label_pos_y, "C:");
1036 1020
1037 rb->lcd_bitmap_part(star_tiles, 0, control == STAR_CONTROL_BALL ? 1021 rb->lcd_bitmap_part(star_tiles, 0, control == STAR_CONTROL_BALL ?
1038 BALL*TILE_HEIGHT : BLOCK*TILE_HEIGHT, 1022 BALL*TILE_HEIGHT : BLOCK*TILE_HEIGHT,
1039 STRIDE( SCREEN_MAIN, 1023 STRIDE( SCREEN_MAIN,
1040 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles), 1024 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles),
1041 STAR_OFFSET_X + (STAR_WIDTH-1) * TILE_WIDTH, 1025 STAR_OFFSET_X + (STAR_WIDTH-1) * TILE_WIDTH,
1042 tile_pos_y, TILE_WIDTH, TILE_HEIGHT); 1026 tile_pos_y, TILE_WIDTH, TILE_HEIGHT);
@@ -1082,7 +1066,7 @@ static int star_load_level(int current_level)
1082 STAR_OFFSET_X + x * TILE_WIDTH, \ 1066 STAR_OFFSET_X + x * TILE_WIDTH, \
1083 STAR_OFFSET_Y + y * TILE_HEIGHT, \ 1067 STAR_OFFSET_Y + y * TILE_HEIGHT, \
1084 TILE_WIDTH, TILE_HEIGHT); 1068 TILE_WIDTH, TILE_HEIGHT);
1085 1069
1086 case STAR_VOID: 1070 case STAR_VOID:
1087 DRAW_TILE( SPACE ); 1071 DRAW_TILE( SPACE );
1088 break; 1072 break;
@@ -1128,12 +1112,12 @@ static void star_animate_tile(int tile_no, int start_x, int start_y,
1128 for (i = 1 ; i <= TILE_WIDTH ; i++) 1112 for (i = 1 ; i <= TILE_WIDTH ; i++)
1129 { 1113 {
1130 STAR_SLEEP 1114 STAR_SLEEP
1131 rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT, 1115 rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT,
1132 STRIDE( SCREEN_MAIN, 1116 STRIDE( SCREEN_MAIN,
1133 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles), 1117 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles),
1134 start_x, start_y, TILE_WIDTH, TILE_HEIGHT); 1118 start_x, start_y, TILE_WIDTH, TILE_HEIGHT);
1135 rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT, 1119 rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT,
1136 STRIDE( SCREEN_MAIN, 1120 STRIDE( SCREEN_MAIN,
1137 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles), 1121 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles),
1138 start_x + delta_x * i, start_y, TILE_WIDTH, TILE_HEIGHT); 1122 start_x + delta_x * i, start_y, TILE_WIDTH, TILE_HEIGHT);
1139 rb->lcd_update_rect(start_x + delta_x * i - (delta_x>0?1:0), 1123 rb->lcd_update_rect(start_x + delta_x * i - (delta_x>0?1:0),
@@ -1145,12 +1129,12 @@ static void star_animate_tile(int tile_no, int start_x, int start_y,
1145 for (i = 1 ; i <= TILE_HEIGHT ; i++) 1129 for (i = 1 ; i <= TILE_HEIGHT ; i++)
1146 { 1130 {
1147 STAR_SLEEP 1131 STAR_SLEEP
1148 rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT, 1132 rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT,
1149 STRIDE( SCREEN_MAIN, 1133 STRIDE( SCREEN_MAIN,
1150 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles), 1134 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles),
1151 start_x, start_y, TILE_WIDTH, TILE_HEIGHT); 1135 start_x, start_y, TILE_WIDTH, TILE_HEIGHT);
1152 rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT, 1136 rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT,
1153 STRIDE( SCREEN_MAIN, 1137 STRIDE( SCREEN_MAIN,
1154 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles), 1138 BMPWIDTH_star_tiles, BMPHEIGHT_star_tiles),
1155 start_x, start_y + delta_y * i, TILE_WIDTH, TILE_HEIGHT); 1139 start_x, start_y + delta_y * i, TILE_WIDTH, TILE_HEIGHT);
1156 rb->lcd_update_rect(start_x, start_y + delta_y * i - (delta_y>0?1:0), 1140 rb->lcd_update_rect(start_x, start_y + delta_y * i - (delta_y>0?1:0),
@@ -1169,7 +1153,7 @@ static int star_run_game(int current_level)
1169 int key; 1153 int key;
1170#if defined(STAR_LEVEL_DOWN_PRE) || \ 1154#if defined(STAR_LEVEL_DOWN_PRE) || \
1171 defined(STAR_LEVEL_UP_PRE) || \ 1155 defined(STAR_LEVEL_UP_PRE) || \
1172 defined(STAR_TOGGLE_CONTROL_PRE) 1156 defined(STAR_TOGGLE_CONTROL_PRE)
1173 int lastkey = BUTTON_NONE; 1157 int lastkey = BUTTON_NONE;
1174#endif 1158#endif
1175 1159
@@ -1261,7 +1245,7 @@ static int star_run_game(int current_level)
1261 } 1245 }
1262#if defined(STAR_LEVEL_DOWN_PRE) || \ 1246#if defined(STAR_LEVEL_DOWN_PRE) || \
1263 defined(STAR_LEVEL_UP_PRE) || \ 1247 defined(STAR_LEVEL_UP_PRE) || \
1264 defined(STAR_TOGGLE_CONTROL_PRE) 1248 defined(STAR_TOGGLE_CONTROL_PRE)
1265 if (key != BUTTON_NONE) 1249 if (key != BUTTON_NONE)
1266 lastkey = key; 1250 lastkey = key;
1267#endif 1251#endif
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index 801c735f00..db9cfd57da 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -277,23 +277,7 @@
277#define STOPWATCH_SCROLL_UP BUTTON_UP 277#define STOPWATCH_SCROLL_UP BUTTON_UP
278#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN 278#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
279 279
280#elif CONFIG_KEYPAD == XDUOO_X3_PAD 280#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
281#define STOPWATCH_QUIT BUTTON_POWER
282#define STOPWATCH_START_STOP BUTTON_NEXT
283#define STOPWATCH_RESET_TIMER BUTTON_PREV
284#define STOPWATCH_LAP_TIMER BUTTON_PLAY
285#define STOPWATCH_SCROLL_UP BUTTON_HOME
286#define STOPWATCH_SCROLL_DOWN BUTTON_OPTION
287
288#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
289#define STOPWATCH_QUIT BUTTON_POWER
290#define STOPWATCH_START_STOP BUTTON_NEXT
291#define STOPWATCH_RESET_TIMER BUTTON_PREV
292#define STOPWATCH_LAP_TIMER BUTTON_PLAY
293#define STOPWATCH_SCROLL_UP BUTTON_HOME
294#define STOPWATCH_SCROLL_DOWN BUTTON_OPTION
295
296#elif CONFIG_KEYPAD == XDUOO_X20_PAD
297#define STOPWATCH_QUIT BUTTON_POWER 281#define STOPWATCH_QUIT BUTTON_POWER
298#define STOPWATCH_START_STOP BUTTON_NEXT 282#define STOPWATCH_START_STOP BUTTON_NEXT
299#define STOPWATCH_RESET_TIMER BUTTON_PREV 283#define STOPWATCH_RESET_TIMER BUTTON_PREV
@@ -309,7 +293,7 @@
309#define STOPWATCH_SCROLL_UP BUTTON_HOME 293#define STOPWATCH_SCROLL_UP BUTTON_HOME
310#define STOPWATCH_SCROLL_DOWN BUTTON_OPTION 294#define STOPWATCH_SCROLL_DOWN BUTTON_OPTION
311 295
312#elif CONFIG_KEYPAD == IHIFI_770_PAD 296#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
313#define STOPWATCH_QUIT BUTTON_POWER 297#define STOPWATCH_QUIT BUTTON_POWER
314#define STOPWATCH_START_STOP BUTTON_NEXT 298#define STOPWATCH_START_STOP BUTTON_NEXT
315#define STOPWATCH_RESET_TIMER BUTTON_PREV 299#define STOPWATCH_RESET_TIMER BUTTON_PREV
@@ -317,13 +301,13 @@
317#define STOPWATCH_SCROLL_UP BUTTON_VOL_UP 301#define STOPWATCH_SCROLL_UP BUTTON_VOL_UP
318#define STOPWATCH_SCROLL_DOWN BUTTON_VOL_DOWN 302#define STOPWATCH_SCROLL_DOWN BUTTON_VOL_DOWN
319 303
320#elif CONFIG_KEYPAD == IHIFI_800_PAD 304#elif CONFIG_KEYPAD == EROSQ_PAD
321#define STOPWATCH_QUIT BUTTON_POWER 305#define STOPWATCH_QUIT BUTTON_POWER
322#define STOPWATCH_START_STOP BUTTON_NEXT 306#define STOPWATCH_START_STOP BUTTON_PLAY
323#define STOPWATCH_RESET_TIMER BUTTON_PREV 307#define STOPWATCH_RESET_TIMER BUTTON_BACK
324#define STOPWATCH_LAP_TIMER BUTTON_PLAY 308#define STOPWATCH_LAP_TIMER BUTTON_MENU
325#define STOPWATCH_SCROLL_UP BUTTON_VOL_UP 309#define STOPWATCH_SCROLL_UP BUTTON_SCROLL_FWD
326#define STOPWATCH_SCROLL_DOWN BUTTON_VOL_DOWN 310#define STOPWATCH_SCROLL_DOWN BUTTON_SCROLL_BACK
327 311
328#else 312#else
329#error No keymap defined! 313#error No keymap defined!
@@ -405,24 +389,24 @@ static void ticks_to_string(int ticks,int lap,int buflen, char * buf)
405 } 389 }
406} 390}
407 391
408/* 392/*
409 * Load saved stopwatch state, if exists. 393 * Load saved stopwatch state, if exists.
410 */ 394 */
411static void load_stopwatch(void) 395static void load_stopwatch(void)
412{ 396{
413 int fd; 397 int fd;
414 398
415 fd = rb->open(STOPWATCH_FILE, O_RDONLY); 399 fd = rb->open(STOPWATCH_FILE, O_RDONLY);
416 400
417 if (fd < 0) 401 if (fd < 0)
418 { 402 {
419 return; 403 return;
420 } 404 }
421 405
422 /* variable stopwatch isn't saved/loaded, because it is only used 406 /* variable stopwatch isn't saved/loaded, because it is only used
423 * temporarily in main loop 407 * temporarily in main loop
424 */ 408 */
425 409
426 rb->read(fd, &start_at, sizeof(start_at)); 410 rb->read(fd, &start_at, sizeof(start_at));
427 rb->read(fd, &prev_total, sizeof(prev_total)); 411 rb->read(fd, &prev_total, sizeof(prev_total));
428 rb->read(fd, &counting, sizeof(counting)); 412 rb->read(fd, &counting, sizeof(counting));
@@ -430,7 +414,7 @@ static void load_stopwatch(void)
430 rb->read(fd, &lap_scroll, sizeof(lap_scroll)); 414 rb->read(fd, &lap_scroll, sizeof(lap_scroll));
431 rb->read(fd, &lap_start, sizeof(lap_start)); 415 rb->read(fd, &lap_start, sizeof(lap_start));
432 rb->read(fd, lap_times, sizeof(lap_times)); 416 rb->read(fd, lap_times, sizeof(lap_times));
433 417
434 if (counting && start_at > *rb->current_tick) 418 if (counting && start_at > *rb->current_tick)
435 { 419 {
436 /* Stopwatch started in the future? Unlikely; probably started on a 420 /* Stopwatch started in the future? Unlikely; probably started on a
@@ -441,28 +425,28 @@ static void load_stopwatch(void)
441 start_at = 0; 425 start_at = 0;
442 counting = false; 426 counting = false;
443 } 427 }
444 428
445 rb->close(fd); 429 rb->close(fd);
446} 430}
447 431
448/* 432/*
449 * Save stopwatch state. 433 * Save stopwatch state.
450 */ 434 */
451static void save_stopwatch(void) 435static void save_stopwatch(void)
452{ 436{
453 int fd; 437 int fd;
454 438
455 fd = rb->open(STOPWATCH_FILE, O_CREAT|O_WRONLY|O_TRUNC, 0666); 439 fd = rb->open(STOPWATCH_FILE, O_CREAT|O_WRONLY|O_TRUNC, 0666);
456 440
457 if (fd < 0) 441 if (fd < 0)
458 { 442 {
459 return; 443 return;
460 } 444 }
461 445
462 /* variable stopwatch isn't saved/loaded, because it is only used 446 /* variable stopwatch isn't saved/loaded, because it is only used
463 * temporarily in main loop 447 * temporarily in main loop
464 */ 448 */
465 449
466 rb->write(fd, &start_at, sizeof(start_at)); 450 rb->write(fd, &start_at, sizeof(start_at));
467 rb->write(fd, &prev_total, sizeof(prev_total)); 451 rb->write(fd, &prev_total, sizeof(prev_total));
468 rb->write(fd, &counting, sizeof(counting)); 452 rb->write(fd, &counting, sizeof(counting));
@@ -470,7 +454,7 @@ static void save_stopwatch(void)
470 rb->write(fd, &lap_scroll, sizeof(lap_scroll)); 454 rb->write(fd, &lap_scroll, sizeof(lap_scroll));
471 rb->write(fd, &lap_start, sizeof(lap_start)); 455 rb->write(fd, &lap_start, sizeof(lap_start));
472 rb->write(fd, lap_times, sizeof(lap_times)); 456 rb->write(fd, lap_times, sizeof(lap_times));
473 457
474 rb->close(fd); 458 rb->close(fd);
475} 459}
476 460
@@ -491,9 +475,9 @@ enum plugin_status plugin_start(const void* parameter)
491 lines = (LCD_HEIGHT / h) - (LAP_Y); 475 lines = (LCD_HEIGHT / h) - (LAP_Y);
492 476
493 load_stopwatch(); 477 load_stopwatch();
494 478
495 rb->lcd_clear_display(); 479 rb->lcd_clear_display();
496 480
497 while (!done) 481 while (!done)
498 { 482 {
499 if (counting) 483 if (counting)
diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h
index 749087260d..36f47a377a 100644
--- a/apps/plugins/sudoku/sudoku.h
+++ b/apps/plugins/sudoku/sudoku.h
@@ -404,21 +404,7 @@
404#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL) 404#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL)
405#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_PWRALT) 405#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_PWRALT)
406 406
407#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 407#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
408#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER
409#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT)
410#define SUDOKU_BUTTON_UP BUTTON_HOME
411#define SUDOKU_BUTTON_DOWN BUTTON_OPTION
412#define SUDOKU_BUTTON_LEFT BUTTON_PREV
413#define SUDOKU_BUTTON_RIGHT BUTTON_NEXT
414#define SUDOKU_BUTTON_TOGGLEBACK BUTTON_VOL_DOWN
415#define SUDOKU_BUTTON_TOGGLE BUTTON_VOL_UP
416#define SUDOKU_BUTTON_ALTTOGGLE BUTTON_PLAY
417#define SUDOKU_BUTTON_MENU_PRE BUTTON_POWER
418#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL)
419#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_POWER)
420
421#elif CONFIG_KEYPAD == XDUOO_X20_PAD
422#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER 408#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER
423#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT) 409#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT)
424#define SUDOKU_BUTTON_UP BUTTON_HOME 410#define SUDOKU_BUTTON_UP BUTTON_HOME
@@ -446,7 +432,7 @@
446#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL) 432#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL)
447#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_POWER) 433#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_POWER)
448 434
449#elif CONFIG_KEYPAD == IHIFI_770_PAD 435#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
450#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER 436#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER
451#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT) 437#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT)
452#define SUDOKU_BUTTON_UP BUTTON_PREV 438#define SUDOKU_BUTTON_UP BUTTON_PREV
@@ -460,19 +446,18 @@
460#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL) 446#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL)
461#define SUDOKU_BUTTON_POSSIBLE (BUTTON_POWER | BUTTON_HOME) 447#define SUDOKU_BUTTON_POSSIBLE (BUTTON_POWER | BUTTON_HOME)
462 448
463#elif CONFIG_KEYPAD == IHIFI_800_PAD 449#elif CONFIG_KEYPAD == EROSQ_PAD
464#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER 450#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER
465#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT) 451#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT)
466#define SUDOKU_BUTTON_UP BUTTON_PREV 452#define SUDOKU_BUTTON_UP BUTTON_PREV
467#define SUDOKU_BUTTON_DOWN BUTTON_NEXT 453#define SUDOKU_BUTTON_DOWN BUTTON_NEXT
468#define SUDOKU_BUTTON_LEFT BUTTON_HOME 454#define SUDOKU_BUTTON_LEFT BUTTON_SCROLL_BACK
469#define SUDOKU_BUTTON_RIGHT BUTTON_VOL_DOWN 455#define SUDOKU_BUTTON_RIGHT BUTTON_SCROLL_FWD
470#define SUDOKU_BUTTON_TOGGLEBACK (BUTTON_POWER | BUTTON_VOL_DOWN) 456#define SUDOKU_BUTTON_TOGGLEBACK BUTTON_VOL_DOWN
471#define SUDOKU_BUTTON_TOGGLE (BUTTON_POWER | BUTTON_VOL_UP) 457#define SUDOKU_BUTTON_TOGGLE BUTTON_VOL_UP
472#define SUDOKU_BUTTON_ALTTOGGLE BUTTON_PLAY 458#define SUDOKU_BUTTON_MENU_PRE BUTTON_MENU
473#define SUDOKU_BUTTON_MENU_PRE BUTTON_POWER 459#define SUDOKU_BUTTON_MENU (BUTTON_MENU | BUTTON_REL)
474#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL) 460#define SUDOKU_BUTTON_POSSIBLE BUTTON_BACK
475#define SUDOKU_BUTTON_POSSIBLE (BUTTON_POWER | BUTTON_HOME)
476 461
477#else 462#else
478#error No keymap defined! 463#error No keymap defined!
@@ -512,7 +497,7 @@ struct sudoku_state_t {
512 char savedboard[9][9]; /* Cached copy of saved state */ 497 char savedboard[9][9]; /* Cached copy of saved state */
513 int x,y; /* Cursor position */ 498 int x,y; /* Cursor position */
514 int editmode; /* We are editing the start board */ 499 int editmode; /* We are editing the start board */
515#ifdef SUDOKU_BUTTON_POSSIBLE 500#ifdef SUDOKU_BUTTON_POSSIBLE
516 short possiblevals[9][9]; /* possible values a cell could be, user sets them */ 501 short possiblevals[9][9]; /* possible values a cell could be, user sets them */
517 short savedpossible[9][9]; /* cached copy of possible cell values */ 502 short savedpossible[9][9]; /* cached copy of possible cell values */
518#endif 503#endif
diff --git a/apps/plugins/text_viewer/tv_button.h b/apps/plugins/text_viewer/tv_button.h
index dea87ebd52..cf3a2b777e 100644
--- a/apps/plugins/text_viewer/tv_button.h
+++ b/apps/plugins/text_viewer/tv_button.h
@@ -545,6 +545,18 @@
545#define TV_LINE_DOWN BUTTON_OPTION 545#define TV_LINE_DOWN BUTTON_OPTION
546#define TV_BOOKMARK (BUTTON_OPTION | BUTTON_PLAY) 546#define TV_BOOKMARK (BUTTON_OPTION | BUTTON_PLAY)
547 547
548#elif CONFIG_KEYPAD == EROSQ_PAD
549#define TV_MENU BUTTON_MENU
550#define TV_SCROLL_UP BUTTON_SCROLL_BACK
551#define TV_SCROLL_DOWN BUTTON_SCROLL_FWD
552#define TV_SCREEN_LEFT BUTTON_PREV
553#define TV_SCREEN_RIGHT BUTTON_NEXT
554#define TV_AUTOSCROLL BUTTON_PLAY
555#define TV_QUIT BUTTON_POWER
556#define TV_BOOKMARK BUTTON_BACK
557#define TV_LINE_UP BUTTON_VOL_UP
558#define TV_LINE_DOWN BUTTON_VOL_DOWN
559
548/* Xuelin 770/770c keys */ 560/* Xuelin 770/770c keys */
549#elif CONFIG_KEYPAD == IHIFI_770_PAD 561#elif CONFIG_KEYPAD == IHIFI_770_PAD
550#define TV_QUIT BUTTON_POWER 562#define TV_QUIT BUTTON_POWER
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index 66ddf03dd8..80e1960fad 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -397,18 +397,7 @@
397#define LABEL_MENU "PLAY" 397#define LABEL_MENU "PLAY"
398#define LABEL_VOLUME "VOL UP/DN" 398#define LABEL_VOLUME "VOL UP/DN"
399 399
400#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) 400#elif (CONFIG_KEYPAD == XDUOO_X3II_PAD) || (CONFIG_KEYPAD == XDUOO_X20_PAD)
401#define VUMETER_QUIT BUTTON_POWER
402#define VUMETER_HELP BUTTON_HOME
403#define VUMETER_MENU BUTTON_PLAY
404#define VUMETER_UP BUTTON_VOL_UP
405#define VUMETER_DOWN BUTTON_VOL_DOWN
406#define LABEL_HELP "HOME"
407#define LABEL_QUIT "POWER"
408#define LABEL_MENU "PLAY"
409#define LABEL_VOLUME "VOL UP/DN"
410
411#elif (CONFIG_KEYPAD == XDUOO_X20_PAD)
412#define VUMETER_QUIT BUTTON_POWER 401#define VUMETER_QUIT BUTTON_POWER
413#define VUMETER_HELP BUTTON_HOME 402#define VUMETER_HELP BUTTON_HOME
414#define VUMETER_MENU BUTTON_PLAY 403#define VUMETER_MENU BUTTON_PLAY
@@ -430,7 +419,7 @@
430#define LABEL_MENU "PLAY" 419#define LABEL_MENU "PLAY"
431#define LABEL_VOLUME "VOL UP/DN" 420#define LABEL_VOLUME "VOL UP/DN"
432 421
433#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 422#elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD)
434#define VUMETER_QUIT BUTTON_POWER 423#define VUMETER_QUIT BUTTON_POWER
435#define VUMETER_HELP BUTTON_HOME 424#define VUMETER_HELP BUTTON_HOME
436#define VUMETER_MENU BUTTON_PLAY 425#define VUMETER_MENU BUTTON_PLAY
@@ -441,15 +430,15 @@
441#define LABEL_MENU "PLAY" 430#define LABEL_MENU "PLAY"
442#define LABEL_VOLUME "VOL UP/DN" 431#define LABEL_VOLUME "VOL UP/DN"
443 432
444#elif (CONFIG_KEYPAD == IHIFI_800_PAD) 433#elif (CONFIG_KEYPAD == EROSQ_PAD)
445#define VUMETER_QUIT BUTTON_POWER 434#define VUMETER_QUIT BUTTON_POWER
446#define VUMETER_HELP BUTTON_HOME 435#define VUMETER_HELP BUTTON_BACK
447#define VUMETER_MENU BUTTON_PLAY 436#define VUMETER_MENU BUTTON_MENU
448#define VUMETER_UP BUTTON_VOL_UP 437#define VUMETER_UP BUTTON_VOL_UP
449#define VUMETER_DOWN BUTTON_VOL_DOWN 438#define VUMETER_DOWN BUTTON_VOL_DOWN
450#define LABEL_HELP "HOME" 439#define LABEL_HELP "BACK"
451#define LABEL_QUIT "POWER" 440#define LABEL_QUIT "POWER"
452#define LABEL_MENU "PLAY" 441#define LABEL_MENU "MENU"
453#define LABEL_VOLUME "VOL UP/DN" 442#define LABEL_VOLUME "VOL UP/DN"
454 443
455#else 444#else
@@ -551,7 +540,7 @@ struct saved_settings {
551 bool analog_minimeters; 540 bool analog_minimeters;
552 bool digital_minimeters; 541 bool digital_minimeters;
553 int analog_decay; 542 int analog_decay;
554 int digital_decay; 543 int digital_decay;
555} vumeter_settings; 544} vumeter_settings;
556 545
557static void reset_settings(void) { 546static void reset_settings(void) {
@@ -561,7 +550,7 @@ static void reset_settings(void) {
561 vumeter_settings.analog_minimeters=true; 550 vumeter_settings.analog_minimeters=true;
562 vumeter_settings.digital_minimeters=false; 551 vumeter_settings.digital_minimeters=false;
563 vumeter_settings.analog_decay=3; 552 vumeter_settings.analog_decay=3;
564 vumeter_settings.digital_decay=0; 553 vumeter_settings.digital_decay=0;
565} 554}
566 555
567static void calc_scales(void) 556static void calc_scales(void)
@@ -639,11 +628,11 @@ static bool vu_meter_menu(void)
639 int selection; 628 int selection;
640 bool menu_quit = false; 629 bool menu_quit = false;
641 bool exit = false; 630 bool exit = false;
642 631
643 MENUITEM_STRINGLIST(menu,"VU Meter Menu",NULL,"Meter Type","Scale", 632 MENUITEM_STRINGLIST(menu,"VU Meter Menu",NULL,"Meter Type","Scale",
644 "Minimeters","Decay Speed","Playback Control", 633 "Minimeters","Decay Speed","Playback Control",
645 "Quit"); 634 "Quit");
646 635
647 static const struct opt_items meter_type_option[2] = { 636 static const struct opt_items meter_type_option[2] = {
648 { "Analog", -1 }, 637 { "Analog", -1 },
649 { "Digital", -1 }, 638 { "Digital", -1 },
@@ -666,7 +655,7 @@ static bool vu_meter_menu(void)
666 rb->set_option("Meter Type", &vumeter_settings.meter_type, INT, 655 rb->set_option("Meter Type", &vumeter_settings.meter_type, INT,
667 meter_type_option, 2, NULL); 656 meter_type_option, 2, NULL);
668 break; 657 break;
669 658
670 case 1: 659 case 1:
671 if(vumeter_settings.meter_type==ANALOG) 660 if(vumeter_settings.meter_type==ANALOG)
672 { 661 {
@@ -679,7 +668,7 @@ static bool vu_meter_menu(void)
679 "dBfs", -1, "Linear", -1, NULL); 668 "dBfs", -1, "Linear", -1, NULL);
680 } 669 }
681 break; 670 break;
682 671
683 case 2: 672 case 2:
684 if(vumeter_settings.meter_type==ANALOG) 673 if(vumeter_settings.meter_type==ANALOG)
685 { 674 {
@@ -692,16 +681,16 @@ static bool vu_meter_menu(void)
692 &vumeter_settings.digital_minimeters); 681 &vumeter_settings.digital_minimeters);
693 } 682 }
694 break; 683 break;
695 684
696 case 3: 685 case 3:
697 if(vumeter_settings.meter_type==ANALOG) 686 if(vumeter_settings.meter_type==ANALOG)
698 { 687 {
699 rb->set_option("Decay Speed", &vumeter_settings.analog_decay, INT, 688 rb->set_option("Decay Speed", &vumeter_settings.analog_decay, INT,
700 decay_speed_option, 7, NULL); 689 decay_speed_option, 7, NULL);
701 } 690 }
702 else 691 else
703 { 692 {
704 rb->set_option("Decay Speed", &vumeter_settings.digital_decay, INT, 693 rb->set_option("Decay Speed", &vumeter_settings.digital_decay, INT,
705 decay_speed_option, 7, NULL); 694 decay_speed_option, 7, NULL);
706 } 695 }
707 break; 696 break;
@@ -779,7 +768,7 @@ static void draw_digital_minimeters(void) {
779 if(8<(num_right_leds)) 768 if(8<(num_right_leds))
780 rb->lcd_mono_bitmap(sound_max_level, 46, half_height+8, 3, 8); 769 rb->lcd_mono_bitmap(sound_max_level, 46, half_height+8, 3, 8);
781 rb->lcd_set_drawmode(DRMODE_SOLID); 770 rb->lcd_set_drawmode(DRMODE_SOLID);
782 771
783#ifdef HAVE_LCD_COLOR 772#ifdef HAVE_LCD_COLOR
784 rb->lcd_set_foreground(screen_foreground); 773 rb->lcd_set_foreground(screen_foreground);
785#endif 774#endif
@@ -880,10 +869,10 @@ static void digital_meter(void) {
880 rb->lcd_set_foreground(LCD_RGBPACK(255, 255 - 23 * i, 0)); 869 rb->lcd_set_foreground(LCD_RGBPACK(255, 255 - 23 * i, 0));
881#endif 870#endif
882 rb->lcd_fillrect((digital_lead + (i*digital_block_width)), 871 rb->lcd_fillrect((digital_lead + (i*digital_block_width)),
883 (half_height + 20), digital_block_width - digital_block_gap, 872 (half_height + 20), digital_block_width - digital_block_gap,
884 digital_block_height); 873 digital_block_height);
885 } 874 }
886 875
887#ifdef HAVE_LCD_COLOR 876#ifdef HAVE_LCD_COLOR
888 rb->lcd_set_foreground(screen_foreground); 877 rb->lcd_set_foreground(screen_foreground);
889#endif 878#endif
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 6cf03dfaff..e4286f35b4 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -362,16 +362,7 @@ CONFIG_KEYPAD == MROBE500_PAD
362#define BTN_QUIT BUTTON_POWER 362#define BTN_QUIT BUTTON_POWER
363#define BTN_STOPRESET (BUTTON_HOME | BUTTON_PWRALT) 363#define BTN_STOPRESET (BUTTON_HOME | BUTTON_PWRALT)
364 364
365#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 365#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
366#define BTN_DIR_UP BUTTON_HOME
367#define BTN_DIR_DOWN BUTTON_OPTION
368#define BTN_DIR_LEFT BUTTON_PREV
369#define BTN_DIR_RIGHT BUTTON_NEXT
370#define BTN_STARTPAUSE BUTTON_PLAY
371#define BTN_QUIT BUTTON_POWER
372#define BTN_STOPRESET (BUTTON_HOME | BUTTON_POWER)
373
374#elif CONFIG_KEYPAD == XDUOO_X20_PAD
375#define BTN_DIR_UP BUTTON_HOME 366#define BTN_DIR_UP BUTTON_HOME
376#define BTN_DIR_DOWN BUTTON_OPTION 367#define BTN_DIR_DOWN BUTTON_OPTION
377#define BTN_DIR_LEFT BUTTON_PREV 368#define BTN_DIR_LEFT BUTTON_PREV
@@ -389,7 +380,7 @@ CONFIG_KEYPAD == MROBE500_PAD
389#define BTN_QUIT BUTTON_POWER 380#define BTN_QUIT BUTTON_POWER
390#define BTN_STOPRESET (BUTTON_HOME | BUTTON_POWER) 381#define BTN_STOPRESET (BUTTON_HOME | BUTTON_POWER)
391 382
392#elif CONFIG_KEYPAD == IHIFI_770_PAD 383#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
393#define BTN_DIR_UP BUTTON_PREV 384#define BTN_DIR_UP BUTTON_PREV
394#define BTN_DIR_DOWN BUTTON_NEXT 385#define BTN_DIR_DOWN BUTTON_NEXT
395#define BTN_DIR_LEFT BUTTON_HOME 386#define BTN_DIR_LEFT BUTTON_HOME
@@ -398,14 +389,14 @@ CONFIG_KEYPAD == MROBE500_PAD
398#define BTN_QUIT BUTTON_POWER 389#define BTN_QUIT BUTTON_POWER
399#define BTN_STOPRESET BUTTON_VOL_UP 390#define BTN_STOPRESET BUTTON_VOL_UP
400 391
401#elif CONFIG_KEYPAD == IHIFI_800_PAD 392#elif CONFIG_KEYPAD == EROSQ_PAD
402#define BTN_DIR_UP BUTTON_PREV 393#define BTN_DIR_UP BUTTON_PREV
403#define BTN_DIR_DOWN BUTTON_NEXT 394#define BTN_DIR_DOWN BUTTON_NEXT
404#define BTN_DIR_LEFT BUTTON_HOME 395#define BTN_DIR_LEFT BUTTON_SCROLL_BACK
405#define BTN_DIR_RIGHT BUTTON_VOL_DOWN 396#define BTN_DIR_RIGHT BUTTON_SCROLL_FWD
406#define BTN_STARTPAUSE BUTTON_PLAY 397#define BTN_STARTPAUSE BUTTON_PLAY
407#define BTN_QUIT BUTTON_POWER 398#define BTN_QUIT BUTTON_POWER
408#define BTN_STOPRESET BUTTON_VOL_UP 399#define BTN_STOPRESET BUTTON_BACK
409 400
410#else 401#else
411#error No keymap defined! 402#error No keymap defined!
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index 94161c683d..f60938e900 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -315,25 +315,7 @@ CONFIG_KEYPAD == MROBE500_PAD
315#define DOWN BUTTON_DOWN 315#define DOWN BUTTON_DOWN
316#define PAUSE BUTTON_SELECT 316#define PAUSE BUTTON_SELECT
317 317
318#elif CONFIG_KEYPAD == XDUOO_X3_PAD 318#elif CONFIG_KEYPAD == XDUOO_X3_PAD || CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
319
320#define QUIT BUTTON_POWER
321#define LEFT BUTTON_PREV
322#define RIGHT BUTTON_NEXT
323#define UP BUTTON_HOME
324#define DOWN BUTTON_OPTION
325#define PAUSE BUTTON_PLAY
326
327#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
328
329#define QUIT BUTTON_POWER
330#define LEFT BUTTON_PREV
331#define RIGHT BUTTON_NEXT
332#define UP BUTTON_HOME
333#define DOWN BUTTON_OPTION
334#define PAUSE BUTTON_PLAY
335
336#elif CONFIG_KEYPAD == XDUOO_X20_PAD
337 319
338#define QUIT BUTTON_POWER 320#define QUIT BUTTON_POWER
339#define LEFT BUTTON_PREV 321#define LEFT BUTTON_PREV
@@ -351,7 +333,7 @@ CONFIG_KEYPAD == MROBE500_PAD
351#define DOWN BUTTON_OPTION 333#define DOWN BUTTON_OPTION
352#define PAUSE BUTTON_PLAY 334#define PAUSE BUTTON_PLAY
353 335
354#elif CONFIG_KEYPAD == IHIFI_770_PAD 336#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
355 337
356#define QUIT BUTTON_POWER 338#define QUIT BUTTON_POWER
357#define LEFT BUTTON_HOME 339#define LEFT BUTTON_HOME
@@ -360,20 +342,16 @@ CONFIG_KEYPAD == MROBE500_PAD
360#define DOWN BUTTON_NEXT 342#define DOWN BUTTON_NEXT
361#define PAUSE BUTTON_PLAY 343#define PAUSE BUTTON_PLAY
362 344
363#elif CONFIG_KEYPAD == IHIFI_800_PAD 345#elif CONFIG_KEYPAD == EROSQ_PAD
364 346
365#define QUIT BUTTON_POWER 347#define QUIT BUTTON_POWER
366#define LEFT BUTTON_HOME 348#define LEFT BUTTON_SCROLL_BACK
367#define RIGHT BUTTON_VOL_DOWN 349#define RIGHT BUTTON_SCROLL_FWD
368#define UP BUTTON_PREV 350#define UP BUTTON_PREV
369#define DOWN BUTTON_NEXT 351#define DOWN BUTTON_NEXT
370#define PAUSE BUTTON_PLAY 352#define PAUSE BUTTON_PLAY
371 353
372#else 354#elif defined(HAVE_TOUCHSCREEN)
373#error No keymap defined!
374#endif
375
376#ifdef HAVE_TOUCHSCREEN
377#ifndef QUIT 355#ifndef QUIT
378#define QUIT BUTTON_TOPLEFT 356#define QUIT BUTTON_TOPLEFT
379#endif 357#endif
@@ -392,6 +370,8 @@ CONFIG_KEYPAD == MROBE500_PAD
392#ifndef PAUSE 370#ifndef PAUSE
393#define PAUSE BUTTON_CENTER 371#define PAUSE BUTTON_CENTER
394#endif 372#endif
373#else
374#error No keymap defined!
395#endif 375#endif
396 376
397#define MOVE_NO 0 /* player movement */ 377#define MOVE_NO 0 /* player movement */
@@ -734,7 +714,7 @@ static void refresh_board (void)
734#else 714#else
735 x = BOARD_X + CUBE_SIZE * BOARD_W - 40; 715 x = BOARD_X + CUBE_SIZE * BOARD_W - 40;
736#endif 716#endif
737 rb->lcd_putsxyf (x, BOARD_Y + CUBE_SIZE * BOARD_H - 8, 717 rb->lcd_putsxyf (x, BOARD_Y + CUBE_SIZE * BOARD_H - 8,
738 (player.lives != 1) ? "%d Lives" : "%d Life", player.lives); 718 (player.lives != 1) ? "%d Lives" : "%d Life", player.lives);
739 719
740#if LCD_DEPTH>=2 720#if LCD_DEPTH>=2
@@ -1160,7 +1140,7 @@ static int xobox_menu_cb(int action,
1160static int xobox_menu(bool ingame) 1140static int xobox_menu(bool ingame)
1161{ 1141{
1162 rb->button_clear_queue(); 1142 rb->button_clear_queue();
1163 1143
1164 int selection = 0; 1144 int selection = 0;
1165 MENUITEM_STRINGLIST(main_menu, "Xobox Menu", xobox_menu_cb, 1145 MENUITEM_STRINGLIST(main_menu, "Xobox Menu", xobox_menu_cb,
1166 "Resume Game", "Start New Game", 1146 "Resume Game", "Start New Game",
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h
index eae20e7976..6c0fac6ddf 100644
--- a/apps/plugins/zxbox/keymaps.h
+++ b/apps/plugins/zxbox/keymaps.h
@@ -266,15 +266,7 @@
266#define ZX_UP BUTTON_HOME 266#define ZX_UP BUTTON_HOME
267#define ZX_DOWN BUTTON_OPTION 267#define ZX_DOWN BUTTON_OPTION
268 268
269#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 269#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
270#define ZX_SELECT BUTTON_PLAY
271#define ZX_MENU BUTTON_POWER
272#define ZX_LEFT BUTTON_PREV
273#define ZX_RIGHT BUTTON_NEXT
274#define ZX_UP BUTTON_HOME
275#define ZX_DOWN BUTTON_OPTION
276
277#elif CONFIG_KEYPAD == XDUOO_X20_PAD
278#define ZX_SELECT BUTTON_PLAY 270#define ZX_SELECT BUTTON_PLAY
279#define ZX_MENU BUTTON_POWER 271#define ZX_MENU BUTTON_POWER
280#define ZX_LEFT BUTTON_PREV 272#define ZX_LEFT BUTTON_PREV
@@ -290,7 +282,7 @@
290#define ZX_UP BUTTON_HOME 282#define ZX_UP BUTTON_HOME
291#define ZX_DOWN BUTTON_OPTION 283#define ZX_DOWN BUTTON_OPTION
292 284
293#elif CONFIG_KEYPAD == IHIFI_770_PAD 285#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
294#define ZX_SELECT BUTTON_PLAY 286#define ZX_SELECT BUTTON_PLAY
295#define ZX_MENU BUTTON_POWER 287#define ZX_MENU BUTTON_POWER
296#define ZX_LEFT BUTTON_HOME 288#define ZX_LEFT BUTTON_HOME
@@ -298,11 +290,11 @@
298#define ZX_UP BUTTON_PREV 290#define ZX_UP BUTTON_PREV
299#define ZX_DOWN BUTTON_NEXT 291#define ZX_DOWN BUTTON_NEXT
300 292
301#elif CONFIG_KEYPAD == IHIFI_800_PAD 293#elif CONFIG_KEYPAD == EROSQ_PAD
302#define ZX_SELECT BUTTON_PLAY 294#define ZX_SELECT BUTTON_PLAY
303#define ZX_MENU BUTTON_POWER 295#define ZX_MENU BUTTON_MENU
304#define ZX_LEFT BUTTON_HOME 296#define ZX_LEFT BUTTON_SCROLL_BACK
305#define ZX_RIGHT BUTTON_VOL_DOWN 297#define ZX_RIGHT BUTTON_SCROLL_FWD
306#define ZX_UP BUTTON_PREV 298#define ZX_UP BUTTON_PREV
307#define ZX_DOWN BUTTON_NEXT 299#define ZX_DOWN BUTTON_NEXT
308 300
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c
index c16c3cd20a..f77ce538d1 100644
--- a/apps/plugins/zxbox/zxbox_keyb.c
+++ b/apps/plugins/zxbox/zxbox_keyb.c
@@ -36,7 +36,7 @@
36 36
37/* TODO: Check keyboard mappings */ 37/* TODO: Check keyboard mappings */
38 38
39#define KBD_SELECT BUTTON_SELECT 39#define KBD_SELECT BUTTON_SELECT
40#define KBD_ABORT BUTTON_PLAY 40#define KBD_ABORT BUTTON_PLAY
41#define KBD_LEFT BUTTON_LEFT 41#define KBD_LEFT BUTTON_LEFT
42#define KBD_RIGHT BUTTON_RIGHT 42#define KBD_RIGHT BUTTON_RIGHT
@@ -257,16 +257,7 @@
257#define KBD_UP BUTTON_HOME 257#define KBD_UP BUTTON_HOME
258#define KBD_DOWN BUTTON_OPTION 258#define KBD_DOWN BUTTON_OPTION
259 259
260#elif CONFIG_KEYPAD == XDUOO_X3II_PAD 260#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
261
262#define KBD_SELECT BUTTON_PLAY
263#define KBD_ABORT BUTTON_POWER
264#define KBD_LEFT BUTTON_PREV
265#define KBD_RIGHT BUTTON_NEXT
266#define KBD_UP BUTTON_HOME
267#define KBD_DOWN BUTTON_OPTION
268
269#elif CONFIG_KEYPAD == XDUOO_X20_PAD
270 261
271#define KBD_SELECT BUTTON_PLAY 262#define KBD_SELECT BUTTON_PLAY
272#define KBD_ABORT BUTTON_POWER 263#define KBD_ABORT BUTTON_POWER
@@ -284,7 +275,7 @@
284#define KBD_UP BUTTON_HOME 275#define KBD_UP BUTTON_HOME
285#define KBD_DOWN BUTTON_OPTION 276#define KBD_DOWN BUTTON_OPTION
286 277
287#elif CONFIG_KEYPAD == IHIFI_770_PAD 278#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
288 279
289#define KBD_SELECT BUTTON_PLAY 280#define KBD_SELECT BUTTON_PLAY
290#define KBD_ABORT BUTTON_POWER 281#define KBD_ABORT BUTTON_POWER
@@ -293,12 +284,12 @@
293#define KBD_UP BUTTON_PREV 284#define KBD_UP BUTTON_PREV
294#define KBD_DOWN BUTTON_NEXT 285#define KBD_DOWN BUTTON_NEXT
295 286
296#elif CONFIG_KEYPAD == IHIFI_800_PAD 287#elif CONFIG_KEYPAD == EROSQ_PAD
297 288
298#define KBD_SELECT BUTTON_PLAY 289#define KBD_SELECT BUTTON_PLAY
299#define KBD_ABORT BUTTON_POWER 290#define KBD_ABORT BUTTON_BACK
300#define KBD_LEFT BUTTON_HOME 291#define KBD_LEFT BUTTON_SCROLL_BACK
301#define KBD_RIGHT BUTTON_VOL_DOWN 292#define KBD_RIGHT BUTTON_SCROLL_FWD
302#define KBD_UP BUTTON_PREV 293#define KBD_UP BUTTON_PREV
303#define KBD_DOWN BUTTON_NEXT 294#define KBD_DOWN BUTTON_NEXT
304 295
@@ -581,7 +572,7 @@ int zx_kbd_input(char* text/*, int buflen*/)
581 } 572 }
582 cur_blink = !cur_blink; 573 cur_blink = !cur_blink;
583 574
584 575
585 /* highlight the key that has focus */ 576 /* highlight the key that has focus */
586 FOR_NB_SCREENS(l) 577 FOR_NB_SCREENS(l)
587 { 578 {
@@ -591,7 +582,7 @@ int zx_kbd_input(char* text/*, int buflen*/)
591 param[l].font_w, param[l].font_h); 582 param[l].font_w, param[l].font_h);
592 rb->screens[l]->set_drawmode(DRMODE_SOLID); 583 rb->screens[l]->set_drawmode(DRMODE_SOLID);
593 } 584 }
594 585
595 FOR_NB_SCREENS(l) 586 FOR_NB_SCREENS(l)
596 rb->screens[l]->update(); 587 rb->screens[l]->update();
597 588
@@ -687,7 +678,7 @@ int zx_kbd_input(char* text/*, int buflen*/)
687 char_screen = 0; 678 char_screen = 0;
688 679
689 /* inserts the selected char */ 680 /* inserts the selected char */
690 681
691 /* find input char */ 682 /* find input char */
692 k = (param[char_screen].page*param[char_screen].lines + 683 k = (param[char_screen].page*param[char_screen].lines +
693 param[char_screen].y)*param[char_screen].max_chars + 684 param[char_screen].y)*param[char_screen].max_chars +
diff --git a/bootloader/SOURCES b/bootloader/SOURCES
index e52c6e782a..849ed17c40 100644
--- a/bootloader/SOURCES
+++ b/bootloader/SOURCES
@@ -76,7 +76,7 @@ show_logo.c
76mpio_hd200_hd300.c 76mpio_hd200_hd300.c
77#elif defined(SONY_NWZ_LINUX) 77#elif defined(SONY_NWZ_LINUX)
78nwz_linux.c 78nwz_linux.c
79#elif defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K) 79#elif defined(HIBY_LINUX) || defined(FIIO_M3K)
80rocker_linux.c 80rocker_linux.c
81#elif defined(RK27_GENERIC) || defined(HM60X) || defined(HM801) \ 81#elif defined(RK27_GENERIC) || defined(HM60X) || defined(HM801) \
82 || defined(MA9) || defined(MA9C) || defined(MA8) || defined(MA8C) \ 82 || defined(MA9) || defined(MA9C) || defined(MA8) || defined(MA8C) \
diff --git a/bootloader/rocker_linux.c b/bootloader/rocker_linux.c
index 4abc88c413..28a1d78487 100644
--- a/bootloader/rocker_linux.c
+++ b/bootloader/rocker_linux.c
@@ -10,6 +10,7 @@
10 * Copyright (C) 2016 by Amaury Pouly 10 * Copyright (C) 2016 by Amaury Pouly
11 * 2018 by Marcin Bukat 11 * 2018 by Marcin Bukat
12 * 2018 by Roman Stolyarov 12 * 2018 by Roman Stolyarov
13 * 2020 by Solomon Peachy
13 * 14 *
14 * Based on Rockbox iriver bootloader by Linus Nielsen Feltzing 15 * Based on Rockbox iriver bootloader by Linus Nielsen Feltzing
15 * and the ipodlinux bootloader by Daniel Palffy and Bernard Leach 16 * and the ipodlinux bootloader by Daniel Palffy and Bernard Leach
@@ -60,6 +61,9 @@
60#define RBFILE "rockbox.x3ii" 61#define RBFILE "rockbox.x3ii"
61#define ICON_NAME bm_hibyicon 62#define ICON_NAME bm_hibyicon
62#define OF_NAME "HIBY PLAYER" 63#define OF_NAME "HIBY PLAYER"
64#define BUTTON_UP BUTTON_OPTION
65#define BUTTON_DOWN BUTTON_HOME
66#define BUTTON_SELECT BUTTON_PLAY
63#include "bitmaps/hibyicon.h" 67#include "bitmaps/hibyicon.h"
64#elif defined(XDUOO_X20) 68#elif defined(XDUOO_X20)
65#define ICON_WIDTH 130 69#define ICON_WIDTH 130
@@ -67,14 +71,30 @@
67#define RBFILE "rockbox.x20" 71#define RBFILE "rockbox.x20"
68#define ICON_NAME bm_hibyicon 72#define ICON_NAME bm_hibyicon
69#define OF_NAME "HIBY PLAYER" 73#define OF_NAME "HIBY PLAYER"
74#define BUTTON_UP BUTTON_OPTION
75#define BUTTON_DOWN BUTTON_HOME
76#define BUTTON_SELECT BUTTON_PLAY
70#include "bitmaps/hibyicon.h" 77#include "bitmaps/hibyicon.h"
71#elif defined(FIIO_M3K) 78#elif defined(FIIO_M3K)
72#define ICON_WIDTH 130 79#define ICON_WIDTH 130
73#define ICON_HEIGHT 130 80#define ICON_HEIGHT 130
74#define RBFILE "rockbox.fiiom3k" 81#define RBFILE "rockbox.fiiom3k"
75#define ICON_NAME bm_fiioicon 82#define ICON_NAME bm_fiioicon
83#define BUTTON_LEFT BUTTON_PREV
84#define BUTTON_RIGHT BUTTON_NEXT
85#define BUTTON_SELECT BUTTON_PLAY
76#define OF_NAME "FIIO PLAYER" 86#define OF_NAME "FIIO PLAYER"
77#include "bitmaps/fiioicon.h" 87#include "bitmaps/fiioicon.h"
88#elif defined(EROS_Q)
89#define ICON_WIDTH 130
90#define ICON_HEIGHT 130
91#define RBFILE "rockbox.erosq"
92#define ICON_NAME bm_hibyicon
93#define OF_NAME "HIBY PLAYER"
94#define BUTTON_UP BUTTON_SCROLL_BACK
95#define BUTTON_DOWN BUTTON_SCROLL_FWD
96#define BUTTON_SELECT BUTTON_PLAY
97#include "bitmaps/hibyicon.h"
78#else 98#else
79#error "must define ICON_WIDTH/HEIGHT" 99#error "must define ICON_WIDTH/HEIGHT"
80#endif 100#endif
@@ -107,21 +127,8 @@
107#error toolsicon has the wrong resolution 127#error toolsicon has the wrong resolution
108#endif 128#endif
109 129
110#ifndef BUTTON_LEFT 130/* If we started ADB, don't immediately boot into USB mode if we plug in. */
111#define BUTTON_LEFT BUTTON_REW 131static int adb_running = 0;
112#endif
113#ifndef BUTTON_RIGHT
114#define BUTTON_RIGHT BUTTON_FF
115#endif
116#ifndef BUTTON_SELECT
117#define BUTTON_SELECT BUTTON_PLAY
118#endif
119#ifndef BUTTON_DOWN
120#define BUTTON_DOWN BUTTON_NEXT
121#endif
122#ifndef BUTTON_UP
123#define BUTTON_UP BUTTON_PREV
124#endif
125 132
126/* return icon y position (x is always centered) */ 133/* return icon y position (x is always centered) */
127static int get_icon_y(void) 134static int get_icon_y(void)
@@ -141,7 +148,6 @@ enum boot_mode
141 BOOT_TOOLS, 148 BOOT_TOOLS,
142 BOOT_OF, 149 BOOT_OF,
143 BOOT_COUNT, 150 BOOT_COUNT,
144 BOOT_USB, /* special */
145 BOOT_STOP, /* power down/suspend */ 151 BOOT_STOP, /* power down/suspend */
146}; 152};
147 153
@@ -199,6 +205,19 @@ static enum boot_mode load_boot_mode(enum boot_mode mode)
199 return mode; 205 return mode;
200} 206}
201 207
208static void mount_storage(int enable)
209{
210 if (enable) {
211 system("/bin/mkdir -p " BASE_DIR);
212 if (system("/bin/mount /dev/mmcblk0 " BASE_DIR))
213 system("/bin/mount /dev/mmcblk0p1 " BASE_DIR);
214 // XXX possibly invoke sys_serv -> "MOUNT:MOUNT:%s %s", blkdev, mntpoint
215 } else {
216 system("/bin/unmount " BASE_DIR);
217 // XXX possibly invoke sys_serv -> "MOUNT:UNMOUNT:%s %s", mntpoint
218 }
219}
220
202static void save_boot_mode(enum boot_mode mode) 221static void save_boot_mode(enum boot_mode mode)
203{ 222{
204 int fd = open(BASE_DIR "/.rockbox/rb_bl_mode.txt", O_RDWR | O_CREAT | O_TRUNC); 223 int fd = open(BASE_DIR "/.rockbox/rb_bl_mode.txt", O_RDWR | O_CREAT | O_TRUNC);
@@ -221,13 +240,12 @@ static enum boot_mode get_boot_mode(void)
221#endif 240#endif
222 while(true) 241 while(true)
223 { 242 {
224 /* on usb detect, return to usb 243 /* on usb detect, immediately boot with last choice */
225 * FIXME this is a hack, we need proper usb detection */ 244 if(!adb_running && power_input_status() & POWER_INPUT_USB_CHARGER)
226 if(power_input_status() & POWER_INPUT_USB_CHARGER)
227 { 245 {
228 /* save last choice */ 246 /* save last choice */
229 save_boot_mode(mode); 247 save_boot_mode(mode);
230 return BOOT_USB; 248 return mode;
231 } 249 }
232 /* inactivity detection */ 250 /* inactivity detection */
233 int timeout = last_activity + get_inactivity_tmo(); 251 int timeout = last_activity + get_inactivity_tmo();
@@ -318,7 +336,7 @@ void error_screen(const char *msg)
318 lcd_update(); 336 lcd_update();
319} 337}
320 338
321int choice_screen(const char *title, bool center, int nr_choices, const char *choices[]) 339int choice_screen(const char *title, bool center, int nr_choices, const char *choices[], int nr_extra, const char *extra[])
322{ 340{
323 int choice = 0; 341 int choice = 0;
324 int max_len = 0; 342 int max_len = 0;
@@ -360,6 +378,14 @@ int choice_screen(const char *title, bool center, int nr_choices, const char *ch
360 line++; 378 line++;
361 } 379 }
362 380
381 lcd_set_foreground(LCD_RGBPACK(255, 201, 0));
382 line++;
383 for (int i = 0 ; i < nr_extra && line < nr_lines ; i++) {
384 sprintf(buf, "%s", extra[i]);
385 display_text_center(top_y + h * line, buf);
386 line++;
387 }
388
363 lcd_update(); 389 lcd_update();
364 390
365 /* wait for a key */ 391 /* wait for a key */
@@ -370,15 +396,15 @@ int choice_screen(const char *title, bool center, int nr_choices, const char *ch
370 if(btn & BUTTON_REPEAT) 396 if(btn & BUTTON_REPEAT)
371 btn &= ~BUTTON_REPEAT; 397 btn &= ~BUTTON_REPEAT;
372 /* play -> stop loop and return mode */ 398 /* play -> stop loop and return mode */
373 if(btn == BUTTON_SELECT || btn == BUTTON_LEFT) 399 if (btn == BUTTON_SELECT)
374 { 400 {
375 free(buf); 401 free(buf);
376 return btn == BUTTON_SELECT ? choice : -1; 402 return btn == BUTTON_SELECT ? choice : -1;
377 } 403 }
378 /* left/right/up/down: change mode */ 404 /* left/right/up/down: change mode */
379 if(btn == BUTTON_UP) 405 if (btn == BUTTON_UP || btn == BUTTON_LEFT)
380 choice = (choice + nr_choices - 1) % nr_choices; 406 choice = (choice + nr_choices - 1) % nr_choices;
381 if(btn == BUTTON_DOWN) 407 if(btn == BUTTON_DOWN || btn == BUTTON_RIGHT)
382 choice = (choice + 1) % nr_choices; 408 choice = (choice + 1) % nr_choices;
383 } 409 }
384} 410}
@@ -437,7 +463,7 @@ void run_script_menu(void)
437 entries[nr_entries++] = strdup(ent->d_name); 463 entries[nr_entries++] = strdup(ent->d_name);
438 } 464 }
439 closedir(dir); 465 closedir(dir);
440 int idx = choice_screen("RUN SCRIPT", false, nr_entries, entries); 466 int idx = choice_screen("RUN SCRIPT", false, nr_entries, entries, 0, NULL);
441 if(idx >= 0) 467 if(idx >= 0)
442 run_file(entries[idx]); 468 run_file(entries[idx]);
443 for(int i = 0; i < nr_entries; i++) 469 for(int i = 0; i < nr_entries; i++)
@@ -455,6 +481,7 @@ static void adb(int start)
455 } 481 }
456 int status; 482 int status;
457 waitpid(pid, &status, 0); 483 waitpid(pid, &status, 0);
484 adb_running = start;
458#if 0 485#if 0
459 if(WIFEXITED(status)) 486 if(WIFEXITED(status))
460 { 487 {
@@ -471,8 +498,11 @@ static void adb(int start)
471 498
472static void tools_screen(void) 499static void tools_screen(void)
473{ 500{
474 const char *choices[] = {"ADB start", "ADB stop", "Run script", "Restart", "Shutdown"}; 501 const char *extra[] = { MODEL_NAME, rbversion };
475 int choice = choice_screen("TOOLS MENU", true, 5, choices); 502 printf("Version: %s\n", rbversion);
503 printf("%s\n", MODEL_NAME);
504 const char *choices[] = {"ADB start", "ADB stop", "Run script", "Remount SD", "Restart", "Shutdown", "Recovery", "Back"};
505 int choice = choice_screen("TOOLS MENU", true, 8, choices, 2, extra);
476 if(choice == 0) 506 if(choice == 0)
477 { 507 {
478 /* run service menu */ 508 /* run service menu */
@@ -492,12 +522,30 @@ static void tools_screen(void)
492 } 522 }
493 else if(choice == 3) 523 else if(choice == 3)
494 { 524 {
495 system_reboot(); 525 mount_storage(false);
526 mount_storage(true);
496 } 527 }
497 else if(choice == 4) 528 else if(choice == 4)
498 { 529 {
530 system_reboot();
531 }
532 else if(choice == 5)
533 {
499 power_off(); 534 power_off();
500 } 535 }
536 else if(choice == 6)
537 {
538 int fd = open("/proc/jz/reset/reset", O_WRONLY);
539 if (fd >= 0) {
540 const char *buf = "recovery\n";
541 write(fd, buf, strlen(buf));
542 close(fd);
543 }
544 }
545 else if (choice == 7)
546 {
547 return;
548 }
501} 549}
502 550
503#if 0 551#if 0
@@ -555,11 +603,13 @@ int main(int argc, char **argv)
555// if(font_id >= 0) 603// if(font_id >= 0)
556// lcd_setfont(font_id); 604// lcd_setfont(font_id);
557 605
606 mount_storage(true);
607
558 /* run all tools menu */ 608 /* run all tools menu */
559 while(true) 609 while(true)
560 { 610 {
561 enum boot_mode mode = get_boot_mode(); 611 enum boot_mode mode = get_boot_mode();
562 if(mode == BOOT_USB || mode == BOOT_OF) 612 if (mode == BOOT_OF)
563 { 613 {
564#if 0 614#if 0
565 fflush(stdout); 615 fflush(stdout);
@@ -567,7 +617,7 @@ int main(int argc, char **argv)
567 close(fileno(stdout)); 617 close(fileno(stdout));
568 close(fileno(stderr)); 618 close(fileno(stderr));
569#endif 619#endif
570 /* for now the only way we have to trigger USB mode it to run the OF */ 620 mount_storage(false);
571 /* boot OF */ 621 /* boot OF */
572 execvp("/usr/bin/hiby_player", argv); 622 execvp("/usr/bin/hiby_player", argv);
573 error_screen("Cannot boot OF"); 623 error_screen("Cannot boot OF");
@@ -580,12 +630,14 @@ int main(int argc, char **argv)
580 else if(mode == BOOT_ROCKBOX) 630 else if(mode == BOOT_ROCKBOX)
581 { 631 {
582 fflush(stdout); 632 fflush(stdout);
633 mount_storage(true);
583 system("/bin/cp " BASE_DIR "/.rockbox/" RBFILE " /tmp"); 634 system("/bin/cp " BASE_DIR "/.rockbox/" RBFILE " /tmp");
635 system("/bin/chmod +x /tmp/" RBFILE);
584 execl("/tmp/" RBFILE, RBFILE, NULL); 636 execl("/tmp/" RBFILE, RBFILE, NULL);
585 printf("execvp failed: %s\n", strerror(errno)); 637 printf("execvp failed: %s\n", strerror(errno));
586 /* fallback to OF in case of failure */ 638 /* fallback to OF in case of failure */
587 error_screen("Cannot boot Rockbox"); 639 error_screen("Cannot boot Rockbox");
588 sleep(5 * HZ); 640 sleep(2 * HZ);
589 } 641 }
590 else 642 else
591 { 643 {
diff --git a/firmware/SOURCES b/firmware/SOURCES
index cbbebbc66f..8bf3d96bdf 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -115,7 +115,7 @@ target/hosted/sonynwz/nvp-nwz.c
115target/hosted/sonynwz/nwz-db.c 115target/hosted/sonynwz/nwz-db.c
116#endif 116#endif
117 117
118#if ((defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K)) && !defined(SIMULATOR)) 118#if ((defined(HIBY_LINUX) || defined(FIIO_M3K)) && !defined(SIMULATOR))
119drivers/lcd-memframe.c 119drivers/lcd-memframe.c
120target/hosted/alsa-controls.c 120target/hosted/alsa-controls.c
121target/hosted/pcm-alsa.c 121target/hosted/pcm-alsa.c
@@ -155,6 +155,14 @@ target/hosted/fiio/system-fiio.c
155target/hosted/fiio/usb-fiio.c 155target/hosted/fiio/usb-fiio.c
156#endif 156#endif
157 157
158#if (defined(EROS_Q)) && !defined(SIMULATOR)
159target/hosted/aigo/button-erosq.c
160target/hosted/aigo/debug-erosq.c
161target/hosted/aigo/power-erosq.c
162target/hosted/aigo/powermgmt-erosq.c
163target/hosted/aigo/usb-erosq.c
164#endif
165
158#if defined(SAMSUNG_YPR0) && !defined(SIMULATOR) 166#if defined(SAMSUNG_YPR0) && !defined(SIMULATOR)
159drivers/adc-as3514.c 167drivers/adc-as3514.c
160#if (CONFIG_RTC == RTC_AS3514) 168#if (CONFIG_RTC == RTC_AS3514)
@@ -513,6 +521,8 @@ drivers/audio/rocker_codec.c
513drivers/audio/xduoolinux_codec.c 521drivers/audio/xduoolinux_codec.c
514#elif defined(HAVE_FIIO_LINUX_CODEC) && !defined(SIMULATOR) 522#elif defined(HAVE_FIIO_LINUX_CODEC) && !defined(SIMULATOR)
515drivers/audio/fiiolinux_codec.c 523drivers/audio/fiiolinux_codec.c
524#elif defined(HAVE_EROSQ_LINUX_CODEC) && !defined(SIMULATOR)
525drivers/audio/erosqlinux_codec.c
516#elif defined(HAVE_SDL_AUDIO) 526#elif defined(HAVE_SDL_AUDIO)
517drivers/audio/sdl.c 527drivers/audio/sdl.c
518 528
diff --git a/firmware/asm/SOURCES b/firmware/asm/SOURCES
index e93f77c770..2b18ea2026 100644
--- a/firmware/asm/SOURCES
+++ b/firmware/asm/SOURCES
@@ -15,8 +15,8 @@ mempcpy.c
15 defined(CREATIVE_ZVx) || defined(SANSA_CONNECT) || defined(SANSA_FUZEPLUS) || \ 15 defined(CREATIVE_ZVx) || defined(SANSA_CONNECT) || defined(SANSA_FUZEPLUS) || \
16 defined(COWON_D2) || defined(MINI2440) || defined(SAMSUNG_YPR0) || \ 16 defined(COWON_D2) || defined(MINI2440) || defined(SAMSUNG_YPR0) || \
17 defined(SAMSUNG_YPR1) || defined(DX50) || defined(DX90) || (defined(MROBE_500) && !defined(LCD_USE_DMA)) || \ 17 defined(SAMSUNG_YPR1) || defined(DX50) || defined(DX90) || (defined(MROBE_500) && !defined(LCD_USE_DMA)) || \
18 defined(CREATIVE_ZEN) || defined(CREATIVE_ZENXFI) || defined(SONY_NWZ_LINUX) || defined(AGPTEK_ROCKER) || \ 18 defined(CREATIVE_ZEN) || defined(CREATIVE_ZENXFI) || defined(SONY_NWZ_LINUX) || defined(HIBY_LINUX) || \
19 defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K)) && \ 19 defined(FIIO_M3K)) && \
20 !defined(SIMULATOR) 20 !defined(SIMULATOR)
21#if LCD_DEPTH >= 24 21#if LCD_DEPTH >= 24
22lcd-as-memframe-24bit.c 22lcd-as-memframe-24bit.c
diff --git a/firmware/drivers/audio/erosqlinux_codec.c b/firmware/drivers/audio/erosqlinux_codec.c
new file mode 100644
index 0000000000..deb3bb4b87
--- /dev/null
+++ b/firmware/drivers/audio/erosqlinux_codec.c
@@ -0,0 +1,181 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 *
11 * Copyright (c) 2018 Marcin Bukat
12 * Copyright (c) 2020 Solomon Peachy
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
18 *
19 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20 * KIND, either express or implied.
21 *
22 ****************************************************************************/
23
24//#define LOGF_ENABLE
25
26#include "config.h"
27#include "audio.h"
28#include "audiohw.h"
29#include "button.h"
30#include "system.h"
31#include "kernel.h"
32#include "panic.h"
33#include "sysfs.h"
34#include "alsa-controls.h"
35#include "pcm-alsa.h"
36#include "pcm_sw_volume.h"
37
38#include "logf.h"
39
40static int fd_hw;
41static int inited = 0;
42
43static long int vol_l_hw = 255;
44static long int vol_r_hw = 255;
45static long int last_ps = 0;
46
47static void hw_open(void)
48{
49 fd_hw = open("/dev/snd/controlC0", O_RDWR);
50 if(fd_hw < 0)
51 panicf("Cannot open '/dev/snd/controlC0'");
52}
53
54static void hw_close(void)
55{
56 close(fd_hw);
57}
58
59void audiohw_mute(int mute)
60{
61 logf("mute %d", mute);
62
63 if(mute)
64 {
65 long int ps0 = 0;
66 alsa_controls_set_ints("Output Port Switch", 1, &ps0);
67 }
68 else
69 {
70 last_ps = 0;
71 erosq_get_outputs();
72 }
73}
74
75int erosq_get_outputs(void) {
76 long int ps = 0; // Muted, if nothing is plugged in!
77
78 int status = 0;
79
80 if (!inited) return ps;
81
82 const char * const sysfs_lo_switch = "/sys/class/switch/lineout/state";
83 const char * const sysfs_hs_switch = "/sys/class/switch/headset/state";
84
85 sysfs_get_int(sysfs_lo_switch, &status);
86 if (status) ps = 1; // lineout
87
88 sysfs_get_int(sysfs_hs_switch, &status);
89 if (status) ps = 2; // headset
90
91 erosq_set_output(ps);
92
93 return ps;
94}
95
96void erosq_set_output(int ps)
97{
98 if (!inited) return;
99
100 if (last_ps != ps)
101 {
102 logf("set out %d/%d", ps, last_ps);
103 /* Output port switch */
104 last_ps = ps;
105 alsa_controls_set_ints("Output Port Switch", 1, &last_ps);
106 audiohw_set_volume(vol_l_hw, vol_r_hw);
107 }
108}
109
110void audiohw_preinit(void)
111{
112 logf("hw preinit");
113 alsa_controls_init();
114 hw_open();
115 audiohw_mute(true); /* Start muted to avoid the POP */
116 inited = 1;
117}
118
119void audiohw_postinit(void)
120{
121 logf("hw postinit");
122 erosq_set_output(erosq_get_outputs()); /* Unmute */
123}
124
125void audiohw_close(void)
126{
127 logf("hw close");
128 inited = 0;
129 hw_close();
130 alsa_controls_close();
131}
132
133void audiohw_set_frequency(int fsel)
134{
135 (void)fsel;
136}
137
138void audiohw_set_volume(int vol_l, int vol_r)
139{
140 logf("hw vol %d %d", vol_l, vol_r);
141
142 long l,r;
143
144 vol_l_hw = vol_l;
145 vol_r_hw = vol_r;
146
147 if (lineout_inserted()) {
148 l = 0;
149 r = 0;
150 } else {
151 l = vol_l_hw;
152 r = vol_r_hw;
153 }
154
155 /* SW volume for <= 1.0 gain, HW at unity, < -740 == MUTE */
156 int sw_volume_l = l <= -740 ? PCM_MUTE_LEVEL : MIN(l, 0);
157 int sw_volume_r = r <= -740 ? PCM_MUTE_LEVEL : MIN(r, 0);
158 pcm_set_master_volume(sw_volume_l, sw_volume_r);
159}
160
161void audiohw_set_lineout_volume(int vol_l, int vol_r)
162{
163 long l,r;
164
165 logf("lo vol %d %d", vol_l, vol_r);
166
167 (void)vol_l;
168 (void)vol_r;
169
170 if (lineout_inserted()) {
171 l = 0;
172 r = 0;
173 } else {
174 l = vol_l_hw;
175 r = vol_r_hw;
176 }
177
178 int sw_volume_l = l <= -740 ? PCM_MUTE_LEVEL : MIN(l, 0);
179 int sw_volume_r = r <= -740 ? PCM_MUTE_LEVEL : MIN(r, 0);
180 pcm_set_master_volume(sw_volume_l, sw_volume_r);
181}
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index 1ff220e403..8a46cbea78 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -226,6 +226,8 @@ struct sound_settings_info
226#include "xduoolinux_codec.h" 226#include "xduoolinux_codec.h"
227#elif defined(HAVE_FIIO_LINUX_CODEC) 227#elif defined(HAVE_FIIO_LINUX_CODEC)
228#include "fiiolinux_codec.h" 228#include "fiiolinux_codec.h"
229#elif defined(HAVE_EROSQ_LINUX_CODEC)
230#include "erosqlinux_codec.h"
229#endif 231#endif
230 232
231/* convert caps into defines */ 233/* convert caps into defines */
diff --git a/firmware/export/config.h b/firmware/export/config.h
index a9753e3cf8..7e8d751090 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -162,6 +162,7 @@
162#define XDUOO_X3II_PAD 69 162#define XDUOO_X3II_PAD 69
163#define XDUOO_X20_PAD 70 163#define XDUOO_X20_PAD 70
164#define FIIO_M3K_PAD 71 164#define FIIO_M3K_PAD 71
165#define EROSQ_PAD 72
165 166
166/* CONFIG_REMOTE_KEYPAD */ 167/* CONFIG_REMOTE_KEYPAD */
167#define H100_REMOTE 1 168#define H100_REMOTE 1
@@ -602,6 +603,8 @@ Lyre prototype 1 */
602#include "config/xduoox20.h" 603#include "config/xduoox20.h"
603#elif defined(FIIO_M3K) 604#elif defined(FIIO_M3K)
604#include "config/fiiom3k.h" 605#include "config/fiiom3k.h"
606#elif defined(EROS_Q)
607#include "config/aigoerosq.h"
605#else 608#else
606//#error "unknown hwardware platform!" 609//#error "unknown hwardware platform!"
607#endif 610#endif
diff --git a/firmware/export/config/agptekrocker.h b/firmware/export/config/agptekrocker.h
index a97522d976..230dc6cac4 100644
--- a/firmware/export/config/agptekrocker.h
+++ b/firmware/export/config/agptekrocker.h
@@ -17,6 +17,7 @@
17#define CONFIG_PLATFORM (PLATFORM_HOSTED) 17#define CONFIG_PLATFORM (PLATFORM_HOSTED)
18#endif 18#endif
19 19
20#define HIBY_LINUX
20#define HAVE_FPU 21#define HAVE_FPU
21 22
22/* define this if you have a colour LCD */ 23/* define this if you have a colour LCD */
diff --git a/firmware/export/config/aigoerosq.h b/firmware/export/config/aigoerosq.h
new file mode 100644
index 0000000000..9207b5548f
--- /dev/null
+++ b/firmware/export/config/aigoerosq.h
@@ -0,0 +1,132 @@
1/*
2 * This config file is for the AIGO EROS Q / EROS K (and its clones)
3 */
4
5/* For Rolo and boot loader */
6#define MODEL_NUMBER 113
7
8#define MODEL_NAME "AIGO Eros Q"
9
10/* LCD dimensions */
11#define LCD_WIDTH 320
12#define LCD_HEIGHT 240
13/* sqrt(240^2 + 320^2) / 2.0 = 200 */
14#define LCD_DPI 200
15
16#ifndef SIMULATOR
17#define CONFIG_PLATFORM (PLATFORM_HOSTED)
18#endif
19
20#define HIBY_LINUX
21#define HAVE_FPU
22
23/* define this if you have a colour LCD */
24#define HAVE_LCD_COLOR
25
26#define HAVE_LCD_ENABLE
27
28/* Define this if the LCD can shut down */
29#define HAVE_LCD_SHUTDOWN
30
31/* define this if you want album art for this target */
32#define HAVE_ALBUMART
33
34/* define this to enable bitmap scaling */
35#define HAVE_BMP_SCALING
36
37/* define this to enable JPEG decoding */
38#define HAVE_JPEG
39
40/* define this if you have access to the quickscreen */
41#define HAVE_QUICKSCREEN
42
43/* define this if you would like tagcache to build on this target */
44#define HAVE_TAGCACHE
45
46#define LCD_DEPTH 32
47/* Check that but should not matter */
48#define LCD_PIXELFORMAT XRGB8888
49
50#define HAVE_BACKLIGHT
51#define HAVE_BACKLIGHT_BRIGHTNESS
52
53/* Main LCD backlight brightness range and defaults: the backlight driver
54 * has levels from 0 to 255. But 0 is off so start at 1.
55 */
56#define MIN_BRIGHTNESS_SETTING 1
57#define MAX_BRIGHTNESS_SETTING 255
58#define BRIGHTNESS_STEP 5
59#define DEFAULT_BRIGHTNESS_SETTING 70
60
61/* Which backlight fading type? */
62#define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_SETTING
63
64/* define this if you have a real-time clock */
65#define CONFIG_RTC APPLICATION
66
67/* The number of bytes reserved for loadable codecs */
68#define CODEC_SIZE 0x80000
69
70/* The number of bytes reserved for loadable plugins */
71#define PLUGIN_BUFFER_SIZE 0x100000
72
73#define HAVE_HEADPHONE_DETECTION
74#define HAVE_LINEOUT_DETECTION
75
76/* KeyPad configuration for plugins */
77#define CONFIG_KEYPAD EROSQ_PAD
78
79/* define this if the target has volume keys which can be used in the lists */
80#define HAVE_VOLUME_IN_LIST
81
82#ifndef SIMULATOR
83/* We have usb power and can detect usb but it is handled by Linux */
84#define HAVE_USB_POWER
85
86#endif
87
88#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE
89
90/* Linux controlls charging, we can monitor */
91#define CONFIG_CHARGING CHARGING_MONITOR
92
93/* define this if the hardware can be powered off while charging */
94#define HAVE_POWEROFF_WHILE_CHARGING
95
96/* same dimensions as gigabeats */
97#define CONFIG_LCD LCD_INGENIC_LINUX
98
99/* Define this if you have a software controlled poweroff */
100#define HAVE_SW_POWEROFF
101
102/* Define this to the CPU frequency */
103#define CPU_FREQ 108000000
104
105/* No special storage */
106#define CONFIG_STORAGE STORAGE_HOSTFS
107#define HAVE_STORAGE_FLUSH
108
109/* Battery */
110#define BATTERY_TYPES_COUNT 1
111
112/* Audio codec */
113#define HAVE_EROSQ_LINUX_CODEC
114/* Rockbox has to handle the volume level */
115#define HAVE_SW_VOLUME_CONTROL
116
117/* We don't have hardware controls */
118#define HAVE_SW_TONE_CONTROLS
119
120/* HW codec is flexible */
121#define HW_SAMPR_CAPS SAMPR_CAP_ALL_192
122
123/* Battery */
124#define BATTERY_CAPACITY_DEFAULT 2000 /* default battery capacity */
125#define BATTERY_CAPACITY_MIN 2000 /* min. capacity selectable */
126#define BATTERY_CAPACITY_MAX 2000 /* max. capacity selectable */
127#define BATTERY_CAPACITY_INC 0 /* capacity increment */
128
129/* ROLO */
130#define BOOTFILE_EXT "erosq"
131#define BOOTFILE "rockbox." BOOTFILE_EXT
132#define BOOTDIR "/.rockbox"
diff --git a/firmware/export/config/fiiom3k.h b/firmware/export/config/fiiom3k.h
index 5b68f3738e..88652b633f 100644
--- a/firmware/export/config/fiiom3k.h
+++ b/firmware/export/config/fiiom3k.h
@@ -17,6 +17,8 @@
17#define CONFIG_PLATFORM (PLATFORM_HOSTED) 17#define CONFIG_PLATFORM (PLATFORM_HOSTED)
18#endif 18#endif
19 19
20#define HAVE_FPU
21
20#define HW_SAMPR_CAPS (SAMPR_CAP_44 | SAMPR_CAP_48 | SAMPR_CAP_88 | SAMPR_CAP_96 | SAMPR_CAP_176 | SAMPR_CAP_192) 22#define HW_SAMPR_CAPS (SAMPR_CAP_44 | SAMPR_CAP_48 | SAMPR_CAP_88 | SAMPR_CAP_96 | SAMPR_CAP_176 | SAMPR_CAP_192)
21 23
22/* define this if you have a bitmap LCD display */ 24/* define this if you have a bitmap LCD display */
diff --git a/firmware/export/config/xduoox20.h b/firmware/export/config/xduoox20.h
index a8d2175719..70e6131cb7 100644
--- a/firmware/export/config/xduoox20.h
+++ b/firmware/export/config/xduoox20.h
@@ -17,6 +17,8 @@
17#define CONFIG_PLATFORM (PLATFORM_HOSTED) 17#define CONFIG_PLATFORM (PLATFORM_HOSTED)
18#endif 18#endif
19 19
20#define HIBY_LINUX
21
20#define HAVE_FPU 22#define HAVE_FPU
21 23
22/* define this if you have a colour LCD */ 24/* define this if you have a colour LCD */
diff --git a/firmware/export/config/xduoox3ii.h b/firmware/export/config/xduoox3ii.h
index 143d4442fd..d19165114a 100644
--- a/firmware/export/config/xduoox3ii.h
+++ b/firmware/export/config/xduoox3ii.h
@@ -17,6 +17,7 @@
17#define CONFIG_PLATFORM (PLATFORM_HOSTED) 17#define CONFIG_PLATFORM (PLATFORM_HOSTED)
18#endif 18#endif
19 19
20#define HIBY_LINUX
20#define HAVE_FPU 21#define HAVE_FPU
21 22
22/* define this if you have a colour LCD */ 23/* define this if you have a colour LCD */
diff --git a/firmware/export/erosqlinux_codec.h b/firmware/export/erosqlinux_codec.h
new file mode 100644
index 0000000000..8a3afbfe3c
--- /dev/null
+++ b/firmware/export/erosqlinux_codec.h
@@ -0,0 +1,13 @@
1#ifndef __EROSQLINUX_CODEC__
2#define __EROSQLINUX_CODEC__
3
4#define AUDIOHW_CAPS (LINEOUT_CAP)
5
6AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -25)
7
8
9void audiohw_mute(int mute);
10void erosq_set_output(int ps);
11int erosq_get_outputs(void);
12
13#endif
diff --git a/firmware/export/rbpaths.h b/firmware/export/rbpaths.h
index 6b686eec0e..215b4c0c4b 100644
--- a/firmware/export/rbpaths.h
+++ b/firmware/export/rbpaths.h
@@ -42,7 +42,7 @@
42 42
43#if !defined(APPLICATION) || defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || \ 43#if !defined(APPLICATION) || defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || \
44 defined(DX50) || defined(DX90) || defined(SONY_NWZ_LINUX) || \ 44 defined(DX50) || defined(DX90) || defined(SONY_NWZ_LINUX) || \
45 defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K) 45 defined(HIBY_LINUX) || defined(FIIO_M3K)
46 46
47#if defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) 47#if defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1)
48#define HOME_DIR "/mnt/media0" 48#define HOME_DIR "/mnt/media0"
@@ -51,7 +51,7 @@
51#elif defined(DX50) || defined(DX90) 51#elif defined(DX50) || defined(DX90)
52/* Where to put save files like recordings, playlists, screen dumps ...*/ 52/* Where to put save files like recordings, playlists, screen dumps ...*/
53#define HOME_DIR "/mnt/sdcard" 53#define HOME_DIR "/mnt/sdcard"
54#elif defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) 54#elif defined(HIBY_LINUX)
55#define HOME_DIR "/mnt/sd_0" 55#define HOME_DIR "/mnt/sd_0"
56#elif defined(FIIO_M3K) 56#elif defined(FIIO_M3K)
57#define HOME_DIR "/mnt" 57#define HOME_DIR "/mnt"
@@ -92,7 +92,7 @@
92#define VIEWERS_DIR PLUGIN_DIR "/viewers" 92#define VIEWERS_DIR PLUGIN_DIR "/viewers"
93 93
94#if defined(APPLICATION) && !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || \ 94#if defined(APPLICATION) && !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || \
95 defined(DX50) || defined(DX90) || defined(SONY_NWZ_LINUX) || defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20)) 95 defined(DX50) || defined(DX90) || defined(SONY_NWZ_LINUX) || defined(HIBY_LINUX))
96#define PLUGIN_DATA_DIR ROCKBOX_DIR "/rocks.data" 96#define PLUGIN_DATA_DIR ROCKBOX_DIR "/rocks.data"
97#define PLUGIN_GAMES_DATA_DIR PLUGIN_DATA_DIR 97#define PLUGIN_GAMES_DATA_DIR PLUGIN_DATA_DIR
98#define PLUGIN_APPS_DATA_DIR PLUGIN_DATA_DIR 98#define PLUGIN_APPS_DATA_DIR PLUGIN_DATA_DIR
diff --git a/firmware/export/system.h b/firmware/export/system.h
index cfec235bc4..1885acfffd 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -347,7 +347,7 @@ static inline void cpu_boost_unlock(void)
347#ifndef SIMULATOR 347#ifndef SIMULATOR
348bool dbg_ports(void); 348bool dbg_ports(void);
349#endif 349#endif
350#if (CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SONY_NWZ_LINUX) || defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) 350#if (CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SONY_NWZ_LINUX) || defined(HIBY_LINUX) || defined(FIIO_M3K)
351bool dbg_hw_info(void); 351bool dbg_hw_info(void);
352#endif 352#endif
353 353
diff --git a/firmware/font.c b/firmware/font.c
index 3208125a6a..b2ac1a3c3c 100644
--- a/firmware/font.c
+++ b/firmware/font.c
@@ -85,7 +85,7 @@
85/* compiled-in font */ 85/* compiled-in font */
86extern struct font sysfont; 86extern struct font sysfont;
87 87
88#if !defined(BOOTLOADER) || defined(SONY_NWZ_LINUX) 88#if !defined(BOOTLOADER) || defined(SONY_NWZ_LINUX) || defined(HIBY_LINUX) || defined(FIIO_M3K)
89 89
90struct buflib_alloc_data { 90struct buflib_alloc_data {
91 struct font font; /* must be the first member! */ 91 struct font font; /* must be the first member! */
diff --git a/firmware/target/hosted/aigo/adc-target.h b/firmware/target/hosted/aigo/adc-target.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/firmware/target/hosted/aigo/adc-target.h
diff --git a/firmware/target/hosted/aigo/button-erosq.c b/firmware/target/hosted/aigo/button-erosq.c
new file mode 100644
index 0000000000..2735c48c71
--- /dev/null
+++ b/firmware/target/hosted/aigo/button-erosq.c
@@ -0,0 +1,188 @@
1/***************************************************************************
2 * __________ __ ___
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2017 Marcin Bukat
10 * Copyright (C) 2020 Solomon Peachy
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#include <poll.h>
22//#include <dir.h>
23#include <errno.h>
24#include <unistd.h>
25#include <sys/types.h>
26#include <linux/input.h>
27#include <fcntl.h>
28#include <string.h>
29#include <stdlib.h>
30
31#include "sysfs.h"
32#include "button.h"
33#include "button-target.h"
34#include "panic.h"
35
36#include "kernel.h"
37#include "backlight.h"
38#include "backlight-target.h"
39#include "erosqlinux_codec.h"
40
41#define NR_POLL_DESC 3
42static struct pollfd poll_fds[NR_POLL_DESC];
43
44static int button_map(int keycode)
45{
46 switch(keycode)
47 {
48 case KEY_POWER:
49 return BUTTON_POWER;
50
51 case KEY_MENU:
52 return BUTTON_MENU;
53
54 case KEY_BACK:
55 return BUTTON_BACK;
56
57 case KEY_NEXTSONG:
58 return BUTTON_PREV;
59
60 case KEY_PREVIOUSSONG:
61 return BUTTON_NEXT; // Yes, backwards!
62
63 case KEY_PLAYPAUSE:
64 return BUTTON_PLAY;
65
66 case KEY_LEFT:
67 return BUTTON_SCROLL_BACK;
68
69 case KEY_RIGHT:
70 return BUTTON_SCROLL_FWD;
71
72 case KEY_VOLUMEUP:
73 return BUTTON_VOL_UP;
74
75 case KEY_VOLUMEDOWN:
76 return BUTTON_VOL_DOWN;
77
78 default:
79 return 0;
80 }
81}
82
83void button_init_device(void)
84{
85 const char * const input_devs[] = {
86 "/dev/input/event0", // Rotary encoder
87 "/dev/input/event1" // Keys
88 };
89
90 for(int i = 0; i < NR_POLL_DESC; i++)
91 {
92 int fd = open(input_devs[i], O_RDWR | O_CLOEXEC);
93
94 if(fd < 0)
95 {
96 panicf("Cannot open input device: %s\n", input_devs[i]);
97 }
98
99 poll_fds[i].fd = fd;
100 poll_fds[i].events = POLLIN;
101 poll_fds[i].revents = 0;
102 }
103}
104
105int button_read_device(void)
106{
107 static int button_bitmap = 0;
108 struct input_event event;
109
110 // FIXME TODO: Make this work via HAVE_SCROLL_WHEEL instead
111
112 /* Wheel gives us press+release back to back, clear them after time elapses */
113 static long last_tick = 0;
114 if (button_bitmap & (BUTTON_SCROLL_BACK|BUTTON_SCROLL_FWD) &&
115 current_tick - last_tick >= 2)
116 {
117 button_bitmap &= ~(BUTTON_SCROLL_BACK|BUTTON_SCROLL_FWD);
118 }
119
120 /* check if there are any events pending and process them */
121 while(poll(poll_fds, NR_POLL_DESC, 0))
122 {
123 for(int i = 0; i < NR_POLL_DESC; i++)
124 {
125 /* read only if non-blocking */
126 if(poll_fds[i].revents & POLLIN)
127 {
128 int size = read(poll_fds[i].fd, &event, sizeof(event));
129 if(size == (int)sizeof(event))
130 {
131 int keycode = event.code;
132 /* event.value == 1 means press
133 * event.value == 0 means release
134 */
135 bool press = event.value ? true : false;
136
137 /* map linux event code to rockbox button bitmap */
138 if(press)
139 {
140 int bmap = button_map(keycode);
141 if (bmap & (BUTTON_SCROLL_BACK|BUTTON_SCROLL_FWD))
142 last_tick = current_tick;
143 button_bitmap |= bmap;
144 }
145 else
146 {
147 /* Wheel gives us press+release back to back; ignore the release */
148 int bmap = button_map(keycode) & ~(BUTTON_SCROLL_BACK|BUTTON_SCROLL_FWD);
149 button_bitmap &= ~bmap;
150 }
151 }
152 }
153 }
154 }
155
156 return button_bitmap;
157}
158
159bool headphones_inserted(void)
160{
161#ifdef BOOTLOADER
162 int ps = 0;
163#else
164 int ps = erosq_get_outputs();
165#endif
166
167 return (ps == 2);
168}
169
170bool lineout_inserted(void)
171{
172#ifdef BOOTLOADER
173 int ps = 0;
174#else
175 int ps = erosq_get_outputs();
176#endif
177
178 return (ps == 1);
179}
180
181void button_close_device(void)
182{
183 /* close descriptors */
184 for(int i = 0; i < NR_POLL_DESC; i++)
185 {
186 close(poll_fds[i].fd);
187 }
188}
diff --git a/firmware/target/hosted/aigo/button-target.h b/firmware/target/hosted/aigo/button-target.h
new file mode 100644
index 0000000000..f59f491d2f
--- /dev/null
+++ b/firmware/target/hosted/aigo/button-target.h
@@ -0,0 +1,45 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2020 Solomon Peachy
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20#ifndef _BUTTON_TARGET_H_
21#define _BUTTON_TARGET_H_
22
23/* Main unit's buttons */
24#define BUTTON_POWER 0x00000001
25#define BUTTON_MENU 0x00000002
26#define BUTTON_BACK 0x00000004
27#define BUTTON_PLAY 0x00000008
28#define BUTTON_NEXT 0x00000010
29#define BUTTON_PREV 0x00000020
30#define BUTTON_VOL_UP 0x00000040
31#define BUTTON_VOL_DOWN 0x00000080
32#define BUTTON_SCROLL_BACK 0x00000100
33#define BUTTON_SCROLL_FWD 0x00000200
34
35#define BUTTON_MAIN (BUTTON_POWER | BUTTON_MENU | BUTTON_BACK | BUTTON_PREV | \
36 BUTTON_NEXT | BUTTON_PLAY | BUTTON_VOL_UP | BUTTON_VOL_DOWN | BUTTON_SCROLL_BACK | BUTTON_SCROLL_FWD)
37
38#define BUTTON_LEFT BUTTON_PREV
39#define BUTTON_RIGHT BUTTON_NEXT
40
41/* Software power-off */
42#define POWEROFF_BUTTON BUTTON_POWER
43#define POWEROFF_COUNT 25
44
45#endif /* _BUTTON_TARGET_H_ */
diff --git a/firmware/target/hosted/aigo/debug-erosq.c b/firmware/target/hosted/aigo/debug-erosq.c
new file mode 100644
index 0000000000..9812b8f8b9
--- /dev/null
+++ b/firmware/target/hosted/aigo/debug-erosq.c
@@ -0,0 +1 @@
#include "../agptek/debug-agptek.c"
diff --git a/firmware/target/hosted/aigo/erosq.make b/firmware/target/hosted/aigo/erosq.make
new file mode 100644
index 0000000000..d159db77f3
--- /dev/null
+++ b/firmware/target/hosted/aigo/erosq.make
@@ -0,0 +1,49 @@
1# __________ __ ___.
2# Open \______ \ ____ ____ | | _\_ |__ _______ ___
3# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
4# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
5# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
6# \/ \/ \/ \/ \/
7# $Id$
8#
9
10INCLUDES += -I$(FIRMDIR)/include -I$(FIRMDIR)/export $(TARGET_INC) -I$(BUILDDIR) -I$(APPSDIR)
11
12SIMFLAGS += $(INCLUDES) $(DEFINES) -DHAVE_CONFIG_H $(GCCOPTS)
13
14# bootloader build is sligtly different
15ifneq (,$(findstring bootloader,$(APPSDIR)))
16
17SRC += $(call preprocess, $(APPSDIR)/SOURCES)
18CLEANOBJS += $(BUILDDIR)/bootloader.*
19
20endif #bootloader
21
22.SECONDEXPANSION: # $$(OBJ) is not populated until after this
23
24ifneq (,$(findstring bootloader,$(APPSDIR)))
25# bootloader build
26
27$(BUILDDIR)/bootloader.elf : $$(OBJ) $(FIRMLIB) $(CORE_LIBS)
28 $(call PRINTS,LD $(@F))$(CC) $(GCCOPTS) -Os -o $@ $(OBJ) \
29 -L$(BUILDDIR)/firmware -lfirmware \
30 -L$(BUILDDIR)/lib $(call a2lnk,$(CORE_LIBS)) \
31 $(LDOPTS) $(GLOBAL_LDOPTS) -Wl,--gc-sections -Wl,-Map,$(BUILDDIR)/bootloader.map
32
33$(BUILDDIR)/$(BINARY): $(BUILDDIR)/bootloader.elf
34 $(call PRINTS,OC $(@F))$(call objcopy,$^,$@)
35
36else
37# rockbox app build
38
39$(BUILDDIR)/rockbox.elf : $$(OBJ) $(FIRMLIB) $(VOICESPEEXLIB) $(CORE_LIBS)
40 $(call PRINTS,LD $(@F))$(CC) $(GCCOPTS) -Os -o $@ $(OBJ) \
41 -L$(BUILDDIR)/firmware -lfirmware \
42 -L$(RBCODEC_BLD)/codecs $(call a2lnk, $(VOICESPEEXLIB)) \
43 -L$(BUILDDIR)/lib $(call a2lnk,$(CORE_LIBS)) \
44 $(LDOPTS) $(GLOBAL_LDOPTS) -Wl,-Map,$(BUILDDIR)/rockbox.map
45
46$(BUILDDIR)/$(BINARY): $(BUILDDIR)/rockbox.elf
47 $(call PRINTS,OC $(@F))$(call objcopy,$^,$@)
48
49endif
diff --git a/firmware/target/hosted/aigo/lcd-target.h b/firmware/target/hosted/aigo/lcd-target.h
new file mode 100644
index 0000000000..808df3c60a
--- /dev/null
+++ b/firmware/target/hosted/aigo/lcd-target.h
@@ -0,0 +1,32 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2016 Amaury Pouly
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20
21#ifndef __LCD_TARGET_H__
22#define __LCD_TARGET_H__
23
24/* needs special ioctl() to redraw updated framebuffer content */
25#define LCD_OPTIMIZED_UPDATE
26#define LCD_OPTIMIZED_UPDATE_RECT
27
28extern fb_data *framebuffer; /* see lcd-erosq.c */
29#define LCD_FRAMEBUF_ADDR(col, row) (framebuffer + (row)*LCD_WIDTH + (col))
30
31extern void lcd_set_active(bool active);
32#endif /* __LCD_TARGET_H__ */
diff --git a/firmware/target/hosted/aigo/power-erosq.c b/firmware/target/hosted/aigo/power-erosq.c
new file mode 100644
index 0000000000..0a4f820337
--- /dev/null
+++ b/firmware/target/hosted/aigo/power-erosq.c
@@ -0,0 +1,74 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2017 by Marcin Bukat
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20#include <sys/types.h>
21#include <fcntl.h>
22#include <string.h>
23#include <unistd.h>
24#include <stdio.h>
25
26#include "system.h"
27#include "power-erosq.h"
28#include "power.h"
29#include "panic.h"
30#include "sysfs.h"
31
32const char * const sysfs_bat_voltage =
33 "/sys/class/power_supply/battery/voltage_now";
34
35const char * const sysfs_bat_capacity =
36 "/sys/class/power_supply/battery/capacity";
37
38const char * const sysfs_bat_status =
39 "/sys/class/power_supply/battery/status";
40
41const char * const sysfs_pow_supply =
42 "/sys/class/power_supply/usb/present";
43
44unsigned int erosq_power_input_status(void)
45{
46 int present = 0;
47 sysfs_get_int(sysfs_pow_supply, &present);
48
49 return present ? POWER_INPUT_USB_CHARGER : POWER_INPUT_NONE;
50}
51
52bool erosq_power_charging_status(void)
53{
54 char buf[12] = {0};
55 sysfs_get_string(sysfs_bat_status, buf, sizeof(buf));
56
57 return (strncmp(buf, "Charging", 8) == 0);
58}
59
60unsigned int erosq_power_get_battery_voltage(void)
61{
62 int battery_voltage;
63 sysfs_get_int(sysfs_bat_voltage, &battery_voltage);
64
65 return battery_voltage/1000;
66}
67
68unsigned int erosq_power_get_battery_capacity(void)
69{
70 int battery_capacity;
71 sysfs_get_int(sysfs_bat_capacity, &battery_capacity);
72
73 return battery_capacity;
74}
diff --git a/firmware/target/hosted/aigo/power-erosq.h b/firmware/target/hosted/aigo/power-erosq.h
new file mode 100644
index 0000000000..d06b956924
--- /dev/null
+++ b/firmware/target/hosted/aigo/power-erosq.h
@@ -0,0 +1,31 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2017 by Marcin Bukat
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20#ifndef _POWER_XDUOO_H_
21#define _POWER_XDUOO_H_
22
23#include <stdbool.h>
24#include "config.h"
25
26unsigned int erosq_power_input_status(void);
27bool erosq_power_charging_status(void);
28unsigned int erosq_power_get_battery_voltage(void);
29unsigned int erosq_power_get_battery_capacity(void);
30#endif /* _POWER_XDUOO_H_ */
31
diff --git a/firmware/target/hosted/aigo/powermgmt-erosq.c b/firmware/target/hosted/aigo/powermgmt-erosq.c
new file mode 100644
index 0000000000..14286de3fd
--- /dev/null
+++ b/firmware/target/hosted/aigo/powermgmt-erosq.c
@@ -0,0 +1,61 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2017 Marcin Bukat
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20#include "powermgmt.h"
21#include "power.h"
22#include "power-erosq.h"
23
24const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] =
25{
26 3470
27};
28
29/* the OF shuts down at this voltage */
30const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
31{
32 3400
33};
34
35/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
36const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
37{
38 { 3400, 3639, 3697, 3723, 3757, 3786, 3836, 3906, 3980, 4050, 4159 }
39};
40
41/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
42const unsigned short const percent_to_volt_charge[11] =
43{
44 3485, 3780, 3836, 3857, 3890, 3930, 3986, 4062, 4158, 4185, 4196
45};
46
47unsigned int power_input_status(void)
48{
49 /* POWER_INPUT_USB_CHARGER, POWER_INPUT_NONE */
50 return erosq_power_input_status();
51}
52
53int _battery_voltage(void)
54{
55 return erosq_power_get_battery_voltage();
56}
57
58bool charging_state(void)
59{
60 return erosq_power_charging_status();
61}
diff --git a/firmware/target/hosted/aigo/system-target.h b/firmware/target/hosted/aigo/system-target.h
new file mode 100644
index 0000000000..830f19fde4
--- /dev/null
+++ b/firmware/target/hosted/aigo/system-target.h
@@ -0,0 +1,28 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2017 Marcin Bukat
10 * Copyright (C) 2016 Amaury Pouly
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_TARGET_H__
22#define __SYSTEM_TARGET_H__
23
24#include "kernel-unix.h"
25#include "system-hosted.h"
26
27#define NEED_GENERIC_BYTESWAPS
28#endif /* __SYSTEM_TARGET_H__ */
diff --git a/firmware/target/hosted/aigo/usb-erosq.c b/firmware/target/hosted/aigo/usb-erosq.c
new file mode 100644
index 0000000000..2a3acf4d62
--- /dev/null
+++ b/firmware/target/hosted/aigo/usb-erosq.c
@@ -0,0 +1,118 @@
1/***************************************************************************
2 * __________ __ ___
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2018 by Marcin Bukat
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20
21#include <stdlib.h>
22#include <sys/mount.h>
23#include <string.h>
24#include "config.h"
25#include "disk.h"
26#include "usb.h"
27#include "sysfs.h"
28#include "power.h"
29#include "power-erosq.h"
30
31static bool adb_mode = false;
32
33/* TODO: implement usb detection properly */
34int usb_detect(void)
35{
36 return power_input_status() == POWER_INPUT_USB_CHARGER ? USB_INSERTED : USB_EXTRACTED;
37}
38
39void usb_enable(bool on)
40{
41 /* Ignore usb enable/disable when ADB is enabled so we can fireup adb shell
42 * without entering ums mode
43 */
44 if (!adb_mode)
45 {
46 sysfs_set_int("/sys/class/android_usb/android0/enable", on ? 1 : 0);
47 }
48}
49
50/* This is called by usb thread after usb extract in order to return
51 * regular FS access
52 *
53 * returns the # of successful mounts
54*/
55int disk_mount_all(void)
56{
57 const char *dev[] = {"/dev/mmcblk0p1", "/dev/mmcblk0"};
58 const char *fs[] = {"vfat", "exfat"};
59
60 sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/lun/file", "");
61
62 for (int i=0; i<2; i++)
63 {
64 for (int j=0; j<2; j++)
65 {
66 if (mount(dev[i], "/mnt/sd_0", fs[j], 0, NULL) == 0)
67 {
68 return 1;
69 }
70 }
71 }
72
73 return 0;
74}
75
76/* This is called by usb thread after all threads ACKs usb inserted message
77 *
78 * returns the # of successful unmounts
79 */
80int disk_unmount_all(void)
81{
82 if (umount("/mnt/sd_0") == 0)
83 {
84 sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/lun/file", "/dev/mmcblk0");
85 return 1;
86 }
87
88 return 0;
89}
90
91void usb_init_device(void)
92{
93 char functions[32] = {0};
94
95 /* Check if ADB was activated in bootloader */
96 sysfs_get_string("/sys/class/android_usb/android0/functions", functions, sizeof(functions));
97 adb_mode = (strstr(functions, "adb") == NULL) ? false : true;
98
99 usb_enable(false);
100
101 if (adb_mode)
102 {
103 sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage,adb");
104 sysfs_set_string("/sys/class/android_usb/android0/idVendor", "18D1");
105 sysfs_set_string("/sys/class/android_usb/android0/idProduct", "D002");
106 }
107 else
108 {
109 sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage");
110 sysfs_set_string("/sys/class/android_usb/android0/idVendor", "C502");
111 sysfs_set_string("/sys/class/android_usb/android0/idProduct", "0023");
112 }
113
114 sysfs_set_string("/sys/class/android_usb/android0/iManufacturer", "Rockbox.org");
115 sysfs_set_string("/sys/class/android_usb/android0/iProduct", "Rockbox media player");
116 sysfs_set_string("/sys/class/android_usb/android0/iSerial", "0123456789ABCDEF");
117 sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/inquiry_string", "ErosQ 0100");
118}
diff --git a/firmware/target/hosted/filesystem-app.c b/firmware/target/hosted/filesystem-app.c
index 4e2fa8db7b..24c5a7e062 100644
--- a/firmware/target/hosted/filesystem-app.c
+++ b/firmware/target/hosted/filesystem-app.c
@@ -37,7 +37,7 @@
37#include "logf.h" 37#include "logf.h"
38 38
39#if !(defined(BOOTLOADER) || defined(CHECKWPS) || defined(SIMULATOR)) 39#if !(defined(BOOTLOADER) || defined(CHECKWPS) || defined(SIMULATOR))
40#if (defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20)) 40#if defined(HIBY_LINUX)
41#define PIVOT_ROOT "/mnt/sd_0" 41#define PIVOT_ROOT "/mnt/sd_0"
42#elif defined(FIIO_M3K) 42#elif defined(FIIO_M3K)
43#define PIVOT_ROOT "/mnt" // XXX check this! 43#define PIVOT_ROOT "/mnt" // XXX check this!
@@ -56,8 +56,8 @@ static const char rbhome[] = HOME_DIR;
56#endif 56#endif
57 57
58#if !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || defined(DX50) || \ 58#if !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || defined(DX50) || \
59 defined(SONY_NWZ_LINUX) || defined(DX90) || defined(AGPTEK_ROCKER) || \ 59 defined(SONY_NWZ_LINUX) || defined(DX90) || defined(HIBY_LINUX) || \
60 defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K) || defined(FIIO_M3K_PRO)) && \ 60 defined(FIIO_M3K)) && \
61 !defined(__PCTOOL__) 61 !defined(__PCTOOL__)
62/* Special dirs are user-accessible (and user-writable) dirs which take priority 62/* Special dirs are user-accessible (and user-writable) dirs which take priority
63 * over the ones where Rockbox is installed to. Classic example would be 63 * over the ones where Rockbox is installed to. Classic example would be
diff --git a/firmware/target/hosted/xduoo/button-target.h b/firmware/target/hosted/xduoo/button-target.h
index d41b33894a..3240d3df8e 100644
--- a/firmware/target/hosted/xduoo/button-target.h
+++ b/firmware/target/hosted/xduoo/button-target.h
@@ -41,4 +41,3 @@
41#define POWEROFF_COUNT 25 41#define POWEROFF_COUNT 25
42 42
43#endif /* _BUTTON_TARGET_H_ */ 43#endif /* _BUTTON_TARGET_H_ */
44
diff --git a/tools/builds.pm b/tools/builds.pm
index 6f0c4d0445..36c6e9b1fb 100644
--- a/tools/builds.pm
+++ b/tools/builds.pm
@@ -448,6 +448,10 @@ $releasenotes="/wiki/ReleaseNotes315";
448 name => 'FiiO M3K', 448 name => 'FiiO M3K',
449 status => 1, 449 status => 1,
450 }, 450 },
451 'erosq' => {
452 name => 'AIGO EROS Q / K',
453 status => 1,
454 },
451 'ihifi770' => { 455 'ihifi770' => {
452 name => 'Xuelin iHIFI 770', 456 name => 'Xuelin iHIFI 770',
453 status => 2, 457 status => 2,
diff --git a/tools/configure b/tools/configure
index f5fb6351c0..2b34ed4cff 100755
--- a/tools/configure
+++ b/tools/configure
@@ -1589,7 +1589,8 @@ cat <<EOF
1589 ==AgpTek== 252) 800 227) NW-A20 series 1589 ==AgpTek== 252) 800 227) NW-A20 series
1590 240) Rocker 228) NWZ-A860 series 1590 240) Rocker 228) NWZ-A860 series
1591 ==FiiO== 229) NWZ-S750 series 1591 ==FiiO== 229) NWZ-S750 series
1592 244) M3K 1592 ==AIGO== 244) M3K
1593 245) Eros Q / K
1593 1594
1594EOF 1595EOF
1595 1596
@@ -4056,7 +4057,7 @@ fi
4056 t_cpu="hosted" 4057 t_cpu="hosted"
4057 t_manufacturer="xduoo" 4058 t_manufacturer="xduoo"
4058 t_model="xduoo_x3ii" 4059 t_model="xduoo_x3ii"
4059# sysfont="20-Terminus-Bold" 4060 sysfont="16-Terminus"
4060 ;; 4061 ;;
4061 4062
4062 243|xduoox20) 4063 243|xduoox20)
@@ -4079,7 +4080,7 @@ fi
4079 t_cpu="hosted" 4080 t_cpu="hosted"
4080 t_manufacturer="xduoo" 4081 t_manufacturer="xduoo"
4081 t_model="xduoo_x20" 4082 t_model="xduoo_x20"
4082# sysfont="20-Terminus-Bold" 4083 sysfont="16-Terminus"
4083 ;; 4084 ;;
4084 4085
4085 244|fiiom3k) 4086 244|fiiom3k)
@@ -4102,7 +4103,30 @@ fi
4102 t_manufacturer="fiio" 4103 t_manufacturer="fiio"
4103 t_model="m3k" 4104 t_model="m3k"
4104 mipsellinuxcc 4105 mipsellinuxcc
4105# sysfont="20-Terminus-Bold" 4106 sysfont="16-Terminus"
4107 ;;
4108
4109 245|erosq)
4110 target_id=113
4111 application=yes
4112 app_type="erosq"
4113 modelname="erosq"
4114 target="EROS_Q"
4115 memory=8
4116 mipsellinuxcc
4117 tool="cp "
4118 boottool="cp "
4119 bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
4120 bmp2rb_native="$rootdir/tools/bmp2rb -f 10"
4121 output="rockbox.erosq"
4122 bootoutput="bootloader.erosq"
4123 appextra="recorder:gui:hosted"
4124 plugins="yes"
4125 # architecture, manufacturer and model for the target-tree build
4126 t_cpu="hosted"
4127 t_manufacturer="aigo"
4128 t_model="erosq"
4129 sysfont="16-Terminus"
4106 ;; 4130 ;;
4107 4131
4108 250|ihifi770c) 4132 250|ihifi770c)
diff --git a/tools/hiby_patcher.pl b/tools/hiby_patcher.pl
index 9c45ce6dd3..86b8ad3d3f 100755
--- a/tools/hiby_patcher.pl
+++ b/tools/hiby_patcher.pl
@@ -38,6 +38,10 @@ if ($model eq 'rocker') {
38 @ubiopts = ("-e", "124KiB", "-c", "1024", "-m", "2048", "-j", "8192KiB", "-U"); 38 @ubiopts = ("-e", "124KiB", "-c", "1024", "-m", "2048", "-j", "8192KiB", "-U");
39} elsif ($model eq 'x20') { 39} elsif ($model eq 'x20') {
40 @ubiopts = ("-e", "124KiB", "-c", "1024", "-m", "2048", "-j", "8192KiB", "-U"); 40 @ubiopts = ("-e", "124KiB", "-c", "1024", "-m", "2048", "-j", "8192KiB", "-U");
41} elsif ($model eq 'eros_q') {
42 @ubiopts = ("-e", "124KiB", "-c", "1024", "-m", "2048", "-j", "8192KiB", "-U");
43} elsif ($model eq 'm3k') {
44 @ubiopts = ("-e", "124KiB", "-c", "2048", "-m", "2048", "-j", "8192KiB", "-U");
41} else { 45} else {
42 die ("Unknown hiby model: $model\n"); 46 die ("Unknown hiby model: $model\n");
43} 47}
@@ -81,7 +85,6 @@ while (<UPDATE>) {
81 if ($rootfs_found) { 85 if ($rootfs_found) {
82 if (/file_path=(.*)/) { 86 if (/file_path=(.*)/) {
83 $ubiname = basename($1); 87 $ubiname = basename($1);
84 $ubiname =~ tr/[a-z]/[A-Z]/;
85 last; 88 last;
86 } 89 }
87 } else { 90 } else {
@@ -92,7 +95,11 @@ while (<UPDATE>) {
92} 95}
93close UPDATE; 96close UPDATE;
94 97
95die("can't locate rootfs image") if (! -e "$isowork/$ubiname"); 98if (! -e "$isowork/$ubiname") {
99 $ubiname =~ tr/[a-z]/[A-Z]/;
100 die("can't locate rootfs image ($ubiname)") if (! -e "$isowork/$ubiname");
101}
102
96$ubiname = "$isowork/$ubiname"; 103$ubiname = "$isowork/$ubiname";
97 104
98### Extract RootFS 105### Extract RootFS
@@ -102,6 +109,7 @@ mkdir($rootfsdir) || die ("Can't create '$rootfsdir'");
102@sysargs = ("ubireader_extract_files", "-k", "-o", $rootfsdir, $ubiname); 109@sysargs = ("ubireader_extract_files", "-k", "-o", $rootfsdir, $ubiname);
103system(@sysargs); 110system(@sysargs);
104 111
112# exit(0);
105### Mangle RootFS 113### Mangle RootFS
106 114
107# Generate rb_bootloader.sh 115# Generate rb_bootloader.sh
@@ -109,19 +117,74 @@ my $rbbasename = basename($rbbname);
109my $bootloader_sh = 117my $bootloader_sh =
110 "#!/bin/sh 118 "#!/bin/sh
111 119
112mount /dev/mmcblk0 /mnt/sd_0 &>/dev/null || \ 120#mkdir -p /mnt/sd_0
113mount /dev/mmcblk0p1 /mnt/sd_0 &>/dev/null 121#
122#mount /dev/mmcblk0 /mnt/sd_0 &>/dev/null || \
123#mount /dev/mmcblk0p1 /mnt/sd_0 &>/dev/null
124
125killall hiby_player &>/dev/null
126killall -9 hiby_player &>/dev/null
127
128killall $rbbasename &>/dev/null
129killall -9 $rbbasename &>/dev/null
114 130
115killall $rbbasename 131# /etc/init.d/K90adb start
116killall -9 $rbbasename
117 132
133# Rockbox launcher!
118/usr/bin/$rbbasename 134/usr/bin/$rbbasename
119sleep 1 135sleep 1
120reboot 136reboot
121 "; 137";
122open FILE, ">$rootfsdir/usr/bin/hiby_player.sh" || die ("can't write bootloader script!"); 138open FILE, ">$rootfsdir/usr/bin/hiby_player.sh" || die ("can't write bootloader script!");
123print FILE $bootloader_sh; 139print FILE $bootloader_sh;
124close FILE; 140close FILE;
141chmod 0755, "$rootfsdir/usr/bin/hiby_player.sh";
142
143# Auto mount/unmount external USB drives
144open FILE, ">>$rootfsdir/etc/mdev.conf" || die ("can't access mdev conf!");
145print FILE "sd[a-z][0-9]+ 0:0 664 @ /etc/rb_inserting.sh\n";
146print FILE "mmcblk[0-9]p[0-9] 0:0 664 @ /etc/rb_inserting.sh\n";
147print FILE "mmcblk[0-9] 0:0 664 @ /etc/rb_inserting.sh\n";
148print FILE "sd[a-z] 0:0 664 \$ /etc/rb_removing.sh";
149print FILE "mmcblk[0-9] 0:0 664 \$ /etc/rb_removing.sh\n";
150close FILE;
151
152my $insert_sh = '
153#!/bin/sh
154# $MDEV is the device
155
156case $MDEV in
157 mmc*)
158 MNT_POINT=/mnt/sd_0
159 ;;
160 sd*)
161 MNT_POINT=/mnt/sd_0/USB
162 ;;
163esac
164
165if [ ! -d $MNT_POINT ];then
166 mkdir $MNT_POINT
167fi
168
169mount $MDEV $MNT_POINT
170';
171
172open FILE, ">$rootfsdir/etc/rb_inserting.sh" || die("can't write hotplug helpers!");
173print FILE $insert_sh;
174close FILE;
175chmod 0755, "$rootfsdir/etc/rb_inserting.sh";
176
177my $remove_sh = '
178#!/bin/sh
179# $MDEV is the device
180sync;
181unmount -f $MDEV;
182';
183
184open FILE, ">$rootfsdir/etc/rb_removing.sh" || die("can't write hotplug helpers!");
185print FILE $remove_sh;
186close FILE;
187chmod 0755, "$rootfsdir/etc/rb_removing.sh";
125 188
126# Copy bootloader over 189# Copy bootloader over
127@sysargs=("cp", "$rbbname", "$rootfsdir/usr/bin/$rbbasename"); 190@sysargs=("cp", "$rbbname", "$rootfsdir/usr/bin/$rbbasename");
diff --git a/tools/root.make b/tools/root.make
index fd42f9b6b2..3f5b4bca17 100644
--- a/tools/root.make
+++ b/tools/root.make
@@ -104,6 +104,8 @@ ifneq (,$(findstring bootloader,$(APPSDIR)))
104 include $(ROOTDIR)/firmware/target/hosted/agptek/rocker.make 104 include $(ROOTDIR)/firmware/target/hosted/agptek/rocker.make
105 else ifneq (,$(findstring xduoo,$(APP_TYPE))) 105 else ifneq (,$(findstring xduoo,$(APP_TYPE)))
106 include $(ROOTDIR)/firmware/target/hosted/xduoo/xduoo.make 106 include $(ROOTDIR)/firmware/target/hosted/xduoo/xduoo.make
107 else ifneq (,$(findstring erosq,$(APP_TYPE)))
108 include $(ROOTDIR)/firmware/target/hosted/aigo/erosq.make
107 else ifneq (,$(findstring fiio,$(APP_TYPE))) 109 else ifneq (,$(findstring fiio,$(APP_TYPE)))
108 include $(ROOTDIR)/firmware/target/hosted/fiio/fiio.make 110 include $(ROOTDIR)/firmware/target/hosted/fiio/fiio.make
109 else 111 else
@@ -156,6 +158,10 @@ else # core
156 include $(ROOTDIR)/firmware/target/hosted/fiio/fiio.make 158 include $(ROOTDIR)/firmware/target/hosted/fiio/fiio.make
157 endif 159 endif
158 160
161 ifneq (,$(findstring erosq,$(APP_TYPE)))
162 include $(ROOTDIR)/firmware/target/hosted/aigo/erosq.make
163 endif
164
159 ifneq (,$(findstring android_ndk, $(APP_TYPE))) 165 ifneq (,$(findstring android_ndk, $(APP_TYPE)))
160 include $(ROOTDIR)/firmware/target/hosted/ibasso/android_ndk.make 166 include $(ROOTDIR)/firmware/target/hosted/ibasso/android_ndk.make
161 else 167 else
diff --git a/wps/WPSLIST b/wps/WPSLIST
index 2932ff400d..70970dee58 100644
--- a/wps/WPSLIST
+++ b/wps/WPSLIST
@@ -83,7 +83,7 @@ wps.800x480x(16|24): cabbiev2.800x480x16.wps
83wps.480x800x(16|24): cabbiev2.480x800x16.wps 83wps.480x800x(16|24): cabbiev2.480x800x16.wps
84wps.400x240x(16|24): cabbiev2.400x240x16.wps 84wps.400x240x(16|24): cabbiev2.400x240x16.wps
85wps.320x480x(16|24): cabbiev2.320x480x16.wps 85wps.320x480x(16|24): cabbiev2.320x480x16.wps
86wps.320x240x(16|24): cabbiev2.320x240x16.wps 86wps.320x240x(16|24|32): cabbiev2.320x240x16.wps
87wps.240x400x(16|24): cabbiev2.240x400x16.wps 87wps.240x400x(16|24): cabbiev2.240x400x16.wps
88wps.240x320x(16|24|32): cabbiev2.240x320x16.wps 88wps.240x320x(16|24|32): cabbiev2.240x320x16.wps
89wps.220x176x(16|24): cabbiev2.220x176x16.wps 89wps.220x176x(16|24): cabbiev2.220x176x16.wps
@@ -171,7 +171,7 @@ iconset.800x480x(16|24): icons/tango_icons.32x32.bmp
171iconset.480x800x(16|24): icons/tango_icons.32x32.bmp 171iconset.480x800x(16|24): icons/tango_icons.32x32.bmp
172iconset.400x240x(16|24): icons/tango_icons.16x16.bmp 172iconset.400x240x(16|24): icons/tango_icons.16x16.bmp
173iconset.320x480x(16|24): icons/tango_icons.24x24.bmp 173iconset.320x480x(16|24): icons/tango_icons.24x24.bmp
174iconset.320x240x(16|24): icons/tango_icons.16x16.bmp 174iconset.320x240x(16|24|32): icons/tango_icons.16x16.bmp
175iconset.128x128x(16|24): icons/tango_icons.12x12.bmp 175iconset.128x128x(16|24): icons/tango_icons.12x12.bmp
176iconset.128x160x(16|24|32): icons/tango_icons.12x12.bmp 176iconset.128x160x(16|24|32): icons/tango_icons.12x12.bmp
177iconset.132x80x(16|24): icons/tango_icons.12x12.bmp 177iconset.132x80x(16|24): icons/tango_icons.12x12.bmp