summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Jilke <jilke.david@hotmail.com>2014-03-21 22:16:02 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-04-06 20:51:12 +0200
commitd489444119f6c734d7065cd52833f37fd7f739e8 (patch)
tree64d593a75976116713f4dbb8e68e7e394d3ff767
parent8375b691e629bfbfb2a6ea213c35fe645085d9b7 (diff)
downloadrockbox-d489444119f6c734d7065cd52833f37fd7f739e8.tar.gz
rockbox-d489444119f6c734d7065cd52833f37fd7f739e8.tar.bz2
rockbox-d489444119f6c734d7065cd52833f37fd7f739e8.zip
Complete Plugin Keymaps for Creative Zen X-Fi3
This patch completes the plugin keymaps for the Zen X-Fi3 and enables those plugins for compilation. One key was changed in "button-target.h" for compatibility with Rockboy. This also caused the changes to "keymap-zenxfi3.c", to keep the stock functionality (no further changes in here). Change-Id: Ic222faf89e9a9a2332a49d6e532cedb6eb16d3d7 Reviewed-on: http://gerrit.rockbox.org/762 Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
-rw-r--r--apps/keymaps/keymap-zenxfi3.c10
-rw-r--r--apps/plugins/beatbox/beatbox.c6
-rw-r--r--apps/plugins/blackjack.c16
-rw-r--r--apps/plugins/brickmania.c8
-rw-r--r--apps/plugins/calculator.c11
-rw-r--r--apps/plugins/calendar.c10
-rw-r--r--apps/plugins/chessbox/chessbox_pgn.h10
-rw-r--r--apps/plugins/chessclock.c10
-rw-r--r--apps/plugins/chip8.c10
-rw-r--r--apps/plugins/chopper.c6
-rw-r--r--apps/plugins/clix.c8
-rw-r--r--apps/plugins/cube.c10
-rw-r--r--apps/plugins/doom/i_video.c12
-rw-r--r--apps/plugins/fft/fft.c9
-rw-r--r--apps/plugins/flipit.c14
-rw-r--r--apps/plugins/fractals/fractal.h12
-rw-r--r--apps/plugins/goban/goban.h11
-rw-r--r--apps/plugins/imageviewer/imageviewer_button.h11
-rw-r--r--apps/plugins/invadrox.c7
-rw-r--r--apps/plugins/jewels.c10
-rw-r--r--apps/plugins/lib/pluginlib_actions.c10
-rw-r--r--apps/plugins/midi/midiplay.c8
-rw-r--r--apps/plugins/minesweeper.c11
-rw-r--r--apps/plugins/mp3_encoder.c6
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c8
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c9
-rw-r--r--apps/plugins/oscilloscope.c14
-rw-r--r--apps/plugins/pacbox/pacbox.h11
-rw-r--r--apps/plugins/pegbox.c11
-rw-r--r--apps/plugins/pictureflow/pictureflow.c2
-rw-r--r--apps/plugins/pong.c8
-rw-r--r--apps/plugins/reversi/reversi-gui.h9
-rw-r--r--apps/plugins/rockblox.c11
-rw-r--r--apps/plugins/rockboy/rockboy.c11
-rw-r--r--apps/plugins/rockpaint.c11
-rw-r--r--apps/plugins/sliding_puzzle.c9
-rw-r--r--apps/plugins/snake.c8
-rw-r--r--apps/plugins/snake2.c9
-rw-r--r--apps/plugins/sokoban.c15
-rw-r--r--apps/plugins/solitaire.c20
-rw-r--r--apps/plugins/spacerocks.c9
-rw-r--r--apps/plugins/star.c17
-rw-r--r--[-rwxr-xr-x]apps/plugins/stopwatch.c8
-rw-r--r--apps/plugins/sudoku/sudoku.h11
-rw-r--r--apps/plugins/superdom.c8
-rw-r--r--apps/plugins/text_viewer/tv_button.h13
-rw-r--r--apps/plugins/vu_meter.c11
-rw-r--r--apps/plugins/wormlet.c10
-rw-r--r--apps/plugins/xobox.c8
-rw-r--r--apps/plugins/zxbox/keymaps.h8
-rw-r--r--apps/plugins/zxbox/zxbox_keyb.c9
-rw-r--r--firmware/target/arm/imx233/creative-zenxfi3/button-target.h2
-rwxr-xr-xtools/configure2
53 files changed, 505 insertions, 13 deletions
diff --git a/apps/keymaps/keymap-zenxfi3.c b/apps/keymaps/keymap-zenxfi3.c
index 1a9be54a06..aa68a34f43 100644
--- a/apps/keymaps/keymap-zenxfi3.c
+++ b/apps/keymaps/keymap-zenxfi3.c
@@ -47,7 +47,7 @@ static const struct button_mapping button_context_standard[] = {
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
{ ACTION_STD_KEYLOCK, BUTTON_POWER, BUTTON_NONE },
@@ -79,8 +79,8 @@ static const struct button_mapping button_context_wps[] = {
static const struct button_mapping button_context_keyboard[] = {
{ ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_KBD_RIGHT, BUTTON_PLAY, BUTTON_NONE },
+ { ACTION_KBD_RIGHT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE },
{ ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE },
@@ -102,7 +102,7 @@ static const struct button_mapping button_context_quickscreen[] = {
{ ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE },
{ ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_QS_RIGHT, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_quickscreen */
@@ -149,7 +149,7 @@ static const struct button_mapping button_context_recscreen[] = {
static const struct button_mapping button_context_settings[] = {
/* we overwrite this to avoid select from std */
- { ACTION_NONE, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_NONE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
{ ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
diff --git a/apps/plugins/beatbox/beatbox.c b/apps/plugins/beatbox/beatbox.c
index 8c7413cc99..bbe02de6fe 100644
--- a/apps/plugins/beatbox/beatbox.c
+++ b/apps/plugins/beatbox/beatbox.c
@@ -111,6 +111,12 @@
#define BTN_UP BUTTON_UP
#define BTN_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define BTN_QUIT BUTTON_PLAY
+#define BTN_RIGHT BUTTON_MENU
+#define BTN_UP BUTTON_UP
+#define BTN_DOWN BUTTON_DOWN
+
#endif
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index d65011c4b2..adb92e1986 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -315,6 +315,22 @@ enum {
#define BJACK_RIGHT BUTTON_RIGHT
#define BJACK_LEFT BUTTON_LEFT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define BJACK_SELECT_NAME "PLAY"
+#define BJACK_STAY_NAME "MENU"
+#define BJACK_QUIT_NAME "POWER"
+#define BJACK_DOUBLE_NAME "BACK"
+#define BJACK_SELECT BUTTON_PLAY
+#define BJACK_QUIT BUTTON_POWER
+#define BJACK_MAX BUTTON_VOL_UP
+#define BJACK_MIN BUTTON_VOL_DOWN
+#define BJACK_STAY BUTTON_MENU
+#define BJACK_DOUBLEDOWN BUTTON_BACK
+#define BJACK_UP BUTTON_UP
+#define BJACK_DOWN BUTTON_DOWN
+#define BJACK_RIGHT BUTTON_MENU
+#define BJACK_LEFT BUTTON_BACK
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define BJACK_SELECT_NAME "SELECT"
#define BJACK_STAY_NAME "VOL-"
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 466b194895..369af78910 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -193,6 +193,14 @@ CONFIG_KEYPAD == SANSA_CONNECT_PAD
#define UP BUTTON_UP
#define DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define QUIT BUTTON_POWER
+#define LEFT BUTTON_BACK
+#define RIGHT BUTTON_MENU
+#define SELECT BUTTON_PLAY
+#define UP BUTTON_UP
+#define DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define QUIT BUTTON_POWER
#define LEFT BUTTON_LEFT
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index ddc1609fba..77b00921e1 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -325,6 +325,17 @@ F3: equal to "="
#define CALCULATOR_CALC BUTTON_MENU
#define CALCULATOR_CLEAR BUTTON_PLAY
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+
+#define CALCULATOR_LEFT (BUTTON_BACK|BUTTON_REL)
+#define CALCULATOR_RIGHT BUTTON_MENU
+#define CALCULATOR_UP BUTTON_UP
+#define CALCULATOR_DOWN BUTTON_DOWN
+#define CALCULATOR_QUIT BUTTON_POWER
+#define CALCULATOR_INPUT (BUTTON_PLAY|BUTTON_REL)
+#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT)
+#define CALCULATOR_CLEAR (BUTTON_BACK|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define CALCULATOR_LEFT BUTTON_LEFT
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c
index 9f6d97096c..8e178c06c3 100644
--- a/apps/plugins/calendar.c
+++ b/apps/plugins/calendar.c
@@ -202,6 +202,16 @@
#define CALENDAR_NEXT_MONTH BUTTON_CUSTOM
#define CALENDAR_PREV_MONTH BUTTON_PLAY
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define CALENDAR_QUIT BUTTON_POWER
+#define CALENDAR_SELECT BUTTON_PLAY
+#define CALENDAR_NEXT_WEEK BUTTON_DOWN
+#define CALENDAR_PREV_WEEK BUTTON_UP
+#define CALENDAR_NEXT_DAY BUTTON_MENU
+#define CALENDAR_PREV_DAY BUTTON_BACK
+#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP
+#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define CALENDAR_QUIT BUTTON_POWER
#define CALENDAR_SELECT BUTTON_SELECT
diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h
index a5868d04e0..56289025d7 100644
--- a/apps/plugins/chessbox/chessbox_pgn.h
+++ b/apps/plugins/chessbox/chessbox_pgn.h
@@ -313,6 +313,16 @@
#define CB_LEVEL BUTTON_CUSTOM
#define CB_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define CB_SELECT (BUTTON_PLAY|BUTTON_REL)
+#define CB_UP BUTTON_UP
+#define CB_DOWN BUTTON_DOWN
+#define CB_LEFT BUTTON_BACK
+#define CB_RIGHT (BUTTON_MENU|BUTTON_REL)
+#define CB_PLAY (BUTTON_PLAY|BUTTON_REPEAT)
+#define CB_LEVEL (BUTTON_MENU|BUTTON_REPEAT)
+#define CB_MENU BUTTON_POWER
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define CB_SELECT BUTTON_SELECT
#define CB_UP BUTTON_UP
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index 3a454b7714..7323a70705 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -224,6 +224,16 @@
#define CHC_SETTINGS_OK BUTTON_SELECT
#define CHC_SETTINGS_CANCEL BUTTON_BACK
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define CHC_QUIT BUTTON_POWER
+#define CHC_STARTSTOP BUTTON_PLAY
+#define CHC_RESET (BUTTON_BACK|BUTTON_REPEAT)
+#define CHC_MENU BUTTON_MENU
+#define CHC_SETTINGS_INC BUTTON_UP
+#define CHC_SETTINGS_DEC BUTTON_DOWN
+#define CHC_SETTINGS_OK BUTTON_PLAY
+#define CHC_SETTINGS_CANCEL BUTTON_POWER
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define CHC_QUIT BUTTON_POWER
#define CHC_STARTSTOP BUTTON_SELECT
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index e7f874db3b..6b42078817 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -1090,6 +1090,16 @@ CONFIG_KEYPAD == SANSA_M200_PAD
#define CHIP8_KEY6 BUTTON_RIGHT
#define CHIP8_KEY8 BUTTON_DOWN
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define CHIP8_OFF BUTTON_POWER
+#define CHIP8_KEY1 BUTTON_VOL_UP
+#define CHIP8_KEY2 BUTTON_UP
+#define CHIP8_KEY3 BUTTON_VOL_DOWN
+#define CHIP8_KEY4 BUTTON_BACK
+#define CHIP8_KEY5 BUTTON_PLAY
+#define CHIP8_KEY6 BUTTON_MENU
+#define CHIP8_KEY8 BUTTON_DOWN
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define CHIP8_OFF BUTTON_POWER
#define CHIP8_KEY1 BUTTON_MENU
diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c
index 77af9756eb..92491d859b 100644
--- a/apps/plugins/chopper.c
+++ b/apps/plugins/chopper.c
@@ -131,6 +131,12 @@ Still To do:
#define ACTION2 BUTTON_MENU
#define ACTIONTEXT "UP"
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define QUIT BUTTON_POWER
+#define ACTION BUTTON_UP
+#define ACTION2 BUTTON_MENU
+#define ACTIONTEXT "UP"
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define QUIT BUTTON_POWER
#define ACTION BUTTON_MENU
diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c
index 59cf162b0a..f7006b94ce 100644
--- a/apps/plugins/clix.c
+++ b/apps/plugins/clix.c
@@ -132,6 +132,14 @@
#define CLIX_BUTTON_UP BUTTON_UP
#define CLIX_BUTTON_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define CLIX_BUTTON_QUIT BUTTON_POWER
+#define CLIX_BUTTON_LEFT BUTTON_BACK
+#define CLIX_BUTTON_RIGHT BUTTON_MENU
+#define CLIX_BUTTON_CLICK BUTTON_PLAY
+#define CLIX_BUTTON_UP BUTTON_UP
+#define CLIX_BUTTON_DOWN BUTTON_DOWN
+
#elif (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD)
#define CLIX_BUTTON_QUIT BUTTON_POWER
#define CLIX_BUTTON_LEFT BUTTON_LEFT
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index d46e20c23e..6aaa6fa37b 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -234,6 +234,16 @@
#define CUBE_PAUSE BUTTON_PLAY
#define CUBE_HIGHSPEED BUTTON_SELECT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define CUBE_QUIT BUTTON_POWER
+#define CUBE_NEXT BUTTON_UP
+#define CUBE_PREV BUTTON_DOWN
+#define CUBE_INC BUTTON_VOL_UP
+#define CUBE_DEC BUTTON_VOL_DOWN
+#define CUBE_MODE BUTTON_MENU
+#define CUBE_PAUSE (BUTTON_PLAY|BUTTON_REL)
+#define CUBE_HIGHSPEED BUTTON_BACK
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define CUBE_QUIT BUTTON_POWER
#define CUBE_NEXT BUTTON_RIGHT
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index e04713d132..51e2d72723 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -338,6 +338,18 @@ void I_ShutdownGraphics(void)
#define DOOMBUTTON_WEAPON BUTTON_MENU
#define DOOMBUTTON_MAP BUTTON_CUSTOM
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define DOOMBUTTON_UP BUTTON_UP
+#define DOOMBUTTON_DOWN BUTTON_DOWN
+#define DOOMBUTTON_LEFT BUTTON_BACK
+#define DOOMBUTTON_RIGHT BUTTON_MENU
+#define DOOMBUTTON_SHOOT BUTTON_PLAY
+#define DOOMBUTTON_OPEN BUTTON_UP
+#define DOOMBUTTON_ESC BUTTON_POWER
+#define DOOMBUTTON_ENTER BUTTON_PLAY
+#define DOOMBUTTON_WEAPON BUTTON_VOL_UP
+#define DOOMBUTTON_MAP BUTTON_VOL_DOWN
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define DOOMBUTTON_UP BUTTON_UP
#define DOOMBUTTON_DOWN BUTTON_DOWN
diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c
index 2b72d63188..466322e34c 100644
--- a/apps/plugins/fft/fft.c
+++ b/apps/plugins/fft/fft.c
@@ -170,6 +170,15 @@ GREY_INFO_STRUCT
# define FFT_PREV_GRAPH BUTTON_PLUS
# define FFT_NEXT_GRAPH BUTTON_MINUS
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+# define FFT_PREV_GRAPH BUTTON_BACK
+# define FFT_NEXT_GRAPH BUTTON_MENU
+# define FFT_ORIENTATION (BUTTON_PLAY | BUTTON_LEFT)
+# define FFT_WINDOW (BUTTON_PLAY | BUTTON_RIGHT)
+# define FFT_AMP_SCALE BUTTON_UP
+# define FFT_FREQ_SCALE BUTTON_DOWN
+# define FFT_QUIT (BUTTON_PLAY|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == CREATIVEZVM_PAD
# define FFT_PREV_GRAPH BUTTON_LEFT
# define FFT_NEXT_GRAPH BUTTON_RIGHT
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index f13d301d1c..15b887ae7f 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -264,6 +264,20 @@
#define FLIPIT_STEP_BY_STEP BUTTON_MENU
#define FLIPIT_TOGGLE BUTTON_SELECT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define FLIPIT_LEFT BUTTON_BACK
+#define FLIPIT_RIGHT BUTTON_MENU
+#define FLIPIT_UP BUTTON_UP
+#define FLIPIT_DOWN BUTTON_DOWN
+#define FLIPIT_NEXT BUTTON_VOL_UP
+#define FLIPIT_PREV BUTTON_VOL_DOWN
+#define FLIPIT_QUIT BUTTON_POWER
+#define FLIPIT_SHUFFLE (BUTTON_PLAY | BUTTON_BACK)
+#define FLIPIT_SOLVE (BUTTON_PLAY | BUTTON_DOWN)
+#define FLIPIT_STEP_BY_STEP (BUTTON_PLAY | BUTTON_MENU)
+#define FLIPIT_TOGGLE_PRE BUTTON_PLAY
+#define FLIPIT_TOGGLE (BUTTON_PLAY | BUTTON_REL)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define FLIPIT_LEFT BUTTON_LEFT
diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h
index d2df7e20f1..4e538d234d 100644
--- a/apps/plugins/fractals/fractal.h
+++ b/apps/plugins/fractals/fractal.h
@@ -264,6 +264,18 @@
#define FRACTAL_PRECISION_DEC (BUTTON_DOWN | BUTTON_CUSTOM)
#define FRACTAL_RESET BUTTON_SELECT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define FRACTAL_QUIT BUTTON_POWER
+#define FRACTAL_UP BUTTON_UP
+#define FRACTAL_DOWN BUTTON_DOWN
+#define FRACTAL_LEFT BUTTON_BACK
+#define FRACTAL_RIGHT BUTTON_MENU
+#define FRACTAL_ZOOM_IN BUTTON_VOL_UP
+#define FRACTAL_ZOOM_OUT BUTTON_VOL_DOWN
+#define FRACTAL_PRECISION_INC (BUTTON_PLAY | BUTTON_VOL_UP)
+#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_VOL_DOWN)
+#define FRACTAL_RESET (BUTTON_PLAY | BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define FRACTAL_QUIT BUTTON_POWER
#define FRACTAL_UP BUTTON_UP
diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h
index f9925459ad..1fc04c9389 100644
--- a/apps/plugins/goban/goban.h
+++ b/apps/plugins/goban/goban.h
@@ -164,6 +164,17 @@
#define GBN_BUTTON_CONTEXT BUTTON_SELECT | BUTTON_REPEAT
#define GBN_BUTTON_NEXT_VAR BUTTON_PLAY
+#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
+#define GBN_BUTTON_UP BUTTON_UP | BUTTON_REL
+#define GBN_BUTTON_DOWN BUTTON_DOWN
+#define GBN_BUTTON_LEFT BUTTON_BACK
+#define GBN_BUTTON_RIGHT BUTTON_MENU
+#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
+#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
+#define GBN_BUTTON_MENU BUTTON_POWER
+#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
+#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
+
#elif (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD)
#define GBN_BUTTON_UP BUTTON_UP
#define GBN_BUTTON_DOWN BUTTON_DOWN
diff --git a/apps/plugins/imageviewer/imageviewer_button.h b/apps/plugins/imageviewer/imageviewer_button.h
index 51cdad329e..03bde20a12 100644
--- a/apps/plugins/imageviewer/imageviewer_button.h
+++ b/apps/plugins/imageviewer/imageviewer_button.h
@@ -264,6 +264,17 @@
#define IMGVIEW_PREVIOUS BUTTON_BACK
#define IMGVIEW_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define IMGVIEW_ZOOM_IN (BUTTON_VOL_UP|BUTTON_REL)
+#define IMGVIEW_ZOOM_OUT (BUTTON_VOL_DOWN|BUTTON_REL)
+#define IMGVIEW_UP BUTTON_UP
+#define IMGVIEW_DOWN BUTTON_DOWN
+#define IMGVIEW_LEFT BUTTON_BACK
+#define IMGVIEW_RIGHT BUTTON_MENU
+#define IMGVIEW_NEXT (BUTTON_PLAY|BUTTON_MENU)
+#define IMGVIEW_PREVIOUS (BUTTON_PLAY|BUTTON_BACK)
+#define IMGVIEW_MENU BUTTON_POWER
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define IMGVIEW_ZOOM_IN BUTTON_VOL_UP
#define IMGVIEW_ZOOM_OUT BUTTON_VOL_DOWN
diff --git a/apps/plugins/invadrox.c b/apps/plugins/invadrox.c
index af17554eca..43f614aa9a 100644
--- a/apps/plugins/invadrox.c
+++ b/apps/plugins/invadrox.c
@@ -181,6 +181,13 @@
#define RIGHT BUTTON_RIGHT
#define FIRE BUTTON_SELECT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+
+#define QUIT BUTTON_POWER
+#define LEFT BUTTON_BACK
+#define RIGHT BUTTON_MENU
+#define FIRE BUTTON_PLAY
+
#elif CONFIG_KEYPAD == PHILIPS_HDD6330_PAD
#define QUIT BUTTON_POWER
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index aafb6e2bcf..b7de8e4470 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -229,6 +229,16 @@ CONFIG_KEYPAD == SANSA_M200_PAD
#define HK_SELECT "MIDDLE"
#define HK_CANCEL "BACK"
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define JEWELS_UP BUTTON_UP
+#define JEWELS_DOWN BUTTON_DOWN
+#define JEWELS_LEFT BUTTON_BACK
+#define JEWELS_RIGHT BUTTON_MENU
+#define JEWELS_SELECT BUTTON_VOL_UP
+#define JEWELS_CANCEL BUTTON_VOL_DOWN
+#define HK_SELECT "VOL+"
+#define HK_CANCEL "VOL-"
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define JEWELS_UP BUTTON_UP
#define JEWELS_DOWN BUTTON_DOWN
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index 4bcca37bc3..b1389ede3f 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -420,11 +420,11 @@ const struct button_mapping pla_main_ctx[] =
{PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT},
{PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE},
#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
- {PLA_CANCEL, BUTTON_VOL_DOWN, BUTTON_NONE},
- {PLA_EXIT, BUTTON_POWER, BUTTON_NONE},
- {PLA_SELECT, BUTTON_VOL_UP, BUTTON_NONE},
- {PLA_SELECT_REL, BUTTON_VOL_UP|BUTTON_REL, BUTTON_VOL_UP},
- {PLA_SELECT_REPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE},
+ {PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE},
+ {PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE},
+ {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
+ {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
+ {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
#elif (CONFIG_KEYPAD == SONY_NWZ_PAD)
{PLA_CANCEL, BUTTON_BACK, BUTTON_NONE},
{PLA_EXIT, BUTTON_POWER, BUTTON_NONE},
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index 3f3bb61855..d042eb6d1d 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -156,6 +156,14 @@
#define BTN_DOWN BUTTON_DOWN
#define BTN_PLAY BUTTON_PLAY
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define BTN_QUIT (BUTTON_PLAY|BUTTON_REPEAT)
+#define BTN_RIGHT BUTTON_MENU
+#define BTN_LEFT BUTTON_BACK
+#define BTN_UP BUTTON_VOL_UP
+#define BTN_DOWN BUTTON_VOL_DOWN
+#define BTN_PLAY (BUTTON_PLAY|BUTTON_REL)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define BTN_QUIT BUTTON_POWER
#define BTN_RIGHT BUTTON_RIGHT
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 542b9c8cba..07e2b557bd 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -345,6 +345,17 @@ CONFIG_KEYPAD == MROBE500_PAD
# define MINESWP_DISCOVER BUTTON_SELECT
# define MINESWP_INFO BUTTON_PREV
+#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
+
+# define MINESWP_LEFT BUTTON_BACK
+# define MINESWP_RIGHT BUTTON_MENU
+# define MINESWP_UP BUTTON_UP
+# define MINESWP_DOWN BUTTON_DOWN
+# define MINESWP_QUIT BUTTON_POWER
+# define MINESWP_TOGGLE BUTTON_VOL_UP
+# define MINESWP_DISCOVER BUTTON_PLAY
+# define MINESWP_INFO BUTTON_VOL_DOWN
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index 83e35481a2..3b425463bf 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -2455,6 +2455,12 @@ static void get_mp3_filename(const char *wav_name)
#define MP3ENC_DONE BUTTON_BACK
#define MP3ENC_SELECT BUTTON_SELECT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define MP3ENC_PREV BUTTON_UP
+#define MP3ENC_NEXT BUTTON_DOWN
+#define MP3ENC_DONE BUTTON_POWER
+#define MP3ENC_SELECT BUTTON_PLAY
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define MP3ENC_PREV BUTTON_UP
#define MP3ENC_NEXT BUTTON_DOWN
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index b5c9c6bbc8..57872bd70b 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -160,6 +160,14 @@ struct mpeg_settings settings;
#define MPEG_START_TIME_RIGHT2 BUTTON_MENU
#define MPEG_START_TIME_EXIT BUTTON_BACK
+#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
+#define MPEG_START_TIME_SELECT (BUTTON_PLAY|BUTTON_REL)
+#define MPEG_START_TIME_LEFT BUTTON_BACK
+#define MPEG_START_TIME_RIGHT BUTTON_MENU
+#define MPEG_START_TIME_UP BUTTON_UP
+#define MPEG_START_TIME_DOWN BUTTON_DOWN
+#define MPEG_START_TIME_EXIT (BUTTON_PLAY|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define MPEG_START_TIME_SELECT BUTTON_SELECT
#define MPEG_START_TIME_LEFT BUTTON_LEFT
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 467c961912..706d1546da 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -272,6 +272,15 @@ CONFIG_KEYPAD == SANSA_M200_PAD
#define MPEG_RW BUTTON_LEFT
#define MPEG_FF BUTTON_RIGHT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define MPEG_MENU BUTTON_MENU
+#define MPEG_STOP (BUTTON_PLAY|BUTTON_REPEAT)
+#define MPEG_PAUSE (BUTTON_PLAY|BUTTON_REL)
+#define MPEG_VOLDOWN BUTTON_VOL_DOWN
+#define MPEG_VOLUP BUTTON_VOL_UP
+#define MPEG_RW BUTTON_DOWN
+#define MPEG_FF BUTTON_UP
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define MPEG_MENU BUTTON_MENU
#define MPEG_STOP BUTTON_POWER
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 86edfc67e3..bd3e5ae923 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -279,6 +279,20 @@
#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN
#define NEED_LASTBUTTON
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define OSCILLOSCOPE_QUIT BUTTON_POWER
+#define OSCILLOSCOPE_DRAWMODE (BUTTON_MENU | BUTTON_UP)
+#define OSCILLOSCOPE_ADVMODE (BUTTON_MENU | BUTTON_DOWN)
+#define OSCILLOSCOPE_GRAPHMODE_PRE BUTTON_PLAY
+#define OSCILLOSCOPE_GRAPHMODE (BUTTON_PLAY | BUTTON_REPEAT)
+#define OSCILLOSCOPE_ORIENTATION (BUTTON_MENU | BUTTON_BACK)
+#define OSCILLOSCOPE_SPEED_UP (BUTTON_BACK | BUTTON_UP)
+#define OSCILLOSCOPE_SPEED_DOWN (BUTTON_BACK | BUTTON_DOWN)
+#define OSCILLOSCOPE_PAUSE (BUTTON_PLAY | BUTTON_REL)
+#define OSCILLOSCOPE_VOL_UP BUTTON_VOL_UP
+#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
+#define NEED_LASTBUTTON
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define OSCILLOSCOPE_QUIT BUTTON_POWER
#define OSCILLOSCOPE_DRAWMODE BUTTON_MENU
diff --git a/apps/plugins/pacbox/pacbox.h b/apps/plugins/pacbox/pacbox.h
index 56cba67d13..267dd67e93 100644
--- a/apps/plugins/pacbox/pacbox.h
+++ b/apps/plugins/pacbox/pacbox.h
@@ -181,6 +181,17 @@
#define PACMAN_COIN BUTTON_SELECT
#define PACMAN_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+
+#define PACMAN_UP BUTTON_UP
+#define PACMAN_DOWN BUTTON_DOWN
+#define PACMAN_LEFT BUTTON_BACK
+#define PACMAN_RIGHT BUTTON_MENU
+#define PACMAN_1UP BUTTON_PLAY
+#define PACMAN_COIN_PRE BUTTON_PLAY
+#define PACMAN_COIN (BUTTON_PLAY | BUTTON_DOWN)
+#define PACMAN_MENU BUTTON_POWER
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define PACMAN_UP BUTTON_UP
diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c
index 0f55557b92..c53b7c3e89 100644
--- a/apps/plugins/pegbox.c
+++ b/apps/plugins/pegbox.c
@@ -333,6 +333,17 @@
#define PEGBOX_RIGHT BUTTON_RIGHT
#define PEGBOX_LEFT BUTTON_LEFT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define PEGBOX_SELECT (BUTTON_PLAY|BUTTON_REL)
+#define PEGBOX_QUIT BUTTON_POWER
+#define PEGBOX_RESTART (BUTTON_PLAY|BUTTON_BACK)
+#define PEGBOX_LVL_UP (BUTTON_PLAY|BUTTON_UP)
+#define PEGBOX_LVL_DOWN (BUTTON_PLAY|BUTTON_DOWN)
+#define PEGBOX_UP BUTTON_UP
+#define PEGBOX_DOWN BUTTON_DOWN
+#define PEGBOX_RIGHT BUTTON_MENU
+#define PEGBOX_LEFT BUTTON_BACK
+
#define SELECT_TEXT "CUSTOM"
#define QUIT_TEXT "BACK"
#define RESTART_TEXT "MIDDLE"
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c
index bb7cec888f..933b134b8a 100644
--- a/apps/plugins/pictureflow/pictureflow.c
+++ b/apps/plugins/pictureflow/pictureflow.c
@@ -118,7 +118,7 @@ const struct button_mapping pf_context_buttons[] =
CONFIG_KEYPAD == GIGABEAT_PAD || CONFIG_KEYPAD == GIGABEAT_S_PAD || \
CONFIG_KEYPAD == MROBE100_PAD || CONFIG_KEYPAD == MROBE500_PAD || \
CONFIG_KEYPAD == PHILIPS_SA9200_PAD || CONFIG_KEYPAD == SANSA_CLIP_PAD || \
- CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD
+ CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD || CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
{PF_QUIT, BUTTON_POWER, BUTTON_NONE},
#if CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD
{PF_MENU, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT},
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index 372b84c9ac..4df91b65f3 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -178,6 +178,14 @@
#define PONG_RIGHT_UP BUTTON_PLAY
#define PONG_RIGHT_DOWN BUTTON_MENU
+#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
+#define PONG_QUIT BUTTON_POWER
+#define PONG_PAUSE BUTTON_PLAY
+#define PONG_LEFT_UP BUTTON_BACK
+#define PONG_LEFT_DOWN BUTTON_MENU
+#define PONG_RIGHT_UP BUTTON_UP
+#define PONG_RIGHT_DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define PONG_QUIT BUTTON_POWER
#define PONG_PAUSE BUTTON_MENU
diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h
index 124cf471bb..9cd6622918 100644
--- a/apps/plugins/reversi/reversi-gui.h
+++ b/apps/plugins/reversi/reversi-gui.h
@@ -174,6 +174,15 @@
#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT
#define REVERSI_BUTTON_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define REVERSI_BUTTON_QUIT BUTTON_POWER
+#define REVERSI_BUTTON_UP BUTTON_UP
+#define REVERSI_BUTTON_DOWN BUTTON_DOWN
+#define REVERSI_BUTTON_LEFT BUTTON_BACK
+#define REVERSI_BUTTON_RIGHT BUTTON_MENU
+#define REVERSI_BUTTON_MAKE_MOVE (BUTTON_PLAY|BUTTON_REL)
+#define REVERSI_BUTTON_MENU (BUTTON_PLAY|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define REVERSI_BUTTON_QUIT BUTTON_POWER
#define REVERSI_BUTTON_UP BUTTON_UP
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index c72d7be9c3..adfeb60670 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -275,6 +275,17 @@
#define ROCKBLOX_DROP BUTTON_SELECT
#define ROCKBLOX_RESTART BUTTON_CUSTOM
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define ROCKBLOX_OFF BUTTON_POWER
+#define ROCKBLOX_ROTATE_CCW BUTTON_VOL_DOWN
+#define ROCKBLOX_ROTATE_CCW2 BUTTON_UP
+#define ROCKBLOX_ROTATE_CW BUTTON_VOL_UP
+#define ROCKBLOX_DOWN BUTTON_DOWN
+#define ROCKBLOX_LEFT BUTTON_BACK
+#define ROCKBLOX_RIGHT BUTTON_MENU
+#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL)
+#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define ROCKBLOX_OFF BUTTON_POWER
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index a3e429bffa..d5f2a24b51 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -227,6 +227,7 @@ static void setoptions (void)
options.START = BUTTON_PLAY;
options.SELECT = BUTTON_SELECT;
options.MENU = BUTTON_MENU;
+
#elif CONFIG_KEYPAD == CREATIVEZVM_PAD
options.UP = BUTTON_UP;
options.DOWN = BUTTON_DOWN;
@@ -237,6 +238,16 @@ static void setoptions (void)
options.SELECT = BUTTON_SELECT;
options.MENU = BUTTON_MENU;
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+ options.UP = BUTTON_UP;
+ options.DOWN = BUTTON_DOWN;
+
+ options.A = BUTTON_VOL_UP;
+ options.B = BUTTON_VOL_DOWN;
+ options.START = BUTTON_PLAY;
+ options.SELECT = BUTTON_NONE;
+ options.MENU = BUTTON_POWER;
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
options.UP = BUTTON_UP;
options.DOWN = BUTTON_DOWN;
diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c
index 297ee89f9e..5de27d9947 100644
--- a/apps/plugins/rockpaint.c
+++ b/apps/plugins/rockpaint.c
@@ -145,6 +145,17 @@
#define ROCKPAINT_LEFT BUTTON_LEFT
#define ROCKPAINT_RIGHT BUTTON_RIGHT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define ROCKPAINT_QUIT BUTTON_POWER
+#define ROCKPAINT_DRAW BUTTON_VOL_UP
+#define ROCKPAINT_MENU BUTTON_PLAY
+#define ROCKPAINT_TOOLBAR BUTTON_VOL_DOWN
+#define ROCKPAINT_TOOLBAR2 ( BUTTON_VOL_DOWN | BUTTON_MENU )
+#define ROCKPAINT_UP BUTTON_UP
+#define ROCKPAINT_DOWN BUTTON_DOWN
+#define ROCKPAINT_LEFT BUTTON_BACK
+#define ROCKPAINT_RIGHT BUTTON_MENU
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define ROCKPAINT_QUIT BUTTON_POWER
#define ROCKPAINT_DRAW BUTTON_SELECT
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index 710db94363..55ee46415f 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -177,6 +177,15 @@
#define PUZZLE_SHUFFLE BUTTON_PLAY
#define PUZZLE_PICTURE BUTTON_MENU
+#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
+#define PUZZLE_QUIT BUTTON_POWER
+#define PUZZLE_LEFT BUTTON_BACK
+#define PUZZLE_RIGHT BUTTON_MENU
+#define PUZZLE_UP BUTTON_UP
+#define PUZZLE_DOWN BUTTON_DOWN
+#define PUZZLE_SHUFFLE BUTTON_VOL_UP
+#define PUZZLE_PICTURE BUTTON_PLAY
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define PUZZLE_QUIT BUTTON_POWER
#define PUZZLE_LEFT BUTTON_LEFT
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index 8d2a9b0011..d5168f79ba 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -165,6 +165,14 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
#define SNAKE_DOWN BUTTON_DOWN
#define SNAKE_PLAYPAUSE BUTTON_PLAY
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define SNAKE_QUIT BUTTON_POWER
+#define SNAKE_LEFT BUTTON_BACK
+#define SNAKE_RIGHT BUTTON_MENU
+#define SNAKE_UP BUTTON_UP
+#define SNAKE_DOWN BUTTON_DOWN
+#define SNAKE_PLAYPAUSE BUTTON_PLAY
+
#elif (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD) || \
(CONFIG_KEYPAD == PHILIPS_HDD6330_PAD)
#define SNAKE_QUIT BUTTON_POWER
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index 6de1c19651..779b8cf16c 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -276,6 +276,15 @@ Head and Tail are stored
#define SNAKE2_PLAYPAUSE BUTTON_PLAY
#define SNAKE2_PLAYPAUSE_TEXT "Play"
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define SNAKE2_LEFT BUTTON_BACK
+#define SNAKE2_RIGHT BUTTON_MENU
+#define SNAKE2_UP BUTTON_UP
+#define SNAKE2_DOWN BUTTON_DOWN
+#define SNAKE2_QUIT BUTTON_POWER
+#define SNAKE2_PLAYPAUSE (BUTTON_PLAY|BUTTON_REL)
+#define SNAKE2_PLAYPAUSE_TEXT "Play"
+
#elif (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD) || \
(CONFIG_KEYPAD == PHILIPS_HDD6330_PAD)
#define SNAKE2_LEFT BUTTON_LEFT
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index 79db233113..a962d34842 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -377,6 +377,21 @@
#define BUTTON_SAVE BUTTON_CUSTOM
#define BUTTON_SAVE_NAME "CUSTOM"
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define SOKOBAN_LEFT BUTTON_BACK
+#define SOKOBAN_RIGHT BUTTON_MENU
+#define SOKOBAN_UP BUTTON_UP
+#define SOKOBAN_DOWN BUTTON_DOWN
+#define SOKOBAN_MENU BUTTON_POWER
+#define SOKOBAN_UNDO (BUTTON_PLAY | BUTTON_BACK)
+#define SOKOBAN_REDO (BUTTON_PLAY | BUTTON_MENU)
+#define SOKOBAN_LEVEL_DOWN BUTTON_VOL_DOWN
+#define SOKOBAN_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_POWER)
+#define SOKOBAN_LEVEL_UP BUTTON_VOL_UP
+#define SOKOBAN_PAUSE BUTTON_PLAY
+#define BUTTON_SAVE BUTTON_PLAY
+#define BUTTON_SAVE_NAME "PLAY"
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define SOKOBAN_LEFT BUTTON_LEFT
#define SOKOBAN_RIGHT BUTTON_RIGHT
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index fea92526be..fbfe6776b5 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -373,6 +373,26 @@
# define HK_CUR2STACK "PLAY.."
# define HK_REM2STACK "PLAY+RIGHT"
+#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
+# define SOL_QUIT BUTTON_POWER
+# define SOL_UP BUTTON_UP
+# define SOL_DOWN BUTTON_DOWN
+# define SOL_LEFT BUTTON_BACK
+# define SOL_RIGHT BUTTON_MENU
+# define SOL_MOVE (BUTTON_PLAY|BUTTON_REL)
+# define SOL_DRAW (BUTTON_PLAY|BUTTON_REPEAT)
+# define SOL_REM2CUR BUTTON_VOL_DOWN
+# define SOL_CUR2STACK_PRE (BUTTON_VOL_UP | BUTTON_REPEAT)
+# define SOL_CUR2STACK BUTTON_VOL_UP
+# define SOL_REM2STACK (BUTTON_VOL_DOWN|BUTTON_REPEAT)
+# define SOL_REM2STACK_PRE BUTTON_VOL_DOWN
+
+# define HK_MOVE "SHORT PLAY"
+# define HK_DRAW "LONG PLAY"
+# define HK_REM2CUR "VOLUME-"
+# define HK_CUR2STACK "VOLUME+"
+# define HK_REM2STACK "LONG VOLUME-"
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
# define SOL_QUIT BUTTON_POWER
# define SOL_UP BUTTON_UP
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index e303a1138d..9d906516ae 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -188,6 +188,15 @@
#define AST_RIGHT BUTTON_RIGHT
#define AST_FIRE BUTTON_SELECT
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define AST_PAUSE (BUTTON_PLAY | BUTTON_REL)
+#define AST_QUIT BUTTON_POWER
+#define AST_THRUST BUTTON_UP
+#define AST_HYPERSPACE BUTTON_DOWN
+#define AST_LEFT BUTTON_BACK
+#define AST_RIGHT BUTTON_MENU
+#define AST_FIRE BUTTON_VOL_UP
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define AST_PAUSE BUTTON_VIEW
#define AST_QUIT BUTTON_POWER
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index 4697ffb892..5335e7665b 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -310,6 +310,23 @@
#define STAR_LEVEL_DOWN_NAME "CUSTOM+DOWN"
#define STAR_LEVEL_REPEAT_NAME "CUSTOM+RIGHT"
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+
+#define STAR_QUIT BUTTON_POWER
+#define STAR_LEFT BUTTON_BACK
+#define STAR_RIGHT BUTTON_MENU
+#define STAR_UP BUTTON_UP
+#define STAR_DOWN BUTTON_DOWN
+#define STAR_TOGGLE_CONTROL BUTTON_PLAY
+#define STAR_LEVEL_UP BUTTON_VOL_UP
+#define STAR_LEVEL_DOWN BUTTON_VOL_DOWN
+#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_REPEAT)
+#define STAR_TOGGLE_CONTROL_NAME "PLAY"
+#define STAR_QUIT_NAME "POWER"
+#define STAR_LEVEL_UP_NAME "VOL+"
+#define STAR_LEVEL_DOWN_NAME "VOL-"
+#define STAR_LEVEL_REPEAT_NAME "Hold PLAY button"
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define STAR_QUIT BUTTON_POWER
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index 49f633a2a9..f11266ce1b 100755..100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -186,6 +186,14 @@
#define STOPWATCH_SCROLL_UP BUTTON_UP
#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define STOPWATCH_QUIT BUTTON_POWER
+#define STOPWATCH_START_STOP (BUTTON_PLAY|BUTTON_REL)
+#define STOPWATCH_RESET_TIMER (BUTTON_PLAY|BUTTON_REPEAT)
+#define STOPWATCH_LAP_TIMER BUTTON_MENU
+#define STOPWATCH_SCROLL_UP BUTTON_UP
+#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define STOPWATCH_QUIT BUTTON_POWER
#define STOPWATCH_START_STOP BUTTON_SELECT
diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h
index b0a731d0f2..5ffdc344f9 100644
--- a/apps/plugins/sudoku/sudoku.h
+++ b/apps/plugins/sudoku/sudoku.h
@@ -234,6 +234,17 @@
#define SUDOKU_BUTTON_MENU BUTTON_MENU
#define SUDOKU_BUTTON_POSSIBLE BUTTON_PLAY
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define SUDOKU_BUTTON_QUIT BUTTON_POWER
+#define SUDOKU_BUTTON_UP BUTTON_UP
+#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
+#define SUDOKU_BUTTON_LEFT BUTTON_BACK
+#define SUDOKU_BUTTON_RIGHT BUTTON_MENU
+#define SUDOKU_BUTTON_TOGGLEBACK BUTTON_VOL_DOWN
+#define SUDOKU_BUTTON_TOGGLE BUTTON_VOL_UP
+#define SUDOKU_BUTTON_MENU (BUTTON_PLAY|BUTTON_REPEAT)
+#define SUDOKU_BUTTON_POSSIBLE (BUTTON_PLAY|BUTTON_REL)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define SUDOKU_BUTTON_QUIT BUTTON_POWER
#define SUDOKU_BUTTON_UP BUTTON_UP
diff --git a/apps/plugins/superdom.c b/apps/plugins/superdom.c
index 9d06d9a4e3..04c606d05d 100644
--- a/apps/plugins/superdom.c
+++ b/apps/plugins/superdom.c
@@ -140,6 +140,14 @@ char buf[255];
#define SUPERDOM_RIGHT BUTTON_RIGHT
#define SUPERDOM_CANCEL BUTTON_BACK
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define SUPERDOM_OK (BUTTON_PLAY|BUTTON_REL)
+#define SUPERDOM_UP BUTTON_UP
+#define SUPERDOM_DOWN BUTTON_DOWN
+#define SUPERDOM_LEFT BUTTON_BACK
+#define SUPERDOM_RIGHT BUTTON_MENU
+#define SUPERDOM_CANCEL (BUTTON_PLAY|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD6330_PAD
#define SUPERDOM_OK BUTTON_PLAY
#define SUPERDOM_UP BUTTON_UP
diff --git a/apps/plugins/text_viewer/tv_button.h b/apps/plugins/text_viewer/tv_button.h
index e96b6e6914..ac88e9b5d4 100644
--- a/apps/plugins/text_viewer/tv_button.h
+++ b/apps/plugins/text_viewer/tv_button.h
@@ -323,6 +323,19 @@
#define TV_AUTOSCROLL BUTTON_SELECT
#define TV_BOOKMARK BUTTON_PLAY
+/* Creative Zen X-Fi3 keys */
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define TV_QUIT BUTTON_POWER
+#define TV_SCROLL_UP BUTTON_UP
+#define TV_SCROLL_DOWN BUTTON_DOWN
+#define TV_SCREEN_LEFT BUTTON_BACK
+#define TV_SCREEN_RIGHT BUTTON_MENU
+#define TV_MENU BUTTON_PLAY|BUTTON_REPEAT
+#define TV_AUTOSCROLL BUTTON_PLAY|BUTTON_DOWN
+#define TV_LINE_UP BUTTON_VOL_UP
+#define TV_LINE_DOWN BUTTON_VOL_DOWN
+#define TV_BOOKMARK BUTTON_PLAY|BUTTON_REL
+
/* Philips HDD1630 keys */
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define TV_QUIT BUTTON_POWER
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index 6f1c9e933a..f424a7099f 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -225,6 +225,17 @@
#define LABEL_MENU "MENU"
#define LABEL_VOLUME "UP/DOWN"
+#elif (CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD)
+#define VUMETER_QUIT BUTTON_POWER
+#define VUMETER_HELP BUTTON_MENU|BUTTON_REPEAT
+#define VUMETER_MENU BUTTON_MENU|BUTTON_REL
+#define VUMETER_UP BUTTON_VOL_UP
+#define VUMETER_DOWN BUTTON_VOL_DOWN
+#define LABEL_HELP "Hold Menu"
+#define LABEL_QUIT "Power"
+#define LABEL_MENU "Menu"
+#define LABEL_VOLUME "Volume +/-"
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define VUMETER_QUIT BUTTON_POWER
#define VUMETER_HELP BUTTON_VIEW
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 2ad5d538a3..a53a849963 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -225,6 +225,16 @@ static long max_cycle;
#define BTN_QUIT BUTTON_BACK
#define BTN_STOPRESET BUTTON_MENU
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+
+#define BTN_DIR_UP BUTTON_UP
+#define BTN_DIR_DOWN BUTTON_DOWN
+#define BTN_DIR_LEFT BUTTON_BACK
+#define BTN_DIR_RIGHT BUTTON_MENU
+#define BTN_STARTPAUSE (BUTTON_PLAY|BUTTON_REL)
+#define BTN_QUIT BUTTON_POWER
+#define BTN_STOPRESET (BUTTON_PLAY|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define BTN_DIR_UP BUTTON_UP
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index 2696b09c17..6cb46ffa3a 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -190,6 +190,14 @@
#define DOWN BUTTON_DOWN
#define PAUSE BUTTON_PLAY
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define QUIT BUTTON_POWER
+#define LEFT BUTTON_BACK
+#define RIGHT BUTTON_MENU
+#define UP BUTTON_UP
+#define DOWN BUTTON_DOWN
+#define PAUSE BUTTON_PLAY
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define QUIT BUTTON_POWER
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h
index 59dc93244f..28073ac8d4 100644
--- a/apps/plugins/zxbox/keymaps.h
+++ b/apps/plugins/zxbox/keymaps.h
@@ -150,6 +150,14 @@
#define ZX_SELECT BUTTON_SELECT
#define ZX_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+#define ZX_UP BUTTON_UP
+#define ZX_DOWN BUTTON_DOWN
+#define ZX_LEFT BUTTON_BACK
+#define ZX_RIGHT BUTTON_MENU
+#define ZX_SELECT (BUTTON_PLAY|BUTTON_REL)
+#define ZX_MENU (BUTTON_PLAY|BUTTON_REPEAT)
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define ZX_UP BUTTON_UP
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c
index c343122a4a..e09fe9a7d8 100644
--- a/apps/plugins/zxbox/zxbox_keyb.c
+++ b/apps/plugins/zxbox/zxbox_keyb.c
@@ -161,6 +161,15 @@
#define KBD_UP BUTTON_UP
#define KBD_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
+
+#define KBD_SELECT (BUTTON_PLAY|BUTTON_REL)
+#define KBD_ABORT (BUTTON_PLAY|BUTTON_REPEAT)
+#define KBD_LEFT BUTTON_BACK
+#define KBD_RIGHT BUTTON_MENU
+#define KBD_UP BUTTON_UP
+#define KBD_DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define KBD_SELECT BUTTON_MENU
diff --git a/firmware/target/arm/imx233/creative-zenxfi3/button-target.h b/firmware/target/arm/imx233/creative-zenxfi3/button-target.h
index 202e695eb3..929ba18eaf 100644
--- a/firmware/target/arm/imx233/creative-zenxfi3/button-target.h
+++ b/firmware/target/arm/imx233/creative-zenxfi3/button-target.h
@@ -41,7 +41,7 @@ bool button_debug_screen(void);
#define BUTTON_VOL_DOWN 0x00000080
/* For compatibility */
#define BUTTON_LEFT BUTTON_BACK
-#define BUTTON_RIGHT BUTTON_PLAY
+#define BUTTON_RIGHT BUTTON_MENU
#define BUTTON_MAIN 0xff
diff --git a/tools/configure b/tools/configure
index c5a3f51918..30687b2790 100755
--- a/tools/configure
+++ b/tools/configure
@@ -2302,7 +2302,7 @@ fi
output="rockbox.creative"
bootoutput="bootloader-zenxfi3.creative"
appextra="gui:recorder:radio"
- plugins=""
+ plugins="yes"
swcodec="yes"
toolset=$scramblebitmaptools
t_cpu="arm"