1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
9 * Copyright (C) 2004 Brent Coutts
11 * All files in this archive are subject to the GNU General Public License.
12 * See the file COPYING in the source tree root for full license agreement.
14 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
15 * KIND, either express or implied.
17 ****************************************************************************/
24 #define TIMEOUT_BLOCK -1
25 #define TIMEOUT_NOBLOCK 0
27 #define CONTEXT_STOPSEARCHING 0xFFFFFFFF
28 #define CONTEXT_REMOTE 0x80000000 /* | this against another context to get remote buttons for that context */
29 #define CONTEXT_CUSTOM 0x40000000 /* | this against anything to get your context number */
31 #define LAST_ITEM_IN_LIST { CONTEXT_STOPSEARCHING, BUTTON_NONE, BUTTON_NONE }
32 #define LAST_ITEM_IN_LIST__NEXTLIST(a) { a, BUTTON_NONE, BUTTON_NONE }
34 #ifndef HAS_BUTTON_HOLD
35 #define ALLOW_SOFTLOCK 0x20000000 /* will be stripped.. never needed except in calls to get_action() */
37 #define ALLOW_SOFTLOCK 0
42 /* These CONTEXT_ values were here before me,
43 there values may have significance, so dont touch! */
49 /* Add new contexts here, no need to explicitly define a value for them */
51 CONTEXT_SETTINGS
, /* regular setting screens (and debug screens) */
52 /* bellow are setting screens which may need to redefine the standard
53 setting screen keys, targets should return the CONTEXT_SETTINGS
54 keymap unless they are not adequate for the screen
55 NOTE: uses ACTION_STD_[NEXT|PREV] so make sure they are there also
56 and (possibly) ACTION_SETTINGS_[INC|DEC] */
58 CONTEXT_SETTINGS_COLOURCHOOSER
,
59 CONTEXT_SETTINGS_TIME
,
61 /* The following contexts should use ACTION_STD_[NEXT|PREV]
62 and (possibly) ACTION_SETTINGS_[INC|DEC]
63 Also add any extra actions they need */
64 CONTEXT_BOOKMARKSCREEN
, /* uses ACTION_BMS_ defines */
65 CONTEXT_ALARMSCREEN
, /* uses ACTION_AS_ defines */
66 CONTEXT_QUICKSCREEN
, /* uses ACTION_QS_ defines below */
67 CONTEXT_PITCHSCREEN
, /* uses ACTION_PS_ defines below */
69 CONTEXT_YESNOSCREEN
, /*NOTE: make sure your target has this and ACTION_YESNO_ACCEPT */
78 ACTION_NONE
= BUTTON_NONE
,
80 ACTION_REDRAW
, /* returned if keys are locked and we splash()'ed */
82 /* standard actions, use these first */
84 ACTION_STD_PREVREPEAT
,
86 ACTION_STD_NEXTREPEAT
,
92 ACTION_STD_QUICKSCREEN
,
95 ACTION_F3
, /* just so everything works again, possibly change me */
96 /* code context actions */
109 ACTION_WPS_PITCHSCREEN
,/* optional */
110 ACTION_WPS_ID3SCREEN
,/* optional */
112 ACTION_WPS_QUICKSCREEN
,/* optional */
113 ACTION_WPS_MENU
, /*this should be the same as ACTION_STD_MENU */
114 ACTION_WPSAB_SINGLE
, /* No targets use this, but leave n just-in-case! */
115 ACTION_WPS_ABSETA_PREVDIR
, /* these should be safe to put together seen as */
116 ACTION_WPS_ABSETB_NEXTDIR
, /* you shouldnt want to change dir in ab-mode */
119 /* list and tree page up/down */
120 ACTION_LISTTREE_PGUP
,/* optional */
121 ACTION_LISTTREE_PGDOWN
,/* optional */
122 ACTION_LISTTREE_RC_PGUP
,/* optional */
123 ACTION_LISTTREE_RC_PGDOWN
,/* optional */
126 ACTION_TREE_ROOT_INIT
,
127 ACTION_TREE_PGLEFT
,/* optional */
128 ACTION_TREE_PGRIGHT
,/* optional */
141 ACTION_FM_RECORD_DBLPRE
,
142 ACTION_FM_NEXT_PRESET
,
143 ACTION_FM_PREV_PRESET
,
145 /* recording screen */
160 ACTION_SETTINGS_INCREPEAT
,
161 ACTION_SETTINGS_INCBIGSTEP
,
163 ACTION_SETTINGS_DECREPEAT
,
164 ACTION_SETTINGS_DECBIGSTEP
,
165 ACTION_SETTINGS_RESET
,
167 /* bookmark screen */
172 /* alarm menu screen */
178 ACTION_QS_DOWNINV
, /* why is this not called up?? :p */
181 /* obviously ignore if you dont have thise screen */
186 ACTION_PS_NUDGE_LEFT
,
187 ACTION_PS_NUDGE_RIGHT
,
188 ACTION_PS_NUDGE_LEFTOFF
,
189 ACTION_PS_NUDGE_RIGHTOFF
,
191 ACTION_PS_EXIT
, /* _STD_* isnt going to work here */
196 /* keyboard screen */
199 ACTION_KBD_CURSOR_LEFT
,
200 ACTION_KBD_CURSOR_RIGHT
,
202 ACTION_KBD_SELECT_REM
,
203 ACTION_KBD_PAGE_FLIP
,
206 ACTION_KBD_BACKSPACE
,
209 ACTION_KBD_MORSE_INPUT
,
210 ACTION_KBD_MORSE_SELECT
,
214 struct button_mapping
{
219 /* use if you want to supply your own button mappings, PLUGINS ONLY */
220 /* get_context_map is a function which returns a button_mapping* depedning on the given context */
221 /* custom button_mappings may "chain" to inbuilt CONTEXT's */
222 int get_custom_action(int context
,int timeout
,
223 const struct button_mapping
* (*get_context_map
)(int));
224 /* use if one of the standard CONTEXT_ mappings will work (ALL the core should be using this! */
225 int get_action(int context
, int timeout
);
226 /* call this whenever you leave your button loop */
227 void action_signalscreenchange(void);
229 /* call this if you need to check for ACTION_STD_CANCEL only (i.e user abort! */
230 bool action_userabort(int timeout
);
232 /* no other code should need this apart from action.c */
233 const struct button_mapping
* get_context_mapping(int context
);
234 #ifndef HAS_BUTTON_HOLD
235 bool is_keys_locked(void);