summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-10-03 18:17:11 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-10-09 12:41:18 -0400
commitaabc8aca47e60cf745a34af28c50679fcb967910 (patch)
treecfe17f546aae9785fb13482f39527e2da0597ccb
parent4231c2c83f2b5331e3e38b10a308ee3752315f9c (diff)
downloadrockbox-aabc8aca47e60cf745a34af28c50679fcb967910.tar.gz
rockbox-aabc8aca47e60cf745a34af28c50679fcb967910.zip
New port: FiiO M3K
Most credit goes to: Roman Skylarov Additional integration and refactoring by myself. *** COMPLETELY UNTESTED *** Change-Id: Ia64c36d92e0214c6b15f7a868df286f8113ea27b
-rw-r--r--apps/SOURCES2
-rw-r--r--apps/bitmaps/native/SOURCES6
-rw-r--r--apps/bitmaps/native/fiioicon.130x130x16.bmpbin0 -> 51014 bytes
-rw-r--r--apps/features.txt2
-rw-r--r--apps/keymaps/keymap-fiiom3k.c224
-rw-r--r--apps/lang/english.lang34
-rw-r--r--apps/plugins/battery_bench.c6
-rw-r--r--apps/plugins/blackjack.c16
-rw-r--r--apps/plugins/brickmania.c10
-rw-r--r--apps/plugins/calculator.c11
-rw-r--r--apps/plugins/calendar.c10
-rw-r--r--apps/plugins/chessbox/chessbox_pgn.h14
-rw-r--r--apps/plugins/chessclock.c10
-rw-r--r--apps/plugins/chip8.c8
-rw-r--r--apps/plugins/chopper.c5
-rw-r--r--apps/plugins/clix.c8
-rw-r--r--apps/plugins/cube.c10
-rw-r--r--apps/plugins/doom/i_video.c11
-rw-r--r--apps/plugins/fft/fft.c9
-rw-r--r--apps/plugins/flipit.c12
-rw-r--r--apps/plugins/fractals/fractal.h12
-rw-r--r--apps/plugins/goban/goban.h12
-rw-r--r--apps/plugins/imageviewer/imageviewer_button.h15
-rw-r--r--apps/plugins/invadrox.c7
-rw-r--r--apps/plugins/jewels.c10
-rw-r--r--apps/plugins/lib/keymaps.h8
-rw-r--r--apps/plugins/lib/pluginlib_actions.c15
-rw-r--r--apps/plugins/midi/midiplay.c8
-rw-r--r--apps/plugins/minesweeper.c13
-rw-r--r--apps/plugins/mp3_encoder.c5
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c10
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c9
-rw-r--r--apps/plugins/oscilloscope.c13
-rw-r--r--apps/plugins/pacbox/pacbox.h8
-rw-r--r--apps/plugins/pegbox.c17
-rw-r--r--apps/plugins/pong.c8
-rw-r--r--apps/plugins/reversi/reversi-gui.h11
-rw-r--r--apps/plugins/rockblox.c12
-rw-r--r--apps/plugins/rockboy/rockboy.c10
-rw-r--r--apps/plugins/rockpaint.c33
-rw-r--r--apps/plugins/sliding_puzzle.c8
-rw-r--r--apps/plugins/snake.c8
-rw-r--r--apps/plugins/snake2.c9
-rw-r--r--apps/plugins/sokoban.c16
-rw-r--r--apps/plugins/solitaire.c19
-rw-r--r--apps/plugins/spacerocks.c9
-rw-r--r--apps/plugins/star.c16
-rw-r--r--apps/plugins/stopwatch.c8
-rw-r--r--apps/plugins/sudoku/sudoku.h14
-rw-r--r--apps/plugins/text_viewer/tv_button.h12
-rw-r--r--apps/plugins/vu_meter.c11
-rw-r--r--apps/plugins/wormlet.c9
-rw-r--r--apps/plugins/xobox.c9
-rw-r--r--apps/plugins/zxbox/keymaps.h8
-rw-r--r--apps/plugins/zxbox/zxbox_keyb.c9
-rw-r--r--apps/settings_list.c5
-rw-r--r--bootloader/SOURCES2
-rw-r--r--bootloader/rocker_linux.c31
-rw-r--r--firmware/SOURCES17
-rw-r--r--firmware/asm/SOURCES3
-rw-r--r--firmware/drivers/audio/fiiolinux_codec.c154
-rw-r--r--firmware/export/audiohw.h2
-rw-r--r--firmware/export/config.h3
-rw-r--r--firmware/export/config/fiiom3k.h127
-rw-r--r--firmware/export/fiiolinux_codec.h3
-rw-r--r--firmware/export/rbpaths.h4
-rw-r--r--firmware/target/hosted/backlight-target.h10
-rw-r--r--firmware/target/hosted/fiio/adc-target.h0
-rw-r--r--firmware/target/hosted/fiio/button-fiio.c308
-rw-r--r--firmware/target/hosted/fiio/button-target.h50
-rw-r--r--firmware/target/hosted/fiio/buttonlight-fiio.c57
-rw-r--r--firmware/target/hosted/fiio/debug-fiio.c1
-rw-r--r--firmware/target/hosted/fiio/fiio.make49
-rw-r--r--firmware/target/hosted/fiio/lcd-target.h32
-rw-r--r--firmware/target/hosted/fiio/power-fiio.c78
-rw-r--r--firmware/target/hosted/fiio/power-fiio.h31
-rw-r--r--firmware/target/hosted/fiio/powermgmt-fiio.c68
-rw-r--r--firmware/target/hosted/fiio/system-fiio.c205
-rw-r--r--firmware/target/hosted/fiio/system-target.h28
-rw-r--r--firmware/target/hosted/fiio/usb-fiio.c81
-rw-r--r--firmware/target/hosted/filesystem-app.c11
-rw-r--r--tools/builds.pm5
-rwxr-xr-xtools/configure28
-rw-r--r--tools/root.make6
84 files changed, 2188 insertions, 20 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index ba36bc3ef6..54f7461e05 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -300,4 +300,6 @@ keymaps/keymap-xduoox3.c
300keymaps/keymap-xduoox3ii.c 300keymaps/keymap-xduoox3ii.c
301#elif CONFIG_KEYPAD == XDUOO_X20_PAD 301#elif CONFIG_KEYPAD == XDUOO_X20_PAD
302keymaps/keymap-xduoox20.c 302keymaps/keymap-xduoox20.c
303#elif CONFIG_KEYPAD == FIIO_M3K_PAD
304keymaps/keymap-fiiom3k.c
303#endif 305#endif
diff --git a/apps/bitmaps/native/SOURCES b/apps/bitmaps/native/SOURCES
index 8f42607a0c..201ffc4ad3 100644
--- a/apps/bitmaps/native/SOURCES
+++ b/apps/bitmaps/native/SOURCES
@@ -38,7 +38,7 @@ rockboxlogo.640x198x16.bmp
38#endif 38#endif
39 39
40/* The Sony NWZ linux bootloader needs icons to display a menu */ 40/* The Sony NWZ linux bootloader needs icons to display a menu */
41#if defined(BOOTLOADER) 41#if defined(BOOTLOADER)
42#if defined(SONY_NWZ_LINUX) 42#if defined(SONY_NWZ_LINUX)
43rockboxicon.130x130x16.bmp 43rockboxicon.130x130x16.bmp
44toolsicon.130x130x16.bmp 44toolsicon.130x130x16.bmp
@@ -50,6 +50,10 @@ toolsicon.70x70x16.bmp
50hibyicon.130x130x16.bmp 50hibyicon.130x130x16.bmp
51rockboxicon.130x130x16.bmp 51rockboxicon.130x130x16.bmp
52toolsicon.130x130x16.bmp 52toolsicon.130x130x16.bmp
53#elif defined(FIIO_M3K)
54fiioicon.130x130x16.bmp
55rockboxicon.130x130x16.bmp
56toolsicon.130x130x16.bmp
53#endif 57#endif
54#endif 58#endif
55 59
diff --git a/apps/bitmaps/native/fiioicon.130x130x16.bmp b/apps/bitmaps/native/fiioicon.130x130x16.bmp
new file mode 100644
index 0000000000..15e1f7b37f
--- /dev/null
+++ b/apps/bitmaps/native/fiioicon.130x130x16.bmp
Binary files differ
diff --git a/apps/features.txt b/apps/features.txt
index 4b7a66099e..f0c2e4a12b 100644
--- a/apps/features.txt
+++ b/apps/features.txt
@@ -183,7 +183,7 @@ depth_3d
183#endif 183#endif
184 184
185/* This should be AUDIOHW_HAVE_FILTER_ROLL_OFF but that is only defined later */ 185/* This should be AUDIOHW_HAVE_FILTER_ROLL_OFF but that is only defined later */
186#if defined(DX50) || defined(HAVE_DF1704_CODEC) || defined(HAVE_PCM1792_CODEC) || defined(HAVE_CS4398) || defined(HAVE_WM8740) || defined(HAVE_ES9018) || defined(HAVE_XDUOO_LINUX_CODEC) 186#if defined(DX50) || defined(HAVE_DF1704_CODEC) || defined(HAVE_PCM1792_CODEC) || defined(HAVE_CS4398) || defined(HAVE_WM8740) || defined(HAVE_ES9018) || defined(HAVE_XDUOO_LINUX_CODEC) || defined(HAVE_FIIO_LINUX_CODEC)
187filter_roll_off 187filter_roll_off
188#endif 188#endif
189 189
diff --git a/apps/keymaps/keymap-fiiom3k.c b/apps/keymaps/keymap-fiiom3k.c
new file mode 100644
index 0000000000..4fa97e9435
--- /dev/null
+++ b/apps/keymaps/keymap-fiiom3k.c
@@ -0,0 +1,224 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2019 by Roman Stolyarov
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22/* Button Code Definitions for FiiO M3K target */
23
24#include "config.h"
25#include "action.h"
26#include "button.h"
27#include "settings.h"
28
29/* {Action Code, Button code, Prereq button code } */
30
31/*
32 * The format of the list is as follows
33 * { Action Code, Button code, Prereq button code }
34 * if there's no need to check the previous button's value, use BUTTON_NONE
35 * Insert LAST_ITEM_IN_LIST at the end of each mapping
36 */
37static const struct button_mapping button_context_standard[] = {
38 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
39 { ACTION_STD_PREV, BUTTON_PREV, BUTTON_NONE },
40 { ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
41 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
42 { ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
43 { ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
44 { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
45 { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
46 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
47 { ACTION_STD_MENU, BUTTON_OPTION|BUTTON_REL, BUTTON_OPTION },
48
49 LAST_ITEM_IN_LIST
50}; /* button_context_standard */
51
52static const struct button_mapping button_context_wps[] = {
53 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
54// { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
55 { ACTION_WPS_SKIPPREV, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
56 { ACTION_WPS_SEEKBACK, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
57 { ACTION_WPS_STOPSEEK, BUTTON_PREV|BUTTON_REL, BUTTON_PREV|BUTTON_REPEAT },
58 { ACTION_WPS_SKIPNEXT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT },
59 { ACTION_WPS_SEEKFWD, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
60 { ACTION_WPS_STOPSEEK, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT|BUTTON_REPEAT },
61 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
62 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
63 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
64 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
65 { ACTION_WPS_BROWSE, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
66 { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
67 { ACTION_WPS_MENU, BUTTON_OPTION|BUTTON_REL, BUTTON_OPTION },
68 { ACTION_WPS_QUICKSCREEN, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_OPTION },
69 { ACTION_WPS_HOTKEY, BUTTON_HOME|BUTTON_REPEAT, BUTTON_HOME },
70
71// XXX BUTTON_UP and BUTTON_DOWN aren't on here.
72
73 { ACTION_STD_KEYLOCK, BUTTON_POWER, BUTTON_NONE },
74
75 LAST_ITEM_IN_LIST
76}; /* button_context_wps */
77
78static const struct button_mapping button_context_list[] = {
79 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
80 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
81 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
82 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
83
84 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
85}; /* button_context_list */
86
87/** Bookmark Screen **/
88static const struct button_mapping button_context_bmark[] = {
89 { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
90
91 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
92}; /* button_context_bmark */
93
94/** Keyboard **/
95static const struct button_mapping button_context_keyboard[] = {
96 { ACTION_KBD_LEFT, BUTTON_PREV, BUTTON_NONE },
97 { ACTION_KBD_LEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
98 { ACTION_KBD_RIGHT, BUTTON_NEXT, BUTTON_NONE },
99 { ACTION_KBD_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
100 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE },
101 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
102 { ACTION_KBD_CURSOR_LEFT, BUTTON_VOL_UP, BUTTON_NONE },
103 { ACTION_KBD_CURSOR_LEFT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
104 { ACTION_KBD_CURSOR_RIGHT, BUTTON_VOL_DOWN, BUTTON_NONE },
105 { ACTION_KBD_CURSOR_RIGHT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
106 { ACTION_KBD_BACKSPACE, BUTTON_HOME, BUTTON_NONE },
107 { ACTION_KBD_BACKSPACE, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE },
108 { ACTION_KBD_SELECT, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
109 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
110 { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
111
112 LAST_ITEM_IN_LIST
113}; /* button_context_keyboard */
114
115/** Pitchscreen **/
116static const struct button_mapping button_context_pitchscreen[] = {
117 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE },
118 { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
119 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE },
120 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
121 { ACTION_PS_NUDGE_LEFT, BUTTON_PREV, BUTTON_NONE },
122 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_PREV|BUTTON_REL, BUTTON_NONE },
123 { ACTION_PS_NUDGE_RIGHT, BUTTON_NEXT, BUTTON_NONE },
124 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_NEXT|BUTTON_REL, BUTTON_NONE },
125 { ACTION_PS_TOGGLE_MODE, BUTTON_PLAY|BUTTON_REL, BUTTON_NONE },
126 { ACTION_PS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
127 { ACTION_PS_EXIT, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
128 { ACTION_PS_SLOWER, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
129 { ACTION_PS_FASTER, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
130
131 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
132}; /* button_context_pitchscreen */
133
134/** Quickscreen **/
135static const struct button_mapping button_context_quickscreen[] = {
136 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE },
137 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
138 { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE },
139 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
140 { ACTION_QS_LEFT, BUTTON_PREV, BUTTON_NONE },
141 { ACTION_QS_LEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
142 { ACTION_QS_RIGHT, BUTTON_NEXT, BUTTON_NONE },
143 { ACTION_QS_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
144 { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
145
146 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
147}; /* button_context_quickscreen */
148
149/** Settings - General Mappings **/
150static const struct button_mapping button_context_settings[] = {
151 { ACTION_SETTINGS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
152 { ACTION_STD_PREV, BUTTON_PREV, BUTTON_NONE },
153 { ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
154 { ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
155 { ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
156 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
157 { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
158
159 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
160}; /* button_context_settings */
161
162static const struct button_mapping button_context_settings_vol_is_inc[] = {
163 { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
164 { ACTION_SETTINGS_INCREPEAT,BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
165 { ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE },
166 { ACTION_SETTINGS_INCREPEAT,BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
167 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
168 { ACTION_SETTINGS_DECREPEAT,BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
169 { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
170 { ACTION_SETTINGS_DECREPEAT,BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
171
172 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
173}; /* button_context_settings_right_is_inc */
174
175/** Tree **/
176static const struct button_mapping button_context_tree[] = {
177 { ACTION_TREE_WPS, BUTTON_OPTION|BUTTON_REL, BUTTON_OPTION },
178 { ACTION_TREE_HOTKEY, BUTTON_HOME|BUTTON_REPEAT, BUTTON_HOME },
179 { ACTION_STD_MENU, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_OPTION },
180
181 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
182}; /* button_context_tree */
183
184/** Yes/No Screen **/
185static const struct button_mapping button_context_yesnoscreen[] = {
186 { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
187
188 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
189}; /* button_context_settings_yesnoscreen */
190
191/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
192const struct button_mapping* get_context_mapping(int context)
193{
194 switch (context)
195 {
196 case CONTEXT_LIST:
197 return button_context_list;
198 case CONTEXT_STD:
199 return button_context_standard;
200 case CONTEXT_BOOKMARKSCREEN:
201 return button_context_bmark;
202 case CONTEXT_KEYBOARD:
203 return button_context_keyboard;
204 case CONTEXT_PITCHSCREEN:
205 return button_context_pitchscreen;
206 case CONTEXT_QUICKSCREEN:
207 return button_context_quickscreen;
208 case CONTEXT_SETTINGS:
209 return button_context_settings;
210 case CONTEXT_SETTINGS_TIME:
211 case CONTEXT_SETTINGS_COLOURCHOOSER:
212 case CONTEXT_SETTINGS_EQ:
213 case CONTEXT_SETTINGS_RECTRIGGER:
214 return button_context_settings_vol_is_inc;
215 case CONTEXT_TREE:
216 case CONTEXT_MAINMENU:
217 return button_context_tree;
218 case CONTEXT_WPS:
219 return button_context_wps;
220 case CONTEXT_YESNOSCREEN:
221 return button_context_yesnoscreen;
222 }
223 return button_context_standard;
224}
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 3f3bd26e30..55f89161a1 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -12534,6 +12534,40 @@
12534 </voice> 12534 </voice>
12535</phrase> 12535</phrase>
12536<phrase> 12536<phrase>
12537 id: LANG_FILTER_SHORT_SHARP
12538 desc: in sound settings
12539 user: core
12540 <source>
12541 *: none
12542 filter_roll_off: "Short Sharp"
12543 </source>
12544 <dest>
12545 *: none
12546 filter_roll_off: "Short Sharp"
12547 </dest>
12548 <voice>
12549 *: none
12550 filter_roll_off: "Short Sharp"
12551 </voice>
12552</phrase>
12553<phrase>
12554 id: LANG_FILTER_SHORT_SLOW
12555 desc: in sound settings
12556 user: core
12557 <source>
12558 *: none
12559 filter_roll_off: "Short Slow"
12560 </source>
12561 <dest>
12562 *: none
12563 filter_roll_off: "Short Slow"
12564 </dest>
12565 <voice>
12566 *: none
12567 filter_roll_off: "Short Slow"
12568 </voice>
12569</phrase>
12570<phrase>
12537 id: LANG_FILTER_SHORT 12571 id: LANG_FILTER_SHORT
12538 desc: in sound settings 12572 desc: in sound settings
12539 user: core 12573 user: core
diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c
index ff979abd8e..f68e3ed5a3 100644
--- a/apps/plugins/battery_bench.c
+++ b/apps/plugins/battery_bench.c
@@ -281,6 +281,12 @@
281#define BATTERY_ON_TXT "Play - start" 281#define BATTERY_ON_TXT "Play - start"
282#define BATTERY_OFF_TXT "POWER" 282#define BATTERY_OFF_TXT "POWER"
283 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
284#else 290#else
285#error No keymap defined! 291#error No keymap defined!
286#endif 292#endif
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index 93b577462b..b2e0383187 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -591,6 +591,22 @@ enum {
591#define BJACK_RIGHT BUTTON_NEXT 591#define BJACK_RIGHT BUTTON_NEXT
592#define BJACK_LEFT BUTTON_PREV 592#define BJACK_LEFT BUTTON_PREV
593 593
594#elif CONFIG_KEYPAD == FIIO_M3K_PAD
595#define BJACK_SELECT_NAME "PLAY"
596#define BJACK_STAY_NAME "NEXT"
597#define BJACK_QUIT_NAME "POWER"
598#define BJACK_DOUBLE_NAME "PREV"
599#define BJACK_SELECT BUTTON_PLAY
600#define BJACK_QUIT BUTTON_POWER
601#define BJACK_MAX BUTTON_VOL_UP
602#define BJACK_MIN BUTTON_VOL_DOWN
603#define BJACK_STAY BUTTON_NEXT
604#define BJACK_DOUBLEDOWN BUTTON_PREV
605#define BJACK_UP BUTTON_HOME
606#define BJACK_DOWN BUTTON_OPTION
607#define BJACK_RIGHT BUTTON_NEXT
608#define BJACK_LEFT BUTTON_PREV
609
594#elif CONFIG_KEYPAD == IHIFI_770_PAD 610#elif CONFIG_KEYPAD == IHIFI_770_PAD
595#define BJACK_SELECT_NAME "PLAY" 611#define BJACK_SELECT_NAME "PLAY"
596#define BJACK_STAY_NAME "NEXT" 612#define BJACK_STAY_NAME "NEXT"
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 5764c6869d..4452f23357 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -337,6 +337,16 @@ CONFIG_KEYPAD == SANSA_CONNECT_PAD
337#define UP BUTTON_HOME 337#define UP BUTTON_HOME
338#define DOWN BUTTON_OPTION 338#define DOWN BUTTON_OPTION
339 339
340#elif CONFIG_KEYPAD == FIIO_M3K_PAD
341#define QUIT BUTTON_POWER
342#define LEFT BUTTON_PREV
343#define RIGHT BUTTON_NEXT
344#define ALTLEFT BUTTON_VOL_DOWN
345#define ALTRIGHT BUTTON_VOL_UP
346#define SELECT BUTTON_PLAY
347#define UP BUTTON_HOME
348#define DOWN BUTTON_OPTION
349
340#elif CONFIG_KEYPAD == IHIFI_770_PAD 350#elif CONFIG_KEYPAD == IHIFI_770_PAD
341#define QUIT BUTTON_POWER 351#define QUIT BUTTON_POWER
342#define LEFT BUTTON_HOME 352#define LEFT BUTTON_HOME
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index ac5a6ed7cd..f02f99ee0d 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -526,6 +526,17 @@ F3: equal to "="
526#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT) 526#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT)
527#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT) 527#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT)
528 528
529#elif CONFIG_KEYPAD == FIIO_M3K_PAD
530#define CALCULATOR_LEFT BUTTON_PREV
531#define CALCULATOR_RIGHT BUTTON_NEXT
532#define CALCULATOR_UP BUTTON_HOME
533#define CALCULATOR_DOWN BUTTON_OPTION
534#define CALCULATOR_QUIT BUTTON_POWER
535#define CALCULATOR_INPUT_CALC_PRE (BUTTON_OPTION|BUTTON_REPEAT)
536#define CALCULATOR_INPUT (BUTTON_PLAY|BUTTON_REL)
537#define CALCULATOR_CALC (BUTTON_PLAY|BUTTON_REPEAT)
538#define CALCULATOR_CLEAR (BUTTON_POWER|BUTTON_REPEAT)
539
529#elif CONFIG_KEYPAD == IHIFI_770_PAD 540#elif CONFIG_KEYPAD == IHIFI_770_PAD
530#define CALCULATOR_LEFT BUTTON_HOME 541#define CALCULATOR_LEFT BUTTON_HOME
531#define CALCULATOR_RIGHT BUTTON_VOL_DOWN 542#define CALCULATOR_RIGHT BUTTON_VOL_DOWN
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c
index 7e2472ffc9..89dcc61714 100644
--- a/apps/plugins/calendar.c
+++ b/apps/plugins/calendar.c
@@ -411,6 +411,16 @@
411#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP 411#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP
412#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN 412#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN
413 413
414#elif CONFIG_KEYPAD == FIIO_M3K_PAD
415#define CALENDAR_QUIT BUTTON_POWER
416#define CALENDAR_SELECT BUTTON_PLAY
417#define CALENDAR_NEXT_WEEK BUTTON_OPTION
418#define CALENDAR_PREV_WEEK BUTTON_HOME
419#define CALENDAR_NEXT_DAY BUTTON_NEXT
420#define CALENDAR_PREV_DAY BUTTON_PREV
421#define CALENDAR_NEXT_MONTH BUTTON_VOL_UP
422#define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN
423
414#elif CONFIG_KEYPAD == IHIFI_770_PAD 424#elif CONFIG_KEYPAD == IHIFI_770_PAD
415#define CALENDAR_QUIT BUTTON_POWER 425#define CALENDAR_QUIT BUTTON_POWER
416#define CALENDAR_SELECT BUTTON_PLAY 426#define CALENDAR_SELECT BUTTON_PLAY
diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h
index ab0adbb706..567dcb1acb 100644
--- a/apps/plugins/chessbox/chessbox_pgn.h
+++ b/apps/plugins/chessbox/chessbox_pgn.h
@@ -553,6 +553,20 @@
553#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT) 553#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT)
554#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT) 554#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT)
555 555
556#elif CONFIG_KEYPAD == FIIO_M3K_PAD
557#define CB_SELECT BUTTON_PLAY
558#define CB_UP BUTTON_HOME
559#define CB_DOWN BUTTON_OPTION
560#define CB_LEFT BUTTON_PREV
561#define CB_RIGHT BUTTON_NEXT
562#define CB_PLAY BUTTON_VOL_UP
563#define CB_LEVEL BUTTON_VOL_DOWN
564#define CB_MENU BUTTON_POWER
565#define CB_SCROLL_UP (BUTTON_HOME|BUTTON_REPEAT)
566#define CB_SCROLL_DOWN (BUTTON_OPTION|BUTTON_REPEAT)
567#define CB_SCROLL_LEFT (BUTTON_PREV|BUTTON_REPEAT)
568#define CB_SCROLL_RIGHT (BUTTON_NEXT|BUTTON_REPEAT)
569
556#elif CONFIG_KEYPAD == IHIFI_770_PAD 570#elif CONFIG_KEYPAD == IHIFI_770_PAD
557#define CB_SELECT BUTTON_PLAY 571#define CB_SELECT BUTTON_PLAY
558#define CB_UP BUTTON_PREV 572#define CB_UP BUTTON_PREV
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index 649ab164d0..aee9c9f8e7 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -396,6 +396,16 @@
396#define CHC_SETTINGS_OK BUTTON_PLAY 396#define CHC_SETTINGS_OK BUTTON_PLAY
397#define CHC_SETTINGS_CANCEL BUTTON_POWER 397#define CHC_SETTINGS_CANCEL BUTTON_POWER
398 398
399#elif CONFIG_KEYPAD == FIIO_M3K_PAD
400#define CHC_QUIT BUTTON_POWER
401#define CHC_STARTSTOP BUTTON_PLAY
402#define CHC_RESET BUTTON_OPTION
403#define CHC_MENU BUTTON_HOME
404#define CHC_SETTINGS_INC BUTTON_NEXT
405#define CHC_SETTINGS_DEC BUTTON_PREV
406#define CHC_SETTINGS_OK BUTTON_PLAY
407#define CHC_SETTINGS_CANCEL BUTTON_POWER
408
399#elif CONFIG_KEYPAD == IHIFI_770_PAD 409#elif CONFIG_KEYPAD == IHIFI_770_PAD
400#define CHC_QUIT BUTTON_POWER 410#define CHC_QUIT BUTTON_POWER
401#define CHC_STARTSTOP BUTTON_PLAY 411#define CHC_STARTSTOP BUTTON_PLAY
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index cb7b85786f..bbea442d8e 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -1275,6 +1275,14 @@ CONFIG_KEYPAD == MROBE500_PAD
1275#define CHIP8_KEY6 BUTTON_NEXT 1275#define CHIP8_KEY6 BUTTON_NEXT
1276#define CHIP8_KEY8 BUTTON_OPTION 1276#define CHIP8_KEY8 BUTTON_OPTION
1277 1277
1278#elif CONFIG_KEYPAD == FIIO_M3K_PAD
1279#define CHIP8_OFF BUTTON_POWER
1280#define CHIP8_KEY2 BUTTON_HOME
1281#define CHIP8_KEY4 BUTTON_PREV
1282#define CHIP8_KEY5 BUTTON_PLAY
1283#define CHIP8_KEY6 BUTTON_NEXT
1284#define CHIP8_KEY8 BUTTON_OPTION
1285
1278#elif CONFIG_KEYPAD == IHIFI_770_PAD 1286#elif CONFIG_KEYPAD == IHIFI_770_PAD
1279#define CHIP8_OFF BUTTON_POWER 1287#define CHIP8_OFF BUTTON_POWER
1280#define CHIP8_KEY2 BUTTON_NEXT 1288#define CHIP8_KEY2 BUTTON_NEXT
diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c
index 37fed5dd01..6e9f923460 100644
--- a/apps/plugins/chopper.c
+++ b/apps/plugins/chopper.c
@@ -213,6 +213,11 @@ CONFIG_KEYPAD == MROBE500_PAD
213#define ACTION BUTTON_PLAY 213#define ACTION BUTTON_PLAY
214#define ACTIONTEXT "PLAY" 214#define ACTIONTEXT "PLAY"
215 215
216#elif CONFIG_KEYPAD == FIIO_M3K_PAD
217#define QUIT BUTTON_POWER
218#define ACTION BUTTON_PLAY
219#define ACTIONTEXT "PLAY"
220
216#elif CONFIG_KEYPAD == IHIFI_770_PAD 221#elif CONFIG_KEYPAD == IHIFI_770_PAD
217#define QUIT BUTTON_POWER 222#define QUIT BUTTON_POWER
218#define ACTION BUTTON_PLAY 223#define ACTION BUTTON_PLAY
diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c
index 748090358c..d6b28b54b9 100644
--- a/apps/plugins/clix.c
+++ b/apps/plugins/clix.c
@@ -300,6 +300,14 @@
300#define CLIX_BUTTON_RIGHT BUTTON_NEXT 300#define CLIX_BUTTON_RIGHT BUTTON_NEXT
301#define CLIX_BUTTON_CLICK BUTTON_PLAY 301#define CLIX_BUTTON_CLICK BUTTON_PLAY
302 302
303#elif CONFIG_KEYPAD == FIIO_M3K_PAD
304#define CLIX_BUTTON_QUIT BUTTON_POWER
305#define CLIX_BUTTON_UP BUTTON_HOME
306#define CLIX_BUTTON_DOWN BUTTON_OPTION
307#define CLIX_BUTTON_LEFT BUTTON_PREV
308#define CLIX_BUTTON_RIGHT BUTTON_NEXT
309#define CLIX_BUTTON_CLICK BUTTON_PLAY
310
303#elif CONFIG_KEYPAD == IHIFI_770_PAD 311#elif CONFIG_KEYPAD == IHIFI_770_PAD
304#define CLIX_BUTTON_QUIT BUTTON_POWER 312#define CLIX_BUTTON_QUIT BUTTON_POWER
305#define CLIX_BUTTON_UP BUTTON_PREV 313#define CLIX_BUTTON_UP BUTTON_PREV
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index d2d831f81b..87ab5c1102 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -400,6 +400,16 @@
400#define CUBE_PAUSE BUTTON_HOME 400#define CUBE_PAUSE BUTTON_HOME
401#define CUBE_HIGHSPEED BUTTON_PLAY 401#define CUBE_HIGHSPEED BUTTON_PLAY
402 402
403#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
404#define CUBE_QUIT BUTTON_POWER
405#define CUBE_NEXT BUTTON_NEXT
406#define CUBE_PREV BUTTON_PREV
407#define CUBE_INC BUTTON_VOL_UP
408#define CUBE_DEC BUTTON_VOL_DOWN
409#define CUBE_MODE BUTTON_OPTION
410#define CUBE_PAUSE BUTTON_HOME
411#define CUBE_HIGHSPEED BUTTON_PLAY
412
403#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 413#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
404#define CUBE_QUIT BUTTON_POWER 414#define CUBE_QUIT BUTTON_POWER
405#define CUBE_NEXT BUTTON_NEXT 415#define CUBE_NEXT BUTTON_NEXT
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index fb328639bf..cd3cd90edd 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -588,6 +588,17 @@ void I_ShutdownGraphics(void)
588#define DOOMBUTTON_ENTER BUTTON_PLAY 588#define DOOMBUTTON_ENTER BUTTON_PLAY
589#define DOOMBUTTON_WEAPON BUTTON_VOL_UP 589#define DOOMBUTTON_WEAPON BUTTON_VOL_UP
590 590
591#elif CONFIG_KEYPAD == FIIO_M3K_PAD
592#define DOOMBUTTON_UP BUTTON_UP
593#define DOOMBUTTON_DOWN BUTTON_DOWN
594#define DOOMBUTTON_LEFT BUTTON_PREV
595#define DOOMBUTTON_RIGHT BUTTON_NEXT
596#define DOOMBUTTON_SHOOT BUTTON_PLAY
597#define DOOMBUTTON_OPEN BUTTON_OPTION
598#define DOOMBUTTON_ESC BUTTON_HOME
599#define DOOMBUTTON_ENTER BUTTON_PLAY
600#define DOOMBUTTON_WEAPON BUTTON_VOL_UP
601
591#elif CONFIG_KEYPAD == IHIFI_770_PAD 602#elif CONFIG_KEYPAD == IHIFI_770_PAD
592#define DOOMBUTTON_UP BUTTON_PREV 603#define DOOMBUTTON_UP BUTTON_PREV
593#define DOOMBUTTON_DOWN BUTTON_NEXT 604#define DOOMBUTTON_DOWN BUTTON_NEXT
diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c
index 2ed0263d75..eeb6611488 100644
--- a/apps/plugins/fft/fft.c
+++ b/apps/plugins/fft/fft.c
@@ -352,6 +352,15 @@ GREY_INFO_STRUCT
352# define FFT_AMP_SCALE BUTTON_PLAY 352# define FFT_AMP_SCALE BUTTON_PLAY
353# define FFT_QUIT BUTTON_POWER 353# define FFT_QUIT BUTTON_POWER
354 354
355#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
356# define FFT_PREV_GRAPH BUTTON_PREV
357# define FFT_NEXT_GRAPH BUTTON_NEXT
358# define FFT_ORIENTATION BUTTON_HOME
359# define FFT_FREQ_SCALE BUTTON_OPTION
360# define FFT_WINDOW (BUTTON_HOME|BUTTON_POWER)
361# define FFT_AMP_SCALE BUTTON_PLAY
362# define FFT_QUIT BUTTON_POWER
363
355#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 364#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
356# define FFT_PREV_GRAPH BUTTON_PREV 365# define FFT_PREV_GRAPH BUTTON_PREV
357# define FFT_NEXT_GRAPH BUTTON_NEXT 366# define FFT_NEXT_GRAPH BUTTON_NEXT
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index 91d83e9291..4fe0681417 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -472,6 +472,18 @@
472#define FLIPIT_STEP_BY_STEP (BUTTON_HOME | BUTTON_PLAY) 472#define FLIPIT_STEP_BY_STEP (BUTTON_HOME | BUTTON_PLAY)
473#define FLIPIT_TOGGLE BUTTON_PLAY 473#define FLIPIT_TOGGLE BUTTON_PLAY
474 474
475#elif CONFIG_KEYPAD == FIIO_M3K_PAD
476
477#define FLIPIT_LEFT BUTTON_PREV
478#define FLIPIT_RIGHT BUTTON_NEXT
479#define FLIPIT_UP BUTTON_HOME
480#define FLIPIT_DOWN BUTTON_OPTION
481#define FLIPIT_QUIT BUTTON_POWER
482#define FLIPIT_SHUFFLE (BUTTON_HOME | BUTTON_PREV)
483#define FLIPIT_SOLVE (BUTTON_HOME | BUTTON_NEXT)
484#define FLIPIT_STEP_BY_STEP (BUTTON_HOME | BUTTON_PLAY)
485#define FLIPIT_TOGGLE BUTTON_PLAY
486
475#elif CONFIG_KEYPAD == IHIFI_770_PAD 487#elif CONFIG_KEYPAD == IHIFI_770_PAD
476 488
477#define FLIPIT_LEFT BUTTON_HOME 489#define FLIPIT_LEFT BUTTON_HOME
diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h
index 92a0b87c48..45de45c5cd 100644
--- a/apps/plugins/fractals/fractal.h
+++ b/apps/plugins/fractals/fractal.h
@@ -482,6 +482,18 @@
482#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV) 482#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV)
483#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER) 483#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER)
484 484
485#elif CONFIG_KEYPAD == FIIO_M3K_PAD
486#define FRACTAL_QUIT BUTTON_POWER
487#define FRACTAL_UP BUTTON_HOME
488#define FRACTAL_DOWN BUTTON_OPTION
489#define FRACTAL_LEFT BUTTON_PREV
490#define FRACTAL_RIGHT BUTTON_NEXT
491#define FRACTAL_ZOOM_IN BUTTON_VOL_UP
492#define FRACTAL_ZOOM_OUT BUTTON_VOL_DOWN
493#define FRACTAL_PRECISION_INC (BUTTON_PLAY | BUTTON_NEXT)
494#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_PREV)
495#define FRACTAL_RESET (BUTTON_HOME | BUTTON_POWER)
496
485#elif CONFIG_KEYPAD == IHIFI_770_PAD 497#elif CONFIG_KEYPAD == IHIFI_770_PAD
486#define FRACTAL_QUIT BUTTON_POWER 498#define FRACTAL_QUIT BUTTON_POWER
487#define FRACTAL_UP BUTTON_PREV 499#define FRACTAL_UP BUTTON_PREV
diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h
index ac02d74f50..c6a10e3944 100644
--- a/apps/plugins/goban/goban.h
+++ b/apps/plugins/goban/goban.h
@@ -467,6 +467,18 @@
467#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT 467#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
468#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER 468#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER
469 469
470#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
471#define GBN_BUTTON_UP BUTTON_HOME
472#define GBN_BUTTON_DOWN BUTTON_OPTION
473#define GBN_BUTTON_LEFT BUTTON_PREV
474#define GBN_BUTTON_RIGHT BUTTON_NEXT
475#define GBN_BUTTON_RETREAT BUTTON_VOL_DOWN
476#define GBN_BUTTON_ADVANCE BUTTON_VOL_UP
477#define GBN_BUTTON_MENU BUTTON_POWER
478#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL
479#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT
480#define GBN_BUTTON_NEXT_VAR BUTTON_HOME | BUTTON_POWER
481
470#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 482#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
471 483
472#define GBN_BUTTON_UP BUTTON_PREV 484#define GBN_BUTTON_UP BUTTON_PREV
diff --git a/apps/plugins/imageviewer/imageviewer_button.h b/apps/plugins/imageviewer/imageviewer_button.h
index 7aa96023c6..e637a09ca9 100644
--- a/apps/plugins/imageviewer/imageviewer_button.h
+++ b/apps/plugins/imageviewer/imageviewer_button.h
@@ -506,6 +506,21 @@
506#define IMGVIEW_MENU BUTTON_POWER 506#define IMGVIEW_MENU BUTTON_POWER
507#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER) 507#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER)
508 508
509#elif CONFIG_KEYPAD == FIIO_M3K_PAD
510#define IMGVIEW_ZOOM_PRE BUTTON_PLAY
511#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL)
512#define IMGVIEW_ZOOM_OUT (BUTTON_PLAY | BUTTON_REPEAT)
513#define IMGVIEW_UP BUTTON_HOME
514#define IMGVIEW_DOWN BUTTON_OPTION
515#define IMGVIEW_LEFT BUTTON_PREV
516#define IMGVIEW_RIGHT BUTTON_NEXT
517#define IMGVIEW_NEXT BUTTON_VOL_UP
518#define IMGVIEW_NEXT_REPEAT (BUTTON_VOL_UP|BUTTON_REPEAT)
519#define IMGVIEW_PREVIOUS BUTTON_VOL_DOWN
520#define IMGVIEW_PREVIOUS_REPEAT (BUTTON_VOL_DOWN|BUTTON_REPEAT)
521#define IMGVIEW_MENU BUTTON_POWER
522#define IMGVIEW_SLIDE_SHOW (BUTTON_HOME|BUTTON_POWER)
523
509#elif CONFIG_KEYPAD == IHIFI_770_PAD 524#elif CONFIG_KEYPAD == IHIFI_770_PAD
510#define IMGVIEW_ZOOM_PRE BUTTON_PLAY 525#define IMGVIEW_ZOOM_PRE BUTTON_PLAY
511#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL) 526#define IMGVIEW_ZOOM_IN (BUTTON_PLAY | BUTTON_REL)
diff --git a/apps/plugins/invadrox.c b/apps/plugins/invadrox.c
index e275129d27..5e3cb12163 100644
--- a/apps/plugins/invadrox.c
+++ b/apps/plugins/invadrox.c
@@ -282,6 +282,13 @@ CONFIG_KEYPAD == MROBE500_PAD
282#define RIGHT BUTTON_VOL_DOWN 282#define RIGHT BUTTON_VOL_DOWN
283#define FIRE BUTTON_VOL_UP 283#define FIRE BUTTON_VOL_UP
284 284
285#elif CONFIG_KEYPAD == FIIO_M3K_PAD
286
287#define QUIT BUTTON_POWER
288#define LEFT BUTTON_HOME
289#define RIGHT BUTTON_VOL_DOWN
290#define FIRE BUTTON_VOL_UP
291
285#elif CONFIG_KEYPAD == IHIFI_770_PAD 292#elif CONFIG_KEYPAD == IHIFI_770_PAD
286 293
287#define QUIT BUTTON_POWER 294#define QUIT BUTTON_POWER
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index f94825650f..64a15ff4fc 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -377,6 +377,16 @@ CONFIG_KEYPAD == MROBE500_PAD
377#define HK_SELECT "PLAY" 377#define HK_SELECT "PLAY"
378#define HK_CANCEL "POWER" 378#define HK_CANCEL "POWER"
379 379
380#elif CONFIG_KEYPAD == FIIO_M3K_PAD
381#define JEWELS_UP BUTTON_HOME
382#define JEWELS_DOWN BUTTON_OPTION
383#define JEWELS_LEFT BUTTON_PREV
384#define JEWELS_RIGHT BUTTON_NEXT
385#define JEWELS_SELECT BUTTON_PLAY
386#define JEWELS_CANCEL BUTTON_POWER
387#define HK_SELECT "PLAY"
388#define HK_CANCEL "POWER"
389
380#elif CONFIG_KEYPAD == IHIFI_770_PAD 390#elif CONFIG_KEYPAD == IHIFI_770_PAD
381#define JEWELS_UP BUTTON_PREV 391#define JEWELS_UP BUTTON_PREV
382#define JEWELS_DOWN BUTTON_NEXT 392#define JEWELS_DOWN BUTTON_NEXT
diff --git a/apps/plugins/lib/keymaps.h b/apps/plugins/lib/keymaps.h
index e3de03f222..2865f9cdd7 100644
--- a/apps/plugins/lib/keymaps.h
+++ b/apps/plugins/lib/keymaps.h
@@ -239,6 +239,14 @@
239#define BTN_FIRE BUTTON_PLAY 239#define BTN_FIRE BUTTON_PLAY
240#define BTN_PAUSE BUTTON_POWER 240#define BTN_PAUSE BUTTON_POWER
241 241
242#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
243#define BTN_UP BUTTON_VOL_UP
244#define BTN_DOWN BUTTON_VOL_DOWN
245#define BTN_LEFT BUTTON_PREV
246#define BTN_RIGHT BUTTON_NEXT
247#define BTN_FIRE BUTTON_PLAY
248#define BTN_PAUSE BUTTON_POWER
249
242#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 250#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
243#define BTN_UP BUTTON_PREV 251#define BTN_UP BUTTON_PREV
244#define BTN_DOWN BUTTON_NEXT 252#define BTN_DOWN BUTTON_NEXT
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index c580074d5e..480dc446cb 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -233,6 +233,15 @@ const struct button_mapping pla_main_ctx[] =
233 { PLA_DOWN_REPEAT, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_NONE }, 233 { PLA_DOWN_REPEAT, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_NONE },
234 { PLA_LEFT_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE }, 234 { PLA_LEFT_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
235 { PLA_RIGHT_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE }, 235 { PLA_RIGHT_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
236#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
237 { PLA_UP, BUTTON_HOME, BUTTON_NONE },
238 { PLA_DOWN, BUTTON_OPTION, BUTTON_NONE },
239 { PLA_LEFT, BUTTON_PREV, BUTTON_NONE },
240 { PLA_RIGHT, BUTTON_NEXT, BUTTON_NONE },
241 { PLA_UP_REPEAT, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE },
242 { PLA_DOWN_REPEAT, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_NONE },
243 { PLA_LEFT_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
244 { PLA_RIGHT_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
236#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 245#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
237 { PLA_UP, BUTTON_PREV, BUTTON_NONE }, 246 { PLA_UP, BUTTON_PREV, BUTTON_NONE },
238 { PLA_DOWN, BUTTON_NEXT, BUTTON_NONE }, 247 { PLA_DOWN, BUTTON_NEXT, BUTTON_NONE },
@@ -464,6 +473,12 @@ const struct button_mapping pla_main_ctx[] =
464 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE}, 473 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
465 {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY}, 474 {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
466 {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, 475 {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
476#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
477 {PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER},
478 {PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE},
479 {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
480 {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
481 {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
467#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 482#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
468 {PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER}, 483 {PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER},
469 {PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE}, 484 {PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE},
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index e6e2b4bf51..e34cedde21 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -317,6 +317,14 @@
317#define MIDI_VOL_DOWN BUTTON_VOL_DOWN 317#define MIDI_VOL_DOWN BUTTON_VOL_DOWN
318#define MIDI_PLAYPAUSE BUTTON_PLAY 318#define MIDI_PLAYPAUSE BUTTON_PLAY
319 319
320#elif CONFIG_KEYPAD == FIIO_M3K_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
320#elif CONFIG_KEYPAD == IHIFI_770_PAD 328#elif CONFIG_KEYPAD == IHIFI_770_PAD
321#define MIDI_QUIT BUTTON_POWER 329#define MIDI_QUIT BUTTON_POWER
322#define MIDI_FFWD BUTTON_VOL_DOWN 330#define MIDI_FFWD BUTTON_VOL_DOWN
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 01659dbfd2..5872973a45 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -408,6 +408,19 @@ CONFIG_KEYPAD == MROBE500_PAD
408# define MINESWP_DISCOVER2 BUTTON_VOL_UP 408# define MINESWP_DISCOVER2 BUTTON_VOL_UP
409# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION) 409# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION)
410 410
411#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
412# define MINESWP_LEFT BUTTON_PREV
413# define MINESWP_RIGHT BUTTON_NEXT
414# define MINESWP_UP BUTTON_HOME
415# define MINESWP_DOWN BUTTON_OPTION
416# define MINESWP_QUIT BUTTON_POWER
417# define MINESWP_TOGGLE_PRE BUTTON_PLAY
418# define MINESWP_TOGGLE (BUTTON_PLAY | BUTTON_REL)
419# define MINESWP_TOGGLE2 BUTTON_VOL_DOWN
420# define MINESWP_DISCOVER (BUTTON_PLAY | BUTTON_REPEAT)
421# define MINESWP_DISCOVER2 BUTTON_VOL_UP
422# define MINESWP_INFO (BUTTON_PLAY | BUTTON_OPTION)
423
411#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 424#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
412# define MINESWP_LEFT BUTTON_HOME 425# define MINESWP_LEFT BUTTON_HOME
413# define MINESWP_RIGHT BUTTON_VOL_DOWN 426# define MINESWP_RIGHT BUTTON_VOL_DOWN
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index 3b912ba606..0368edbc88 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -2574,6 +2574,11 @@ CONFIG_KEYPAD == MROBE500_PAD
2574#define MP3ENC_DONE BUTTON_POWER 2574#define MP3ENC_DONE BUTTON_POWER
2575#define MP3ENC_SELECT BUTTON_PLAY 2575#define MP3ENC_SELECT BUTTON_PLAY
2576 2576
2577#elif CONFIG_KEYPAD == FIIO_M3K_PAD
2578#define MP3ENC_PREV BUTTON_HOME
2579#define MP3ENC_NEXT BUTTON_OPTION
2580#define MP3ENC_DONE BUTTON_POWER
2581#define MP3ENC_SELECT BUTTON_PLAY
2577 2582
2578#elif CONFIG_KEYPAD == IHIFI_770_PAD 2583#elif CONFIG_KEYPAD == IHIFI_770_PAD
2579#define MP3ENC_PREV BUTTON_PREV 2584#define MP3ENC_PREV BUTTON_PREV
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index 25eb313591..43143bdaee 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -336,6 +336,16 @@ struct mpeg_settings settings;
336#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN 336#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN
337#define MPEG_START_TIME_EXIT BUTTON_POWER 337#define MPEG_START_TIME_EXIT BUTTON_POWER
338 338
339#elif CONFIG_KEYPAD == FIIO_M3K_PAD
340#define MPEG_START_TIME_SELECT BUTTON_PLAY
341#define MPEG_START_TIME_LEFT BUTTON_PREV
342#define MPEG_START_TIME_RIGHT BUTTON_NEXT
343#define MPEG_START_TIME_UP BUTTON_HOME
344#define MPEG_START_TIME_DOWN BUTTON_OPTION
345#define MPEG_START_TIME_LEFT2 BUTTON_VOL_UP
346#define MPEG_START_TIME_RIGHT2 BUTTON_VOL_DOWN
347#define MPEG_START_TIME_EXIT BUTTON_POWER
348
339#elif CONFIG_KEYPAD == IHIFI_770_PAD 349#elif CONFIG_KEYPAD == IHIFI_770_PAD
340#define MPEG_START_TIME_SELECT BUTTON_PLAY 350#define MPEG_START_TIME_SELECT BUTTON_PLAY
341#define MPEG_START_TIME_LEFT BUTTON_HOME 351#define MPEG_START_TIME_LEFT BUTTON_HOME
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 5c06fe257d..8028913c94 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -468,6 +468,15 @@ CONFIG_KEYPAD == SANSA_M200_PAD
468#define MPEG_RW BUTTON_PREV 468#define MPEG_RW BUTTON_PREV
469#define MPEG_FF BUTTON_NEXT 469#define MPEG_FF BUTTON_NEXT
470 470
471#elif CONFIG_KEYPAD == FIIO_M3K_PAD
472#define MPEG_MENU BUTTON_PLAY
473#define MPEG_STOP BUTTON_POWER
474#define MPEG_PAUSE BUTTON_HOME
475#define MPEG_VOLDOWN BUTTON_VOL_DOWN
476#define MPEG_VOLUP BUTTON_VOL_UP
477#define MPEG_RW BUTTON_PREV
478#define MPEG_FF BUTTON_NEXT
479
471#elif CONFIG_KEYPAD == IHIFI_770_PAD 480#elif CONFIG_KEYPAD == IHIFI_770_PAD
472#define MPEG_MENU BUTTON_PLAY 481#define MPEG_MENU BUTTON_PLAY
473#define MPEG_STOP BUTTON_POWER 482#define MPEG_STOP BUTTON_POWER
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 4fd1883f82..2cf9b96409 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -512,6 +512,19 @@
512#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN 512#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
513#define NEED_LASTBUTTON 513#define NEED_LASTBUTTON
514 514
515#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
516#define OSCILLOSCOPE_QUIT BUTTON_POWER
517#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_PLAY
518#define OSCILLOSCOPE_DRAWMODE (BUTTON_PLAY | BUTTON_REL)
519#define OSCILLOSCOPE_ORIENTATION_PRE BUTTON_PLAY
520#define OSCILLOSCOPE_ORIENTATION (BUTTON_PLAY | BUTTON_REPEAT)
521#define OSCILLOSCOPE_ADVMODE BUTTON_HOME
522#define OSCILLOSCOPE_PAUSE BUTTON_OPTION
523#define OSCILLOSCOPE_SPEED_UP BUTTON_NEXT
524#define OSCILLOSCOPE_SPEED_DOWN BUTTON_PREV
525#define OSCILLOSCOPE_VOL_UP BUTTON_VOL_UP
526#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
527#define NEED_LASTBUTTON
515 528
516#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 529#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
517#define OSCILLOSCOPE_QUIT BUTTON_POWER 530#define OSCILLOSCOPE_QUIT BUTTON_POWER
diff --git a/apps/plugins/pacbox/pacbox.h b/apps/plugins/pacbox/pacbox.h
index 78a171467a..a687806d96 100644
--- a/apps/plugins/pacbox/pacbox.h
+++ b/apps/plugins/pacbox/pacbox.h
@@ -382,6 +382,14 @@
382#define PACMAN_1UP BUTTON_VOL_UP 382#define PACMAN_1UP BUTTON_VOL_UP
383#define PACMAN_COIN BUTTON_PLAY 383#define PACMAN_COIN BUTTON_PLAY
384 384
385#elif CONFIG_KEYPAD == FIIO_M3K_PAD
386#define PACMAN_UP BUTTON_PREV
387#define PACMAN_DOWN BUTTON_NEXT
388#define PACMAN_LEFT BUTTON_HOME
389#define PACMAN_RIGHT BUTTON_VOL_DOWN
390#define PACMAN_MENU BUTTON_POWER
391#define PACMAN_1UP BUTTON_VOL_UP
392#define PACMAN_COIN BUTTON_PLAY
385 393
386#elif CONFIG_KEYPAD == IHIFI_770_PAD 394#elif CONFIG_KEYPAD == IHIFI_770_PAD
387#define PACMAN_UP BUTTON_PREV 395#define PACMAN_UP BUTTON_PREV
diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c
index 0a299c995f..5f947fe5f2 100644
--- a/apps/plugins/pegbox.c
+++ b/apps/plugins/pegbox.c
@@ -660,6 +660,23 @@ 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
664#define PEGBOX_SELECT BUTTON_PLAY
665#define PEGBOX_QUIT BUTTON_POWER
666#define PEGBOX_RESTART (BUTTON_POWER | BUTTON_HOME)
667#define PEGBOX_LVL_UP BUTTON_VOL_UP
668#define PEGBOX_LVL_DOWN BUTTON_VOL_DOWN
669#define PEGBOX_UP BUTTON_HOME
670#define PEGBOX_DOWN BUTTON_OPTION
671#define PEGBOX_RIGHT BUTTON_NEXT
672#define PEGBOX_LEFT BUTTON_PREV
673
674#define SELECT_TEXT "PLAY"
675#define QUIT_TEXT "POWER"
676#define RESTART_TEXT "HOME"
677#define LVL_UP_TEXT "VOL+"
678#define LVL_DOWN_TEXT "VOL-"
679
663#elif CONFIG_KEYPAD == IHIFI_770_PAD 680#elif CONFIG_KEYPAD == IHIFI_770_PAD
664#define PEGBOX_SELECT BUTTON_PLAY 681#define PEGBOX_SELECT BUTTON_PLAY
665#define PEGBOX_QUIT BUTTON_POWER 682#define PEGBOX_QUIT BUTTON_POWER
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index a000a88fe7..41525f3ffe 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -309,6 +309,14 @@ CONFIG_KEYPAD == MROBE500_PAD
309#define PONG_RIGHT_UP BUTTON_HOME 309#define PONG_RIGHT_UP BUTTON_HOME
310#define PONG_RIGHT_DOWN BUTTON_NEXT 310#define PONG_RIGHT_DOWN BUTTON_NEXT
311 311
312#elif CONFIG_KEYPAD == FIIO_M3K_PAD
313#define PONG_QUIT BUTTON_POWER
314#define PONG_PAUSE BUTTON_PLAY
315#define PONG_LEFT_UP BUTTON_PREV
316#define PONG_LEFT_DOWN BUTTON_OPTION
317#define PONG_RIGHT_UP BUTTON_HOME
318#define PONG_RIGHT_DOWN BUTTON_NEXT
319
312#elif CONFIG_KEYPAD == IHIFI_770_PAD 320#elif CONFIG_KEYPAD == IHIFI_770_PAD
313#define PONG_QUIT BUTTON_POWER 321#define PONG_QUIT BUTTON_POWER
314#define PONG_PAUSE BUTTON_PREV 322#define PONG_PAUSE BUTTON_PREV
diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h
index ceeabeebc8..1547e52573 100644
--- a/apps/plugins/reversi/reversi-gui.h
+++ b/apps/plugins/reversi/reversi-gui.h
@@ -341,6 +341,17 @@
341#define REVERSI_BUTTON_MENU BUTTON_PLAY 341#define REVERSI_BUTTON_MENU BUTTON_PLAY
342#define REVERSI_BUTTON_MENU_LONGPRESS 342#define REVERSI_BUTTON_MENU_LONGPRESS
343 343
344#elif CONFIG_KEYPAD == FIIO_M3K_PAD
345#define REVERSI_BUTTON_QUIT BUTTON_POWER
346#define REVERSI_BUTTON_UP BUTTON_HOME
347#define REVERSI_BUTTON_DOWN BUTTON_OPTION
348#define REVERSI_BUTTON_LEFT BUTTON_PREV
349#define REVERSI_BUTTON_RIGHT BUTTON_NEXT
350#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY
351#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
352#define REVERSI_BUTTON_MENU BUTTON_PLAY
353#define REVERSI_BUTTON_MENU_LONGPRESS
354
344#elif CONFIG_KEYPAD == IHIFI_770_PAD 355#elif CONFIG_KEYPAD == IHIFI_770_PAD
345#define REVERSI_BUTTON_QUIT BUTTON_POWER 356#define REVERSI_BUTTON_QUIT BUTTON_POWER
346#define REVERSI_BUTTON_UP BUTTON_PREV 357#define REVERSI_BUTTON_UP BUTTON_PREV
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index f1f260a55d..ec6d892a0b 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -467,6 +467,18 @@
467#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL) 467#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL)
468#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT) 468#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT)
469 469
470#elif CONFIG_KEYPAD == FIIO_M3K_PAD
471
472#define ROCKBLOX_OFF BUTTON_POWER
473#define ROCKBLOX_ROTATE_CCW BUTTON_HOME
474#define ROCKBLOX_ROTATE_CCW2 BUTTON_VOL_DOWN
475#define ROCKBLOX_ROTATE_CW BUTTON_VOL_UP
476#define ROCKBLOX_DOWN BUTTON_OPTION
477#define ROCKBLOX_LEFT BUTTON_PREV
478#define ROCKBLOX_RIGHT BUTTON_NEXT
479#define ROCKBLOX_DROP (BUTTON_PLAY|BUTTON_REL)
480#define ROCKBLOX_RESTART (BUTTON_PLAY|BUTTON_REPEAT)
481
470#elif CONFIG_KEYPAD == IHIFI_770_PAD 482#elif CONFIG_KEYPAD == IHIFI_770_PAD
471 483
472#define ROCKBLOX_OFF BUTTON_POWER 484#define ROCKBLOX_OFF BUTTON_POWER
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index 29269f18fb..c96946cf7d 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -445,6 +445,16 @@ static void setoptions (void)
445 options.SELECT = BUTTON_VOL_UP; 445 options.SELECT = BUTTON_VOL_UP;
446 options.MENU = BUTTON_POWER; 446 options.MENU = BUTTON_POWER;
447 447
448#elif CONFIG_KEYPAD == FIIO_M3K_PAD
449 options.UP = BUTTON_PREV;
450 options.DOWN = BUTTON_NEXT;
451
452 options.A = BUTTON_HOME;
453 options.B = BUTTON_OPTION;
454 options.START = BUTTON_VOL_DOWN;
455 options.SELECT = BUTTON_VOL_UP;
456 options.MENU = BUTTON_POWER;
457
448#elif CONFIG_KEYPAD == IHIFI_770_PAD 458#elif CONFIG_KEYPAD == IHIFI_770_PAD
449 options.UP = BUTTON_PREV; 459 options.UP = BUTTON_PREV;
450 options.DOWN = BUTTON_NEXT; 460 options.DOWN = BUTTON_NEXT;
diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c
index 8e4df10280..f28fbdf622 100644
--- a/apps/plugins/rockpaint.c
+++ b/apps/plugins/rockpaint.c
@@ -338,6 +338,39 @@
338#define ROCKPAINT_LEFT BUTTON_PREV 338#define ROCKPAINT_LEFT BUTTON_PREV
339#define ROCKPAINT_RIGHT BUTTON_NEXT 339#define ROCKPAINT_RIGHT BUTTON_NEXT
340 340
341#elif CONFIG_KEYPAD == XDUOO_X3II_PAD
342#define ROCKPAINT_QUIT BUTTON_POWER
343#define ROCKPAINT_DRAW BUTTON_PLAY
344#define ROCKPAINT_MENU (BUTTON_HOME | BUTTON_POWER)
345#define ROCKPAINT_TOOLBAR BUTTON_VOL_UP
346#define ROCKPAINT_TOOLBAR2 BUTTON_VOL_DOWN
347#define ROCKPAINT_UP BUTTON_HOME
348#define ROCKPAINT_DOWN BUTTON_OPTION
349#define ROCKPAINT_LEFT BUTTON_PREV
350#define ROCKPAINT_RIGHT BUTTON_NEXT
351
352#elif CONFIG_KEYPAD == XDUOO_X20_PAD
353#define ROCKPAINT_QUIT BUTTON_POWER
354#define ROCKPAINT_DRAW BUTTON_PLAY
355#define ROCKPAINT_MENU (BUTTON_HOME | BUTTON_POWER)
356#define ROCKPAINT_TOOLBAR BUTTON_VOL_UP
357#define ROCKPAINT_TOOLBAR2 BUTTON_VOL_DOWN
358#define ROCKPAINT_UP BUTTON_HOME
359#define ROCKPAINT_DOWN BUTTON_OPTION
360#define ROCKPAINT_LEFT BUTTON_PREV
361#define ROCKPAINT_RIGHT BUTTON_NEXT
362
363#elif CONFIG_KEYPAD == FIIO_M3K_PAD
364#define ROCKPAINT_QUIT BUTTON_POWER
365#define ROCKPAINT_DRAW BUTTON_PLAY
366#define ROCKPAINT_MENU (BUTTON_HOME | BUTTON_POWER)
367#define ROCKPAINT_TOOLBAR BUTTON_VOL_UP
368#define ROCKPAINT_TOOLBAR2 BUTTON_VOL_DOWN
369#define ROCKPAINT_UP BUTTON_HOME
370#define ROCKPAINT_DOWN BUTTON_OPTION
371#define ROCKPAINT_LEFT BUTTON_PREV
372#define ROCKPAINT_RIGHT BUTTON_NEXT
373
341#elif CONFIG_KEYPAD == IHIFI_770_PAD 374#elif CONFIG_KEYPAD == IHIFI_770_PAD
342#define ROCKPAINT_QUIT BUTTON_POWER 375#define ROCKPAINT_QUIT BUTTON_POWER
343#define ROCKPAINT_DRAW BUTTON_PLAY 376#define ROCKPAINT_DRAW BUTTON_PLAY
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index e8d349defd..7683016066 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -330,6 +330,14 @@ CONFIG_KEYPAD == MROBE500_PAD
330#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER) 330#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER)
331#define PUZZLE_PICTURE BUTTON_PLAY 331#define PUZZLE_PICTURE BUTTON_PLAY
332 332
333#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
334#define PUZZLE_QUIT BUTTON_POWER
335#define PUZZLE_LEFT BUTTON_PREV
336#define PUZZLE_RIGHT BUTTON_NEXT
337#define PUZZLE_UP BUTTON_HOME
338#define PUZZLE_DOWN BUTTON_OPTION
339#define PUZZLE_SHUFFLE (BUTTON_HOME | BUTTON_POWER)
340#define PUZZLE_PICTURE BUTTON_PLAY
333 341
334#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 342#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
335#define PUZZLE_QUIT BUTTON_POWER 343#define PUZZLE_QUIT BUTTON_POWER
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index 4471cd12a6..ebfb39c9a7 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -289,6 +289,14 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
289#define SNAKE_DOWN BUTTON_OPTION 289#define SNAKE_DOWN BUTTON_OPTION
290#define SNAKE_PLAYPAUSE BUTTON_PLAY 290#define SNAKE_PLAYPAUSE BUTTON_PLAY
291 291
292#elif CONFIG_KEYPAD == FIIO_M3K_PAD
293#define SNAKE_QUIT BUTTON_POWER
294#define SNAKE_LEFT BUTTON_PREV
295#define SNAKE_RIGHT BUTTON_NEXT
296#define SNAKE_UP BUTTON_HOME
297#define SNAKE_DOWN BUTTON_OPTION
298#define SNAKE_PLAYPAUSE BUTTON_PLAY
299
292#elif CONFIG_KEYPAD == IHIFI_770_PAD 300#elif CONFIG_KEYPAD == IHIFI_770_PAD
293#define SNAKE_QUIT BUTTON_POWER 301#define SNAKE_QUIT BUTTON_POWER
294#define SNAKE_LEFT BUTTON_HOME 302#define SNAKE_LEFT BUTTON_HOME
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index bfff0bf870..77400dfff1 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -419,6 +419,15 @@ CONFIG_KEYPAD == MROBE500_PAD
419#define SNAKE2_PLAYPAUSE BUTTON_PLAY 419#define SNAKE2_PLAYPAUSE BUTTON_PLAY
420#define SNAKE2_PLAYPAUSE_TEXT "PLAY" 420#define SNAKE2_PLAYPAUSE_TEXT "PLAY"
421 421
422#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
423#define SNAKE2_LEFT BUTTON_PREV
424#define SNAKE2_RIGHT BUTTON_NEXT
425#define SNAKE2_UP BUTTON_HOME
426#define SNAKE2_DOWN BUTTON_OPTION
427#define SNAKE2_QUIT BUTTON_POWER
428#define SNAKE2_PLAYPAUSE BUTTON_PLAY
429#define SNAKE2_PLAYPAUSE_TEXT "PLAY"
430
422#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 431#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
423#define SNAKE2_LEFT BUTTON_HOME 432#define SNAKE2_LEFT BUTTON_HOME
424#define SNAKE2_RIGHT BUTTON_VOL_DOWN 433#define SNAKE2_RIGHT BUTTON_VOL_DOWN
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index 08359d9fcc..da3c303ace 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -663,6 +663,22 @@
663#define BUTTON_SAVE BUTTON_PLAY 663#define BUTTON_SAVE BUTTON_PLAY
664#define BUTTON_SAVE_NAME "PLAY" 664#define BUTTON_SAVE_NAME "PLAY"
665 665
666#elif CONFIG_KEYPAD == FIIO_M3K_PAD
667#define SOKOBAN_LEFT BUTTON_PREV
668#define SOKOBAN_RIGHT BUTTON_NEXT
669#define SOKOBAN_UP BUTTON_HOME
670#define SOKOBAN_DOWN BUTTON_OPTION
671#define SOKOBAN_MENU BUTTON_POWER
672#define SOKOBAN_UNDO_PRE BUTTON_PLAY
673#define SOKOBAN_UNDO (BUTTON_PLAY | BUTTON_REL)
674#define SOKOBAN_REDO (BUTTON_POWER | BUTTON_PLAY)
675#define SOKOBAN_LEVEL_DOWN BUTTON_VOL_DOWN
676#define SOKOBAN_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_NEXT)
677#define SOKOBAN_LEVEL_UP BUTTON_VOL_UP
678#define SOKOBAN_PAUSE BUTTON_PLAY
679#define BUTTON_SAVE BUTTON_PLAY
680#define BUTTON_SAVE_NAME "PLAY"
681
666#elif CONFIG_KEYPAD == IHIFI_770_PAD 682#elif CONFIG_KEYPAD == IHIFI_770_PAD
667#define SOKOBAN_LEFT BUTTON_HOME 683#define SOKOBAN_LEFT BUTTON_HOME
668#define SOKOBAN_RIGHT BUTTON_VOL_DOWN 684#define SOKOBAN_RIGHT BUTTON_VOL_DOWN
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index a7844fba92..1996dc97e7 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -684,6 +684,25 @@ CONFIG_KEYPAD == MROBE500_PAD
684# define HK_CUR2STACK "DBL PLAY" 684# define HK_CUR2STACK "DBL PLAY"
685# define HK_REM2STACK "NEXT" 685# define HK_REM2STACK "NEXT"
686 686
687#elif CONFIG_KEYPAD == FIIO_M3K_PAD
688# define SOL_QUIT BUTTON_POWER
689# define SOL_UP BUTTON_HOME
690# define SOL_DOWN BUTTON_OPTION
691# define SOL_LEFT BUTTON_PREV
692# define SOL_RIGHT BUTTON_NEXT
693# define SOL_MOVE_PRE BUTTON_PLAY
694# define SOL_MOVE (BUTTON_PLAY | BUTTON_REL)
695# define SOL_DRAW (BUTTON_POWER | BUTTON_REPEAT)
696# define SOL_REM2CUR BUTTON_VOL_DOWN
697# define SOL_CUR2STACK_PRE BUTTON_PLAY
698# define SOL_CUR2STACK (BUTTON_PLAY | BUTTON_REPEAT)
699# define SOL_REM2STACK BUTTON_VOL_UP
700# define HK_MOVE "PLAY"
701# define HK_DRAW "DBL HOME"
702# define HK_REM2CUR "PREV"
703# define HK_CUR2STACK "DBL PLAY"
704# define HK_REM2STACK "NEXT"
705
687#elif CONFIG_KEYPAD == IHIFI_770_PAD 706#elif CONFIG_KEYPAD == IHIFI_770_PAD
688# define SOL_QUIT BUTTON_POWER 707# define SOL_QUIT BUTTON_POWER
689# define SOL_UP BUTTON_PREV 708# define SOL_UP BUTTON_PREV
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index b366da0d60..1b3bdda0d1 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -354,6 +354,15 @@
354#define AST_RIGHT BUTTON_NEXT 354#define AST_RIGHT BUTTON_NEXT
355#define AST_FIRE BUTTON_PLAY 355#define AST_FIRE BUTTON_PLAY
356 356
357#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
358#define AST_PAUSE BUTTON_VOL_UP
359#define AST_QUIT BUTTON_POWER
360#define AST_THRUST BUTTON_HOME
361#define AST_HYPERSPACE BUTTON_OPTION
362#define AST_LEFT BUTTON_PREV
363#define AST_RIGHT BUTTON_NEXT
364#define AST_FIRE BUTTON_PLAY
365
357#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 366#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
358#define AST_PAUSE BUTTON_PLAY 367#define AST_PAUSE BUTTON_PLAY
359#define AST_QUIT BUTTON_POWER 368#define AST_QUIT BUTTON_POWER
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index ea1d5b8bf8..cf8522fbac 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -620,6 +620,22 @@
620#define STAR_LEVEL_DOWN_NAME "PLAY + PREV" 620#define STAR_LEVEL_DOWN_NAME "PLAY + PREV"
621#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION" 621#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION"
622 622
623#elif CONFIG_KEYPAD == FIIO_M3K_PAD
624#define STAR_QUIT BUTTON_POWER
625#define STAR_LEFT BUTTON_PREV
626#define STAR_RIGHT BUTTON_NEXT
627#define STAR_UP BUTTON_HOME
628#define STAR_DOWN BUTTON_OPTION
629#define STAR_TOGGLE_CONTROL BUTTON_PLAY
630#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_NEXT)
631#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_PREV)
632#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_OPTION)
633#define STAR_TOGGLE_CONTROL_NAME "PLAY"
634#define STAR_QUIT_NAME "POWER"
635#define STAR_LEVEL_UP_NAME "PLAY + NEXT"
636#define STAR_LEVEL_DOWN_NAME "PLAY + PREV"
637#define STAR_LEVEL_REPEAT_NAME "PLAY + OPTION"
638
623#elif CONFIG_KEYPAD == IHIFI_770_PAD 639#elif CONFIG_KEYPAD == IHIFI_770_PAD
624#define STAR_QUIT BUTTON_POWER 640#define STAR_QUIT BUTTON_POWER
625#define STAR_LEFT BUTTON_HOME 641#define STAR_LEFT BUTTON_HOME
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index 6fca37d06f..801c735f00 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -301,6 +301,14 @@
301#define STOPWATCH_SCROLL_UP BUTTON_HOME 301#define STOPWATCH_SCROLL_UP BUTTON_HOME
302#define STOPWATCH_SCROLL_DOWN BUTTON_OPTION 302#define STOPWATCH_SCROLL_DOWN BUTTON_OPTION
303 303
304#elif CONFIG_KEYPAD == FIIO_M3K_PAD
305#define STOPWATCH_QUIT BUTTON_POWER
306#define STOPWATCH_START_STOP BUTTON_NEXT
307#define STOPWATCH_RESET_TIMER BUTTON_PREV
308#define STOPWATCH_LAP_TIMER BUTTON_PLAY
309#define STOPWATCH_SCROLL_UP BUTTON_HOME
310#define STOPWATCH_SCROLL_DOWN BUTTON_OPTION
311
304#elif CONFIG_KEYPAD == IHIFI_770_PAD 312#elif CONFIG_KEYPAD == IHIFI_770_PAD
305#define STOPWATCH_QUIT BUTTON_POWER 313#define STOPWATCH_QUIT BUTTON_POWER
306#define STOPWATCH_START_STOP BUTTON_NEXT 314#define STOPWATCH_START_STOP BUTTON_NEXT
diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h
index 434223ef68..749087260d 100644
--- a/apps/plugins/sudoku/sudoku.h
+++ b/apps/plugins/sudoku/sudoku.h
@@ -432,6 +432,20 @@
432#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL) 432#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL)
433#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_POWER) 433#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_POWER)
434 434
435#elif CONFIG_KEYPAD == FIIO_M3K_PAD
436#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER
437#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT)
438#define SUDOKU_BUTTON_UP BUTTON_HOME
439#define SUDOKU_BUTTON_DOWN BUTTON_OPTION
440#define SUDOKU_BUTTON_LEFT BUTTON_PREV
441#define SUDOKU_BUTTON_RIGHT BUTTON_NEXT
442#define SUDOKU_BUTTON_TOGGLEBACK BUTTON_VOL_DOWN
443#define SUDOKU_BUTTON_TOGGLE BUTTON_VOL_UP
444#define SUDOKU_BUTTON_ALTTOGGLE BUTTON_PLAY
445#define SUDOKU_BUTTON_MENU_PRE BUTTON_POWER
446#define SUDOKU_BUTTON_MENU (BUTTON_POWER | BUTTON_REL)
447#define SUDOKU_BUTTON_POSSIBLE (BUTTON_HOME | BUTTON_POWER)
448
435#elif CONFIG_KEYPAD == IHIFI_770_PAD 449#elif CONFIG_KEYPAD == IHIFI_770_PAD
436#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER 450#define SUDOKU_BUTTON_QUIT_PRE BUTTON_POWER
437#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT) 451#define SUDOKU_BUTTON_QUIT (BUTTON_POWER | BUTTON_REPEAT)
diff --git a/apps/plugins/text_viewer/tv_button.h b/apps/plugins/text_viewer/tv_button.h
index 6fcfc24e4f..dea87ebd52 100644
--- a/apps/plugins/text_viewer/tv_button.h
+++ b/apps/plugins/text_viewer/tv_button.h
@@ -533,6 +533,18 @@
533#define TV_LINE_DOWN BUTTON_OPTION 533#define TV_LINE_DOWN BUTTON_OPTION
534#define TV_BOOKMARK (BUTTON_OPTION | BUTTON_PLAY) 534#define TV_BOOKMARK (BUTTON_OPTION | BUTTON_PLAY)
535 535
536#elif CONFIG_KEYPAD == FIIO_M3K_PAD
537#define TV_QUIT BUTTON_POWER
538#define TV_SCROLL_UP BUTTON_VOL_UP
539#define TV_SCROLL_DOWN BUTTON_VOL_DOWN
540#define TV_SCREEN_LEFT BUTTON_PREV
541#define TV_SCREEN_RIGHT BUTTON_NEXT
542#define TV_MENU BUTTON_PLAY
543#define TV_AUTOSCROLL (BUTTON_POWER | BUTTON_HOME)
544#define TV_LINE_UP BUTTON_HOME
545#define TV_LINE_DOWN BUTTON_OPTION
546#define TV_BOOKMARK (BUTTON_OPTION | BUTTON_PLAY)
547
536/* Xuelin 770/770c keys */ 548/* Xuelin 770/770c keys */
537#elif CONFIG_KEYPAD == IHIFI_770_PAD 549#elif CONFIG_KEYPAD == IHIFI_770_PAD
538#define TV_QUIT BUTTON_POWER 550#define TV_QUIT BUTTON_POWER
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index d2ba8c992c..66ddf03dd8 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -419,6 +419,17 @@
419#define LABEL_MENU "PLAY" 419#define LABEL_MENU "PLAY"
420#define LABEL_VOLUME "VOL UP/DN" 420#define LABEL_VOLUME "VOL UP/DN"
421 421
422#elif (CONFIG_KEYPAD == FIIO_M3K_PAD)
423#define VUMETER_QUIT BUTTON_POWER
424#define VUMETER_HELP BUTTON_HOME
425#define VUMETER_MENU BUTTON_PLAY
426#define VUMETER_UP BUTTON_VOL_UP
427#define VUMETER_DOWN BUTTON_VOL_DOWN
428#define LABEL_HELP "HOME"
429#define LABEL_QUIT "POWER"
430#define LABEL_MENU "PLAY"
431#define LABEL_VOLUME "VOL UP/DN"
432
422#elif (CONFIG_KEYPAD == IHIFI_770_PAD) 433#elif (CONFIG_KEYPAD == IHIFI_770_PAD)
423#define VUMETER_QUIT BUTTON_POWER 434#define VUMETER_QUIT BUTTON_POWER
424#define VUMETER_HELP BUTTON_HOME 435#define VUMETER_HELP BUTTON_HOME
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 59f3138c0a..6cf03dfaff 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -380,6 +380,15 @@ CONFIG_KEYPAD == MROBE500_PAD
380#define BTN_QUIT BUTTON_POWER 380#define BTN_QUIT BUTTON_POWER
381#define BTN_STOPRESET (BUTTON_HOME | BUTTON_POWER) 381#define BTN_STOPRESET (BUTTON_HOME | BUTTON_POWER)
382 382
383#elif CONFIG_KEYPAD == FIIO_M3K_PAD
384#define BTN_DIR_UP BUTTON_HOME
385#define BTN_DIR_DOWN BUTTON_OPTION
386#define BTN_DIR_LEFT BUTTON_PREV
387#define BTN_DIR_RIGHT BUTTON_NEXT
388#define BTN_STARTPAUSE BUTTON_PLAY
389#define BTN_QUIT BUTTON_POWER
390#define BTN_STOPRESET (BUTTON_HOME | BUTTON_POWER)
391
383#elif CONFIG_KEYPAD == IHIFI_770_PAD 392#elif CONFIG_KEYPAD == IHIFI_770_PAD
384#define BTN_DIR_UP BUTTON_PREV 393#define BTN_DIR_UP BUTTON_PREV
385#define BTN_DIR_DOWN BUTTON_NEXT 394#define BTN_DIR_DOWN BUTTON_NEXT
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index 5ed1fbb612..94161c683d 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -342,6 +342,15 @@ CONFIG_KEYPAD == MROBE500_PAD
342#define DOWN BUTTON_OPTION 342#define DOWN BUTTON_OPTION
343#define PAUSE BUTTON_PLAY 343#define PAUSE BUTTON_PLAY
344 344
345#elif CONFIG_KEYPAD == FIIO_M3K_PAD
346
347#define QUIT BUTTON_POWER
348#define LEFT BUTTON_PREV
349#define RIGHT BUTTON_NEXT
350#define UP BUTTON_HOME
351#define DOWN BUTTON_OPTION
352#define PAUSE BUTTON_PLAY
353
345#elif CONFIG_KEYPAD == IHIFI_770_PAD 354#elif CONFIG_KEYPAD == IHIFI_770_PAD
346 355
347#define QUIT BUTTON_POWER 356#define QUIT BUTTON_POWER
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h
index 967b979883..eae20e7976 100644
--- a/apps/plugins/zxbox/keymaps.h
+++ b/apps/plugins/zxbox/keymaps.h
@@ -282,6 +282,14 @@
282#define ZX_UP BUTTON_HOME 282#define ZX_UP BUTTON_HOME
283#define ZX_DOWN BUTTON_OPTION 283#define ZX_DOWN BUTTON_OPTION
284 284
285#elif CONFIG_KEYPAD == FIIO_M3K_PAD
286#define ZX_SELECT BUTTON_PLAY
287#define ZX_MENU BUTTON_POWER
288#define ZX_LEFT BUTTON_PREV
289#define ZX_RIGHT BUTTON_NEXT
290#define ZX_UP BUTTON_HOME
291#define ZX_DOWN BUTTON_OPTION
292
285#elif CONFIG_KEYPAD == IHIFI_770_PAD 293#elif CONFIG_KEYPAD == IHIFI_770_PAD
286#define ZX_SELECT BUTTON_PLAY 294#define ZX_SELECT BUTTON_PLAY
287#define ZX_MENU BUTTON_POWER 295#define ZX_MENU BUTTON_POWER
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c
index 4dc50e2ae8..c16c3cd20a 100644
--- a/apps/plugins/zxbox/zxbox_keyb.c
+++ b/apps/plugins/zxbox/zxbox_keyb.c
@@ -275,6 +275,15 @@
275#define KBD_UP BUTTON_HOME 275#define KBD_UP BUTTON_HOME
276#define KBD_DOWN BUTTON_OPTION 276#define KBD_DOWN BUTTON_OPTION
277 277
278#elif CONFIG_KEYPAD == FIIO_M3K_PAD
279
280#define KBD_SELECT BUTTON_PLAY
281#define KBD_ABORT BUTTON_POWER
282#define KBD_LEFT BUTTON_PREV
283#define KBD_RIGHT BUTTON_NEXT
284#define KBD_UP BUTTON_HOME
285#define KBD_DOWN BUTTON_OPTION
286
278#elif CONFIG_KEYPAD == IHIFI_770_PAD 287#elif CONFIG_KEYPAD == IHIFI_770_PAD
279 288
280#define KBD_SELECT BUTTON_PLAY 289#define KBD_SELECT BUTTON_PLAY
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 41c20c7809..0ad638746a 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -845,7 +845,10 @@ const struct settings_list settings[] = {
845 845
846#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF 846#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
847 CHOICE_SETTING(F_SOUNDSETTING, roll_off, LANG_FILTER_ROLL_OFF, 0, 847 CHOICE_SETTING(F_SOUNDSETTING, roll_off, LANG_FILTER_ROLL_OFF, 0,
848#ifndef AUDIOHW_HAVE_SHORT_ROLL_OFF 848#if defined(AUDIOHW_HAVE_SHORT2_ROLL_OFF)
849 "roll_off", "sharp,slow,short sharp,short slow", sound_set_filter_roll_off,
850 4, ID2P(LANG_FILTER_SHARP), ID2P(LANG_FILTER_SLOW), ID2P(LANG_FILTER_SHORT_SHARP), ID2P(LANG_FILTER_SHORT_SLOW)),
851#elif defined(AUDIOHW_HAVE_SHORT_ROLL_OFF)
849 "roll_off", "sharp,slow", sound_set_filter_roll_off, 852 "roll_off", "sharp,slow", sound_set_filter_roll_off,
850 2, ID2P(LANG_FILTER_SHARP), ID2P(LANG_FILTER_SLOW)), 853 2, ID2P(LANG_FILTER_SHARP), ID2P(LANG_FILTER_SLOW)),
851#else 854#else
diff --git a/bootloader/SOURCES b/bootloader/SOURCES
index b0d3e26e07..e52c6e782a 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) 79#elif defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) || 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 e3985ce100..4abc88c413 100644
--- a/bootloader/rocker_linux.c
+++ b/bootloader/rocker_linux.c
@@ -51,23 +51,42 @@
51#define ICON_WIDTH 70 51#define ICON_WIDTH 70
52#define ICON_HEIGHT 70 52#define ICON_HEIGHT 70
53#define RBFILE "rockbox.rocker" 53#define RBFILE "rockbox.rocker"
54#define ICON_NAME bm_hibyicon
55#define OF_NAME "HIBY PLAYER"
56#include "bitmaps/hibyicon.h"
54#elif defined(XDUOO_X3II) 57#elif defined(XDUOO_X3II)
55#define ICON_WIDTH 130 58#define ICON_WIDTH 130
56#define ICON_HEIGHT 130 59#define ICON_HEIGHT 130
57#define RBFILE "rockbox.x3ii" 60#define RBFILE "rockbox.x3ii"
61#define ICON_NAME bm_hibyicon
62#define OF_NAME "HIBY PLAYER"
63#include "bitmaps/hibyicon.h"
58#elif defined(XDUOO_X20) 64#elif defined(XDUOO_X20)
59#define ICON_WIDTH 130 65#define ICON_WIDTH 130
60#define ICON_HEIGHT 130 66#define ICON_HEIGHT 130
61#define RBFILE "rockbox.x20" 67#define RBFILE "rockbox.x20"
68#define ICON_NAME bm_hibyicon
69#define OF_NAME "HIBY PLAYER"
70#include "bitmaps/hibyicon.h"
71#elif defined(FIIO_M3K)
72#define ICON_WIDTH 130
73#define ICON_HEIGHT 130
74#define RBFILE "rockbox.fiiom3k"
75#define ICON_NAME bm_fiioicon
76#define OF_NAME "FIIO PLAYER"
77#include "bitmaps/fiioicon.h"
62#else 78#else
63#error "must define ICON_WIDTH/HEIGHT" 79#error "must define ICON_WIDTH/HEIGHT"
64#endif 80#endif
65 81
82#ifdef FIIO_M3K
83#define BASE_DIR "/mnt"
84#else
66#define BASE_DIR "/mnt/sd_0" 85#define BASE_DIR "/mnt/sd_0"
86#endif
67 87
68/* images */ 88/* images */
69#include "bitmaps/rockboxicon.h" 89#include "bitmaps/rockboxicon.h"
70#include "bitmaps/hibyicon.h"
71#include "bitmaps/toolsicon.h" 90#include "bitmaps/toolsicon.h"
72 91
73/* don't issue an error when parsing the file for dependencies */ 92/* don't issue an error when parsing the file for dependencies */
@@ -79,6 +98,10 @@
79 BMPHEIGHT_hibyicon != ICON_HEIGHT) 98 BMPHEIGHT_hibyicon != ICON_HEIGHT)
80#error hibyicon has the wrong resolution 99#error hibyicon has the wrong resolution
81#endif 100#endif
101#if defined(BMPWIDTH_fiioicon) && (BMPWIDTH_fiioicon != ICON_WIDTH || \
102 BMPHEIGHT_fiioicon != ICON_HEIGHT)
103#error fiioicon has the wrong resolution
104#endif
82#if defined(BMPWIDTH_toolsicon) && (BMPWIDTH_toolsicon != ICON_WIDTH || \ 105#if defined(BMPWIDTH_toolsicon) && (BMPWIDTH_toolsicon != ICON_WIDTH || \
83 BMPHEIGHT_toolsicon != ICON_HEIGHT) 106 BMPHEIGHT_toolsicon != ICON_HEIGHT)
84#error toolsicon has the wrong resolution 107#error toolsicon has the wrong resolution
@@ -148,6 +171,8 @@ static int get_inactivity_tmo(void)
148 else 171 else
149#endif 172#endif
150 return 10 * HZ; /* Inactivity timeout when not on hold */ 173 return 10 * HZ; /* Inactivity timeout when not on hold */
174
175 // XXX if booting the last selection, use a short timeout?
151} 176}
152 177
153/* return action on idle timeout */ 178/* return action on idle timeout */
@@ -229,11 +254,11 @@ static enum boot_mode get_boot_mode(void)
229 } 254 }
230 lcd_set_foreground(LCD_RGBPACK(255, 201, 0)); 255 lcd_set_foreground(LCD_RGBPACK(255, 201, 0));
231 /* display icon */ 256 /* display icon */
232 const struct bitmap *icon = (mode == BOOT_OF) ? &bm_hibyicon : 257 const struct bitmap *icon = (mode == BOOT_OF) ? &ICON_NAME :
233 (mode == BOOT_ROCKBOX) ? &bm_rockboxicon : &bm_toolsicon; 258 (mode == BOOT_ROCKBOX) ? &bm_rockboxicon : &bm_toolsicon;
234 lcd_bmp(icon, (LCD_WIDTH - ICON_WIDTH) / 2, get_icon_y()); 259 lcd_bmp(icon, (LCD_WIDTH - ICON_WIDTH) / 2, get_icon_y());
235 /* display bottom description */ 260 /* display bottom description */
236 const char *desc = (mode == BOOT_OF) ? "HIBY PLAYER" : 261 const char *desc = (mode == BOOT_OF) ? OF_NAME :
237 (mode == BOOT_ROCKBOX) ? "ROCKBOX" : "TOOLS"; 262 (mode == BOOT_ROCKBOX) ? "ROCKBOX" : "TOOLS";
238 263
239 int desc_height; 264 int desc_height;
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 1471eb7b94..42677725fc 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -111,7 +111,7 @@ target/hosted/sonynwz/nvp-nwz.c
111target/hosted/sonynwz/nwz-db.c 111target/hosted/sonynwz/nwz-db.c
112#endif 112#endif
113 113
114#if ((defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20)) && !defined(SIMULATOR)) 114#if ((defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K)) && !defined(SIMULATOR))
115drivers/lcd-memframe.c 115drivers/lcd-memframe.c
116target/hosted/alsa-controls.c 116target/hosted/alsa-controls.c
117target/hosted/pcm-alsa.c 117target/hosted/pcm-alsa.c
@@ -133,15 +133,24 @@ target/hosted/agptek/powermgmt-agptek.c
133target/hosted/agptek/usb-agptek.c 133target/hosted/agptek/usb-agptek.c
134#endif 134#endif
135 135
136#if ((defined(XDUOO_X3II)||defined(XDUOO_X20)) && !defined(SIMULATOR)) 136#if (defined(XDUOO_X3II) || defined(XDUOO_X20)) && !defined(SIMULATOR)
137target/hosted/xduoo/button-xduoo.c 137target/hosted/xduoo/button-xduoo.c
138target/hosted/xduoo/debug-xduoo.c 138target/hosted/xduoo/debug-xduoo.c
139
140target/hosted/xduoo/power-xduoo.c 139target/hosted/xduoo/power-xduoo.c
141target/hosted/xduoo/powermgmt-xduoo.c 140target/hosted/xduoo/powermgmt-xduoo.c
142target/hosted/xduoo/usb-xduoo.c 141target/hosted/xduoo/usb-xduoo.c
143#endif 142#endif
144 143
144#if (defined(FIIO_M3K)) && !defined(SIMULATOR)
145target/hosted/fiio/buttonlight-fiio.c
146target/hosted/fiio/button-fiio.c
147target/hosted/fiio/debug-fiio.c
148target/hosted/fiio/power-fiio.c
149target/hosted/fiio/powermgmt-fiio.c
150target/hosted/fiio/system-fiio.c
151target/hosted/fiio/usb-fiio.c
152#endif
153
145#if defined(SAMSUNG_YPR0) && !defined(SIMULATOR) 154#if defined(SAMSUNG_YPR0) && !defined(SIMULATOR)
146drivers/adc-as3514.c 155drivers/adc-as3514.c
147#if (CONFIG_RTC == RTC_AS3514) 156#if (CONFIG_RTC == RTC_AS3514)
@@ -498,6 +507,8 @@ target/hosted/pcm-alsa.c
498drivers/audio/rocker_codec.c 507drivers/audio/rocker_codec.c
499#elif defined(HAVE_XDUOO_LINUX_CODEC) && !defined(SIMULATOR) 508#elif defined(HAVE_XDUOO_LINUX_CODEC) && !defined(SIMULATOR)
500drivers/audio/xduoolinux_codec.c 509drivers/audio/xduoolinux_codec.c
510#elif defined(HAVE_FIIO_LINUX_CODEC) && !defined(SIMULATOR)
511drivers/audio/fiiolinux_codec.c
501#elif defined(HAVE_SDL_AUDIO) 512#elif defined(HAVE_SDL_AUDIO)
502drivers/audio/sdl.c 513drivers/audio/sdl.c
503 514
diff --git a/firmware/asm/SOURCES b/firmware/asm/SOURCES
index 085b6351a5..e93f77c770 100644
--- a/firmware/asm/SOURCES
+++ b/firmware/asm/SOURCES
@@ -15,7 +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) || defined(XDUOO_X3II) || defined(XDUOO_X20)) && \ 18 defined(CREATIVE_ZEN) || defined(CREATIVE_ZENXFI) || defined(SONY_NWZ_LINUX) || defined(AGPTEK_ROCKER) || \
19 defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K)) && \
19 !defined(SIMULATOR) 20 !defined(SIMULATOR)
20#if LCD_DEPTH >= 24 21#if LCD_DEPTH >= 24
21lcd-as-memframe-24bit.c 22lcd-as-memframe-24bit.c
diff --git a/firmware/drivers/audio/fiiolinux_codec.c b/firmware/drivers/audio/fiiolinux_codec.c
new file mode 100644
index 0000000000..d8024e3c32
--- /dev/null
+++ b/firmware/drivers/audio/fiiolinux_codec.c
@@ -0,0 +1,154 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 *
11 * Copyright (c) 2018 Marcin Bukat
12 * Copyright (c) 2019 Roman Stolyarov
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#include "config.h"
25#include "audio.h"
26#include "audiohw.h"
27#include "system.h"
28#include "kernel.h"
29#include "panic.h"
30#include "sysfs.h"
31#include "alsa-controls.h"
32#include "pcm-alsa.h"
33#include <sys/ioctl.h>
34
35static int fd_hw;
36static int ak_hw;
37
38static int vol_sw[2] = {0};
39static long int vol_hw[2] = {0};
40
41static void hw_open(void)
42{
43 fd_hw = open("/dev/snd/controlC0", O_RDWR);
44 if(fd_hw < 0)
45 panicf("Cannot open '/dev/snd/controlC0'");
46
47 ak_hw = open("/dev/ak4376", O_RDWR);
48 if(ak_hw < 0)
49 panicf("Cannot open '/dev/ak4376'");
50
51 if(ioctl(ak_hw, 0x20003424, 0) < 0)
52 {
53 panicf("Call cmd AK4376_POWER_ON fail");
54 }
55}
56
57static void hw_close(void)
58{
59 if(ioctl(ak_hw, 0x20003425, 0) < 0)
60 {
61 panicf("Call cmd AK4376_POWER_OFF fail");
62 }
63 close(ak_hw);
64
65 close(fd_hw);
66}
67
68void audiohw_preinit(void)
69{
70 alsa_controls_init();
71 hw_open();
72}
73
74void audiohw_postinit(void)
75{
76}
77
78void audiohw_close(void)
79{
80 hw_close();
81 alsa_controls_close();
82}
83
84void audiohw_set_frequency(int fsel)
85{
86 (void)fsel;
87}
88
89void audiohw_set_volume(int vol_l, int vol_r)
90{
91 int vol[2];
92
93 vol[0] = vol_l / 20;
94 vol[1] = vol_r / 20;
95
96 for (int i = 0; i < 2; i++)
97 {
98 if (vol[i] > -56)
99 {
100 if (vol[i] < -12)
101 {
102 vol_hw[i] = 1;
103 vol_sw[i] = vol[i] + 12;
104 }
105 else
106 {
107 vol_hw[i] = 25 - (-vol[i] * 2);
108 vol_sw[i] = 0;
109 }
110 }
111 else
112 {
113 // Mute
114 vol_hw[i] = 0;
115 vol_sw[i] = 0;
116 }
117 }
118
119 alsa_controls_set_ints("DACL Playback Volume", 1, &vol_hw[0]);
120 alsa_controls_set_ints("DACR Playback Volume", 1, &vol_hw[1]);
121 pcm_alsa_set_digital_volume(vol_sw[0], vol_sw[1]);
122}
123
124void audiohw_mute(int mute)
125{
126 long int vol0 = 0;
127
128 if(mute)
129 {
130 alsa_controls_set_ints("DACL Playback Volume", 1, &vol0);
131 alsa_controls_set_ints("DACR Playback Volume", 1, &vol0);
132 pcm_alsa_set_digital_volume(0, 0);
133 }
134 else
135 {
136 alsa_controls_set_ints("DACL Playback Volume", 1, &vol_hw[0]);
137 alsa_controls_set_ints("DACR Playback Volume", 1, &vol_hw[1]);
138 pcm_alsa_set_digital_volume(vol_sw[0], vol_sw[1]);
139 }
140}
141
142void audiohw_set_filter_roll_off(int value)
143{
144 /* 0 = Sharp;
145 1 = Slow;
146 2 = Short Sharp
147 3 = Short Slow */
148#if defined(FIIO_M3K)
149 long int value_hw = value;
150 alsa_controls_set_ints("AK4376 Digital Filter", 1, &value_hw);
151#else
152 (void)value;
153#endif
154}
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index 31be0555f8..1ff220e403 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -224,6 +224,8 @@ struct sound_settings_info
224#include "rocker_codec.h" 224#include "rocker_codec.h"
225#elif defined(HAVE_XDUOO_LINUX_CODEC) 225#elif defined(HAVE_XDUOO_LINUX_CODEC)
226#include "xduoolinux_codec.h" 226#include "xduoolinux_codec.h"
227#elif defined(HAVE_FIIO_LINUX_CODEC)
228#include "fiiolinux_codec.h"
227#endif 229#endif
228 230
229/* convert caps into defines */ 231/* convert caps into defines */
diff --git a/firmware/export/config.h b/firmware/export/config.h
index 7c57d9a120..a9753e3cf8 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -161,6 +161,7 @@
161#define IHIFI_800_PAD 68 161#define IHIFI_800_PAD 68
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 165
165/* CONFIG_REMOTE_KEYPAD */ 166/* CONFIG_REMOTE_KEYPAD */
166#define H100_REMOTE 1 167#define H100_REMOTE 1
@@ -599,6 +600,8 @@ Lyre prototype 1 */
599#include "config/xduoox3ii.h" 600#include "config/xduoox3ii.h"
600#elif defined(XDUOO_X20) 601#elif defined(XDUOO_X20)
601#include "config/xduoox20.h" 602#include "config/xduoox20.h"
603#elif defined(FIIO_M3K)
604#include "config/fiiom3k.h"
602#else 605#else
603//#error "unknown hwardware platform!" 606//#error "unknown hwardware platform!"
604#endif 607#endif
diff --git a/firmware/export/config/fiiom3k.h b/firmware/export/config/fiiom3k.h
new file mode 100644
index 0000000000..5b68f3738e
--- /dev/null
+++ b/firmware/export/config/fiiom3k.h
@@ -0,0 +1,127 @@
1/*
2 * This config file is for the FiiO M3K
3 */
4
5/* For Rolo and boot loader */
6#define MODEL_NUMBER 112
7
8#define MODEL_NAME "FiiO M3K"
9
10/* LCD dimensions */
11#define LCD_WIDTH 240
12#define LCD_HEIGHT 320
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 HW_SAMPR_CAPS (SAMPR_CAP_44 | SAMPR_CAP_48 | SAMPR_CAP_88 | SAMPR_CAP_96 | SAMPR_CAP_176 | SAMPR_CAP_192)
21
22/* define this if you have a bitmap LCD display */
23#define HAVE_LCD_BITMAP
24
25/* define this if you have a colour LCD */
26#define HAVE_LCD_COLOR
27
28#define HAVE_LCD_ENABLE
29
30/* define this if you want album art for this target */
31#define HAVE_ALBUMART
32
33/* define this to enable bitmap scaling */
34#define HAVE_BMP_SCALING
35
36/* define this to enable JPEG decoding */
37#define HAVE_JPEG
38
39/* define this if you have access to the quickscreen */
40#define HAVE_QUICKSCREEN
41
42/* define this if you would like tagcache to build on this target */
43#define HAVE_TAGCACHE
44
45#define LCD_DEPTH 16
46/* Check that but should not matter */
47#define LCD_PIXELFORMAT RGB565
48
49#define HAVE_BACKLIGHT
50#define HAVE_BACKLIGHT_BRIGHTNESS
51
52/* define this if you have a light associated with the buttons */
53#define HAVE_BUTTON_LIGHT
54#define HAVE_BUTTONLIGHT_BRIGHTNESS
55
56/* Main LCD backlight brightness range and defaults: the backlight driver
57 * has levels from 0 to 32. But 0 is off so start at 1.
58 */
59#define MIN_BRIGHTNESS_SETTING 1
60#define MAX_BRIGHTNESS_SETTING 255
61#define BRIGHTNESS_STEP 5
62#define DEFAULT_BRIGHTNESS_SETTING 70
63
64/* Which backlight fading type? */
65#define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_SETTING
66
67/* define this if you have a real-time clock */
68#define CONFIG_RTC APPLICATION
69
70/* The number of bytes reserved for loadable codecs */
71#define CODEC_SIZE 0x80000
72
73/* The number of bytes reserved for loadable plugins */
74#define PLUGIN_BUFFER_SIZE 0x100000
75
76#define HAVE_HEADPHONE_DETECTION
77
78/* KeyPad configuration for plugins */
79#define CONFIG_KEYPAD FIIO_M3K_PAD
80
81/* Define this if a programmable hotkey is mapped */
82#define HAVE_HOTKEY
83
84/* define this if the target has volume keys which can be used in the lists */
85#define HAVE_VOLUME_IN_LIST
86
87#ifndef SIMULATOR
88/* We have usb power and can detect usb but it is handled by Linux */
89#define HAVE_USB_POWER
90
91#endif
92
93#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE
94
95/* Linux controlls charging, we can monitor */
96#define CONFIG_CHARGING CHARGING_MONITOR
97
98/* define this if the hardware can be powered off while charging */
99#define HAVE_POWEROFF_WHILE_CHARGING
100
101/* same dimensions as gigabeats */
102#define CONFIG_LCD LCD_INGENIC_LINUX
103
104/* Define this if you have a software controlled poweroff */
105#define HAVE_SW_POWEROFF
106
107/* Define this to the CPU frequency */
108#define CPU_FREQ 1008000000
109
110/* No special storage */
111#define CONFIG_STORAGE STORAGE_HOSTFS
112#define HAVE_STORAGE_FLUSH
113
114/* Battery */
115#define BATTERY_TYPES_COUNT 1
116
117/* Audio codec */
118#define HAVE_FIIO_LINUX_CODEC
119
120/* We don't have hardware controls */
121#define HAVE_SW_TONE_CONTROLS
122
123/* Battery */
124#define BATTERY_CAPACITY_DEFAULT 1100 /* default battery capacity */
125#define BATTERY_CAPACITY_MIN 1100 /* min. capacity selectable */
126#define BATTERY_CAPACITY_MAX 1100 /* max. capacity selectable */
127#define BATTERY_CAPACITY_INC 0 /* capacity increment */
diff --git a/firmware/export/fiiolinux_codec.h b/firmware/export/fiiolinux_codec.h
index 22c2263046..118a0928d7 100644
--- a/firmware/export/fiiolinux_codec.h
+++ b/firmware/export/fiiolinux_codec.h
@@ -2,8 +2,11 @@
2#define __FIIOLINUX_CODEC__ 2#define __FIIOLINUX_CODEC__
3 3
4#define AUDIOHW_CAPS (FILTER_ROLL_OFF_CAP) 4#define AUDIOHW_CAPS (FILTER_ROLL_OFF_CAP)
5#define AUDIOHW_HAVE_SHORT2_ROLL_OFF
5AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -100, 0, -30) 6AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -100, 0, -30)
6AUDIOHW_SETTING(FILTER_ROLL_OFF, "", 0, 1, 0, 4, 0) 7AUDIOHW_SETTING(FILTER_ROLL_OFF, "", 0, 1, 0, 4, 0)
7#endif 8#endif
8 9
10#define AUDIOHW_MUTE_ON_PAUSE
11
9void audiohw_mute(int mute); 12void audiohw_mute(int mute);
diff --git a/firmware/export/rbpaths.h b/firmware/export/rbpaths.h
index 87a6dd91ff..6b686eec0e 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) 45 defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20) || 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"
@@ -53,6 +53,8 @@
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(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20)
55#define HOME_DIR "/mnt/sd_0" 55#define HOME_DIR "/mnt/sd_0"
56#elif defined(FIIO_M3K)
57#define HOME_DIR "/mnt"
56#else 58#else
57#define HOME_DIR "/" 59#define HOME_DIR "/"
58#endif 60#endif
diff --git a/firmware/target/hosted/backlight-target.h b/firmware/target/hosted/backlight-target.h
index e3b8a7bd78..261af09d72 100644
--- a/firmware/target/hosted/backlight-target.h
+++ b/firmware/target/hosted/backlight-target.h
@@ -21,16 +21,20 @@
21#ifndef _BACKLIGHT_TARGET_H_ 21#ifndef _BACKLIGHT_TARGET_H_
22#define _BACKLIGHT_TARGET_H_ 22#define _BACKLIGHT_TARGET_H_
23 23
24
25#include <stdbool.h> 24#include <stdbool.h>
26 25
27
28/* See backlight.c */ 26/* See backlight.c */
29bool backlight_hw_init(void); 27bool backlight_hw_init(void);
30void backlight_hw_on(void); 28void backlight_hw_on(void);
31void backlight_hw_off(void); 29void backlight_hw_off(void);
32void backlight_hw_brightness(int brightness); 30void backlight_hw_brightness(int brightness);
33 31
34 32#ifdef HAVE_BUTTON_LIGHT
33void buttonlight_hw_on(void);
34void buttonlight_hw_off(void);
35#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
36void buttonlight_hw_brightness(int brightness);
37#endif
35#endif 38#endif
36 39
40#endif
diff --git a/firmware/target/hosted/fiio/adc-target.h b/firmware/target/hosted/fiio/adc-target.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/firmware/target/hosted/fiio/adc-target.h
diff --git a/firmware/target/hosted/fiio/button-fiio.c b/firmware/target/hosted/fiio/button-fiio.c
new file mode 100644
index 0000000000..fcc7480e11
--- /dev/null
+++ b/firmware/target/hosted/fiio/button-fiio.c
@@ -0,0 +1,308 @@
1/***************************************************************************
2 * __________ __ ___
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2017 Marcin Bukat
10 * Copyright (C) 2019 Roman Stolyarov
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
40static int key_enter_delay = 0;
41static int key_right_delay = 0;
42static int key_left_delay = 0;
43static int key_power_delay = 0;
44static int key_home_delay = 0;
45static int key_backspace_delay = 0;
46static int key_leftbrace_delay = 0;
47static int key_rightbrace_delay = 0;
48static int key_up_delay = 0;
49static int key_down_delay = 0;
50static int key_f12_delay = 0;
51
52#define NR_POLL_DESC 2
53static struct pollfd poll_fds[NR_POLL_DESC];
54
55#define DEF_DELAY 5
56
57static int button_map_on(int keycode)
58{
59 switch(keycode)
60 {
61 case KEY_ENTER:
62 key_enter_delay = DEF_DELAY;
63 return BUTTON_PLAY;
64 case KEY_F10:
65 key_enter_delay = 0;
66 return BUTTON_PLAY;
67
68 case KEY_RIGHT:
69 key_right_delay = DEF_DELAY;
70 return BUTTON_VOL_DOWN;
71 case KEY_F7:
72 key_right_delay = 0;
73 return BUTTON_VOL_DOWN;
74
75 case KEY_LEFT:
76 key_left_delay = DEF_DELAY;
77 return BUTTON_VOL_UP;
78 case KEY_F6:
79 key_left_delay = 0;
80 return BUTTON_VOL_UP;
81
82 case KEY_POWER:
83 key_power_delay = DEF_DELAY;
84 return BUTTON_POWER;
85 case KEY_F8:
86 key_power_delay = 0;
87 return BUTTON_POWER;
88
89 case KEY_HOME:
90 key_home_delay = DEF_DELAY;
91 return BUTTON_OPTION;
92 case KEY_F9:
93 key_home_delay = 0;
94 return BUTTON_OPTION;
95
96 case KEY_BACKSPACE:
97 key_backspace_delay = DEF_DELAY;
98 return BUTTON_HOME;
99 case KEY_NUMLOCK:
100 key_backspace_delay = 0;
101 return BUTTON_HOME;
102
103 case KEY_LEFTBRACE:
104 key_leftbrace_delay = DEF_DELAY;
105 return BUTTON_PREV;
106 case KEY_F5:
107 key_leftbrace_delay = 0;
108 return BUTTON_PREV;
109
110 case KEY_RIGHTBRACE:
111 key_rightbrace_delay = DEF_DELAY;
112 return BUTTON_NEXT;
113 case KEY_F4:
114 key_rightbrace_delay = 0;
115 return BUTTON_NEXT;
116
117 case KEY_UP:
118 if (!key_up_delay) key_up_delay = DEF_DELAY;
119 return BUTTON_UP;
120
121 case KEY_DOWN:
122 if (!key_down_delay) key_down_delay = DEF_DELAY;
123 return BUTTON_DOWN;
124
125 case KEY_F12:
126 key_f12_delay = DEF_DELAY;
127 //return BUTTON_UNLOCK;
128 return 0;
129
130 default:
131 return 0;
132 }
133}
134
135static int button_map_off(int keycode)
136{
137 switch(keycode)
138 {
139 case KEY_F10:
140 return BUTTON_PLAY;
141
142 case KEY_F7:
143 return BUTTON_VOL_DOWN;
144
145 case KEY_F6:
146 return BUTTON_VOL_UP;
147
148 case KEY_F8:
149 return BUTTON_POWER;
150
151 case KEY_F9:
152 return BUTTON_OPTION;
153
154 case KEY_NUMLOCK:
155 return BUTTON_HOME;
156
157 case KEY_F5:
158 return BUTTON_PREV;
159
160 case KEY_F4:
161 return BUTTON_NEXT;
162
163 default:
164 return 0;
165 }
166}
167
168static int button_map_timer(void)
169{
170 int map = 0;
171
172 if (key_enter_delay)
173 {
174 if (--key_enter_delay == 0) map |= BUTTON_PLAY;
175 }
176 if (key_right_delay)
177 {
178 if (--key_right_delay == 0) map |= BUTTON_VOL_DOWN;
179 }
180 if (key_left_delay)
181 {
182 if (--key_left_delay == 0) map |= BUTTON_VOL_UP;
183 }
184 if (key_power_delay)
185 {
186 if (--key_power_delay == 0) map |= BUTTON_POWER;
187 }
188 if (key_home_delay)
189 {
190 if (--key_home_delay == 0) map |= BUTTON_OPTION;
191 }
192 if (key_backspace_delay)
193 {
194 if (--key_backspace_delay == 0) map |= BUTTON_HOME;
195 }
196 if (key_leftbrace_delay)
197 {
198 if (--key_leftbrace_delay == 0) map |= BUTTON_PREV;
199 }
200 if (key_rightbrace_delay)
201 {
202 if (--key_rightbrace_delay == 0) map |= BUTTON_NEXT;
203 }
204 if (key_up_delay)
205 {
206 if (--key_up_delay == 0) map |= BUTTON_UP;
207 }
208 if (key_down_delay)
209 {
210 if (--key_down_delay == 0) map |= BUTTON_DOWN;
211 }
212 if (key_f12_delay)
213 {
214 if (--key_f12_delay == 0) map |= 0; //BUTTON_UNLOCK
215 }
216
217 return map;
218}
219
220void button_init_device(void)
221{
222 const char * const input_devs[] = {
223 "/dev/input/event0",
224 "/dev/input/event1",
225 };
226
227 for(int i = 0; i < NR_POLL_DESC; i++)
228 {
229 int fd = open(input_devs[i], O_RDWR);
230
231 if(fd < 0)
232 {
233 panicf("Cannot open input device: %s\n", input_devs[i]);
234 }
235
236 poll_fds[i].fd = fd;
237 poll_fds[i].events = POLLIN;
238 poll_fds[i].revents = 0;
239 }
240}
241
242int button_read_device(void)
243{
244 static int button_bitmap = 0;
245 static int map;
246 struct input_event event;
247
248 /* check if there are any events pending and process them */
249 while(poll(poll_fds, NR_POLL_DESC, 0))
250 {
251 for(int i = 0; i < NR_POLL_DESC; i++)
252 {
253 /* read only if non-blocking */
254 if(poll_fds[i].revents & POLLIN)
255 {
256 int size = read(poll_fds[i].fd, &event, sizeof(event));
257 if(size == (int)sizeof(event))
258 {
259 if(event.type == EV_KEY)
260 {
261 int keycode = event.code;
262
263 /* event.value == 1 means press
264 * event.value == 0 means release
265 */
266 bool press = event.value ? true : false;
267
268 if(press)
269 {
270 map = button_map_on(keycode);
271 if(map) button_bitmap |= map;
272 }
273 else
274 {
275 map = button_map_off(keycode);
276 if(map) button_bitmap &= ~map;
277 }
278 }
279 }
280 }
281 }
282 }
283
284 map = button_map_timer();
285 if(map) button_bitmap &= ~map;
286
287 return button_bitmap;
288}
289
290bool headphones_inserted(void)
291{
292 int status = 0;
293 const char * const sysfs_hs_switch = "/sys/class/misc/axp173/headset_state";
294
295 sysfs_get_int(sysfs_hs_switch, &status);
296 if (status) return true;
297
298 return false;
299}
300
301void button_close_device(void)
302{
303 /* close descriptors */
304 for(int i = 0; i < NR_POLL_DESC; i++)
305 {
306 close(poll_fds[i].fd);
307 }
308}
diff --git a/firmware/target/hosted/fiio/button-target.h b/firmware/target/hosted/fiio/button-target.h
new file mode 100644
index 0000000000..8ed3b7ba0f
--- /dev/null
+++ b/firmware/target/hosted/fiio/button-target.h
@@ -0,0 +1,50 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2019 by Roman Stolyarov
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_HOME 0x00000002
26#define BUTTON_OPTION 0x00000004
27#define BUTTON_PREV 0x00000008
28#define BUTTON_NEXT 0x00000010
29#define BUTTON_PLAY 0x00000020
30#define BUTTON_VOL_UP 0x00000040
31#define BUTTON_VOL_DOWN 0x00000080
32#define BUTTON_UP 0x00000100
33#define BUTTON_DOWN 0x00000200
34
35#define BUTTON_LEFT 0
36#define BUTTON_RIGHT 0
37
38#define BUTTON_MAIN (BUTTON_POWER | BUTTON_HOME | BUTTON_OPTION | BUTTON_PREV | \
39 BUTTON_NEXT | BUTTON_PLAY | BUTTON_VOL_UP | BUTTON_VOL_DOWN | \
40 BUTTON_UP | BUTTON_DOWN)
41
42#define BUTTON_LEFT BUTTON_PREV
43#define BUTTON_RIGHT BUTTON_NEXT
44
45/* Software power-off */
46#define POWEROFF_BUTTON BUTTON_POWER
47#define POWEROFF_COUNT 25
48
49#endif /* _BUTTON_TARGET_H_ */
50
diff --git a/firmware/target/hosted/fiio/buttonlight-fiio.c b/firmware/target/hosted/fiio/buttonlight-fiio.c
new file mode 100644
index 0000000000..37961f7b63
--- /dev/null
+++ b/firmware/target/hosted/fiio/buttonlight-fiio.c
@@ -0,0 +1,57 @@
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 <sys/types.h>
21#include <sys/stat.h>
22#include <fcntl.h>
23#include <stdbool.h>
24#include <unistd.h>
25#include <string.h>
26#include <stdio.h>
27#include "config.h"
28#include "backlight-target.h"
29#include "sysfs.h"
30#include "panic.h"
31#include "lcd.h"
32
33static const char * const sysfs_kb_brightness =
34 "/sys/class/jz_pwm_dev/jz_pwm_dev4/duty_ratio";
35
36static const char * const sysfs_kb_power =
37 "/sys/class/jz_pwm_dev/jz_pwm_dev4/enable";
38
39void buttonlight_hw_on(void)
40{
41 sysfs_set_int(sysfs_kb_power, 1);
42}
43
44void buttonlight_hw_off(void)
45{
46 sysfs_set_int(sysfs_kb_power, 0);
47}
48
49void buttonlight_hw_brightness(int brightness)
50{
51 if (brightness > MAX_BRIGHTNESS_SETTING)
52 brightness = MAX_BRIGHTNESS_SETTING;
53 if (brightness < MIN_BRIGHTNESS_SETTING)
54 brightness = MIN_BRIGHTNESS_SETTING;
55
56 sysfs_set_int(sysfs_kb_brightness, brightness);
57}
diff --git a/firmware/target/hosted/fiio/debug-fiio.c b/firmware/target/hosted/fiio/debug-fiio.c
new file mode 100644
index 0000000000..9812b8f8b9
--- /dev/null
+++ b/firmware/target/hosted/fiio/debug-fiio.c
@@ -0,0 +1 @@
#include "../agptek/debug-agptek.c"
diff --git a/firmware/target/hosted/fiio/fiio.make b/firmware/target/hosted/fiio/fiio.make
new file mode 100644
index 0000000000..d159db77f3
--- /dev/null
+++ b/firmware/target/hosted/fiio/fiio.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/fiio/lcd-target.h b/firmware/target/hosted/fiio/lcd-target.h
new file mode 100644
index 0000000000..be5427322e
--- /dev/null
+++ b/firmware/target/hosted/fiio/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-fiio.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/fiio/power-fiio.c b/firmware/target/hosted/fiio/power-fiio.c
new file mode 100644
index 0000000000..a2b19ce550
--- /dev/null
+++ b/firmware/target/hosted/fiio/power-fiio.c
@@ -0,0 +1,78 @@
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.h"
28#include "panic.h"
29#include "sysfs.h"
30#include "usb.h"
31
32#include "power-fiio.h"
33
34const char * const sysfs_bat_voltage =
35 "/sys/class/power_supply/battery/voltage_now";
36
37const char * const sysfs_bat_capacity =
38 "/sys/class/power_supply/battery/capacity";
39
40const char * const sysfs_bat_status =
41 "/sys/class/power_supply/battery/status";
42
43const char * const sysfs_pow_supply =
44 "/sys/class/power_supply/ac/online";
45
46unsigned int fiio_power_input_status(void)
47{
48 int present = 0;
49 sysfs_get_int(sysfs_pow_supply, &present);
50
51 usb_enable(present ? true : false);
52
53 return present ? POWER_INPUT_USB_CHARGER : POWER_INPUT_NONE;
54}
55
56bool fiio_power_charging_status(void)
57{
58 char buf[12] = {0};
59 sysfs_get_string(sysfs_bat_status, buf, sizeof(buf));
60
61 return (strncmp(buf, "Charging", 8) == 0);
62}
63
64unsigned int fiio_power_get_battery_voltage(void)
65{
66 int battery_voltage;
67 sysfs_get_int(sysfs_bat_voltage, &battery_voltage);
68
69 return battery_voltage;
70}
71
72unsigned int fiio_power_get_battery_capacity(void)
73{
74 int battery_capacity;
75 sysfs_get_int(sysfs_bat_capacity, &battery_capacity);
76
77 return battery_capacity * 20;
78}
diff --git a/firmware/target/hosted/fiio/power-fiio.h b/firmware/target/hosted/fiio/power-fiio.h
new file mode 100644
index 0000000000..c3085e9569
--- /dev/null
+++ b/firmware/target/hosted/fiio/power-fiio.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_FIIO_H_
21#define _POWER_FIIO_H_
22
23#include <stdbool.h>
24#include "config.h"
25
26unsigned int fiio_power_input_status(void);
27bool fiio_power_charging_status(void);
28unsigned int fiio_power_get_battery_voltage(void);
29unsigned int fiio_power_get_battery_capacity(void);
30#endif /* _POWER_FIIO_H_ */
31
diff --git a/firmware/target/hosted/fiio/powermgmt-fiio.c b/firmware/target/hosted/fiio/powermgmt-fiio.c
new file mode 100644
index 0000000000..b7c1b5fde2
--- /dev/null
+++ b/firmware/target/hosted/fiio/powermgmt-fiio.c
@@ -0,0 +1,68 @@
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-fiio.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 fiio_power_input_status();
51}
52
53int _battery_voltage(void)
54{
55 return fiio_power_get_battery_voltage();
56}
57
58#if 0
59int _battery_level(void)
60{
61 return fiio_power_get_battery_capacity();
62}
63#endif
64
65bool charging_state(void)
66{
67 return fiio_power_charging_status();
68}
diff --git a/firmware/target/hosted/fiio/system-fiio.c b/firmware/target/hosted/fiio/system-fiio.c
new file mode 100644
index 0000000000..5e638989a1
--- /dev/null
+++ b/firmware/target/hosted/fiio/system-fiio.c
@@ -0,0 +1,205 @@
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#include <unistd.h>
22#include <signal.h>
23#include <string.h>
24#include <ucontext.h>
25#include <backtrace.h>
26
27#include "system.h"
28#include "mv.h"
29#include "font.h"
30#include "power.h"
31#include "button.h"
32#include "backlight-target.h"
33#include "lcd.h"
34
35#include "panic.h"
36#include <fcntl.h>
37#include <sys/ioctl.h>
38
39/* to make thread-internal.h happy */
40uintptr_t *stackbegin;
41uintptr_t *stackend;
42
43static void sig_handler(int sig, siginfo_t *siginfo, void *context)
44{
45 /* safe guard variable - we call backtrace() only on first
46 * UIE call. This prevent endless loop if backtrace() touches
47 * memory regions which cause abort
48 */
49 static bool triggered = false;
50
51 lcd_set_backdrop(NULL);
52 lcd_set_drawmode(DRMODE_SOLID);
53 lcd_set_foreground(LCD_BLACK);
54 lcd_set_background(LCD_WHITE);
55 unsigned line = 0;
56
57 lcd_setfont(FONT_SYSFIXED);
58 lcd_set_viewport(NULL);
59 lcd_clear_display();
60
61 /* get context info */
62 ucontext_t *uc = (ucontext_t *)context;
63 unsigned long pc = uc->uc_mcontext.pc;
64 unsigned long sp = uc->uc_mcontext.gregs[29];
65
66 lcd_putsf(0, line++, "%s at %08x", strsignal(sig), pc);
67
68 if(sig == SIGILL || sig == SIGFPE || sig == SIGSEGV || sig == SIGBUS || sig == SIGTRAP)
69 lcd_putsf(0, line++, "address 0x%08x", siginfo->si_addr);
70
71 if(!triggered)
72 {
73 triggered = true;
74 rb_backtrace(pc, sp, &line);
75 }
76
77#ifdef ROCKBOX_HAS_LOGF
78 lcd_putsf(0, line++, "logf:");
79 logf_panic_dump(&line);
80#endif
81
82 lcd_update();
83
84 system_exception_wait(); /* If this returns, try to reboot */
85
86 backlight_hw_off();
87 system_reboot();
88 while (1); /* halt */
89}
90
91static int axp_hw;
92
93void power_off(void)
94{
95 backlight_hw_off();
96
97 axp_hw = open("/dev/axp173", O_RDWR);
98 if(axp_hw < 0)
99 panicf("Cannot open '/dev/axp173'");
100
101 if(ioctl(axp_hw, 0x20003323, 0) < 0)
102 {
103 panicf("Call AXP173_SHUTDOWN fail");
104 }
105
106 close(axp_hw);
107}
108
109void system_init(void)
110{
111 int *s;
112 /* fake stack, to make thread-internal.h happy */
113 stackbegin = stackend = (uintptr_t*)&s;
114 /* catch some signals for easier debugging */
115 struct sigaction sa;
116 sigfillset(&sa.sa_mask);
117 sa.sa_flags = SA_SIGINFO;
118 sa.sa_sigaction = &sig_handler;
119 sigaction(SIGILL, &sa, NULL);
120 sigaction(SIGABRT, &sa, NULL);
121 sigaction(SIGFPE, &sa, NULL);
122 sigaction(SIGSEGV, &sa, NULL);
123 sigaction(SIGPIPE, &sa, NULL);
124 sigaction(SIGTERM, &sa, NULL);
125 sigaction(SIGBUS, &sa, NULL);
126 sigaction(SIGTERM, &sa, NULL);
127}
128
129void system_reboot(void)
130{
131 backlight_hw_off();
132 system("/sbin/reboot");
133 while (1); /* halt */
134}
135
136void system_exception_wait(void)
137{
138 backlight_hw_on();
139 backlight_hw_brightness(DEFAULT_BRIGHTNESS_SETTING);
140 /* wait until button press and release */
141 while(button_read_device() != 0) {}
142 while(button_read_device() == 0) {}
143 while(button_read_device() != 0) {}
144 while(button_read_device() == 0) {}
145}
146
147bool hostfs_removable(IF_MD_NONVOID(int drive))
148{
149#ifdef HAVE_MULTIDRIVE
150 if (drive > 0) /* Active LOW */
151 return true;
152 else
153#endif
154 return false; /* internal: always present */
155}
156
157bool hostfs_present(IF_MD_NONVOID(int drive))
158{
159#ifdef HAVE_MULTIDRIVE
160 if (drive > 0) /* Active LOW */
161 return true; //FIXME
162 else
163#endif
164 return true; /* internal: always present */
165}
166
167#ifdef HAVE_MULTIDRIVE
168int volume_drive(int drive)
169{
170 return drive;
171}
172#endif /* HAVE_MULTIDRIVE */
173
174#ifdef CONFIG_STORAGE_MULTI
175int hostfs_driver_type(int drive)
176{
177 return drive > 0 ? STORAGE_SD_NUM : STORAGE_HOSTFS_NUM;
178}
179#endif /* CONFIG_STORAGE_MULTI */
180
181int hostfs_init(void)
182{
183 return 0;
184}
185
186int hostfs_flush(void)
187{
188 sync();
189 return 0;
190}
191
192#ifdef HAVE_HOTSWAP
193bool volume_removable(int volume)
194{
195 /* don't support more than one partition yet, so volume == drive */
196 return hostfs_removable(volume);
197}
198
199bool volume_present(int volume)
200{
201 /* don't support more than one partition yet, so volume == drive */
202 return hostfs_present(volume);
203}
204#endif
205
diff --git a/firmware/target/hosted/fiio/system-target.h b/firmware/target/hosted/fiio/system-target.h
new file mode 100644
index 0000000000..830f19fde4
--- /dev/null
+++ b/firmware/target/hosted/fiio/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/fiio/usb-fiio.c b/firmware/target/hosted/fiio/usb-fiio.c
new file mode 100644
index 0000000000..76a0ec5a2b
--- /dev/null
+++ b/firmware/target/hosted/fiio/usb-fiio.c
@@ -0,0 +1,81 @@
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-fiio.h"
30
31const char * const sysfs_usb_online =
32 "/sys/class/power_supply/usb/online";
33
34int usb_detect(void)
35{
36 int present = 0;
37 sysfs_get_int(sysfs_usb_online, &present);
38
39 return present ? USB_INSERTED : USB_EXTRACTED;
40}
41
42void usb_enable(bool on)
43{
44 if (on)
45 {
46 system ("insmod /lib/modules/3.10.14/kernel/driver/usb/gadget/libcomposite.ko");
47 system ("insmod /lib/modules/3.10.14/kernel/driver/usb/gadget/usb_f_mass_storage.ko");
48 system ("insmod /lib/modules/3.10.14/kernel/driver/usb/gadget/g_mass_storage.ko file=/dev/mmcblk0 removable=1");
49 }
50 else
51 {
52 system ("rmmod g_mass_storage");
53 system ("rmmod usb_f_mass_storage");
54 system ("rmmod libcomposite");
55 }
56}
57
58/* This is called by usb thread after usb extract in order to return
59 * regular FS access
60 *
61 * returns the # of successful mounts
62*/
63int disk_mount_all(void)
64{
65 return 1;
66}
67
68/* This is called by usb thread after all threads ACKs usb inserted message
69 *
70 * returns the # of successful unmounts
71 */
72int disk_unmount_all(void)
73{
74 return 1;
75}
76
77void usb_init_device(void)
78{
79 system ("insmod /lib/modules/3.10.14/kernel/driver/staging/dwc2/dwc2.ko");
80 usb_enable(true);
81}
diff --git a/firmware/target/hosted/filesystem-app.c b/firmware/target/hosted/filesystem-app.c
index 57f9b47282..f291ece06d 100644
--- a/firmware/target/hosted/filesystem-app.c
+++ b/firmware/target/hosted/filesystem-app.c
@@ -36,9 +36,14 @@
36#include "rbpaths.h" 36#include "rbpaths.h"
37#include "logf.h" 37#include "logf.h"
38 38
39#if (defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20)) && !(defined(BOOTLOADER) || defined(CHECKWPS) || defined(SIMULATOR)) 39#if !(defined(BOOTLOADER) || defined(CHECKWPS) || defined(SIMULATOR))
40#define PIVOT_ROOT HOME_DIR 40#if (defined(AGPTEK_ROCKER) || defined(XDUOO_X3II) || defined(XDUOO_X20))
41#define PIVOT_ROOT "/mnt/sd_0"
42#elif defined(FIIO_M3K)
43#define PIVOT_ROOT "/mnt" // XXX check this!
44#else
41#endif 45#endif
46#endif // !(BOOTLOADER|WPS|SIM)
42 47
43#if (CONFIG_PLATFORM & PLATFORM_ANDROID) 48#if (CONFIG_PLATFORM & PLATFORM_ANDROID)
44static const char rbhome[] = "/sdcard"; 49static const char rbhome[] = "/sdcard";
@@ -52,7 +57,7 @@ static const char rbhome[] = HOME_DIR;
52 57
53#if !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || defined(DX50) || \ 58#if !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || defined(DX50) || \
54 defined(SONY_NWZ_LINUX) || defined(DX90) || defined(AGPTEK_ROCKER) || \ 59 defined(SONY_NWZ_LINUX) || defined(DX90) || defined(AGPTEK_ROCKER) || \
55 defined(XDUOO_X3II) || defined(XDUOO_X20)) && \ 60 defined(XDUOO_X3II) || defined(XDUOO_X20) || defined(FIIO_M3K) || defined(FIIO_M3K_PRO)) && \
56 !defined(__PCTOOL__) 61 !defined(__PCTOOL__)
57/* 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
58 * 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/tools/builds.pm b/tools/builds.pm
index d46aa83495..6f0c4d0445 100644
--- a/tools/builds.pm
+++ b/tools/builds.pm
@@ -444,6 +444,10 @@ $releasenotes="/wiki/ReleaseNotes315";
444 name => 'xDuoo X20', 444 name => 'xDuoo X20',
445 status => 2, 445 status => 2,
446 }, 446 },
447 'fiiom3k' => {
448 name => 'FiiO M3K',
449 status => 1,
450 },
447 'ihifi770' => { 451 'ihifi770' => {
448 name => 'Xuelin iHIFI 770', 452 name => 'Xuelin iHIFI 770',
449 status => 2, 453 status => 2,
@@ -671,5 +675,4 @@ sub voicesforlang($) {
671 return @list; 675 return @list;
672} 676}
673 677
674
6751; 6781;
diff --git a/tools/configure b/tools/configure
index 9e29d84ed8..f5fb6351c0 100755
--- a/tools/configure
+++ b/tools/configure
@@ -1588,7 +1588,8 @@ cat <<EOF
1588 251) 770 226) NWZ-A10 series 1588 251) 770 226) NWZ-A10 series
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 229) NWZ-S750 series 1591 ==FiiO== 229) NWZ-S750 series
1592 244) M3K
1592 1593
1593EOF 1594EOF
1594 1595
@@ -4055,6 +4056,7 @@ fi
4055 t_cpu="hosted" 4056 t_cpu="hosted"
4056 t_manufacturer="xduoo" 4057 t_manufacturer="xduoo"
4057 t_model="xduoo_x3ii" 4058 t_model="xduoo_x3ii"
4059# sysfont="20-Terminus-Bold"
4058 ;; 4060 ;;
4059 4061
4060 243|xduoox20) 4062 243|xduoox20)
@@ -4077,6 +4079,30 @@ fi
4077 t_cpu="hosted" 4079 t_cpu="hosted"
4078 t_manufacturer="xduoo" 4080 t_manufacturer="xduoo"
4079 t_model="xduoo_x20" 4081 t_model="xduoo_x20"
4082# sysfont="20-Terminus-Bold"
4083 ;;
4084
4085 244|fiiom3k)
4086 application="yes"
4087 app_type="fiio"
4088 target_id=112
4089 modelname="fiiom3k"
4090 target="FIIO_M3K"
4091 memory=16 # XXX Can probably go over 32?
4092 tool="cp "
4093 boottool="cp "
4094 bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
4095 bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
4096 output="rockbox.m3k"
4097 bootoutput="bootloader.m3k"
4098 appextra="recorder:gui:hosted"
4099 plugins="yes"
4100 # architecture, manufacturer and model for the target-tree build
4101 t_cpu="hosted"
4102 t_manufacturer="fiio"
4103 t_model="m3k"
4104 mipsellinuxcc
4105# sysfont="20-Terminus-Bold"
4080 ;; 4106 ;;
4081 4107
4082 250|ihifi770c) 4108 250|ihifi770c)
diff --git a/tools/root.make b/tools/root.make
index b588e0f8b1..fd42f9b6b2 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 fiio,$(APP_TYPE)))
108 include $(ROOTDIR)/firmware/target/hosted/fiio/fiio.make
107 else 109 else
108 include $(APPSDIR)/bootloader.make 110 include $(APPSDIR)/bootloader.make
109 endif 111 endif
@@ -150,6 +152,10 @@ else # core
150 include $(ROOTDIR)/firmware/target/hosted/xduoo/xduoo.make 152 include $(ROOTDIR)/firmware/target/hosted/xduoo/xduoo.make
151 endif 153 endif
152 154
155 ifneq (,$(findstring fiio,$(APP_TYPE)))
156 include $(ROOTDIR)/firmware/target/hosted/fiio/fiio.make
157 endif
158
153 ifneq (,$(findstring android_ndk, $(APP_TYPE))) 159 ifneq (,$(findstring android_ndk, $(APP_TYPE)))
154 include $(ROOTDIR)/firmware/target/hosted/ibasso/android_ndk.make 160 include $(ROOTDIR)/firmware/target/hosted/ibasso/android_ndk.make
155 else 161 else