summaryrefslogtreecommitdiff
path: root/apps/keymaps/keymap-xduoox20.c
diff options
context:
space:
mode:
authorMarcin Bukat <marcin.bukat@gmail.com>2018-11-05 13:01:55 +0100
committerSolomon Peachy <pizza@shaftnet.org>2020-04-06 18:15:41 +0200
commit180cef835bf40d0081895773aaa637ac926bb0ac (patch)
tree48c380d76c0ea40931cb5e863b40fc5dfa1ecba4 /apps/keymaps/keymap-xduoox20.c
parentced3a20aacf26642ccc3ffd136f64247c67e5769 (diff)
downloadrockbox-180cef835bf40d0081895773aaa637ac926bb0ac.tar.gz
rockbox-180cef835bf40d0081895773aaa637ac926bb0ac.zip
xDuoo X3II and X20 port
Provided by Roman Stolyarov Integration, Refactoring, and Upstreaming by Solomon Peachy X3II confirmed working by forum tester, X20 is nearly identical. This includes bootloader, main firmware, and the flash image patcher. Eventual Todo: * Further refactor AGPTek Rocker & xduoo hiby bootloaders * Further refactor AGPTek Rocker & xduoo hosted platform code Change-Id: I34a674051d368efcc75d1d18c725971fe46c3eee
Diffstat (limited to 'apps/keymaps/keymap-xduoox20.c')
-rw-r--r--apps/keymaps/keymap-xduoox20.c213
1 files changed, 213 insertions, 0 deletions
diff --git a/apps/keymaps/keymap-xduoox20.c b/apps/keymaps/keymap-xduoox20.c
new file mode 100644
index 0000000000..3b1b01b7fa
--- /dev/null
+++ b/apps/keymaps/keymap-xduoox20.c
@@ -0,0 +1,213 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2018 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 xDuoo X20 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_PREV, BUTTON_NONE },
39 { ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
40 { ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
41 { ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
42 { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
43 { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
44 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
45 { ACTION_STD_MENU, BUTTON_OPTION|BUTTON_REL, BUTTON_OPTION },
46
47 LAST_ITEM_IN_LIST
48}; /* button_context_standard */
49
50static const struct button_mapping button_context_wps[] = {
51 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
52 { ACTION_WPS_SKIPPREV, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
53 { ACTION_WPS_SEEKBACK, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
54 { ACTION_WPS_STOPSEEK, BUTTON_PREV|BUTTON_REL, BUTTON_PREV|BUTTON_REPEAT },
55 { ACTION_WPS_SKIPNEXT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT },
56 { ACTION_WPS_SEEKFWD, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
57 { ACTION_WPS_STOPSEEK, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT|BUTTON_REPEAT },
58 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
59 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
60 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
61 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
62 { ACTION_WPS_BROWSE, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
63 { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
64 { ACTION_WPS_MENU, BUTTON_OPTION|BUTTON_REL, BUTTON_OPTION },
65 { ACTION_WPS_QUICKSCREEN, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_OPTION },
66 { ACTION_WPS_HOTKEY, BUTTON_HOME|BUTTON_REPEAT, BUTTON_HOME },
67
68 LAST_ITEM_IN_LIST
69}; /* button_context_wps */
70
71static const struct button_mapping button_context_list[] = {
72 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
73 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
74 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
75 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
76
77 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
78}; /* button_context_list */
79
80/** Bookmark Screen **/
81static const struct button_mapping button_context_bmark[] = {
82 { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
83
84 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
85}; /* button_context_bmark */
86
87/** Keyboard **/
88static const struct button_mapping button_context_keyboard[] = {
89 { ACTION_KBD_LEFT, BUTTON_PREV, BUTTON_NONE },
90 { ACTION_KBD_LEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
91 { ACTION_KBD_RIGHT, BUTTON_NEXT, BUTTON_NONE },
92 { ACTION_KBD_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
93 { ACTION_KBD_DOWN, BUTTON_OPTION, BUTTON_NONE },
94 { ACTION_KBD_DOWN, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_NONE },
95 { ACTION_KBD_CURSOR_LEFT, BUTTON_VOL_UP, BUTTON_NONE },
96 { ACTION_KBD_CURSOR_LEFT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
97 { ACTION_KBD_CURSOR_RIGHT, BUTTON_VOL_DOWN, BUTTON_NONE },
98 { ACTION_KBD_CURSOR_RIGHT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
99 { ACTION_KBD_BACKSPACE, BUTTON_HOME, BUTTON_NONE },
100 { ACTION_KBD_BACKSPACE, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE },
101 { ACTION_KBD_SELECT, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
102 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
103 { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
104
105 LAST_ITEM_IN_LIST
106}; /* button_context_keyboard */
107
108/** Pitchscreen **/
109static const struct button_mapping button_context_pitchscreen[] = {
110 { ACTION_PS_INC_SMALL, BUTTON_VOL_UP, BUTTON_NONE },
111 { ACTION_PS_INC_BIG, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
112 { ACTION_PS_DEC_SMALL, BUTTON_VOL_DOWN, BUTTON_NONE },
113 { ACTION_PS_DEC_BIG, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
114 { ACTION_PS_NUDGE_LEFT, BUTTON_PREV, BUTTON_NONE },
115 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_PREV|BUTTON_REL, BUTTON_NONE },
116 { ACTION_PS_NUDGE_RIGHT, BUTTON_NEXT, BUTTON_NONE },
117 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_NEXT|BUTTON_REL, BUTTON_NONE },
118 { ACTION_PS_TOGGLE_MODE, BUTTON_PLAY|BUTTON_REL, BUTTON_NONE },
119 { ACTION_PS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
120 { ACTION_PS_EXIT, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
121 { ACTION_PS_SLOWER, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
122 { ACTION_PS_FASTER, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
123
124 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
125}; /* button_context_pitchscreen */
126
127/** Quickscreen **/
128static const struct button_mapping button_context_quickscreen[] = {
129 { ACTION_QS_TOP, BUTTON_VOL_UP, BUTTON_NONE },
130 { ACTION_QS_TOP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
131 { ACTION_QS_DOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
132 { ACTION_QS_DOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
133 { ACTION_QS_LEFT, BUTTON_PREV, BUTTON_NONE },
134 { ACTION_QS_LEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
135 { ACTION_QS_RIGHT, BUTTON_NEXT, BUTTON_NONE },
136 { ACTION_QS_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
137 { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
138
139 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
140}; /* button_context_quickscreen */
141
142/** Settings - General Mappings **/
143static const struct button_mapping button_context_settings[] = {
144 { ACTION_SETTINGS_RESET, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
145 { ACTION_STD_PREV, BUTTON_PREV, BUTTON_NONE },
146 { ACTION_STD_PREVREPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
147 { ACTION_STD_NEXT, BUTTON_NEXT, BUTTON_NONE },
148 { ACTION_STD_NEXTREPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
149 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
150 { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
151
152 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
153}; /* button_context_settings */
154
155static const struct button_mapping button_context_settings_vol_is_inc[] = {
156 { ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE },
157 { ACTION_SETTINGS_INCREPEAT,BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
158 { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
159 { ACTION_SETTINGS_DECREPEAT,BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
160
161 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
162}; /* button_context_settings_right_is_inc */
163
164/** Tree **/
165static const struct button_mapping button_context_tree[] = {
166 { ACTION_TREE_WPS, BUTTON_OPTION|BUTTON_REL, BUTTON_OPTION },
167 { ACTION_TREE_HOTKEY, BUTTON_HOME|BUTTON_REPEAT, BUTTON_HOME },
168 { ACTION_STD_MENU, BUTTON_OPTION|BUTTON_REPEAT, BUTTON_OPTION },
169
170 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
171}; /* button_context_tree */
172
173/** Yes/No Screen **/
174static const struct button_mapping button_context_yesnoscreen[] = {
175 { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
176
177 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
178}; /* button_context_settings_yesnoscreen */
179
180/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
181const struct button_mapping* get_context_mapping(int context)
182{
183 switch (context)
184 {
185 case CONTEXT_LIST:
186 return button_context_list;
187 case CONTEXT_STD:
188 return button_context_standard;
189 case CONTEXT_BOOKMARKSCREEN:
190 return button_context_bmark;
191 case CONTEXT_KEYBOARD:
192 return button_context_keyboard;
193 case CONTEXT_PITCHSCREEN:
194 return button_context_pitchscreen;
195 case CONTEXT_QUICKSCREEN:
196 return button_context_quickscreen;
197 case CONTEXT_SETTINGS:
198 return button_context_settings;
199 case CONTEXT_SETTINGS_TIME:
200 case CONTEXT_SETTINGS_COLOURCHOOSER:
201 case CONTEXT_SETTINGS_EQ:
202 case CONTEXT_SETTINGS_RECTRIGGER:
203 return button_context_settings_vol_is_inc;
204 case CONTEXT_TREE:
205 case CONTEXT_MAINMENU:
206 return button_context_tree;
207 case CONTEXT_WPS:
208 return button_context_wps;
209 case CONTEXT_YESNOSCREEN:
210 return button_context_yesnoscreen;
211 }
212 return button_context_standard;
213}