summaryrefslogtreecommitdiff
path: root/apps/keymaps
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2011-12-24 11:56:46 +0000
committerThomas Martitz <kugel@rockbox.org>2011-12-24 11:56:46 +0000
commit249bba03f1051f4984538f66b9e7d36674c61e5c (patch)
treeb9a0d78e05269ed2043521ab0dfdad83aeaf2aff /apps/keymaps
parent567e0ad93ef3048f2266932b10dcdb309b1a77c9 (diff)
downloadrockbox-249bba03f1051f4984538f66b9e7d36674c61e5c.tar.gz
rockbox-249bba03f1051f4984538f66b9e7d36674c61e5c.zip
Initial commit of the Samsung YP-R0 port.
This port is a hybrid native/RaaA port. It runs on a embedded linux system, but is the only application. It therefore can implement lots of stuff that native targets also implement, while leveraging the underlying linux kernel. The port is quite advanced. User interface, audio playback, plugins work mostly fine. Missing is e.g. power mangement and USB (see SamsungYPR0 wiki page). Included in utils/ypr0tools are scripts and programs required to generate a patched firmware. The patched firmware has the rootfs modified to load Rockbox. It includes a early/safe USB mode. This port needs a new toolchain, one that includes glibc headers and libraries. rockboxdev.sh can generate it, but e.g. codesourcey and distro packages may also work. Most of the initial effort is done by Lorenzo Miori and others (on ABI), including reverse engineering and patching of the original firmware, initial drivers, and more. Big thanks to you. Flyspray: FS#12348 Author: Lorenzo Miori, myself Merry christmas to ypr0 owners! :) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31415 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/keymaps')
-rw-r--r--apps/keymaps/keymap-ypr0.c258
1 files changed, 258 insertions, 0 deletions
diff --git a/apps/keymaps/keymap-ypr0.c b/apps/keymaps/keymap-ypr0.c
new file mode 100644
index 0000000000..b5706760ba
--- /dev/null
+++ b/apps/keymaps/keymap-ypr0.c
@@ -0,0 +1,258 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: keymap-sdl.c 28704 2010-11-29 11:28:53Z teru $
9 *
10 * Copyright (C) 2011 Lorenzo Miori
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22/* Button Code Definitions for Samsung YP-R0 target */
23
24#include <stdio.h>
25#include <string.h>
26#include <stdlib.h>
27
28#include "config.h"
29#include "action.h"
30#include "button.h"
31#include "settings.h"
32
33/*
34 * The format of the list is as follows
35 * { Action Code, Button code, Prereq button code }
36 * if there's no need to check the previous button's value, use BUTTON_NONE
37 * Insert LAST_ITEM_IN_LIST at the end of each mapping
38 */
39
40static const struct button_mapping button_context_standard[] = {
41 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
42 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
43 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
44 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
45
46 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
47 { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_BACK },
48
49 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
50 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
51
52 { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
53 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
54 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
55
56 { ACTION_STD_CONTEXT, BUTTON_MENU|BUTTON_REL, BUTTON_NONE },
57 { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
58
59 { ACTION_STD_KEYLOCK, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
60
61 LAST_ITEM_IN_LIST
62}; /* button_context_standard */
63
64static const struct button_mapping button_context_wps[] = {
65 { ACTION_WPS_PLAY, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
66 { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE },
67
68 { ACTION_WPS_BROWSE, BUTTON_BACK|BUTTON_REL, BUTTON_BACK },
69 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
70
71 /* NOTE: this is available only enabling AB-Repeat mode */
72 { ACTION_WPS_HOTKEY, BUTTON_USER|BUTTON_REL, BUTTON_USER },
73 { ACTION_WPSAB_SINGLE, BUTTON_USER|BUTTON_REPEAT, BUTTON_NONE },
74 { ACTION_STD_KEYLOCK, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
75 { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
76 { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
77
78 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
79 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
80 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
81
82 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
83 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
84 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
85
86
87 { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
88 { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
89 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
90 { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
91
92 LAST_ITEM_IN_LIST
93}; /* button_context_wps */
94
95static const struct button_mapping button_context_list[] = {
96 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
97}; /* button_context_list */
98
99static const struct button_mapping button_context_tree[] = {
100 { ACTION_TREE_WPS, BUTTON_USER|BUTTON_REPEAT, BUTTON_USER },
101 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE },
102 { ACTION_TREE_HOTKEY, BUTTON_USER|BUTTON_REL, BUTTON_NONE },
103
104 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
105}; /* button_context_tree */
106
107static const struct button_mapping button_context_settings[] = {
108
109 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
110 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
111 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
112 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
113
114 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_TREE)
115}; /* button_context_settings */
116
117static const struct button_mapping button_context_yesno[] = {
118 { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE },
119
120 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
121}; /* button_context_settings_yesno */
122
123static const struct button_mapping button_context_colorchooser[] = { //check
124 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
125 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
126
127 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS),
128}; /* button_context_colorchooser */
129
130static const struct button_mapping button_context_eq[] = {
131
132 { ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
133
134 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS),
135}; /* button_context_eq */
136
137/** Bookmark Screen **/
138static const struct button_mapping button_context_bmark[] = {
139 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
140}; /* button_context_bmark */
141
142static const struct button_mapping button_context_time[] = {
143
144 { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
145 { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
146 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
147 { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
148 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
149 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
150 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
151 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
152
153 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
154}; /* button_context_time */
155
156static const struct button_mapping button_context_quickscreen[] = {
157
158 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE },
159 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
160 { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE },
161 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
162 { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE },
163 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
164 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
165 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
166 { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE },
167
168 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
169}; /* button_context_quickscreen */
170
171static const struct button_mapping button_context_pitchscreen[] = {
172
173 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE },
174 { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
175 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE },
176 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
177
178 { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
179 { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
180
181 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
182 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
183 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
184 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
185
186 { ACTION_PS_RESET, BUTTON_SELECT, BUTTON_NONE },
187 { ACTION_PS_TOGGLE_MODE, BUTTON_USER, BUTTON_NONE },
188 { ACTION_PS_EXIT, BUTTON_MENU|BUTTON_REL, BUTTON_NONE },
189 { ACTION_PS_EXIT, BUTTON_BACK|BUTTON_REL, BUTTON_NONE },
190
191 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
192}; /* button_context_pitchcreen */
193
194static const struct button_mapping button_context_keyboard[] = {
195
196 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE },
197 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
198 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE },
199 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
200 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
201 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
202 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
203 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
204
205 { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE },
206 { ACTION_KBD_ABORT, BUTTON_BACK|BUTTON_REL, BUTTON_BACK },
207 { ACTION_KBD_DONE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
208 { ACTION_KBD_BACKSPACE, BUTTON_USER, BUTTON_NONE },
209 { ACTION_KBD_PAGE_FLIP, BUTTON_POWER, BUTTON_NONE },
210
211 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
212}; /* button_context_keyboard */
213
214static const struct button_mapping button_context_radio[] = {
215 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
216}; /* button_context_radio */
217
218const struct button_mapping* get_context_mapping(int context)
219{
220 switch (context)
221 {
222 case CONTEXT_STD:
223 return button_context_standard;
224 case CONTEXT_WPS:
225 return button_context_wps;
226
227 case CONTEXT_LIST:
228 return button_context_list;
229 case CONTEXT_MAINMENU:
230 case CONTEXT_TREE:
231 return button_context_tree;
232
233 case CONTEXT_SETTINGS:
234 return button_context_settings;
235
236 case CONTEXT_SETTINGS_COLOURCHOOSER:
237 return button_context_colorchooser;
238 case CONTEXT_SETTINGS_EQ:
239 return button_context_eq;
240
241 case CONTEXT_SETTINGS_TIME:
242 return button_context_time;
243
244 case CONTEXT_YESNOSCREEN:
245 return button_context_yesno;
246 case CONTEXT_FM:
247 return button_context_radio;
248 case CONTEXT_BOOKMARKSCREEN:
249 return button_context_bmark;
250 case CONTEXT_QUICKSCREEN:
251 return button_context_quickscreen;
252 case CONTEXT_PITCHSCREEN:
253 return button_context_pitchscreen;
254 case CONTEXT_KEYBOARD:
255 return button_context_keyboard;
256 }
257 return button_context_standard;
258}