summaryrefslogtreecommitdiff
path: root/apps/keymaps
diff options
context:
space:
mode:
authorUdo Schläpfer <rockbox-2014.10@desktopwarrior.net>2015-02-02 21:44:29 +0100
committerUdo Schläpfer <rockbox-2014.10@desktopwarrior.net>2015-02-02 21:57:55 +0100
commitdbabd0d9c34a33bc0c51243ec37f230d117db955 (patch)
tree46de348929ce739702a230a2587fdb5539585753 /apps/keymaps
parentcef17e3d59ad93f766e8ee23b1610540a33dfe5e (diff)
downloadrockbox-dbabd0d9c34a33bc0c51243ec37f230d117db955.tar.gz
rockbox-dbabd0d9c34a33bc0c51243ec37f230d117db955.zip
iBasso DX50/DX90: Major code cleanup and reorganization.
Reorganization - Separated iBasso devices from PLATFORM_ANDROID. These are now standlone hosted targets. Most device specific code is in the firmware/target/hosted/ibasso directory. - No dependency on Android SDK, only the Android NDK is needed. 32 bit Android NDK and Android API Level 16. - Separate implementation for each device where feasible. Code cleanup - Rewrite of existing code, from simple reformat to complete reimplementation. - New backlight interface, seperating backlight from touchscreen. - Rewrite of device button handler, removing unneeded code and fixing memory leaks. - New Debug messages interface logging to Android adb logcat (DEBUGF, panicf, logf). - Rewrite of lcd device handler, removing unneeded code and fixing memory leaks. - Rewrite of audiohw device handler/pcm interface, removing unneeded code and fixing memory leaks, enabling 44.1/48kHz pthreaded playback. - Rewrite of power and powermng, proper shutdown, using batterylog results (see http://gerrit.rockbox.org/r/#/c/1047/). - Rewrite of configure (Android NDK) and device specific config. - Rewrite of the Android NDK specific Makefile. Misc - All plugins/games/demos activated. - Update tinyalsa to latest from https://github.com/tinyalsa/tinyalsa. Includes - http://gerrit.rockbox.org/r/#/c/993/ - http://gerrit.rockbox.org/r/#/c/1010/ - http://gerrit.rockbox.org/r/#/c/1035/ Does not include http://gerrit.rockbox.org/r/#/c/1007/ due to new backlight interface and new option for hold switch, touchscreen, physical button interaction. Rockbox needs the iBasso DX50/DX90 loader for startup, see http://gerrit.rockbox.org/r/#/c/1099/ The loader expects Rockbox to be installed in /mnt/sdcard/.rockbox/. If /mnt/sdcard/ is accessed as USB mass storage device, Rockbox will exit gracefully and the loader will restart Rockbox on USB disconnect. Tested on iBasso DX50. Compiled (not tested) for iBasso DX90. Compiled (not tested) for PLATFORM_ANDROID. Change-Id: I5f5e22e68f5b4cf29c28e2b40b2c265f2beb7ab7
Diffstat (limited to 'apps/keymaps')
-rw-r--r--apps/keymaps/keymap-dx50.c301
-rw-r--r--apps/keymaps/keymap-touchscreen.c12
2 files changed, 175 insertions, 138 deletions
diff --git a/apps/keymaps/keymap-dx50.c b/apps/keymaps/keymap-dx50.c
index ee3b32005a..c6bb814469 100644
--- a/apps/keymaps/keymap-dx50.c
+++ b/apps/keymaps/keymap-dx50.c
@@ -1,13 +1,15 @@
1/*************************************************************************** 1/***************************************************************************
2 * __________ __ ___. 2 * __________ __ ___
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/ 7 * \/ \/ \/ \/ \/
8 * $Id$
9 * 8 *
10 * Copyright (C) 2010 Maurus Cuelenaere 9 * Copyright (C) 2014 by Ilia Sergachev: Initial Rockbox port to iBasso DX50
10 * Copyright (C) 2014 by Mario Basister: iBasso DX90 port
11 * Copyright (C) 2014 by Simon Rothen: Initial Rockbox repository submission, additional features
12 * Copyright (C) 2014 by Udo Schläpfer: Code clean up, additional features
11 * 13 *
12 * This program is free software; you can redistribute it and/or 14 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License 15 * modify it under the terms of the GNU General Public License
@@ -19,7 +21,6 @@
19 * 21 *
20 ****************************************************************************/ 22 ****************************************************************************/
21 23
22/* Button Code Definitions for iBasso DX50 & DX90 */
23 24
24#include <stdio.h> 25#include <stdio.h>
25#include <string.h> 26#include <string.h>
@@ -30,190 +31,214 @@
30#include "button.h" 31#include "button.h"
31#include "settings.h" 32#include "settings.h"
32 33
34
33/* 35/*
34 * The format of the list is as follows 36 Button Code Definitions for iBasso DX50 & DX90.
35 * { Action Code, Button code, Prereq button code } 37
36 * if there's no need to check the previous button's value, use BUTTON_NONE 38 The format of the list is as follows
37 * Insert LAST_ITEM_IN_LIST at the end of each mapping 39
38 */ 40 { Action Code, Button code, Prereq button code }
39 41
40static const struct button_mapping button_context_standard[] = { 42 If there's no need to check the previous button's value, use BUTTON_NONE.
41 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, 43 CAVEAT: The action without prereq button code will allways be choosen if it has a
42 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 44 lower index in the list.
43 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 45 Insert LAST_ITEM_IN_LIST at the end of each mapping
44 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 46*/
45 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 47
46 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, 48
47 { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, 49static const struct button_mapping button_context_standard[] =
50{
51 { ACTION_STD_CONTEXT, BUTTON_PLAY | BUTTON_REPEAT, BUTTON_PLAY },
52 { ACTION_STD_OK, BUTTON_PLAY | BUTTON_REL, BUTTON_PLAY },
53 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
54 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
55 { ACTION_STD_PREVREPEAT, BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE },
56 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE },
57 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
48 58
49 LAST_ITEM_IN_LIST 59 LAST_ITEM_IN_LIST
50}; /* button_context_standard */ 60};
51 61
52static const struct button_mapping button_context_wps[] = { 62
53 { ACTION_WPS_MENU, BUTTON_POWER, BUTTON_NONE }, 63static const struct button_mapping button_context_wps[] =
54 { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, 64{
55 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_NONE }, 65 { ACTION_WPS_MENU, BUTTON_POWER, BUTTON_NONE },
56 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, 66 { ACTION_WPS_CONTEXT, BUTTON_PLAY | BUTTON_REPEAT, BUTTON_NONE },
57 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, 67 { ACTION_WPS_PLAY, BUTTON_PLAY | BUTTON_REL, BUTTON_NONE },
58 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 68 { ACTION_WPS_SEEKBACK, BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE },
59 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 69 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE },
60 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 70 { ACTION_WPS_STOPSEEK, BUTTON_LEFT | BUTTON_REL, BUTTON_LEFT | BUTTON_REPEAT },
61 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 71 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT | BUTTON_REL, BUTTON_RIGHT | BUTTON_REPEAT },
62 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 72 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT | BUTTON_REL, BUTTON_NONE },
63 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 73 { ACTION_WPS_SKIPPREV, BUTTON_LEFT | BUTTON_REL, BUTTON_NONE },
64 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 74 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
65 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 75 { ACTION_WPS_VOLUP, BUTTON_VOL_UP | BUTTON_REPEAT, BUTTON_NONE },
76 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
77 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN | BUTTON_REPEAT, BUTTON_NONE },
78
66 LAST_ITEM_IN_LIST 79 LAST_ITEM_IN_LIST
67}; /* button_context_wps */ 80};
68 81
69static const struct button_mapping button_context_list[] = { 82
70#ifdef HAVE_VOLUME_IN_LIST 83static const struct button_mapping button_context_list[] =
71 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 84{
72 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 85 { ACTION_LIST_VOLUP, BUTTON_VOL_UP | BUTTON_REPEAT, BUTTON_NONE },
73 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 86 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
74 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 87 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
75#endif 88 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN | BUTTON_REPEAT, BUTTON_NONE },
89
76 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 90 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
77}; /* button_context_list */ 91};
78 92
79static const struct button_mapping button_context_tree[] = {
80 93
94static const struct button_mapping button_context_tree[] =
95{
81 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 96 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
82}; /* button_context_tree */ 97};
83 98
84static const struct button_mapping button_context_listtree_scroll_with_combo[] = { 99
85 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 100static const struct button_mapping button_context_listtree_scroll_with_combo[] =
101{
102 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM | CONTEXT_TREE),
86}; 103};
87 104
88static const struct button_mapping button_context_listtree_scroll_without_combo[] = { 105
89 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 106static const struct button_mapping button_context_listtree_scroll_without_combo[] =
107{
108 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM | CONTEXT_TREE),
90}; 109};
91 110
92static const struct button_mapping button_context_settings[] = { 111
93 { ACTION_SETTINGS_INC, BUTTON_VOL_UP|BUTTON_REL, BUTTON_NONE }, 112static const struct button_mapping button_context_settings[] =
94 { ACTION_SETTINGS_INCREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 113{
95 { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN|BUTTON_REL, BUTTON_NONE }, 114 { ACTION_SETTINGS_INC, BUTTON_VOL_UP | BUTTON_REL, BUTTON_NONE },
96 { ACTION_SETTINGS_DECREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 115 { ACTION_SETTINGS_INCREPEAT, BUTTON_VOL_UP | BUTTON_REPEAT, BUTTON_NONE },
116 { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN | BUTTON_REL, BUTTON_NONE },
117 { ACTION_SETTINGS_DECREPEAT, BUTTON_VOL_DOWN | BUTTON_REPEAT, BUTTON_NONE },
118
97 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 119 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
98}; /* button_context_settings */ 120};
99 121
100static const struct button_mapping button_context_settings_right_is_inc[] = {
101 122
123static const struct button_mapping button_context_settings_right_is_inc[] =
124{
102 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 125 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
103}; /* button_context_settingsgraphical */ 126};
104 127
105static const struct button_mapping button_context_mainmenu[] = { 128
129static const struct button_mapping button_context_mainmenu[] =
130{
131 { ACTION_TREE_WPS, BUTTON_POWER, BUTTON_NONE },
106 132
107 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_TREE), 133 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_TREE),
108}; /* button_context_mainmenu */ 134};
109 135
110static const struct button_mapping button_context_yesno[] = { 136
111 { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, 137static const struct button_mapping button_context_yesno[] =
138{
139 { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
140 { ACTION_YESNO_ACCEPT, BUTTON_LEFT, BUTTON_NONE },
112 141
113 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 142 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
114}; /* button_context_settings_yesno */ 143};
115 144
116static const struct button_mapping button_context_colorchooser[] = {
117 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
118}; /* button_context_colorchooser */
119 145
120static const struct button_mapping button_context_eq[] = { 146static const struct button_mapping button_context_colorchooser[] =
147{
121 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), 148 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
122}; /* button_context_eq */ 149};
123 150
124static const struct button_mapping button_context_keyboard[] = {
125 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
126 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
127 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
128 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
129 151
130 { ACTION_KBD_CURSOR_LEFT, BUTTON_PLAY|BUTTON_LEFT, BUTTON_NONE }, 152static const struct button_mapping button_context_eq[] =
131 { ACTION_KBD_CURSOR_LEFT, BUTTON_PLAY|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 153{
132 { ACTION_KBD_CURSOR_RIGHT, BUTTON_PLAY|BUTTON_RIGHT, BUTTON_NONE }, 154 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
133 { ACTION_KBD_CURSOR_RIGHT, BUTTON_PLAY|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 155};
134 { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE },
135 156
136 { ACTION_KBD_UP, BUTTON_VOL_UP, BUTTON_NONE }, 157
137 { ACTION_KBD_UP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 158static const struct button_mapping button_context_keyboard[] =
138 { ACTION_KBD_DOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 159{
139 { ACTION_KBD_DOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 160 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
161 { ACTION_KBD_LEFT, BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE },
162 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
163 { ACTION_KBD_RIGHT, BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE },
164 { ACTION_KBD_CURSOR_LEFT, BUTTON_PLAY | BUTTON_LEFT, BUTTON_NONE },
165 { ACTION_KBD_CURSOR_LEFT, BUTTON_PLAY | BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE },
166 { ACTION_KBD_CURSOR_RIGHT, BUTTON_PLAY | BUTTON_RIGHT, BUTTON_NONE },
167 { ACTION_KBD_CURSOR_RIGHT, BUTTON_PLAY | BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE },
168 { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE },
169 { ACTION_KBD_UP, BUTTON_VOL_UP, BUTTON_NONE },
170 { ACTION_KBD_UP, BUTTON_VOL_UP | BUTTON_REPEAT, BUTTON_NONE },
171 { ACTION_KBD_DOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
172 { ACTION_KBD_DOWN, BUTTON_VOL_DOWN | BUTTON_REPEAT, BUTTON_NONE },
140 173
141 LAST_ITEM_IN_LIST 174 LAST_ITEM_IN_LIST
142}; /* button_context_keyboard */ 175};
176
143 177
144/** Bookmark Screen **/ 178
145static const struct button_mapping button_context_bmark[] = { 179static const struct button_mapping button_context_bmark[] =
180{
146 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 181 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
147}; /* button_context_bmark */ 182};
183
148 184
149static const struct button_mapping button_context_time[] = { 185static const struct button_mapping button_context_time[] =
186{
150 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), 187 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
151}; /* button_context_time */ 188};
152 189
153static const struct button_mapping button_context_quickscreen[] = { 190
191static const struct button_mapping button_context_quickscreen[] =
192{
154 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 193 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
155}; /* button_context_quickscreen */ 194};
156 195
157static const struct button_mapping button_context_pitchscreen[] = {
158 196
159 { ACTION_PS_INC_SMALL, BUTTON_VOL_UP|BUTTON_REL, BUTTON_NONE }, 197static const struct button_mapping button_context_pitchscreen[] =
160 { ACTION_PS_DEC_SMALL, BUTTON_VOL_DOWN|BUTTON_REL, BUTTON_NONE }, 198{
161 { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE }, 199 { ACTION_PS_INC_SMALL, BUTTON_VOL_UP | BUTTON_REL, BUTTON_NONE },
200 { ACTION_PS_DEC_SMALL, BUTTON_VOL_DOWN |BUTTON_REL, BUTTON_NONE },
201 { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE },
162 202
163 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 203 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
164}; /* button_context_pitchcreen */ 204};
165 205
166 206
167static const struct button_mapping button_context_radio[] = { 207static const struct button_mapping button_context_radio[] =
208{
168 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 209 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
169}; /* button_context_radio */ 210};
211
170 212
171const struct button_mapping* target_get_context_mapping(int context) 213const struct button_mapping* target_get_context_mapping(int context)
172{ 214{
173 switch (context) 215 switch(context)
174 { 216 {
175 case CONTEXT_STD: 217 case CONTEXT_STD: { return button_context_standard; }
176 return button_context_standard; 218 case CONTEXT_WPS: { return button_context_wps; }
177 case CONTEXT_WPS: 219 case CONTEXT_LIST: { return button_context_list; }
178 return button_context_wps; 220 case CONTEXT_MAINMENU: { return button_context_mainmenu; }
179 221 case CONTEXT_CUSTOM | CONTEXT_TREE: { return button_context_tree; }
180 case CONTEXT_LIST: 222 case CONTEXT_SETTINGS: { return button_context_settings; }
181 return button_context_list; 223 case CONTEXT_SETTINGS_COLOURCHOOSER: { return button_context_colorchooser; }
182 case CONTEXT_MAINMENU: 224 case CONTEXT_SETTINGS_EQ: { return button_context_eq; }
183 return button_context_mainmenu; 225 case CONTEXT_SETTINGS_TIME: { return button_context_time; }
226 case CONTEXT_KEYBOARD: { return button_context_keyboard; }
227 case CONTEXT_FM: { return button_context_radio; }
228 case CONTEXT_BOOKMARKSCREEN: { return button_context_bmark; }
229 case CONTEXT_QUICKSCREEN: { return button_context_quickscreen; }
230 case CONTEXT_PITCHSCREEN: { return button_context_pitchscreen; }
231 case CONTEXT_CUSTOM | CONTEXT_SETTINGS:
232 case CONTEXT_SETTINGS_RECTRIGGER: { return button_context_settings_right_is_inc; }
184 case CONTEXT_TREE: 233 case CONTEXT_TREE:
185 if (global_settings.hold_lr_for_scroll_in_list) 234 {
235 if(global_settings.hold_lr_for_scroll_in_list)
236 {
186 return button_context_listtree_scroll_without_combo; 237 return button_context_listtree_scroll_without_combo;
187 else 238 }
188 return button_context_listtree_scroll_with_combo; 239 return button_context_listtree_scroll_with_combo;
189 case CONTEXT_CUSTOM|CONTEXT_TREE: 240 }
190 return button_context_tree;
191
192 case CONTEXT_SETTINGS:
193 return button_context_settings;
194 case CONTEXT_CUSTOM|CONTEXT_SETTINGS:
195 case CONTEXT_SETTINGS_RECTRIGGER:
196 return button_context_settings_right_is_inc;
197
198 case CONTEXT_SETTINGS_COLOURCHOOSER:
199 return button_context_colorchooser;
200 case CONTEXT_SETTINGS_EQ:
201 return button_context_eq;
202
203 case CONTEXT_SETTINGS_TIME:
204 return button_context_time;
205
206 case CONTEXT_KEYBOARD:
207 return button_context_keyboard;
208
209 case CONTEXT_FM:
210 return button_context_radio;
211 case CONTEXT_BOOKMARKSCREEN:
212 return button_context_bmark;
213 case CONTEXT_QUICKSCREEN:
214 return button_context_quickscreen;
215 case CONTEXT_PITCHSCREEN:
216 return button_context_pitchscreen;
217 } 241 }
242
218 return button_context_standard; 243 return button_context_standard;
219} 244}
diff --git a/apps/keymaps/keymap-touchscreen.c b/apps/keymaps/keymap-touchscreen.c
index 9825c92e7d..6163cb054c 100644
--- a/apps/keymaps/keymap-touchscreen.c
+++ b/apps/keymaps/keymap-touchscreen.c
@@ -171,6 +171,13 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
171 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2|CONTEXT_CUSTOM|CONTEXT_SETTINGS) 171 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2|CONTEXT_CUSTOM|CONTEXT_SETTINGS)
172}; /* button_context_settingsgraphical */ 172}; /* button_context_settingsgraphical */
173 173
174
175static const struct button_mapping button_context_mainmenu[] =
176{
177 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2 | CONTEXT_MAINMENU)
178};
179
180
174static const struct button_mapping button_context_yesno[] = { 181static const struct button_mapping button_context_yesno[] = {
175 { ACTION_YESNO_ACCEPT, BUTTON_TOPRIGHT, BUTTON_NONE }, 182 { ACTION_YESNO_ACCEPT, BUTTON_TOPRIGHT, BUTTON_NONE },
176 { ACTION_YESNO_ACCEPT, BUTTON_BOTTOMLEFT, BUTTON_NONE }, 183 { ACTION_YESNO_ACCEPT, BUTTON_BOTTOMLEFT, BUTTON_NONE },
@@ -389,7 +396,12 @@ const struct button_mapping* get_context_mapping(int context)
389 396
390 case CONTEXT_LIST: 397 case CONTEXT_LIST:
391 return button_context_list; 398 return button_context_list;
399
392 case CONTEXT_MAINMENU: 400 case CONTEXT_MAINMENU:
401 {
402 return button_context_mainmenu;
403 }
404
393 case CONTEXT_TREE: 405 case CONTEXT_TREE:
394 if (global_settings.hold_lr_for_scroll_in_list) 406 if (global_settings.hold_lr_for_scroll_in_list)
395 return button_context_listtree_scroll_without_combo; 407 return button_context_listtree_scroll_without_combo;