View difference between Paste ID: EX2MXp09 and vsc9sEBp
SHOW: | | - or go back to the newest paste.
1
/***************************************************************************
2
 *             __________               __   ___.
3
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
4
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
5
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
6
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
7
 *                     \/            \/     \/    \/            \/
8
 * $Id$
9
 *
10
 * Copyright (C) Thomas Martitz 2008
11
 * Copyright (C) Barry Wardell 2006
12
 *
13
 * This program is free software; you can redistribute it and/or
14
 * modify it under the terms of the GNU General Public License
15
 * as published by the Free Software Foundation; either version 2
16
 * of the License, or (at your option) any later version.
17
 *
18
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19
 * KIND, either express or implied.
20
 *
21
 ****************************************************************************/
22
/* Button Code Definitions for Sandisk Fuze 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
 */
37
static const struct button_mapping button_context_standard[]  = {
38
    { ACTION_STD_PREV,        BUTTON_SCROLL_BACK,                BUTTON_NONE },
39
    { ACTION_STD_PREVREPEAT,  BUTTON_SCROLL_BACK|BUTTON_REPEAT,  BUTTON_NONE },
40
    { ACTION_STD_NEXT,        BUTTON_SCROLL_FWD,                 BUTTON_NONE },
41
    { ACTION_STD_NEXTREPEAT,  BUTTON_SCROLL_FWD|BUTTON_REPEAT,   BUTTON_NONE },
42
43
    { ACTION_STD_MENU,        BUTTON_DOWN|BUTTON_REL,            BUTTON_DOWN },
44
45
    { ACTION_STD_OK,          BUTTON_SELECT|BUTTON_REL,          BUTTON_SELECT },
46
    { ACTION_STD_OK,          BUTTON_RIGHT,                      BUTTON_NONE },
47
    { ACTION_STD_CANCEL,      BUTTON_LEFT,                       BUTTON_NONE },
48
49
    { ACTION_STD_QUICKSCREEN, BUTTON_DOWN|BUTTON_REPEAT,         BUTTON_DOWN },
50
    { ACTION_STD_CONTEXT,     BUTTON_SELECT|BUTTON_REPEAT,       BUTTON_SELECT },
51
52
    LAST_ITEM_IN_LIST
53
}; /* button_context_standard */
54
55
56
static const struct button_mapping button_context_wps[]  = {
57
    { ACTION_WPS_PLAY,              BUTTON_HOME|BUTTON_REL,           BUTTON_HOME },
58
    { ACTION_WPS_STOP,              BUTTON_HOME|BUTTON_REPEAT,        BUTTON_HOME },
59
   
60
    { ACTION_WPS_SKIPPREV,          BUTTON_LEFT|BUTTON_REL,         BUTTON_LEFT },
61
    { ACTION_WPS_SEEKBACK,          BUTTON_LEFT|BUTTON_REPEAT,      BUTTON_NONE },
62
    { ACTION_WPS_STOPSEEK,          BUTTON_LEFT|BUTTON_REL,         BUTTON_LEFT|BUTTON_REPEAT },
63
    
64
    { ACTION_WPS_SKIPNEXT,          BUTTON_RIGHT|BUTTON_REL,        BUTTON_RIGHT },
65
    { ACTION_WPS_SEEKFWD,           BUTTON_RIGHT|BUTTON_REPEAT,     BUTTON_NONE },
66
    { ACTION_WPS_STOPSEEK,          BUTTON_RIGHT|BUTTON_REL,        BUTTON_RIGHT|BUTTON_REPEAT },
67
    
68
    { ACTION_WPS_ABSETB_NEXTDIR,    BUTTON_HOME|BUTTON_RIGHT,       BUTTON_HOME },
69
    { ACTION_WPS_ABSETA_PREVDIR,    BUTTON_HOME|BUTTON_LEFT,        BUTTON_HOME },
70
    { ACTION_WPS_ABRESET,           BUTTON_HOME|BUTTON_UP,          BUTTON_HOME },
71
    
72
    { ACTION_WPS_VOLUP,             BUTTON_SCROLL_FWD,              BUTTON_NONE },
73
    { ACTION_WPS_VOLUP,             BUTTON_SCROLL_FWD|BUTTON_REPEAT,BUTTON_NONE },
74
    { ACTION_WPS_VOLDOWN,           BUTTON_SCROLL_BACK,             BUTTON_NONE },
75
    { ACTION_WPS_VOLDOWN,           BUTTON_SCROLL_BACK|BUTTON_REPEAT,BUTTON_NONE },
76
    
77
    { ACTION_WPS_BROWSE,            BUTTON_SELECT|BUTTON_REL,       BUTTON_SELECT },
78
79
    { ACTION_WPS_CONTEXT,           BUTTON_SELECT|BUTTON_REPEAT,    BUTTON_SELECT },
80
    { ACTION_WPS_QUICKSCREEN,       BUTTON_DOWN|BUTTON_REPEAT,      BUTTON_DOWN },
81
82
    { ACTION_WPS_MENU,              BUTTON_DOWN|BUTTON_REL,         BUTTON_DOWN },
83
    
84
    { ACTION_WPS_PITCHSCREEN,       BUTTON_SELECT|BUTTON_UP,        BUTTON_SELECT },
85
    { ACTION_WPS_ID3SCREEN,         BUTTON_SELECT|BUTTON_DOWN,      BUTTON_SELECT },
86-
    { ACTION_WPS_HOTKEY,            BUTTON_HOME|BUTTON_REL,         BUTTON_HOME },
86+
    { ACTION_WPS_HOTKEY,            BUTTON_NONE,                    BUTTON_NONE },
87
    
88
    LAST_ITEM_IN_LIST
89
}; /* button_context_wps */
90
91
static const struct button_mapping button_context_settings[] = {
92
    { ACTION_STD_CANCEL,        BUTTON_LEFT,                      BUTTON_NONE },
93
    { ACTION_SETTINGS_INC,      BUTTON_SCROLL_FWD,                BUTTON_NONE },
94
    { ACTION_SETTINGS_INCREPEAT,BUTTON_SCROLL_FWD|BUTTON_REPEAT,  BUTTON_NONE },
95
    { ACTION_SETTINGS_DEC,      BUTTON_SCROLL_BACK,               BUTTON_NONE },
96
    { ACTION_SETTINGS_DECREPEAT,BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
97
98
    { ACTION_STD_PREV,          BUTTON_UP|BUTTON_REL,             BUTTON_UP   },
99
    { ACTION_STD_PREVREPEAT,    BUTTON_UP|BUTTON_REPEAT,          BUTTON_UP   },
100
    { ACTION_STD_NEXT,          BUTTON_DOWN|BUTTON_REL,           BUTTON_DOWN },
101
    { ACTION_STD_NEXTREPEAT,    BUTTON_DOWN|BUTTON_REPEAT,        BUTTON_DOWN },
102
    { ACTION_SETTINGS_RESET,    BUTTON_SELECT,                    BUTTON_NONE },
103
104
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
105
}; /* button_context_settings */
106
107
static const struct button_mapping button_context_list[]  = {
108
    { ACTION_LISTTREE_PGUP,   BUTTON_HOME|BUTTON_SCROLL_BACK,   BUTTON_HOME },
109
    { ACTION_LISTTREE_PGDOWN, BUTTON_HOME|BUTTON_SCROLL_FWD,    BUTTON_HOME },
110
111
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
112
}; /* button_context_list */
113
114
static const struct button_mapping button_context_tree[]  = {
115
    { ACTION_TREE_WPS,    BUTTON_UP|BUTTON_REL,         BUTTON_UP },
116
    { ACTION_TREE_STOP,   BUTTON_UP|BUTTON_REPEAT,      BUTTON_UP },
117
    { ACTION_TREE_HOTKEY, BUTTON_HOME|BUTTON_REL,       BUTTON_HOME },
118
    
119
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
120
}; /* button_context_tree */
121
122
static const struct button_mapping button_context_listtree_scroll_without_combo[]  = {
123
    { ACTION_NONE,              BUTTON_LEFT,                BUTTON_NONE },
124
    { ACTION_STD_CANCEL,        BUTTON_LEFT|BUTTON_REL,     BUTTON_LEFT },
125
    { ACTION_TREE_ROOT_INIT,    BUTTON_LEFT|BUTTON_REPEAT,  BUTTON_LEFT },
126
    { ACTION_TREE_PGLEFT,       BUTTON_LEFT|BUTTON_REPEAT,  BUTTON_NONE },
127
    { ACTION_NONE,              BUTTON_RIGHT,               BUTTON_NONE },
128
    { ACTION_STD_OK,            BUTTON_RIGHT|BUTTON_REL,    BUTTON_RIGHT },
129
    { ACTION_TREE_PGRIGHT,      BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
130
131
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
132
}; /* button_context_listtree_scroll_without_combo */
133
134
static const struct button_mapping button_context_listtree_scroll_with_combo[]  = {
135
    { ACTION_TREE_PGLEFT,   BUTTON_HOME|BUTTON_LEFT,               BUTTON_NONE },
136
    { ACTION_TREE_ROOT_INIT,BUTTON_HOME|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_HOME|BUTTON_LEFT },
137
    { ACTION_TREE_PGLEFT,   BUTTON_HOME|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
138
    { ACTION_TREE_PGRIGHT,  BUTTON_HOME|BUTTON_RIGHT,              BUTTON_NONE },
139
    { ACTION_TREE_PGRIGHT,  BUTTON_HOME|BUTTON_RIGHT|BUTTON_REPEAT,BUTTON_NONE },
140
141
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
142
}; /* button_context_listtree_scroll_with_combo */
143
144
static const struct button_mapping button_context_yesno[]  = {
145
    { ACTION_YESNO_ACCEPT,          BUTTON_SELECT,              BUTTON_NONE },
146
147
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
148
}; /* button_context_settings_yesno */
149
150
static const struct button_mapping button_context_quickscreen[]  = {
151
    { ACTION_NONE,       BUTTON_LEFT,                   BUTTON_NONE },
152
    { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL,      BUTTON_NONE },
153
    { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REPEAT,     BUTTON_NONE },
154
    { ACTION_QS_TOP,     BUTTON_UP|BUTTON_REL,          BUTTON_NONE },
155
    { ACTION_QS_TOP,     BUTTON_UP|BUTTON_REPEAT,       BUTTON_NONE },
156
    { ACTION_QS_DOWN,    BUTTON_DOWN|BUTTON_REL,        BUTTON_NONE },
157
    { ACTION_QS_DOWN,    BUTTON_DOWN|BUTTON_REPEAT,     BUTTON_NONE },
158
    { ACTION_QS_LEFT,    BUTTON_LEFT|BUTTON_REL,        BUTTON_NONE },
159
    { ACTION_QS_LEFT,    BUTTON_LEFT|BUTTON_REPEAT,     BUTTON_NONE },
160
    { ACTION_QS_RIGHT,   BUTTON_RIGHT|BUTTON_REL,       BUTTON_NONE },
161
    { ACTION_QS_RIGHT,   BUTTON_RIGHT|BUTTON_REPEAT,    BUTTON_NONE },
162
    
163
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
164
}; /* button_context_quickscreen */
165
166
static const struct button_mapping button_context_settings_right_is_inc[]  = {
167
    { ACTION_SETTINGS_INC,       BUTTON_SCROLL_FWD,               BUTTON_NONE },
168
    { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
169
    { ACTION_SETTINGS_DEC,       BUTTON_SCROLL_BACK,              BUTTON_NONE },
170
    { ACTION_SETTINGS_DECREPEAT, BUTTON_SCROLL_BACK|BUTTON_REPEAT,BUTTON_NONE },
171
172
    { ACTION_STD_PREV,           BUTTON_UP|BUTTON_REL,            BUTTON_UP   },
173
    { ACTION_STD_PREVREPEAT,     BUTTON_UP|BUTTON_REPEAT,         BUTTON_UP   },
174
    { ACTION_STD_NEXT,           BUTTON_DOWN|BUTTON_REL,          BUTTON_DOWN },
175
    { ACTION_STD_NEXTREPEAT,     BUTTON_DOWN|BUTTON_REPEAT,       BUTTON_DOWN },
176
    { ACTION_NONE,               BUTTON_SELECT,                   BUTTON_NONE },
177
    { ACTION_STD_OK,             BUTTON_SELECT|BUTTON_REL,        BUTTON_NONE },
178
    { ACTION_STD_CANCEL,         BUTTON_LEFT|BUTTON_REL,          BUTTON_LEFT },
179
    { ACTION_STD_OK,             BUTTON_RIGHT,                    BUTTON_NONE },
180
    
181
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
182
}; /* button_context_settings_right_is_inc */
183
184
static const struct button_mapping button_context_settings_time[] = {
185
    { ACTION_STD_PREV,        BUTTON_UP|BUTTON_REL,             BUTTON_NONE },
186
    { ACTION_STD_PREVREPEAT,  BUTTON_UP|BUTTON_REPEAT,          BUTTON_NONE },
187
    { ACTION_STD_NEXT,        BUTTON_DOWN|BUTTON_REL,           BUTTON_NONE },
188
    { ACTION_STD_NEXTREPEAT,  BUTTON_DOWN|BUTTON_REPEAT,        BUTTON_NONE },
189
190
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
191
}; /* button_context_settings_time */
192
193
static const struct button_mapping button_context_pitchscreen[]  = {
194
    { ACTION_PS_INC_SMALL,      BUTTON_SCROLL_FWD,                BUTTON_NONE },
195
    { ACTION_PS_INC_BIG,        BUTTON_SCROLL_FWD|BUTTON_REPEAT,  BUTTON_NONE },
196
    { ACTION_PS_DEC_SMALL,      BUTTON_SCROLL_BACK,               BUTTON_NONE },
197
    { ACTION_PS_DEC_BIG,        BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
198
    { ACTION_PS_NUDGE_LEFT,     BUTTON_LEFT,                      BUTTON_NONE },
199
    { ACTION_PS_NUDGE_LEFTOFF,  BUTTON_LEFT|BUTTON_REL,           BUTTON_NONE },
200
    { ACTION_PS_NUDGE_RIGHT,    BUTTON_RIGHT,                     BUTTON_NONE },
201
    { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL,          BUTTON_NONE },
202
    { ACTION_PS_TOGGLE_MODE,    BUTTON_HOME|BUTTON_REL,           BUTTON_NONE },
203
    { ACTION_PS_RESET,          BUTTON_SELECT,                    BUTTON_NONE },
204
    { ACTION_PS_EXIT,           BUTTON_HOME|BUTTON_REPEAT,        BUTTON_NONE },
205
    { ACTION_PS_EXIT,           BUTTON_UP,                        BUTTON_NONE },
206
    { ACTION_PS_SLOWER,         BUTTON_LEFT|BUTTON_REPEAT,        BUTTON_NONE },
207
    { ACTION_PS_FASTER,         BUTTON_RIGHT|BUTTON_REPEAT,       BUTTON_NONE },
208
    
209
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
210
}; /* button_context_pitchscreen */
211
212
#ifdef HAVE_RECORDING
213
/** Recording Screen **/
214
static const struct button_mapping button_context_recscreen[]  = {
215
    { ACTION_REC_PAUSE,          BUTTON_HOME|BUTTON_REL,             BUTTON_HOME },
216
    { ACTION_STD_CANCEL,         BUTTON_DOWN,                      BUTTON_NONE },
217
    { ACTION_REC_NEWFILE,        BUTTON_HOME|BUTTON_REL,           BUTTON_HOME },
218
    { ACTION_STD_MENU,           BUTTON_SELECT|BUTTON_REPEAT,      BUTTON_SELECT},
219
    { ACTION_SETTINGS_INC,       BUTTON_RIGHT,                     BUTTON_NONE },
220
    { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT,       BUTTON_NONE },
221
    { ACTION_SETTINGS_DEC,       BUTTON_LEFT,                      BUTTON_NONE },
222
    { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT,        BUTTON_NONE },
223
    { ACTION_STD_PREV,           BUTTON_SCROLL_BACK,               BUTTON_NONE },
224
    { ACTION_STD_PREV,           BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
225
    { ACTION_STD_NEXT,           BUTTON_SCROLL_FWD,                BUTTON_NONE },
226
    { ACTION_STD_NEXT,           BUTTON_SCROLL_FWD|BUTTON_REPEAT,  BUTTON_NONE },
227
    { ACTION_STD_CANCEL,         BUTTON_HOME|BUTTON_REPEAT,        BUTTON_HOME },
228
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
229
}; /* button_context_recscreen */
230
#endif
231
232
/** FM Radio Screen **/
233
static const struct button_mapping button_context_radio[]  = {
234
    { ACTION_STD_PREV,       BUTTON_LEFT,                       BUTTON_NONE },
235
    { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT,         BUTTON_NONE },
236
    { ACTION_STD_NEXT,       BUTTON_RIGHT,                      BUTTON_NONE },
237
    { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT,        BUTTON_NONE },
238
    { ACTION_FM_MENU,        BUTTON_SELECT|BUTTON_REPEAT,       BUTTON_NONE },
239
    { ACTION_FM_STOP,        BUTTON_HOME|BUTTON_REPEAT,         BUTTON_HOME },
240
    { ACTION_FM_MODE,        BUTTON_HOME|BUTTON_REPEAT,         BUTTON_HOME },
241
    { ACTION_FM_EXIT,        BUTTON_DOWN|BUTTON_REL,            BUTTON_DOWN },
242
    { ACTION_FM_EXIT,        BUTTON_DOWN|BUTTON_REPEAT,         BUTTON_NONE },
243
    { ACTION_FM_PLAY,        BUTTON_HOME|BUTTON_REL,            BUTTON_HOME },
244
    { ACTION_FM_PRESET,      BUTTON_HOME|BUTTON_REL,            BUTTON_HOME },
245
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
246
}; /* button_context_radio */
247
248
static const struct button_mapping button_context_keyboard[]  = {
249
    { ACTION_KBD_LEFT,         BUTTON_LEFT,                      BUTTON_NONE },
250
    { ACTION_KBD_LEFT,         BUTTON_LEFT|BUTTON_REPEAT,        BUTTON_NONE },
251
    { ACTION_KBD_RIGHT,        BUTTON_RIGHT,                     BUTTON_NONE },
252
    { ACTION_KBD_RIGHT,        BUTTON_RIGHT|BUTTON_REPEAT,       BUTTON_NONE },
253
    
254
    { ACTION_KBD_CURSOR_LEFT,  BUTTON_HOME|BUTTON_LEFT,                BUTTON_NONE },
255
    { ACTION_KBD_CURSOR_LEFT,  BUTTON_HOME|BUTTON_LEFT|BUTTON_REPEAT,  BUTTON_NONE },
256
    { ACTION_KBD_CURSOR_RIGHT, BUTTON_HOME|BUTTON_RIGHT,               BUTTON_NONE },
257
    { ACTION_KBD_CURSOR_RIGHT, BUTTON_HOME|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
258
    
259
    { ACTION_KBD_UP,           BUTTON_SCROLL_BACK,               BUTTON_NONE },
260
    { ACTION_KBD_UP,           BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
261
    { ACTION_KBD_DOWN,         BUTTON_SCROLL_FWD,                BUTTON_NONE },
262
    { ACTION_KBD_DOWN,         BUTTON_SCROLL_FWD|BUTTON_REPEAT,  BUTTON_NONE },
263
    { ACTION_KBD_PAGE_FLIP,    BUTTON_HOME|BUTTON_SELECT,        BUTTON_HOME },
264
    { ACTION_KBD_BACKSPACE,    BUTTON_DOWN,                      BUTTON_NONE },
265
    { ACTION_KBD_BACKSPACE,    BUTTON_DOWN|BUTTON_REPEAT,        BUTTON_NONE },
266
    { ACTION_KBD_SELECT,       BUTTON_SELECT,                    BUTTON_NONE },
267
    { ACTION_KBD_DONE,         BUTTON_HOME,                      BUTTON_NONE },
268
    { ACTION_KBD_ABORT,        BUTTON_HOME|BUTTON_REPEAT,        BUTTON_NONE },
269
    { ACTION_KBD_MORSE_SELECT, BUTTON_SELECT|BUTTON_REL,         BUTTON_NONE },
270
271
    LAST_ITEM_IN_LIST
272
}; /* button_context_keyboard */
273
274
static const struct button_mapping button_context_bmark[]  = {
275
    { ACTION_BMS_DELETE,       BUTTON_HOME,        BUTTON_NONE },
276
277
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
278
}; /* button_context_bmark */
279
280
#ifdef USB_ENABLE_HID
281
static const struct button_mapping button_context_usb_hid[] = {
282
    { ACTION_USB_HID_MODE_SWITCH_NEXT, BUTTON_HOME|BUTTON_REL,    BUTTON_HOME },
283
    { ACTION_USB_HID_MODE_SWITCH_PREV, BUTTON_HOME|BUTTON_REPEAT, BUTTON_HOME },
284
285
    LAST_ITEM_IN_LIST
286
}; /* button_context_usb_hid */
287
288
static const struct button_mapping button_context_usb_hid_mode_multimedia[] = {
289
    { ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN,         BUTTON_SCROLL_BACK,               BUTTON_NONE },
290
    { ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN,         BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
291
    { ACTION_USB_HID_MULTIMEDIA_VOLUME_UP,           BUTTON_SCROLL_FWD,                BUTTON_NONE },
292
    { ACTION_USB_HID_MULTIMEDIA_VOLUME_UP,           BUTTON_SCROLL_FWD|BUTTON_REPEAT,  BUTTON_NONE },
293
    { ACTION_USB_HID_MULTIMEDIA_VOLUME_MUTE,         BUTTON_SELECT|BUTTON_REL,         BUTTON_SELECT },
294
    { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_PLAY_PAUSE, BUTTON_UP|BUTTON_REL,             BUTTON_UP },
295
    { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_STOP,       BUTTON_UP|BUTTON_REPEAT,          BUTTON_UP },
296
    { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_PREV, BUTTON_LEFT|BUTTON_REL,           BUTTON_LEFT },
297
    { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_NEXT, BUTTON_RIGHT|BUTTON_REL,          BUTTON_RIGHT },
298
299
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
300
}; /* button_context_usb_hid_mode_multimedia */
301
302
static const struct button_mapping button_context_usb_hid_mode_presentation[] = {
303
    { ACTION_USB_HID_PRESENTATION_SLIDESHOW_START, BUTTON_UP|BUTTON_REL,             BUTTON_UP },
304
    { ACTION_USB_HID_PRESENTATION_SLIDESHOW_LEAVE, BUTTON_POWER|BUTTON_REL,          BUTTON_POWER },
305
    { ACTION_USB_HID_PRESENTATION_SLIDE_PREV,      BUTTON_LEFT|BUTTON_REL,           BUTTON_LEFT },
306
    { ACTION_USB_HID_PRESENTATION_SLIDE_NEXT,      BUTTON_RIGHT|BUTTON_REL,          BUTTON_RIGHT },
307
    { ACTION_USB_HID_PRESENTATION_SLIDE_FIRST,     BUTTON_LEFT|BUTTON_REPEAT,        BUTTON_LEFT },
308
    { ACTION_USB_HID_PRESENTATION_SLIDE_LAST,      BUTTON_RIGHT|BUTTON_REPEAT,       BUTTON_RIGHT },
309
    { ACTION_USB_HID_PRESENTATION_SCREEN_BLACK,    BUTTON_DOWN|BUTTON_REL,           BUTTON_DOWN },
310
    { ACTION_USB_HID_PRESENTATION_SCREEN_WHITE,    BUTTON_DOWN|BUTTON_REPEAT,        BUTTON_DOWN },
311
    { ACTION_USB_HID_PRESENTATION_LINK_PREV,       BUTTON_SCROLL_BACK,               BUTTON_NONE },
312
    { ACTION_USB_HID_PRESENTATION_LINK_PREV,       BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
313
    { ACTION_USB_HID_PRESENTATION_LINK_NEXT,       BUTTON_SCROLL_FWD,                BUTTON_NONE },
314
    { ACTION_USB_HID_PRESENTATION_LINK_NEXT,       BUTTON_SCROLL_FWD|BUTTON_REPEAT,  BUTTON_NONE },
315
    { ACTION_USB_HID_PRESENTATION_MOUSE_CLICK,     BUTTON_SELECT|BUTTON_REL,         BUTTON_SELECT },
316
    { ACTION_USB_HID_PRESENTATION_MOUSE_OVER,      BUTTON_SELECT|BUTTON_REPEAT,      BUTTON_SELECT },
317
318
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
319
}; /* button_context_usb_hid_mode_presentation */
320
321
static const struct button_mapping button_context_usb_hid_mode_browser[] = {
322
    { ACTION_USB_HID_BROWSER_SCROLL_UP,        BUTTON_SCROLL_BACK,                  BUTTON_NONE },
323
    { ACTION_USB_HID_BROWSER_SCROLL_UP,        BUTTON_SCROLL_BACK|BUTTON_REPEAT,    BUTTON_NONE },
324
    { ACTION_USB_HID_BROWSER_SCROLL_DOWN,      BUTTON_SCROLL_FWD,                   BUTTON_NONE },
325
    { ACTION_USB_HID_BROWSER_SCROLL_DOWN,      BUTTON_SCROLL_FWD|BUTTON_REPEAT,     BUTTON_NONE },
326
    { ACTION_USB_HID_BROWSER_SCROLL_PAGE_UP,   BUTTON_UP|BUTTON_REL,                BUTTON_UP },
327
    { ACTION_USB_HID_BROWSER_SCROLL_PAGE_DOWN, BUTTON_DOWN|BUTTON_REL,              BUTTON_DOWN },
328
    { ACTION_USB_HID_BROWSER_ZOOM_IN,          BUTTON_UP|BUTTON_REPEAT,             BUTTON_UP },
329
    { ACTION_USB_HID_BROWSER_ZOOM_OUT,         BUTTON_DOWN|BUTTON_REPEAT,           BUTTON_DOWN },
330
    { ACTION_USB_HID_BROWSER_ZOOM_RESET,       BUTTON_SELECT|BUTTON_REPEAT,         BUTTON_SELECT },
331
    { ACTION_USB_HID_BROWSER_ZOOM_RESET,       BUTTON_UP|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_UP|BUTTON_DOWN },
332
    { ACTION_USB_HID_BROWSER_TAB_PREV,         BUTTON_LEFT|BUTTON_REL,              BUTTON_LEFT },
333
    { ACTION_USB_HID_BROWSER_TAB_NEXT,         BUTTON_RIGHT|BUTTON_REL,             BUTTON_RIGHT },
334
    { ACTION_USB_HID_BROWSER_TAB_CLOSE,        BUTTON_POWER|BUTTON_REPEAT,          BUTTON_POWER },
335
    { ACTION_USB_HID_BROWSER_HISTORY_BACK,     BUTTON_LEFT|BUTTON_REPEAT,           BUTTON_LEFT },
336
    { ACTION_USB_HID_BROWSER_HISTORY_FORWARD,  BUTTON_RIGHT|BUTTON_REPEAT,          BUTTON_RIGHT },
337
    { ACTION_USB_HID_BROWSER_VIEW_FULL_SCREEN, BUTTON_SELECT|BUTTON_REL,            BUTTON_SELECT },
338
339
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
340
}; /* button_context_usb_hid_mode_browser */
341
342
#ifdef HAVE_USB_HID_MOUSE
343
static const struct button_mapping button_context_usb_hid_mode_mouse[] = {
344
    { ACTION_USB_HID_MOUSE_UP,                BUTTON_UP,                                BUTTON_NONE },
345
    { ACTION_USB_HID_MOUSE_UP_REP,            BUTTON_UP|BUTTON_REPEAT,                  BUTTON_NONE },
346
    { ACTION_USB_HID_MOUSE_DOWN,              BUTTON_DOWN,                              BUTTON_NONE },
347
    { ACTION_USB_HID_MOUSE_DOWN_REP,          BUTTON_DOWN|BUTTON_REPEAT,                BUTTON_NONE },
348
    { ACTION_USB_HID_MOUSE_LEFT,              BUTTON_LEFT,                              BUTTON_NONE },
349
    { ACTION_USB_HID_MOUSE_LEFT_REP,          BUTTON_LEFT|BUTTON_REPEAT,                BUTTON_NONE },
350
    { ACTION_USB_HID_MOUSE_RIGHT,             BUTTON_RIGHT,                             BUTTON_NONE },
351
    { ACTION_USB_HID_MOUSE_RIGHT_REP,         BUTTON_RIGHT|BUTTON_REPEAT,               BUTTON_NONE },
352
    { ACTION_USB_HID_MOUSE_BUTTON_LEFT,       BUTTON_SELECT,                            BUTTON_NONE },
353
    { ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL,   BUTTON_SELECT|BUTTON_REL,                 BUTTON_NONE },
354
    { ACTION_USB_HID_MOUSE_LDRAG_UP,          BUTTON_SELECT|BUTTON_UP,                  BUTTON_NONE },
355
    { ACTION_USB_HID_MOUSE_LDRAG_UP_REP,      BUTTON_SELECT|BUTTON_UP|BUTTON_REPEAT,    BUTTON_NONE },
356
    { ACTION_USB_HID_MOUSE_LDRAG_DOWN,        BUTTON_SELECT|BUTTON_DOWN,                BUTTON_NONE },
357
    { ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP,    BUTTON_SELECT|BUTTON_DOWN|BUTTON_REPEAT,  BUTTON_NONE },
358
    { ACTION_USB_HID_MOUSE_LDRAG_LEFT,        BUTTON_SELECT|BUTTON_LEFT,                BUTTON_NONE },
359
    { ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP,    BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT,  BUTTON_NONE },
360
    { ACTION_USB_HID_MOUSE_LDRAG_RIGHT,       BUTTON_SELECT|BUTTON_RIGHT,               BUTTON_NONE },
361
    { ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP,   BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
362
    { ACTION_USB_HID_MOUSE_BUTTON_RIGHT,      BUTTON_POWER,                             BUTTON_NONE },
363
    { ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL,  BUTTON_POWER|BUTTON_REL,                  BUTTON_NONE },
364
    { ACTION_USB_HID_MOUSE_RDRAG_UP,          BUTTON_POWER|BUTTON_UP,                   BUTTON_NONE },
365
    { ACTION_USB_HID_MOUSE_RDRAG_UP_REP,      BUTTON_POWER|BUTTON_UP|BUTTON_REPEAT,     BUTTON_NONE },
366
    { ACTION_USB_HID_MOUSE_RDRAG_DOWN,        BUTTON_POWER|BUTTON_DOWN,                 BUTTON_NONE },
367
    { ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP,    BUTTON_POWER|BUTTON_DOWN|BUTTON_REPEAT,   BUTTON_NONE },
368
    { ACTION_USB_HID_MOUSE_RDRAG_LEFT,        BUTTON_POWER|BUTTON_LEFT,                 BUTTON_NONE },
369
    { ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP,    BUTTON_POWER|BUTTON_LEFT|BUTTON_REPEAT,   BUTTON_NONE },
370
    { ACTION_USB_HID_MOUSE_RDRAG_RIGHT,       BUTTON_POWER|BUTTON_RIGHT,                BUTTON_NONE },
371
    { ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP,   BUTTON_POWER|BUTTON_RIGHT|BUTTON_REPEAT,  BUTTON_NONE },
372
    { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_UP,   BUTTON_SCROLL_BACK,                       BUTTON_NONE },
373
    { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_UP,   BUTTON_SCROLL_BACK|BUTTON_REPEAT,         BUTTON_NONE },
374
    { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_DOWN, BUTTON_SCROLL_FWD,                        BUTTON_NONE },
375
    { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_DOWN, BUTTON_SCROLL_FWD|BUTTON_REPEAT,          BUTTON_NONE },
376
377
    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
378
}; /* button_context_usb_hid_mode_mouse */
379
#endif
380
#endif
381
382
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
383
const struct button_mapping* get_context_mapping(int context)
384
{
385
    switch (context)
386
    {
387
        case CONTEXT_STD:
388
            return button_context_standard;
389
            
390
        case CONTEXT_WPS:
391
            return button_context_wps;
392
393
        case CONTEXT_LIST:
394
            return button_context_list;
395
        case CONTEXT_TREE:
396
        case CONTEXT_MAINMENU:
397
            if (global_settings.hold_lr_for_scroll_in_list)
398
                return button_context_listtree_scroll_without_combo;
399
            else 
400
                return button_context_listtree_scroll_with_combo;
401
        case CONTEXT_CUSTOM|CONTEXT_TREE:
402
            return button_context_tree;
403
404
        case CONTEXT_SETTINGS:
405
            return button_context_settings;
406
        case CONTEXT_CUSTOM|CONTEXT_SETTINGS:
407
        case CONTEXT_SETTINGS_COLOURCHOOSER:
408
        case CONTEXT_SETTINGS_EQ:
409
        case CONTEXT_SETTINGS_RECTRIGGER:
410
            return button_context_settings_right_is_inc;
411
412
        case CONTEXT_SETTINGS_TIME:
413
            return button_context_settings_time;
414
415
        case CONTEXT_YESNOSCREEN:
416
            return button_context_yesno;
417
        case CONTEXT_FM:
418
            return button_context_radio;
419
        case CONTEXT_BOOKMARKSCREEN:
420
            return button_context_bmark;
421
        case CONTEXT_QUICKSCREEN:
422
            return button_context_quickscreen;
423
        case CONTEXT_PITCHSCREEN:
424
            return button_context_pitchscreen;
425
#ifdef HAVE_RECORDING
426
        case CONTEXT_RECSCREEN:
427
            return button_context_recscreen;
428
#endif
429
        case CONTEXT_KEYBOARD:
430
        case CONTEXT_MORSE_INPUT:
431
            return button_context_keyboard;
432
#ifdef USB_ENABLE_HID
433
        case CONTEXT_USB_HID:
434
            return button_context_usb_hid;
435
        case CONTEXT_USB_HID_MODE_MULTIMEDIA:
436
            return button_context_usb_hid_mode_multimedia;
437
        case CONTEXT_USB_HID_MODE_PRESENTATION:
438
            return button_context_usb_hid_mode_presentation;
439
        case CONTEXT_USB_HID_MODE_BROWSER:
440
            return button_context_usb_hid_mode_browser;
441
#ifdef HAVE_USB_HID_MOUSE
442
        case CONTEXT_USB_HID_MODE_MOUSE:
443
            return button_context_usb_hid_mode_mouse;
444
#endif
445
#endif
446
        default:
447
            return button_context_standard;
448
    } 
449
    return button_context_standard;
450
}