summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-02-03 10:55:30 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-02-03 10:55:30 +0000
commite2a169bce53aff3e5fc300c00d3828129298d469 (patch)
tree94ebf4cc62c4a32d133ab1b6013363ad283981e8
parentaf5c4d1b272e1e05523e8ffdd0733104eaa3e199 (diff)
downloadrockbox-e2a169bce53aff3e5fc300c00d3828129298d469.tar.gz
rockbox-e2a169bce53aff3e5fc300c00d3828129298d469.zip
Gigabeat S: Get remote keymaps up to snuff and working. Do a couple tweaks on main unit ones. Cleanup keymap file a bit. Fix main button scanner to not clobber remote button. Fix a bug in actions.c where 'LAST_ITEM_IN_LIST' didn't really terminate scanning immediately. It would do an additional call into get_context_map and silently pick up ACTION_STD.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19909 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/action.c26
-rw-r--r--apps/keymaps/keymap-gigabeat-s.c534
-rw-r--r--apps/plugins/lib/pluginlib_actions.c3
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c7
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c7
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/button-imx31.c11
6 files changed, 382 insertions, 206 deletions
diff --git a/apps/action.c b/apps/action.c
index d98bf13cf3..8a72dcdce7 100644
--- a/apps/action.c
+++ b/apps/action.c
@@ -63,8 +63,6 @@ static inline int do_button_check(const struct button_mapping *items,
63{ 63{
64 int i = 0; 64 int i = 0;
65 int ret = ACTION_UNKNOWN; 65 int ret = ACTION_UNKNOWN;
66 if (items == NULL)
67 return ACTION_UNKNOWN;
68 66
69 while (items[i].button_code != BUTTON_NONE) 67 while (items[i].button_code != BUTTON_NONE)
70 { 68 {
@@ -192,7 +190,7 @@ static int get_action_worker(int context, int timeout,
192#endif /* HAS_BUTTON_HOLD */ 190#endif /* HAS_BUTTON_HOLD */
193 191
194 /* logf("%x,%x",last_button,button); */ 192 /* logf("%x,%x",last_button,button); */
195 do 193 while (1)
196 { 194 {
197 /* logf("context = %x",context); */ 195 /* logf("context = %x",context); */
198#if (BUTTON_REMOTE != 0) 196#if (BUTTON_REMOTE != 0)
@@ -204,19 +202,25 @@ static int get_action_worker(int context, int timeout,
204 else 202 else
205 items = get_context_mapping(context); 203 items = get_context_mapping(context);
206 204
207 ret = do_button_check(items,button,last_button,&i); 205 if (items == NULL)
208
209 if ((context ==(int)CONTEXT_STOPSEARCHING) ||
210 items == NULL )
211 break; 206 break;
212 207
213 if (ret == ACTION_UNKNOWN ) 208 ret = do_button_check(items,button,last_button,&i);
209
210 if (ret == ACTION_UNKNOWN)
214 { 211 {
215 context = get_next_context(items,i); 212 context = get_next_context(items,i);
216 i = 0; 213
214 if (context != (int)CONTEXT_STOPSEARCHING)
215 {
216 i = 0;
217 continue;
218 }
217 } 219 }
218 else break; 220
219 } while (1); 221 /* Action was found or STOPSEARCHING was specified */
222 break;
223 }
220 /* DEBUGF("ret = %x\n",ret); */ 224 /* DEBUGF("ret = %x\n",ret); */
221#ifndef HAS_BUTTON_HOLD 225#ifndef HAS_BUTTON_HOLD
222 if (screen_has_lock && (ret == ACTION_STD_KEYLOCK)) 226 if (screen_has_lock && (ret == ACTION_STD_KEYLOCK))
diff --git a/apps/keymaps/keymap-gigabeat-s.c b/apps/keymaps/keymap-gigabeat-s.c
index d32177ea90..c6c7ddbf40 100644
--- a/apps/keymaps/keymap-gigabeat-s.c
+++ b/apps/keymaps/keymap-gigabeat-s.c
@@ -47,206 +47,211 @@ CONTEXT_CUSTOM|CONTEXT_SETTINGS = the direction keys for the eq/col picker scree
47 47
48 48
49static const struct button_mapping button_context_standard[] = { 49static const struct button_mapping button_context_standard[] = {
50 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 50 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
51 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 51 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
52 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 52 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
53 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 53 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
54 54
55 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, 55 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
56 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, 56 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
57 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 57 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
58 58
59 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT }, 59 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
60 60
61 { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, 61 { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
62 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 62 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
63 63
64 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 64 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
65 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, 65 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
66 66
67 LAST_ITEM_IN_LIST 67 LAST_ITEM_IN_LIST
68}; /* button_context_standard */ 68}; /* button_context_standard */
69 69
70 70
71static const struct button_mapping button_context_wps[] = { 71static const struct button_mapping button_context_wps[] = {
72 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 72 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
73 { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, 73 { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
74 74
75 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 75 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
76 { ACTION_WPS_SKIPNEXT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT }, 76 { ACTION_WPS_SKIPNEXT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT },
77 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 77 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
78 { ACTION_WPS_SKIPPREV, BUTTON_PREV|BUTTON_REL, BUTTON_PREV }, 78 { ACTION_WPS_SKIPPREV, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
79 79
80 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 80 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
81 { ACTION_WPS_SEEKBACK, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE }, 81 { ACTION_WPS_SEEKBACK, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
82 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 82 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
83 { ACTION_WPS_SEEKFWD, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE }, 83 { ACTION_WPS_SEEKFWD, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
84 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 84 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
85 { ACTION_WPS_STOPSEEK, BUTTON_PREV|BUTTON_REL, BUTTON_PREV|BUTTON_REPEAT }, 85 { ACTION_WPS_STOPSEEK, BUTTON_PREV|BUTTON_REL, BUTTON_PREV|BUTTON_REPEAT },
86 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 86 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
87 { ACTION_WPS_STOPSEEK, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT|BUTTON_REPEAT }, 87 { ACTION_WPS_STOPSEEK, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT|BUTTON_REPEAT },
88 88
89 { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_BACK|BUTTON_RIGHT, BUTTON_BACK }, 89 { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_BACK|BUTTON_RIGHT, BUTTON_BACK },
90 { ACTION_WPS_ABSETA_PREVDIR, BUTTON_BACK|BUTTON_LEFT, BUTTON_BACK }, 90 { ACTION_WPS_ABSETA_PREVDIR, BUTTON_BACK|BUTTON_LEFT, BUTTON_BACK },
91 { ACTION_WPS_ABRESET, BUTTON_BACK|BUTTON_SELECT, BUTTON_BACK }, 91 { ACTION_WPS_ABRESET, BUTTON_BACK|BUTTON_SELECT, BUTTON_BACK },
92 92
93 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 93 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
94 { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, 94 { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
95 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 95 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
96 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 96 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
97 { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 97 { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
98 { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, 98 { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
99 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 99 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
100 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 100 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
101 101
102 { ACTION_WPS_PITCHSCREEN, BUTTON_BACK|BUTTON_UP, BUTTON_BACK }, 102 { ACTION_WPS_PITCHSCREEN, BUTTON_BACK|BUTTON_UP, BUTTON_BACK },
103 { ACTION_WPS_PITCHSCREEN, BUTTON_BACK|BUTTON_DOWN, BUTTON_BACK }, 103 { ACTION_WPS_PITCHSCREEN, BUTTON_BACK|BUTTON_DOWN, BUTTON_BACK },
104 104
105 { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, 105 { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
106 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 106 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
107 { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 107 { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
108 108
109 { ACTION_WPS_ID3SCREEN, BUTTON_BACK|BUTTON_MENU, BUTTON_NONE }, 109 { ACTION_WPS_ID3SCREEN, BUTTON_BACK|BUTTON_MENU, BUTTON_NONE },
110 { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 110 { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
111 111
112 LAST_ITEM_IN_LIST 112 LAST_ITEM_IN_LIST
113}; /* button_context_wps */ 113}; /* button_context_wps */
114 114
115static const struct button_mapping button_context_list[] = { 115static const struct button_mapping button_context_list[] = {
116 { ACTION_LISTTREE_PGUP, BUTTON_BACK|BUTTON_UP, BUTTON_BACK }, 116 { ACTION_LISTTREE_PGUP, BUTTON_BACK|BUTTON_UP, BUTTON_BACK },
117 { ACTION_LISTTREE_PGUP, BUTTON_UP|BUTTON_REL, BUTTON_BACK|BUTTON_UP }, 117 { ACTION_LISTTREE_PGUP, BUTTON_UP|BUTTON_REL, BUTTON_BACK|BUTTON_UP },
118 { ACTION_LISTTREE_PGUP, BUTTON_BACK|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 118 { ACTION_LISTTREE_PGUP, BUTTON_BACK|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
119 { ACTION_LISTTREE_PGDOWN, BUTTON_BACK|BUTTON_DOWN, BUTTON_BACK }, 119 { ACTION_LISTTREE_PGDOWN, BUTTON_BACK|BUTTON_DOWN, BUTTON_BACK },
120 { ACTION_LISTTREE_PGDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_BACK|BUTTON_DOWN }, 120 { ACTION_LISTTREE_PGDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_BACK|BUTTON_DOWN },
121 { ACTION_LISTTREE_PGDOWN, BUTTON_BACK|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 121 { ACTION_LISTTREE_PGDOWN, BUTTON_BACK|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
122#ifdef HAVE_VOLUME_IN_LIST 122#ifdef HAVE_VOLUME_IN_LIST
123 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 123 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
124 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 124 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
125 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 125 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
126 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 126 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
127#endif 127#endif
128 128
129 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 129 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
130}; /* button_context_list */ 130}; /* button_context_list */
131 131
132static const struct button_mapping button_context_tree[] = { 132static const struct button_mapping button_context_tree[] = {
133 { ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 133 { ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
134 { ACTION_TREE_STOP, BUTTON_POWER, BUTTON_NONE }, 134 { ACTION_TREE_STOP, BUTTON_POWER, BUTTON_NONE },
135 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, 135 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
136 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE }, 136 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE },
137 137
138 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) 138 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
139}; /* button_context_tree */ 139}; /* button_context_tree */
140 140
141static const struct button_mapping button_context_listtree_scroll_with_combo[] = { 141static const struct button_mapping button_context_listtree_scroll_with_combo[] = {
142 { ACTION_NONE, BUTTON_BACK, BUTTON_NONE }, 142 { ACTION_NONE, BUTTON_BACK, BUTTON_NONE },
143 { ACTION_TREE_PGLEFT, BUTTON_BACK|BUTTON_LEFT, BUTTON_BACK }, 143 { ACTION_TREE_PGLEFT, BUTTON_BACK|BUTTON_LEFT, BUTTON_BACK },
144 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_BACK|BUTTON_LEFT }, 144 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_BACK|BUTTON_LEFT },
145 { ACTION_TREE_PGLEFT, BUTTON_BACK|BUTTON_LEFT, BUTTON_LEFT|BUTTON_REL }, 145 { ACTION_TREE_PGLEFT, BUTTON_BACK|BUTTON_LEFT, BUTTON_LEFT|BUTTON_REL },
146 { ACTION_TREE_ROOT_INIT, BUTTON_BACK|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_BACK|BUTTON_LEFT }, 146 { ACTION_TREE_ROOT_INIT, BUTTON_BACK|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_BACK|BUTTON_LEFT },
147 { ACTION_TREE_PGLEFT, BUTTON_BACK|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 147 { ACTION_TREE_PGLEFT, BUTTON_BACK|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
148 { ACTION_TREE_PGRIGHT, BUTTON_BACK|BUTTON_RIGHT, BUTTON_BACK }, 148 { ACTION_TREE_PGRIGHT, BUTTON_BACK|BUTTON_RIGHT, BUTTON_BACK },
149 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_BACK|BUTTON_RIGHT }, 149 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_BACK|BUTTON_RIGHT },
150 { ACTION_TREE_PGRIGHT, BUTTON_BACK|BUTTON_RIGHT, BUTTON_RIGHT|BUTTON_REL }, 150 { ACTION_TREE_PGRIGHT, BUTTON_BACK|BUTTON_RIGHT, BUTTON_RIGHT|BUTTON_REL },
151 { ACTION_TREE_PGRIGHT, BUTTON_BACK|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 151 { ACTION_TREE_PGRIGHT, BUTTON_BACK|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
152 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 152 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
153}; 153}; /* button_context_listtree_scroll_with_combo */
154 154
155static const struct button_mapping button_context_listtree_scroll_without_combo[] = { 155static const struct button_mapping button_context_listtree_scroll_without_combo[] = {
156 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, 156 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
157 { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 157 { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
158 { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, 158 { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
159 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 159 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
160 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 160 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
161 { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, 161 { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
162 { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 162 { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
163 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 163 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
164 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 164 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
165 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 165 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
166}; 166}; /* button_context_listtree_scroll_without_combo */
167 167
168static const struct button_mapping button_context_settings[] = { 168static const struct button_mapping button_context_settings[] = {
169 { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, 169 { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
170 { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 170 { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
171 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, 171 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
172 { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 172 { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
173 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, 173 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
174 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 174 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
175 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 175 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
176 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 176 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
177 { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE }, 177 { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE },
178 178
179 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 179 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
180}; /* button_context_settings */ 180}; /* button_context_settings */
181 181
182static const struct button_mapping button_context_settings_right_is_inc[] = { 182static const struct button_mapping button_context_settings_right_is_inc[] = {
183 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, 183 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
184 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 184 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
185 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, 185 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
186 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 186 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
187 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 187 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
188 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 188 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
189 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 189 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
190 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 190 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
191 { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE }, 191 { ACTION_SETTINGS_RESET, BUTTON_BACK, BUTTON_NONE },
192 192
193 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 193 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
194}; /* button_context_settingsgraphical */ 194}; /* button_context_settingsgraphical */
195 195
196static const struct button_mapping button_context_yesno[] = { 196static const struct button_mapping button_context_yesno[] = {
197 { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE }, 197 { ACTION_YESNO_ACCEPT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
198
198 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 199 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
199}; /* button_context_settings_yesno */ 200}; /* button_context_settings_yesno */
200 201
201static const struct button_mapping button_context_colorchooser[] = { 202static const struct button_mapping button_context_colorchooser[] = {
202 { ACTION_STD_OK, BUTTON_BACK|BUTTON_REL, BUTTON_NONE }, 203 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
204 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
205
203 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 206 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS),
204}; /* button_context_colorchooser */ 207}; /* button_context_colorchooser */
205 208
206static const struct button_mapping button_context_eq[] = { 209static const struct button_mapping button_context_eq[] = {
207 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, 210 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
211
208 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 212 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS),
209}; /* button_context_eq */ 213}; /* button_context_eq */
210 214
211/** Bookmark Screen **/ 215/** Bookmark Screen **/
212static const struct button_mapping button_context_bmark[] = { 216static const struct button_mapping button_context_bmark[] = {
213 { ACTION_BMS_DELETE, BUTTON_BACK, BUTTON_NONE }, 217 { ACTION_BMS_DELETE, BUTTON_BACK|BUTTON_SELECT, BUTTON_BACK },
214 218
215 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 219 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
216}; /* button_context_bmark */ 220}; /* button_context_bmark */
217 221
218static const struct button_mapping button_context_time[] = { 222static const struct button_mapping button_context_time[] = {
219 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 223 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
220 { ACTION_STD_OK, BUTTON_PLAY, BUTTON_NONE }, 224 { ACTION_STD_OK, BUTTON_PLAY, BUTTON_NONE },
225
221 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), 226 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
222}; /* button_context_time */ 227}; /* button_context_time */
223 228
224static const struct button_mapping button_context_quickscreen[] = { 229static const struct button_mapping button_context_quickscreen[] = {
225 { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, 230 { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE },
226 { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 231 { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
227 { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, 232 { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE },
228 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 233 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
229 { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, 234 { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE },
230 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 235 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
231 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 236 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
232 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 237 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
233 { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, 238 { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE },
234 239
235 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 240 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
236}; /* button_context_quickscreen */ 241}; /* button_context_quickscreen */
237 242
238static const struct button_mapping button_context_pitchscreen[] = { 243static const struct button_mapping button_context_pitchscreen[] = {
239 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, 244 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE },
240 { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 245 { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
241 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, 246 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE },
242 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 247 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
243 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, 248 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
244 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, 249 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
245 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 250 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
246 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, 251 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
247 { ACTION_PS_TOGGLE_MODE, BUTTON_MENU, BUTTON_NONE }, 252 { ACTION_PS_TOGGLE_MODE, BUTTON_MENU, BUTTON_NONE },
248 { ACTION_PS_RESET, BUTTON_PLAY, BUTTON_NONE }, 253 { ACTION_PS_RESET, BUTTON_PLAY, BUTTON_NONE },
249 { ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE }, 254 { ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE },
250 255
251 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 256 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
252}; /* button_context_pitchcreen */ 257}; /* button_context_pitchcreen */
@@ -265,49 +270,49 @@ static const struct button_mapping button_context_recscreen[] = {
265 { ACTION_STD_PREV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 270 { ACTION_STD_PREV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
266 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 271 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
267 { ACTION_STD_NEXT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 272 { ACTION_STD_NEXT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
273
268 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 274 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
269}; /* button_context_recscreen */ 275}; /* button_context_recscreen */
270 276
271static const struct button_mapping button_context_keyboard[] = { 277static const struct button_mapping button_context_keyboard[] = {
272 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, 278 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
273 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 279 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
274 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 280 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
275 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 281 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
276 { ACTION_KBD_CURSOR_LEFT, BUTTON_PREV, BUTTON_NONE }, 282 { ACTION_KBD_CURSOR_LEFT, BUTTON_PREV, BUTTON_NONE },
277 { ACTION_KBD_CURSOR_LEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE }, 283 { ACTION_KBD_CURSOR_LEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
278 { ACTION_KBD_CURSOR_RIGHT, BUTTON_NEXT, BUTTON_NONE }, 284 { ACTION_KBD_CURSOR_RIGHT, BUTTON_NEXT, BUTTON_NONE },
279 { ACTION_KBD_CURSOR_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE }, 285 { ACTION_KBD_CURSOR_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
280 { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE }, 286 { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE },
281 { ACTION_KBD_PAGE_FLIP, BUTTON_BACK|BUTTON_MENU, BUTTON_NONE }, 287 { ACTION_KBD_PAGE_FLIP, BUTTON_BACK|BUTTON_MENU, BUTTON_NONE },
282 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 288 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
283 { ACTION_KBD_ABORT, BUTTON_BACK|BUTTON_REL, BUTTON_BACK }, 289 { ACTION_KBD_ABORT, BUTTON_BACK|BUTTON_REL, BUTTON_BACK },
284 { ACTION_KBD_BACKSPACE, BUTTON_MENU, BUTTON_NONE }, 290 { ACTION_KBD_BACKSPACE, BUTTON_MENU, BUTTON_NONE },
285 { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, 291 { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
286 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, 292 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE },
287 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 293 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
288 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, 294 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE },
289 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 295 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
290 { ACTION_KBD_MORSE_INPUT, BUTTON_BACK|BUTTON_VOL_UP, BUTTON_NONE }, 296 { ACTION_KBD_MORSE_INPUT, BUTTON_BACK|BUTTON_VOL_UP, BUTTON_NONE },
291 { ACTION_KBD_MORSE_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, 297 { ACTION_KBD_MORSE_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
292 298
293 LAST_ITEM_IN_LIST 299 LAST_ITEM_IN_LIST
294}; /* button_context_keyboard */ 300}; /* button_context_keyboard */
295 301
296static const struct button_mapping button_context_radio[] = { 302static const struct button_mapping button_context_radio[] = {
297 { ACTION_FM_MENU, BUTTON_SELECT | BUTTON_REPEAT, BUTTON_NONE }, 303 { ACTION_FM_MENU, BUTTON_SELECT | BUTTON_REPEAT, BUTTON_NONE },
298 { ACTION_FM_PRESET, BUTTON_SELECT | BUTTON_REL, BUTTON_SELECT }, 304 { ACTION_FM_PRESET, BUTTON_SELECT | BUTTON_REL, BUTTON_SELECT },
299 { ACTION_FM_STOP, BUTTON_POWER, BUTTON_NONE }, 305 { ACTION_FM_STOP, BUTTON_POWER, BUTTON_NONE },
300 { ACTION_FM_MODE, BUTTON_MENU, BUTTON_NONE }, 306 { ACTION_FM_MODE, BUTTON_MENU, BUTTON_NONE },
301 { ACTION_FM_EXIT, BUTTON_BACK, BUTTON_NONE }, 307 { ACTION_FM_EXIT, BUTTON_BACK, BUTTON_NONE },
302 { ACTION_FM_PLAY, BUTTON_PLAY, BUTTON_NONE }, 308 { ACTION_FM_PLAY, BUTTON_PLAY, BUTTON_NONE },
303 { ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE }, 309 { ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE },
304 { ACTION_SETTINGS_INCREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 310 { ACTION_SETTINGS_INCREPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
305 { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE }, 311 { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
306 { ACTION_SETTINGS_DECREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 312 { ACTION_SETTINGS_DECREPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
307
308 313
309 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 314 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
310}; 315}; /* button_context_radio */
311 316
312/***************************************************************************** 317/*****************************************************************************
313 * Remote control mappings 318 * Remote control mappings
@@ -317,89 +322,227 @@ static const struct button_mapping remote_button_context_standard[] = {
317 { ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 322 { ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
318 { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 323 { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
319 { ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 324 { ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
320 { ACTION_STD_CANCEL, BUTTON_RC_REW, BUTTON_NONE }, 325 { ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_DSP },
326 { ACTION_STD_QUICKSCREEN, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW },
321 { ACTION_STD_OK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, 327 { ACTION_STD_OK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF },
322 { ACTION_STD_CONTEXT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF }, 328 { ACTION_STD_MENU, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
323 { ACTION_STD_MENU, BUTTON_RC_DSP, BUTTON_NONE }, 329 { ACTION_STD_CONTEXT, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_RC_DSP },
324 330
325 LAST_ITEM_IN_LIST 331 LAST_ITEM_IN_LIST
326}; 332}; /* remote_button_context_standard */
327 333
328static const struct button_mapping remote_button_context_wps[] = { 334static const struct button_mapping remote_button_context_wps[] = {
329 { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, 335 { ACTION_WPS_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
336 { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
337 { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
338 { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
339 { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT },
340 { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
341 { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF },
342 { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT },
343 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
344 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
345 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
346 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
347 { ACTION_WPS_MENU, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
348 { ACTION_WPS_CONTEXT, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_RC_DSP },
349
350 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
351}; /* remote_button_context_wps */
352
353static const struct button_mapping remote_button_context_tree[] = {
354 { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
355 { ACTION_TREE_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
356 { ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
357
358 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
359}; /* remote_button_context_tree */
360
361static const struct button_mapping remote_button_context_radio[] = {
362 { ACTION_FM_MODE, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
363 { ACTION_FM_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
364 { ACTION_STD_PREV, BUTTON_RC_REW, BUTTON_NONE },
365 { ACTION_STD_PREVREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
366 { ACTION_STD_NEXT, BUTTON_RC_FF, BUTTON_NONE },
367 { ACTION_STD_NEXTREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
368 { ACTION_SETTINGS_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
369 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
370 { ACTION_SETTINGS_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
371 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
372 { ACTION_FM_EXIT, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
373 { ACTION_FM_STOP, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_RC_DSP },
330 374
331 { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, 375 LAST_ITEM_IN_LIST
332 { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW }, 376}; /* remote_button_context_radio */
377
378static const struct button_mapping remote_button_context_recscreen[] = {
379 { ACTION_REC_NEWFILE, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
380 { ACTION_REC_PAUSE, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
381 { ACTION_STD_CANCEL, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
382 { ACTION_STD_MENU, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_RC_DSP },
383 { ACTION_SETTINGS_INC, BUTTON_RC_FF, BUTTON_NONE },
384 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
385 { ACTION_SETTINGS_DEC, BUTTON_RC_REW, BUTTON_NONE },
386 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
387 { ACTION_STD_PREV, BUTTON_RC_VOL_UP, BUTTON_NONE },
388 { ACTION_STD_PREV, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
389 { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
390 { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
333 391
334 { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 392 LAST_ITEM_IN_LIST
335 { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 393}; /* button_context_recscreen */
336 { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT },
337 { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT },
338 394
339 { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 395static const struct button_mapping remote_button_context_time[] = {
340 { ACTION_WPS_MENU, BUTTON_RC_DSP, BUTTON_NONE }, 396 { ACTION_SETTINGS_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
397 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
398 { ACTION_SETTINGS_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
399 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
400 { ACTION_STD_PREV, BUTTON_RC_REW, BUTTON_NONE },
401 { ACTION_STD_PREVREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
402 { ACTION_STD_NEXT, BUTTON_RC_FF, BUTTON_NONE },
403 { ACTION_STD_NEXTREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
404 { ACTION_STD_OK, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
405 { ACTION_STD_CANCEL, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
341 406
342 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 407 LAST_ITEM_IN_LIST
343 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 408}; /* remote_button_context_time */
344 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 409
345 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, 410static const struct button_mapping remote_button_context_bmark[] = {
411 { ACTION_BMS_DELETE, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_RC_DSP },
346 412
347 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 413 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
348}; 414}; /* remote_button_context_bmark */
349 415
350static const struct button_mapping remote_button_context_tree[] = { 416static const struct button_mapping remote_button_context_yesno[] = {
351 { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, 417 { ACTION_YESNO_ACCEPT, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
352 { ACTION_TREE_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
353 { ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
354 418
355 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 419 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
356}; 420}; /* button_context_settings_yesno */
421
422static const struct button_mapping remote_button_context_quickscreen[] = {
423 { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP, BUTTON_NONE },
424 { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
425 { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
426 { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
427 { ACTION_QS_LEFT, BUTTON_RC_REW, BUTTON_NONE },
428 { ACTION_QS_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
429 { ACTION_QS_RIGHT, BUTTON_RC_FF, BUTTON_NONE },
430 { ACTION_QS_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
431 { ACTION_STD_CANCEL, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
432
433 LAST_ITEM_IN_LIST
434}; /* remote_button_context_quickscreen */
435
436static const struct button_mapping remote_button_context_pitchscreen[] = {
437 { ACTION_PS_INC_SMALL, BUTTON_RC_VOL_UP, BUTTON_NONE },
438 { ACTION_PS_INC_BIG, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
439 { ACTION_PS_DEC_SMALL, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
440 { ACTION_PS_DEC_BIG, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
441 { ACTION_PS_NUDGE_LEFT, BUTTON_RC_REW, BUTTON_NONE },
442 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_RC_REW|BUTTON_REL, BUTTON_NONE },
443 { ACTION_PS_NUDGE_RIGHT, BUTTON_RC_FF, BUTTON_NONE },
444 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RC_FF|BUTTON_REL, BUTTON_NONE },
445 { ACTION_PS_RESET, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
446 { ACTION_PS_TOGGLE_MODE, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
447 { ACTION_PS_EXIT, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
448
449 LAST_ITEM_IN_LIST
450}; /* remote_button_context_pitchscreen */
451
452static const struct button_mapping remote_button_context_right_is_inc[] = {
453 { ACTION_SETTINGS_INC, BUTTON_RC_FF, BUTTON_NONE },
454 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
455 { ACTION_SETTINGS_DEC, BUTTON_RC_REW, BUTTON_NONE },
456 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
457 { ACTION_STD_PREV, BUTTON_RC_VOL_UP, BUTTON_NONE },
458 { ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
459 { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
460 { ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
461 { ACTION_STD_OK, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
462 { ACTION_STD_CANCEL, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
463
464 LAST_ITEM_IN_LIST
465}; /* remote_button_context_right_is_inc */
357 466
358static const struct button_mapping* get_context_mapping_remote( int context ) 467static const struct button_mapping* get_context_mapping_remote( int context )
359{ 468{
360 context ^= CONTEXT_REMOTE; 469 context &= ~CONTEXT_REMOTE;
361 470
362 switch (context) 471 switch (context)
363 { 472 {
364 case CONTEXT_WPS: 473 case CONTEXT_WPS:
365 return remote_button_context_wps; 474 return remote_button_context_wps;
475
366 case CONTEXT_MAINMENU: 476 case CONTEXT_MAINMENU:
367 case CONTEXT_TREE: 477 case CONTEXT_TREE:
368 return remote_button_context_tree; 478 return remote_button_context_tree;
479
480 case CONTEXT_SETTINGS_COLOURCHOOSER:
481 case CONTEXT_SETTINGS_EQ:
482 case CONTEXT_SETTINGS_RECTRIGGER:
483 return remote_button_context_right_is_inc;
484
485 case CONTEXT_SETTINGS_TIME:
486 return remote_button_context_time;
487
488 case CONTEXT_YESNOSCREEN:
489 return remote_button_context_yesno;
490
491 case CONTEXT_BOOKMARKSCREEN:
492 return remote_button_context_bmark;
493
494 case CONTEXT_QUICKSCREEN:
495 return remote_button_context_quickscreen;
496
497 case CONTEXT_PITCHSCREEN:
498 return remote_button_context_pitchscreen;
499
500 case CONTEXT_RECSCREEN:
501 return remote_button_context_recscreen;
502
503 case CONTEXT_KEYBOARD:
504 return ACTION_NONE; /* Any sensible mapping for this remote? */
505
506 case CONTEXT_FM:
507 return remote_button_context_radio;
508
509 default:
510 return remote_button_context_standard;
369 } 511 }
370 return remote_button_context_standard;
371} 512}
372 513
373const struct button_mapping* get_context_mapping(int context) 514const struct button_mapping* get_context_mapping(int context)
374{ 515{
375 if (context&CONTEXT_REMOTE) 516 if (context & CONTEXT_REMOTE)
376 return get_context_mapping_remote(context); 517 return get_context_mapping_remote(context);
377 518
378 switch (context) 519 switch (context)
379 { 520 {
380 case CONTEXT_STD:
381 return button_context_standard;
382 case CONTEXT_WPS: 521 case CONTEXT_WPS:
383 return button_context_wps; 522 return button_context_wps;
384 523
385 case CONTEXT_LIST: 524 case CONTEXT_LIST:
386 return button_context_list; 525 return button_context_list;
526
387 case CONTEXT_MAINMENU: 527 case CONTEXT_MAINMENU:
388 case CONTEXT_TREE: 528 case CONTEXT_TREE:
389 if (global_settings.hold_lr_for_scroll_in_list) 529 if (global_settings.hold_lr_for_scroll_in_list)
390 return button_context_listtree_scroll_without_combo; 530 return button_context_listtree_scroll_without_combo;
391 else 531 else
392 return button_context_listtree_scroll_with_combo; 532 return button_context_listtree_scroll_with_combo;
533
393 case CONTEXT_CUSTOM|CONTEXT_TREE: 534 case CONTEXT_CUSTOM|CONTEXT_TREE:
394 return button_context_tree; 535 return button_context_tree;
395 536
396 case CONTEXT_SETTINGS: 537 case CONTEXT_SETTINGS:
397 return button_context_settings; 538 return button_context_settings;
539
398 case CONTEXT_CUSTOM|CONTEXT_SETTINGS: 540 case CONTEXT_CUSTOM|CONTEXT_SETTINGS:
399 return button_context_settings_right_is_inc; 541 return button_context_settings_right_is_inc;
400 542
401 case CONTEXT_SETTINGS_COLOURCHOOSER: 543 case CONTEXT_SETTINGS_COLOURCHOOSER:
402 return button_context_colorchooser; 544 return button_context_colorchooser;
545
403 case CONTEXT_SETTINGS_EQ: 546 case CONTEXT_SETTINGS_EQ:
404 return button_context_eq; 547 return button_context_eq;
405 548
@@ -408,20 +551,29 @@ const struct button_mapping* get_context_mapping(int context)
408 551
409 case CONTEXT_YESNOSCREEN: 552 case CONTEXT_YESNOSCREEN:
410 return button_context_yesno; 553 return button_context_yesno;
554
411 case CONTEXT_BOOKMARKSCREEN: 555 case CONTEXT_BOOKMARKSCREEN:
412 return button_context_bmark; 556 return button_context_bmark;
557
413 case CONTEXT_QUICKSCREEN: 558 case CONTEXT_QUICKSCREEN:
414 return button_context_quickscreen; 559 return button_context_quickscreen;
560
415 case CONTEXT_PITCHSCREEN: 561 case CONTEXT_PITCHSCREEN:
416 return button_context_pitchscreen; 562 return button_context_pitchscreen;
563
417 case CONTEXT_RECSCREEN: 564 case CONTEXT_RECSCREEN:
418 return button_context_recscreen; 565 return button_context_recscreen;
566
419 case CONTEXT_SETTINGS_RECTRIGGER: 567 case CONTEXT_SETTINGS_RECTRIGGER:
420 return button_context_settings_right_is_inc; 568 return button_context_settings_right_is_inc;
569
421 case CONTEXT_KEYBOARD: 570 case CONTEXT_KEYBOARD:
422 return button_context_keyboard; 571 return button_context_keyboard;
572
423 case CONTEXT_FM: 573 case CONTEXT_FM:
424 return button_context_radio; 574 return button_context_radio;
575
576 default:
577 return button_context_standard;
425 } 578 }
426 return button_context_standard;
427} 579}
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index 4ae1b1d894..e5745cda64 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -39,7 +39,8 @@ const struct button_mapping remote_directions[] =
39 { PLA_RIGHT_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, 39 { PLA_RIGHT_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE},
40#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) || \ 40#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) || \
41 (CONFIG_KEYPAD == IRIVER_H10_PAD) || \ 41 (CONFIG_KEYPAD == IRIVER_H10_PAD) || \
42 (CONFIG_KEYPAD == GIGABEAT_PAD) 42 (CONFIG_KEYPAD == GIGABEAT_PAD) || \
43 (CONFIG_KEYPAD == GIGABEAT_S_PAD)
43 { PLA_UP, BUTTON_RC_FF, BUTTON_NONE}, 44 { PLA_UP, BUTTON_RC_FF, BUTTON_NONE},
44 { PLA_DOWN, BUTTON_RC_REW, BUTTON_NONE}, 45 { PLA_DOWN, BUTTON_RC_REW, BUTTON_NONE},
45 { PLA_LEFT, BUTTON_RC_VOL_DOWN, BUTTON_NONE}, 46 { PLA_LEFT, BUTTON_RC_VOL_DOWN, BUTTON_NONE},
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index f9f31fa88f..de667ec782 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -65,6 +65,13 @@ struct mpeg_settings settings;
65#define MPEG_START_TIME_SCROLL_UP BUTTON_VOL_UP 65#define MPEG_START_TIME_SCROLL_UP BUTTON_VOL_UP
66#define MPEG_START_TIME_EXIT BUTTON_POWER 66#define MPEG_START_TIME_EXIT BUTTON_POWER
67 67
68#define MPEG_START_TIME_RC_SELECT (BUTTON_RC_PLAY | BUTTON_REL)
69#define MPEG_START_TIME_RC_LEFT BUTTON_RC_REW
70#define MPEG_START_TIME_RC_RIGHT BUTTON_RC_FF
71#define MPEG_START_TIME_RC_UP BUTTON_RC_VOL_UP
72#define MPEG_START_TIME_RC_DOWN BUTTON_RC_VOL_DOWN
73#define MPEG_START_TIME_RC_EXIT (BUTTON_RC_PLAY | BUTTON_REPEAT)
74
68#elif CONFIG_KEYPAD == IRIVER_H10_PAD 75#elif CONFIG_KEYPAD == IRIVER_H10_PAD
69#define MPEG_START_TIME_SELECT BUTTON_PLAY 76#define MPEG_START_TIME_SELECT BUTTON_PLAY
70#define MPEG_START_TIME_LEFT BUTTON_LEFT 77#define MPEG_START_TIME_LEFT BUTTON_LEFT
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 66c647ff00..6e8f9350f8 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -170,6 +170,13 @@ PLUGIN_IRAM_DECLARE
170#define MPEG_VOLUP2 BUTTON_VOL_UP 170#define MPEG_VOLUP2 BUTTON_VOL_UP
171#define MPEG_RW BUTTON_UP 171#define MPEG_RW BUTTON_UP
172#define MPEG_FF BUTTON_DOWN 172#define MPEG_FF BUTTON_DOWN
173#define MPEG_RC_MENU BUTTON_RC_DSP
174#define MPEG_RC_STOP (BUTTON_RC_PLAY | BUTTON_REPEAT)
175#define MPEG_RC_PAUSE (BUTTON_RC_PLAY | BUTTON_REL)
176#define MPEG_RC_VOLDOWN BUTTON_RC_VOL_DOWN
177#define MPEG_RC_VOLUP BUTTON_RC_VOL_UP
178#define MPEG_RC_RW BUTTON_RC_REW
179#define MPEG_RC_FF BUTTON_RC_FF
173 180
174#elif CONFIG_KEYPAD == IRIVER_H10_PAD 181#elif CONFIG_KEYPAD == IRIVER_H10_PAD
175#define MPEG_MENU BUTTON_LEFT 182#define MPEG_MENU BUTTON_LEFT
diff --git a/firmware/target/arm/imx31/gigabeat-s/button-imx31.c b/firmware/target/arm/imx31/gigabeat-s/button-imx31.c
index 9c35fb13da..d2a46f2c9f 100644
--- a/firmware/target/arm/imx31/gigabeat-s/button-imx31.c
+++ b/firmware/target/arm/imx31/gigabeat-s/button-imx31.c
@@ -55,8 +55,13 @@ static __attribute__((interrupt("IRQ"))) void KPP_HANDLER(void)
55 }; 55 };
56 56
57 int col; 57 int col;
58 /* Power button is handled separately on PMIC */ 58 /* Power button is handled separately on PMIC, remote read in headphone
59 * jack driver. */
60#ifdef HAVE_HEADPHONE_DETECTION
61 int button = int_btn & (BUTTON_POWER | BUTTON_REMOTE);
62#else
59 int button = int_btn & BUTTON_POWER; 63 int button = int_btn & BUTTON_POWER;
64#endif
60 65
61 int oldlevel = disable_irq_save(); 66 int oldlevel = disable_irq_save();
62 67
@@ -110,9 +115,9 @@ static __attribute__((interrupt("IRQ"))) void KPP_HANDLER(void)
110 else 115 else
111 KPP_KPSR |= KPP_KPSR_KDIE; 116 KPP_KPSR |= KPP_KPSR_KDIE;
112 117
113 restore_irq(oldlevel);
114
115 int_btn = button; 118 int_btn = button;
119
120 restore_irq(oldlevel);
116} 121}
117 122
118bool button_hold(void) 123bool button_hold(void)