summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Arigo <markarigo@gmail.com>2009-07-07 03:26:57 +0000
committerMark Arigo <markarigo@gmail.com>2009-07-07 03:26:57 +0000
commitfb224bd0f93389a30960102e40280f8901b9d834 (patch)
tree742761cdba8225f9c9a5b02c56cf6f793e4d257d
parenta9edc8440d5e0574f2f05c378ca5f0fac7202734 (diff)
downloadrockbox-fb224bd0f93389a30960102e40280f8901b9d834.tar.gz
rockbox-fb224bd0f93389a30960102e40280f8901b9d834.zip
Philips SA9200: fix the buttons to work with flip screen mode (does anyone use this?). Change to conventional BUTTON_LEFT/BUTTON_RIGHT names and flip the remaining directional buttons.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21698 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/keymaps/keymap-sa9200.c122
-rw-r--r--firmware/drivers/button.c14
-rwxr-xr-xfirmware/target/arm/philips/sa9200/button-sa9200.c8
-rwxr-xr-xfirmware/target/arm/philips/sa9200/button-target.h8
4 files changed, 83 insertions, 69 deletions
diff --git a/apps/keymaps/keymap-sa9200.c b/apps/keymaps/keymap-sa9200.c
index bf693600c8..098e216a42 100644
--- a/apps/keymaps/keymap-sa9200.c
+++ b/apps/keymaps/keymap-sa9200.c
@@ -52,11 +52,11 @@ static const struct button_mapping button_context_standard[] = {
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_REW, BUTTON_NONE },
56 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, 55 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
56 { ACTION_STD_CANCEL, BUTTON_PREV, BUTTON_NONE },
57 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, 57 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
58 58
59 { ACTION_STD_OK, BUTTON_FFWD, BUTTON_NONE }, 59 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
60 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 60 { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
61 61
62 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 62 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
@@ -71,17 +71,17 @@ static const struct button_mapping button_context_wps[] = {
71 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 71 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
72 { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, 72 { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
73 73
74 { ACTION_WPS_SKIPNEXT, BUTTON_FFWD|BUTTON_REL, BUTTON_FFWD }, 74 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
75 { ACTION_WPS_SKIPPREV, BUTTON_REW|BUTTON_REL, BUTTON_REW }, 75 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
76 76
77 { ACTION_WPS_SEEKBACK, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, 77 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
78 { ACTION_WPS_SEEKFWD, BUTTON_FFWD|BUTTON_REPEAT, BUTTON_NONE }, 78 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
79 79
80 { ACTION_WPS_STOPSEEK, BUTTON_REW|BUTTON_REL, BUTTON_REW|BUTTON_REPEAT }, 80 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
81 { ACTION_WPS_STOPSEEK, BUTTON_FFWD|BUTTON_REL, BUTTON_FFWD|BUTTON_REPEAT }, 81 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
82 82
83 { ACTION_WPS_ABSETB_NEXTDIR,BUTTON_POWER|BUTTON_RIGHT, BUTTON_POWER }, 83 { ACTION_WPS_ABSETB_NEXTDIR,BUTTON_POWER|BUTTON_NEXT, BUTTON_POWER },
84 { ACTION_WPS_ABSETA_PREVDIR,BUTTON_POWER|BUTTON_LEFT, BUTTON_POWER }, 84 { ACTION_WPS_ABSETA_PREVDIR,BUTTON_POWER|BUTTON_PREV, BUTTON_POWER },
85 { ACTION_WPS_ABRESET, BUTTON_POWER|BUTTON_UP, BUTTON_POWER }, 85 { ACTION_WPS_ABRESET, BUTTON_POWER|BUTTON_UP, BUTTON_POWER },
86 86
87 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 87 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
@@ -95,12 +95,12 @@ static const struct button_mapping button_context_wps[] = {
95 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 95 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
96 96
97 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 97 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
98 { ACTION_WPS_BROWSE, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 98 { ACTION_WPS_BROWSE, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
99 99
100 { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, 100 { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
101 { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, 101 { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
102 { ACTION_WPS_PITCHSCREEN, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 102 { ACTION_WPS_PITCHSCREEN, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
103 { ACTION_WPS_ID3SCREEN, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 103 { ACTION_WPS_ID3SCREEN, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
104 104
105 LAST_ITEM_IN_LIST 105 LAST_ITEM_IN_LIST
106}; /* button_context_wps */ 106}; /* button_context_wps */
@@ -121,37 +121,37 @@ static const struct button_mapping button_context_list[] = {
121}; /* button_context_list */ 121}; /* button_context_list */
122 122
123static const struct button_mapping button_context_tree[] = { 123static const struct button_mapping button_context_tree[] = {
124 { ACTION_TREE_WPS, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 124 { ACTION_TREE_WPS, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
125 { ACTION_TREE_STOP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 125 { ACTION_TREE_STOP, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
126 126
127 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) 127 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
128}; /* button_context_tree */ 128}; /* button_context_tree */
129 129
130static const struct button_mapping button_context_listtree_scroll_with_combo[] = { 130static const struct button_mapping button_context_listtree_scroll_with_combo[] = {
131 { ACTION_TREE_ROOT_INIT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, 131 { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
132 132
133 { ACTION_TREE_PGLEFT, BUTTON_LEFT, BUTTON_NONE }, 133 { ACTION_TREE_PGLEFT, BUTTON_PREV, BUTTON_NONE },
134 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 134 { ACTION_TREE_PGLEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
135 135
136 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT, BUTTON_NONE }, 136 { ACTION_TREE_PGRIGHT, BUTTON_NEXT, BUTTON_NONE },
137 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 137 { ACTION_TREE_PGRIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
138 138
139 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 139 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
140}; 140};
141 141
142static const struct button_mapping button_context_listtree_scroll_without_combo[] = { 142static const struct button_mapping button_context_listtree_scroll_without_combo[] = {
143 { ACTION_NONE, BUTTON_REW, BUTTON_NONE }, 143 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
144 { ACTION_NONE, BUTTON_FFWD, BUTTON_NONE }, 144 { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
145 145
146 { ACTION_STD_OK, BUTTON_FFWD|BUTTON_REL, BUTTON_FFWD }, 146 { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
147 { ACTION_STD_CANCEL, BUTTON_REW|BUTTON_REL, BUTTON_REW }, 147 { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
148 { ACTION_TREE_ROOT_INIT, BUTTON_MENU, BUTTON_NONE }, 148 { ACTION_TREE_ROOT_INIT, BUTTON_MENU, BUTTON_NONE },
149 149
150 { ACTION_TREE_PGLEFT, BUTTON_LEFT, BUTTON_NONE }, 150 { ACTION_TREE_PGLEFT, BUTTON_PREV, BUTTON_NONE },
151 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 151 { ACTION_TREE_PGLEFT, BUTTON_PREV|BUTTON_REL, BUTTON_PREV|BUTTON_REPEAT },
152 152
153 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 153 { ACTION_TREE_PGRIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
154 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 154 { ACTION_TREE_PGRIGHT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT|BUTTON_REPEAT },
155 155
156 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 156 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
157}; 157};
@@ -166,21 +166,21 @@ static const struct button_mapping button_context_settings[] = {
166 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, 166 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
167 { ACTION_SETTINGS_DECREPEAT,BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 167 { ACTION_SETTINGS_DECREPEAT,BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
168 168
169 { ACTION_STD_PREV, BUTTON_REW, BUTTON_NONE }, 169 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
170 { ACTION_STD_PREVREPEAT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, 170 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
171 171
172 { ACTION_STD_NEXT, BUTTON_FFWD, BUTTON_NONE }, 172 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
173 { ACTION_STD_NEXTREPEAT, BUTTON_FFWD|BUTTON_REPEAT, BUTTON_NONE }, 173 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
174 174
175 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 175 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
176}; /* button_context_settings */ 176}; /* button_context_settings */
177 177
178static const struct button_mapping button_context_settings_right_is_inc[] = { 178static const struct button_mapping button_context_settings_right_is_inc[] = {
179 { ACTION_SETTINGS_INC, BUTTON_FFWD, BUTTON_NONE }, 179 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
180 { ACTION_SETTINGS_INCREPEAT,BUTTON_FFWD|BUTTON_REPEAT, BUTTON_NONE }, 180 { ACTION_SETTINGS_INCREPEAT,BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
181 181
182 { ACTION_SETTINGS_DEC, BUTTON_REW, BUTTON_NONE }, 182 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
183 { ACTION_SETTINGS_DECREPEAT,BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, 183 { ACTION_SETTINGS_DECREPEAT,BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
184 184
185 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 185 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
186}; /* button_context_settingsgraphical */ 186}; /* button_context_settingsgraphical */
@@ -193,13 +193,13 @@ static const struct button_mapping button_context_yesno[] = {
193 193
194/** Bookmark Screen **/ 194/** Bookmark Screen **/
195static const struct button_mapping button_context_bmark[] = { 195static const struct button_mapping button_context_bmark[] = {
196 { ACTION_BMS_DELETE, BUTTON_RIGHT, BUTTON_NONE }, 196 { ACTION_BMS_DELETE, BUTTON_NEXT, BUTTON_NONE },
197 197
198 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 198 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
199}; /* button_context_bmark */ 199}; /* button_context_bmark */
200 200
201static const struct button_mapping button_context_quickscreen[] = { 201static const struct button_mapping button_context_quickscreen[] = {
202 { ACTION_NONE, BUTTON_REW, BUTTON_NONE }, 202 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
203 { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, 203 { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE },
204 204
205 { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, 205 { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE },
@@ -208,11 +208,11 @@ static const struct button_mapping button_context_quickscreen[] = {
208 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, 208 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE },
209 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 209 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
210 210
211 { ACTION_QS_LEFT, BUTTON_REW|BUTTON_REL, BUTTON_NONE }, 211 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
212 { ACTION_QS_LEFT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, 212 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
213 213
214 { ACTION_QS_RIGHT, BUTTON_FFWD|BUTTON_REL, BUTTON_NONE }, 214 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
215 { ACTION_QS_RIGHT, BUTTON_FFWD|BUTTON_REPEAT, BUTTON_NONE }, 215 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
216 216
217 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 217 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
218}; /* button_context_quickscreen */ 218}; /* button_context_quickscreen */
@@ -220,7 +220,7 @@ static const struct button_mapping button_context_quickscreen[] = {
220static const struct button_mapping button_context_pitchscreen[] = { 220static const struct button_mapping button_context_pitchscreen[] = {
221 { ACTION_PS_RESET, BUTTON_PLAY, BUTTON_NONE }, 221 { ACTION_PS_RESET, BUTTON_PLAY, BUTTON_NONE },
222 { ACTION_PS_EXIT, BUTTON_MENU, BUTTON_NONE }, 222 { ACTION_PS_EXIT, BUTTON_MENU, BUTTON_NONE },
223 { ACTION_PS_EXIT, BUTTON_LEFT, BUTTON_NONE }, 223 { ACTION_PS_EXIT, BUTTON_PREV, BUTTON_NONE },
224 { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE }, 224 { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE },
225 225
226 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, 226 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE },
@@ -229,14 +229,14 @@ static const struct button_mapping button_context_pitchscreen[] = {
229 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, 229 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE },
230 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 230 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
231 231
232 { ACTION_PS_NUDGE_LEFT, BUTTON_REW, BUTTON_NONE }, 232 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
233 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_REW|BUTTON_REL, BUTTON_NONE }, 233 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
234 234
235 { ACTION_PS_NUDGE_RIGHT, BUTTON_FFWD, BUTTON_NONE }, 235 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
236 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_FFWD|BUTTON_REL, BUTTON_NONE }, 236 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
237 237
238 { ACTION_PS_SLOWER, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, 238 { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
239 { ACTION_PS_FASTER, BUTTON_FFWD|BUTTON_REPEAT, BUTTON_NONE }, 239 { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
240 240
241 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 241 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
242}; /* button_context_pitchcreen */ 242}; /* button_context_pitchcreen */
@@ -246,11 +246,11 @@ static const struct button_mapping button_context_keyboard[] = {
246 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, 246 { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
247 { ACTION_KBD_ABORT, BUTTON_POWER, BUTTON_NONE }, 247 { ACTION_KBD_ABORT, BUTTON_POWER, BUTTON_NONE },
248 248
249 { ACTION_KBD_LEFT, BUTTON_REW, BUTTON_NONE }, 249 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
250 { ACTION_KBD_LEFT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, 250 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
251 251
252 { ACTION_KBD_RIGHT, BUTTON_FFWD, BUTTON_NONE }, 252 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
253 { ACTION_KBD_RIGHT, BUTTON_FFWD|BUTTON_REPEAT, BUTTON_NONE }, 253 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
254 254
255 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, 255 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE },
256 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 256 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
@@ -258,11 +258,11 @@ static const struct button_mapping button_context_keyboard[] = {
258 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, 258 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE },
259 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 259 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
260 260
261 { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT, BUTTON_NONE }, 261 { ACTION_KBD_CURSOR_LEFT, BUTTON_PREV, BUTTON_NONE },
262 { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 262 { ACTION_KBD_CURSOR_LEFT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE },
263 263
264 { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 264 { ACTION_KBD_CURSOR_RIGHT, BUTTON_NEXT, BUTTON_NONE },
265 { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 265 { ACTION_KBD_CURSOR_RIGHT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
266 266
267 { ACTION_KBD_BACKSPACE, BUTTON_VOL_UP, BUTTON_NONE }, 267 { ACTION_KBD_BACKSPACE, BUTTON_VOL_UP, BUTTON_NONE },
268 { ACTION_KBD_BACKSPACE, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 268 { ACTION_KBD_BACKSPACE, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
@@ -278,11 +278,11 @@ static const struct button_mapping button_context_keyboard[] = {
278#ifdef HAVE_USBSTACK 278#ifdef HAVE_USBSTACK
279static const struct button_mapping button_context_usb_hid[] = { 279static const struct button_mapping button_context_usb_hid[] = {
280 { ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE }, 280 { ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE },
281 { ACTION_USB_HID_STOP, BUTTON_LEFT, BUTTON_NONE }, 281 { ACTION_USB_HID_STOP, BUTTON_PREV, BUTTON_NONE },
282 { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE }, 282 { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
283 283
284 { ACTION_USB_HID_SKIPPREV, BUTTON_REW, BUTTON_NONE }, 284 { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
285 { ACTION_USB_HID_SKIPNEXT, BUTTON_FFWD, BUTTON_NONE }, 285 { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
286 286
287 { ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE }, 287 { ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE },
288 { ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 288 { ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
@@ -294,7 +294,7 @@ static const struct button_mapping button_context_usb_hid[] = {
294 { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 294 { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
295 { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 295 { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
296 296
297 { ACTION_USB_HID_MUTE, BUTTON_RIGHT, BUTTON_NONE }, 297 { ACTION_USB_HID_MUTE, BUTTON_NEXT, BUTTON_NONE },
298 { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, 298 { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
299 299
300 LAST_ITEM_IN_LIST 300 LAST_ITEM_IN_LIST
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index 6fbe5de229..6f6eb8f222 100644
--- a/firmware/drivers/button.c
+++ b/firmware/drivers/button.c
@@ -445,6 +445,10 @@ static int button_flip(int button)
445#if CONFIG_KEYPAD == SANSA_C200_PAD 445#if CONFIG_KEYPAD == SANSA_C200_PAD
446 | BUTTON_VOL_UP | BUTTON_VOL_DOWN 446 | BUTTON_VOL_UP | BUTTON_VOL_DOWN
447#endif 447#endif
448#if CONFIG_KEYPAD == PHILIPS_SA9200_PAD
449 | BUTTON_VOL_UP | BUTTON_VOL_DOWN
450 | BUTTON_NEXT | BUTTON_PREV
451#endif
448 ); 452 );
449 453
450 if (button & BUTTON_LEFT) 454 if (button & BUTTON_LEFT)
@@ -475,6 +479,16 @@ static int button_flip(int button)
475 if (button & BUTTON_VOL_DOWN) 479 if (button & BUTTON_VOL_DOWN)
476 newbutton |= BUTTON_VOL_UP; 480 newbutton |= BUTTON_VOL_UP;
477#endif 481#endif
482#if CONFIG_KEYPAD == PHILIPS_SA9200_PAD
483 if (button & BUTTON_VOL_UP)
484 newbutton |= BUTTON_VOL_DOWN;
485 if (button & BUTTON_VOL_DOWN)
486 newbutton |= BUTTON_VOL_UP;
487 if (button & BUTTON_NEXT)
488 newbutton |= BUTTON_PREV;
489 if (button & BUTTON_PREV)
490 newbutton |= BUTTON_NEXT;
491#endif
478 492
479 return newbutton; 493 return newbutton;
480} 494}
diff --git a/firmware/target/arm/philips/sa9200/button-sa9200.c b/firmware/target/arm/philips/sa9200/button-sa9200.c
index be37111ecb..0be77c66c9 100755
--- a/firmware/target/arm/philips/sa9200/button-sa9200.c
+++ b/firmware/target/arm/philips/sa9200/button-sa9200.c
@@ -51,10 +51,10 @@ void button_int(void)
51 if (val == MEP_BUTTON_HEADER) 51 if (val == MEP_BUTTON_HEADER)
52 { 52 {
53 /* Buttons packet */ 53 /* Buttons packet */
54 if (data[1] & 0x1) int_btn |= BUTTON_FFWD; 54 if (data[1] & 0x1) int_btn |= BUTTON_RIGHT;
55 if (data[1] & 0x2) int_btn |= BUTTON_RIGHT; 55 if (data[1] & 0x2) int_btn |= BUTTON_NEXT;
56 if (data[1] & 0x4) int_btn |= BUTTON_LEFT; 56 if (data[1] & 0x4) int_btn |= BUTTON_PREV;
57 if (data[1] & 0x8) int_btn |= BUTTON_REW; 57 if (data[1] & 0x8) int_btn |= BUTTON_LEFT;
58 if (data[2] & 0x1) int_btn |= BUTTON_MENU; 58 if (data[2] & 0x1) int_btn |= BUTTON_MENU;
59 } 59 }
60 else if (val == MEP_ABSOLUTE_HEADER) 60 else if (val == MEP_ABSOLUTE_HEADER)
diff --git a/firmware/target/arm/philips/sa9200/button-target.h b/firmware/target/arm/philips/sa9200/button-target.h
index 6259aa0737..faed943208 100755
--- a/firmware/target/arm/philips/sa9200/button-target.h
+++ b/firmware/target/arm/philips/sa9200/button-target.h
@@ -43,10 +43,10 @@ void button_int(void);
43#define BUTTON_POWER 0x00000001 43#define BUTTON_POWER 0x00000001
44#define BUTTON_PLAY 0x00000002 44#define BUTTON_PLAY 0x00000002
45#define BUTTON_MENU 0x00000004 45#define BUTTON_MENU 0x00000004
46#define BUTTON_LEFT 0x00000008 46#define BUTTON_PREV 0x00000008
47#define BUTTON_RIGHT 0x00000010 47#define BUTTON_NEXT 0x00000010
48#define BUTTON_REW 0x00000020 48#define BUTTON_LEFT 0x00000020
49#define BUTTON_FFWD 0x00000040 49#define BUTTON_RIGHT 0x00000040
50#define BUTTON_UP 0x00000080 50#define BUTTON_UP 0x00000080
51#define BUTTON_DOWN 0x00000100 51#define BUTTON_DOWN 0x00000100
52#define BUTTON_VOL_UP 0x00000200 52#define BUTTON_VOL_UP 0x00000200