diff options
-rw-r--r-- | apps/debug_menu.c | 6 | ||||
-rw-r--r-- | apps/keymaps/keymap-mr100.c | 534 | ||||
-rw-r--r-- | apps/plugins/lib/pluginlib_actions.c | 35 | ||||
-rw-r--r-- | firmware/target/arm/olympus/mrobe-100/button-mr100.c | 564 | ||||
-rw-r--r-- | firmware/target/arm/olympus/mrobe-100/button-target.h | 39 | ||||
-rw-r--r-- | firmware/target/arm/system-pp502x.c | 8 | ||||
-rw-r--r-- | uisimulator/sdl/button.c | 34 |
7 files changed, 886 insertions, 334 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c index d1463c7353..8cd1fedf5b 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c | |||
@@ -987,10 +987,12 @@ static bool dbg_spdif(void) | |||
987 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD | 987 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD |
988 | # define DEBUG_CANCEL BUTTON_REC | 988 | # define DEBUG_CANCEL BUTTON_REC |
989 | 989 | ||
990 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) || \ | 990 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) |
991 | (CONFIG_KEYPAD == MROBE100_PAD) | ||
992 | # define DEBUG_CANCEL BUTTON_REW | 991 | # define DEBUG_CANCEL BUTTON_REW |
993 | 992 | ||
993 | #elif (CONFIG_KEYPAD == MROBE100_PAD) | ||
994 | # define DEBUG_CANCEL BUTTON_MENU | ||
995 | |||
994 | #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \ | 996 | #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \ |
995 | (CONFIG_KEYPAD == SANSA_C200_PAD) | 997 | (CONFIG_KEYPAD == SANSA_C200_PAD) |
996 | # define DEBUG_CANCEL BUTTON_LEFT | 998 | # define DEBUG_CANCEL BUTTON_LEFT |
diff --git a/apps/keymaps/keymap-mr100.c b/apps/keymaps/keymap-mr100.c index 572f510fb9..2d6b616d5d 100644 --- a/apps/keymaps/keymap-mr100.c +++ b/apps/keymaps/keymap-mr100.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * \/ \/ \/ \/ \/ | 7 | * \/ \/ \/ \/ \/ |
8 | * $Id$ | 8 | * $Id$ |
9 | * | 9 | * |
10 | * Copyright (C) Barry Wardell 2006 | 10 | * Copyright (C) 2008 Mark Arigo |
11 | * | 11 | * |
12 | * All files in this archive are subject to the GNU General Public License. | 12 | * All files in this archive are subject to the GNU General Public License. |
13 | * See the file COPYING in the source tree root for full license agreement. | 13 | * See the file COPYING in the source tree root for full license agreement. |
@@ -17,331 +17,314 @@ | |||
17 | * | 17 | * |
18 | ****************************************************************************/ | 18 | ****************************************************************************/ |
19 | 19 | ||
20 | /* Button Code Definitions for Olympus m:robe 100 target | 20 | /* Button Code Definitions for the Olympus m:robe 100 */ |
21 | NOTE: COPIED FROM IRIVER H10, NEEDS ADAPTING TO MROBE 100 */ | 21 | #include <stdio.h> |
22 | #include <string.h> | ||
23 | #include <stdlib.h> | ||
22 | 24 | ||
23 | #include "config.h" | 25 | #include "config.h" |
24 | #include "action.h" | 26 | #include "action.h" |
25 | #include "button.h" | 27 | #include "button.h" |
26 | #include "settings.h" | 28 | #include "settings.h" |
27 | 29 | ||
28 | /* {Action Code, Button code, Prereq button code } */ | 30 | /* |
29 | |||
30 | /* | ||
31 | * The format of the list is as follows | 31 | * The format of the list is as follows |
32 | * { Action Code, Button code, Prereq button code } | 32 | * { Action Code, Button code, Prereq button code } |
33 | * if there's no need to check the previous button's value, use BUTTON_NONE | 33 | * if there's no need to check the previous button's value, use BUTTON_NONE |
34 | * Insert LAST_ITEM_IN_LIST at the end of each mapping | 34 | * Insert LAST_ITEM_IN_LIST at the end of each mapping |
35 | */ | 35 | */ |
36 | |||
37 | /* CONTEXT_CUSTOM's used in this file... | ||
38 | |||
39 | CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions) | ||
40 | CONTEXT_CUSTOM|CONTEXT_SETTINGS = the direction keys for the eq/col picker screens | ||
41 | i.e where up/down is inc/dec | ||
42 | CONTEXT_SETTINGS = up/down is prev/next, l/r is inc/dec | ||
43 | |||
44 | */ | ||
45 | |||
46 | |||
36 | static const struct button_mapping button_context_standard[] = { | 47 | static const struct button_mapping button_context_standard[] = { |
37 | { ACTION_STD_PREV, BUTTON_SCROLL_UP, BUTTON_NONE }, | 48 | { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, |
38 | { ACTION_STD_PREVREPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | 49 | { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, |
39 | { ACTION_STD_NEXT, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | 50 | { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, |
40 | { ACTION_STD_NEXTREPEAT, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | 51 | { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, |
41 | |||
42 | { ACTION_STD_MENU, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, | ||
43 | { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
44 | { ACTION_STD_CONTEXT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
45 | { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, | ||
46 | { ACTION_STD_QUICKSCREEN, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
47 | |||
48 | /* TODO: this is a bit of a hack so that we can exit some debug screens | ||
49 | * (audio, tagcache, dircache, hwinfo, stack, ports). They don't like it | ||
50 | * when ACTION_STD_CANCEL has anything other than BUTTON_NONE for prereq. | ||
51 | */ | ||
52 | { ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_RIGHT, BUTTON_NONE }, | ||
53 | 52 | ||
54 | LAST_ITEM_IN_LIST | 53 | { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, |
55 | }; /* button_context_standard */ | 54 | { ACTION_STD_CANCEL, BUTTON_DISPLAY, BUTTON_NONE }, |
55 | { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, | ||
56 | 56 | ||
57 | static const struct button_mapping remote_button_context_standard[] = { | 57 | { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT }, |
58 | { ACTION_STD_PREV, BUTTON_RC_VOL_UP, BUTTON_NONE }, | 58 | |
59 | { ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | 59 | { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, |
60 | { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | 60 | { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, |
61 | { ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | 61 | |
62 | { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, | ||
63 | { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, | ||
62 | 64 | ||
63 | LAST_ITEM_IN_LIST | 65 | LAST_ITEM_IN_LIST |
64 | }; /* remote_button_context_standard */ | 66 | }; /* button_context_standard */ |
67 | |||
65 | 68 | ||
66 | static const struct button_mapping button_context_wps[] = { | 69 | static const struct button_mapping button_context_wps[] = { |
67 | { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | 70 | { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, |
68 | { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT,BUTTON_PLAY }, | 71 | { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, |
69 | { ACTION_WPS_SKIPPREV, BUTTON_REW|BUTTON_REL, BUTTON_REW}, | ||
70 | { ACTION_WPS_SEEKBACK, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
71 | { ACTION_WPS_STOPSEEK, BUTTON_REW|BUTTON_REL, BUTTON_REW|BUTTON_REPEAT }, | ||
72 | { ACTION_WPS_SKIPNEXT, BUTTON_FF|BUTTON_REL, BUTTON_FF }, | ||
73 | { ACTION_WPS_SEEKFWD, BUTTON_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
74 | { ACTION_WPS_STOPSEEK, BUTTON_FF|BUTTON_REL, BUTTON_FF|BUTTON_REPEAT }, | ||
75 | |||
76 | { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_POWER|BUTTON_FF, BUTTON_POWER }, | ||
77 | { ACTION_WPS_ABSETA_PREVDIR, BUTTON_POWER|BUTTON_REW, BUTTON_POWER }, | ||
78 | { ACTION_WPS_ABRESET, BUTTON_POWER|BUTTON_PLAY, BUTTON_POWER }, | ||
79 | |||
80 | { ACTION_WPS_VOLDOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | ||
81 | { ACTION_WPS_VOLDOWN, BUTTON_SCROLL_DOWN|BUTTON_REPEAT,BUTTON_NONE }, | ||
82 | { ACTION_WPS_VOLUP, BUTTON_SCROLL_UP, BUTTON_NONE }, | ||
83 | { ACTION_WPS_VOLUP, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
84 | |||
85 | { ACTION_WPS_BROWSE, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, | ||
86 | { ACTION_WPS_CONTEXT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, | ||
87 | { ACTION_WPS_QUICKSCREEN, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, | ||
88 | { ACTION_WPS_MENU, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, | ||
89 | { ACTION_WPS_PITCHSCREEN, BUTTON_PLAY|BUTTON_LEFT, BUTTON_PLAY }, | ||
90 | { ACTION_WPS_ID3SCREEN, BUTTON_PLAY|BUTTON_RIGHT, BUTTON_PLAY }, | ||
91 | |||
92 | LAST_ITEM_IN_LIST | ||
93 | }; /* button_context_wps */ | ||
94 | 72 | ||
95 | static const struct button_mapping remote_button_context_wps[] = { | 73 | { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, |
96 | { ACTION_WPS_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, | 74 | { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, |
97 | { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT,BUTTON_RC_PLAY }, | ||
98 | { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW}, | ||
99 | { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
100 | { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT }, | ||
101 | { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, | ||
102 | { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
103 | { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT }, | ||
104 | |||
105 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
106 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
107 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
108 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
109 | 75 | ||
110 | { ACTION_WPS_PITCHSCREEN, BUTTON_RC_PLAY|BUTTON_LEFT, BUTTON_RC_PLAY }, | 76 | { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, |
111 | { ACTION_WPS_ID3SCREEN, BUTTON_RC_PLAY|BUTTON_RIGHT, BUTTON_RC_PLAY }, | 77 | { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, |
112 | 78 | { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, | |
113 | LAST_ITEM_IN_LIST | 79 | { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, |
114 | }; /* remote_button_context_wps */ | ||
115 | |||
116 | static const struct button_mapping button_context_settings[] = { | ||
117 | { ACTION_SETTINGS_INC, BUTTON_SCROLL_UP, BUTTON_NONE }, | ||
118 | { ACTION_SETTINGS_INCREPEAT,BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
119 | { ACTION_SETTINGS_DEC, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | ||
120 | { ACTION_SETTINGS_DECREPEAT,BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
121 | { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, | ||
122 | { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
123 | { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, | ||
124 | { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
125 | { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE }, | ||
126 | |||
127 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | ||
128 | }; /* button_context_settings */ | ||
129 | 80 | ||
130 | static const struct button_mapping button_context_list[] = { | 81 | { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, |
131 | { ACTION_LISTTREE_PGUP, BUTTON_REW|BUTTON_REL, BUTTON_REW }, | 82 | { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, |
132 | { ACTION_LISTTREE_PGDOWN, BUTTON_FF|BUTTON_REL, BUTTON_FF }, | 83 | { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, |
84 | { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, | ||
133 | 85 | ||
134 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | 86 | { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, |
135 | }; /* button_context_list */ | 87 | { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, |
88 | |||
89 | { ACTION_WPS_BROWSE, BUTTON_DISPLAY|BUTTON_REL, BUTTON_DISPLAY }, | ||
90 | { ACTION_WPS_ABSETB_NEXTDIR,BUTTON_DISPLAY|BUTTON_RIGHT, BUTTON_NONE }, | ||
91 | { ACTION_WPS_ABSETA_PREVDIR,BUTTON_DISPLAY|BUTTON_LEFT, BUTTON_NONE }, | ||
92 | { ACTION_WPS_ABRESET, BUTTON_DISPLAY|BUTTON_SELECT, BUTTON_NONE }, | ||
93 | { ACTION_WPS_PITCHSCREEN, BUTTON_DISPLAY|BUTTON_UP, BUTTON_DISPLAY }, | ||
94 | { ACTION_WPS_PITCHSCREEN, BUTTON_DISPLAY|BUTTON_DOWN, BUTTON_DISPLAY }, | ||
95 | { ACTION_WPS_ID3SCREEN, BUTTON_DISPLAY|BUTTON_MENU, BUTTON_NONE }, | ||
136 | 96 | ||
137 | static const struct button_mapping remote_button_context_list[] = { | 97 | { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, |
138 | { ACTION_LISTTREE_PGUP, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW }, | ||
139 | { ACTION_LISTTREE_PGDOWN, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, | ||
140 | 98 | ||
99 | LAST_ITEM_IN_LIST | ||
100 | }; /* button_context_wps */ | ||
101 | |||
102 | static const struct button_mapping button_context_list[] = { | ||
103 | { ACTION_LISTTREE_PGUP, BUTTON_DISPLAY|BUTTON_UP, BUTTON_DISPLAY }, | ||
104 | { ACTION_LISTTREE_PGUP, BUTTON_UP|BUTTON_REL, BUTTON_DISPLAY|BUTTON_UP }, | ||
105 | { ACTION_LISTTREE_PGUP, BUTTON_DISPLAY|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
106 | { ACTION_LISTTREE_PGDOWN, BUTTON_DISPLAY|BUTTON_DOWN, BUTTON_DISPLAY }, | ||
107 | { ACTION_LISTTREE_PGDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_DISPLAY|BUTTON_DOWN }, | ||
108 | { ACTION_LISTTREE_PGDOWN, BUTTON_DISPLAY|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
109 | |||
141 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | 110 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) |
142 | }; /* button_context_list */ | 111 | }; /* button_context_list */ |
143 | 112 | ||
144 | static const struct button_mapping button_context_tree[] = { | 113 | static const struct button_mapping button_context_tree[] = { |
145 | { ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | 114 | { ACTION_TREE_WPS, BUTTON_DISPLAY|BUTTON_REL, BUTTON_DISPLAY }, |
146 | { ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, | 115 | { ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, |
147 | 116 | { ACTION_TREE_STOP, BUTTON_POWER, BUTTON_NONE }, | |
148 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | 117 | { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, |
149 | }; /* button_context_tree */ | 118 | { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE }, |
150 | 119 | ||
151 | static const struct button_mapping remote_button_context_tree[] = { | 120 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) |
152 | { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, | ||
153 | { ACTION_TREE_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, | ||
154 | |||
155 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | ||
156 | }; /* button_context_tree */ | 121 | }; /* button_context_tree */ |
157 | 122 | ||
158 | static const struct button_mapping button_context_listtree_scroll_without_combo[] = { | 123 | static const struct button_mapping button_context_listtree_scroll_with_combo[] = { |
159 | { ACTION_TREE_ROOT_INIT, BUTTON_REW|BUTTON_REPEAT, BUTTON_REW }, | 124 | { ACTION_NONE, BUTTON_DISPLAY, BUTTON_NONE }, |
160 | { ACTION_TREE_PGLEFT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, | 125 | { ACTION_TREE_PGLEFT, BUTTON_DISPLAY|BUTTON_LEFT, BUTTON_DISPLAY }, |
161 | { ACTION_TREE_PGRIGHT, BUTTON_FF|BUTTON_REPEAT, BUTTON_NONE }, | 126 | { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_DISPLAY|BUTTON_LEFT }, |
162 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | 127 | { ACTION_TREE_PGLEFT, BUTTON_DISPLAY|BUTTON_LEFT, BUTTON_LEFT|BUTTON_REL }, |
163 | }; /* button_context_listtree_scroll_without_combo */ | 128 | { ACTION_TREE_ROOT_INIT, BUTTON_DISPLAY|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_DISPLAY|BUTTON_LEFT }, |
129 | { ACTION_TREE_PGLEFT, BUTTON_DISPLAY|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
130 | { ACTION_TREE_PGRIGHT, BUTTON_DISPLAY|BUTTON_RIGHT, BUTTON_DISPLAY }, | ||
131 | { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_DISPLAY|BUTTON_RIGHT }, | ||
132 | { ACTION_TREE_PGRIGHT, BUTTON_DISPLAY|BUTTON_RIGHT, BUTTON_RIGHT|BUTTON_REL }, | ||
133 | { ACTION_TREE_PGRIGHT, BUTTON_DISPLAY|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
164 | 134 | ||
165 | static const struct button_mapping remote_button_context_listtree_scroll_without_combo[] = { | ||
166 | { ACTION_TREE_ROOT_INIT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW }, | ||
167 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
168 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
169 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | 135 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), |
170 | }; /* button_context_listtree_scroll_without_combo */ | 136 | }; |
171 | 137 | ||
172 | static const struct button_mapping button_context_listtree_scroll_with_combo[] = { | 138 | static const struct button_mapping button_context_listtree_scroll_without_combo[] = { |
173 | { ACTION_LISTTREE_PGUP, BUTTON_REW|BUTTON_REPEAT, BUTTON_REW }, | 139 | { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, |
174 | { ACTION_LISTTREE_PGDOWN, BUTTON_FF|BUTTON_REPEAT, BUTTON_FF }, | 140 | { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, |
175 | { ACTION_TREE_PGLEFT, BUTTON_REW|BUTTON_PLAY, BUTTON_PLAY }, | 141 | { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, |
176 | { ACTION_TREE_PGLEFT, BUTTON_REW|BUTTON_REL, BUTTON_REW|BUTTON_PLAY }, | 142 | { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, |
177 | { ACTION_TREE_PGLEFT, BUTTON_REW|BUTTON_PLAY, BUTTON_REW|BUTTON_REL }, | 143 | { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, |
178 | { ACTION_TREE_ROOT_INIT, BUTTON_REW|BUTTON_PLAY|BUTTON_REPEAT, BUTTON_REW|BUTTON_PLAY }, | 144 | { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, |
179 | { ACTION_TREE_PGLEFT, BUTTON_REW|BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | 145 | { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, |
180 | { ACTION_TREE_PGRIGHT, BUTTON_FF|BUTTON_PLAY, BUTTON_PLAY }, | 146 | { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, |
181 | { ACTION_TREE_PGRIGHT, BUTTON_FF|BUTTON_REL, BUTTON_FF|BUTTON_PLAY }, | 147 | { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, |
182 | { ACTION_TREE_PGRIGHT, BUTTON_FF|BUTTON_PLAY, BUTTON_FF|BUTTON_REL }, | ||
183 | { ACTION_TREE_PGRIGHT, BUTTON_FF|BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | ||
184 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | ||
185 | }; /* button_context_listtree_scroll_with_combo */ | ||
186 | |||
187 | static const struct button_mapping remote_button_context_listtree_scroll_with_combo[] = { | ||
188 | { ACTION_LISTTREE_PGUP, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW }, | ||
189 | { ACTION_LISTTREE_PGDOWN, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF }, | ||
190 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_RC_PLAY, BUTTON_RC_PLAY }, | ||
191 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_RC_PLAY }, | ||
192 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_RC_PLAY, BUTTON_RC_REW|BUTTON_REL }, | ||
193 | { ACTION_TREE_ROOT_INIT, BUTTON_RC_REW|BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_REW|BUTTON_RC_PLAY }, | ||
194 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | ||
195 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_RC_PLAY, BUTTON_RC_PLAY }, | ||
196 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_RC_PLAY }, | ||
197 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_RC_PLAY, BUTTON_RC_FF|BUTTON_REL }, | ||
198 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | ||
199 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | 148 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), |
200 | }; /* button_context_listtree_scroll_with_combo */ | 149 | }; |
150 | |||
151 | static const struct button_mapping button_context_settings[] = { | ||
152 | { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, | ||
153 | { ACTION_SETTINGS_INCREPEAT,BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
154 | { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, | ||
155 | { ACTION_SETTINGS_DECREPEAT,BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
156 | { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, | ||
157 | { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
158 | { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, | ||
159 | { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
160 | { ACTION_SETTINGS_RESET, BUTTON_DISPLAY, BUTTON_NONE }, | ||
161 | |||
162 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
163 | }; /* button_context_settings */ | ||
164 | |||
165 | static const struct button_mapping button_context_settings_right_is_inc[] = { | ||
166 | { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, | ||
167 | { ACTION_SETTINGS_INCREPEAT,BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
168 | { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, | ||
169 | { ACTION_SETTINGS_DECREPEAT,BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
170 | { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, | ||
171 | { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
172 | { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, | ||
173 | { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
174 | { ACTION_SETTINGS_RESET, BUTTON_DISPLAY, BUTTON_NONE }, | ||
175 | |||
176 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
177 | }; /* button_context_settingsgraphical */ | ||
201 | 178 | ||
202 | static const struct button_mapping button_context_yesno[] = { | 179 | static const struct button_mapping button_context_yesno[] = { |
203 | { ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE }, | 180 | { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE }, |
204 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | 181 | |
182 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
205 | }; /* button_context_settings_yesno */ | 183 | }; /* button_context_settings_yesno */ |
206 | 184 | ||
207 | static const struct button_mapping button_context_quickscreen[] = { | 185 | static const struct button_mapping button_context_colorchooser[] = { |
208 | { ACTION_QS_DOWNINV, BUTTON_SCROLL_UP, BUTTON_NONE }, | 186 | { ACTION_STD_OK, BUTTON_DISPLAY|BUTTON_REL, BUTTON_NONE }, |
209 | { ACTION_QS_DOWNINV, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
210 | { ACTION_QS_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | ||
211 | { ACTION_QS_DOWN, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
212 | { ACTION_QS_LEFT, BUTTON_REW, BUTTON_NONE }, | ||
213 | { ACTION_QS_LEFT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
214 | { ACTION_QS_RIGHT, BUTTON_FF, BUTTON_NONE }, | ||
215 | { ACTION_QS_RIGHT, BUTTON_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
216 | |||
217 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | ||
218 | }; /* button_context_quickscreen */ | ||
219 | 187 | ||
220 | static const struct button_mapping remote_button_context_quickscreen[] = { | 188 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), |
221 | { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP, BUTTON_NONE }, | 189 | }; /* button_context_colorchooser */ |
222 | { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
223 | { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
224 | { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
225 | { ACTION_QS_LEFT, BUTTON_RC_REW, BUTTON_NONE }, | ||
226 | { ACTION_QS_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
227 | { ACTION_QS_RIGHT, BUTTON_RC_FF, BUTTON_NONE }, | ||
228 | { ACTION_QS_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
229 | |||
230 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | ||
231 | }; /* button_context_quickscreen */ | ||
232 | 190 | ||
233 | static const struct button_mapping button_context_settings_right_is_inc[] = { | 191 | static const struct button_mapping button_context_eq[] = { |
234 | { ACTION_SETTINGS_INC, BUTTON_SCROLL_UP, BUTTON_NONE }, | 192 | { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, |
235 | { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
236 | { ACTION_SETTINGS_DEC, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | ||
237 | { ACTION_SETTINGS_DECREPEAT, BUTTON_SCROLL_DOWN|BUTTON_REPEAT,BUTTON_NONE }, | ||
238 | { ACTION_STD_PREV, BUTTON_REW, BUTTON_NONE }, | ||
239 | { ACTION_STD_PREVREPEAT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
240 | { ACTION_STD_NEXT, BUTTON_FF, BUTTON_NONE }, | ||
241 | { ACTION_STD_NEXTREPEAT, BUTTON_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
242 | { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, | ||
243 | { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, | ||
244 | { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, | ||
245 | { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, | ||
246 | 193 | ||
247 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | 194 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), |
248 | }; /* button_context_settings_right_is_inc */ | 195 | }; /* button_context_eq */ |
196 | |||
197 | /** Bookmark Screen **/ | ||
198 | static const struct button_mapping button_context_bmark[] = { | ||
199 | { ACTION_BMS_DELETE, BUTTON_DISPLAY, BUTTON_NONE }, | ||
200 | |||
201 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | ||
202 | }; /* button_context_bmark */ | ||
203 | |||
204 | static const struct button_mapping button_context_time[] = { | ||
205 | { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, | ||
206 | { ACTION_STD_OK, BUTTON_DISPLAY, BUTTON_NONE }, | ||
207 | |||
208 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), | ||
209 | }; /* button_context_time */ | ||
210 | |||
211 | static const struct button_mapping button_context_quickscreen[] = { | ||
212 | { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, | ||
213 | { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
214 | { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
215 | { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
216 | { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
217 | { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
218 | { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
219 | { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
220 | { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, | ||
221 | |||
222 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
223 | }; /* button_context_quickscreen */ | ||
249 | 224 | ||
250 | static const struct button_mapping button_context_pitchscreen[] = { | 225 | static const struct button_mapping button_context_pitchscreen[] = { |
251 | { ACTION_PS_INC_SMALL, BUTTON_SCROLL_UP, BUTTON_NONE }, | 226 | { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, |
252 | { ACTION_PS_INC_BIG, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | 227 | { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, |
253 | { ACTION_PS_DEC_SMALL, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | 228 | { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, |
254 | { ACTION_PS_DEC_BIG, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | 229 | { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, |
255 | { ACTION_PS_NUDGE_LEFT, BUTTON_REW, BUTTON_NONE }, | 230 | { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, |
256 | { ACTION_PS_NUDGE_LEFTOFF, BUTTON_REW|BUTTON_REL, BUTTON_NONE }, | 231 | { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, |
257 | { ACTION_PS_NUDGE_RIGHT, BUTTON_FF, BUTTON_NONE }, | 232 | { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, |
258 | { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_FF|BUTTON_REL, BUTTON_NONE }, | 233 | { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, |
259 | { ACTION_PS_TOGGLE_MODE, BUTTON_POWER, BUTTON_NONE }, | 234 | { ACTION_PS_TOGGLE_MODE, BUTTON_SELECT, BUTTON_NONE }, |
260 | { ACTION_PS_RESET, BUTTON_PLAY, BUTTON_NONE }, | 235 | { ACTION_PS_RESET, BUTTON_DISPLAY, BUTTON_NONE }, |
261 | { ACTION_PS_EXIT, BUTTON_LEFT, BUTTON_NONE }, | 236 | { ACTION_PS_EXIT, BUTTON_MENU, BUTTON_NONE }, |
262 | 237 | ||
263 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | 238 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) |
264 | }; /* button_context_pitchscreen */ | 239 | }; /* button_context_pitchcreen */ |
265 | |||
266 | static const struct button_mapping remote_button_context_pitchscreen[] = { | ||
267 | { ACTION_PS_INC_SMALL, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
268 | { ACTION_PS_INC_BIG, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
269 | { ACTION_PS_DEC_SMALL, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
270 | { ACTION_PS_DEC_BIG, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
271 | { ACTION_PS_NUDGE_LEFT, BUTTON_RC_REW, BUTTON_NONE }, | ||
272 | { ACTION_PS_NUDGE_LEFTOFF, BUTTON_RC_REW|BUTTON_REL, BUTTON_NONE }, | ||
273 | { ACTION_PS_NUDGE_RIGHT, BUTTON_RC_FF, BUTTON_NONE }, | ||
274 | { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RC_FF|BUTTON_REL, BUTTON_NONE }, | ||
275 | { ACTION_PS_RESET, BUTTON_RC_PLAY, BUTTON_NONE }, | ||
276 | |||
277 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | ||
278 | }; /* button_context_pitchscreen */ | ||
279 | 240 | ||
280 | static const struct button_mapping button_context_keyboard[] = { | 241 | static const struct button_mapping button_context_keyboard[] = { |
281 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, | 242 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, |
282 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | 243 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, |
283 | { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | 244 | { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, |
284 | { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | 245 | { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, |
285 | { ACTION_KBD_SELECT, BUTTON_REW, BUTTON_NONE }, | 246 | { ACTION_KBD_CURSOR_LEFT, BUTTON_DISPLAY|BUTTON_LEFT, BUTTON_NONE }, |
286 | { ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | 247 | { ACTION_KBD_CURSOR_LEFT, BUTTON_DISPLAY|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, |
287 | { ACTION_KBD_ABORT, BUTTON_POWER, BUTTON_NONE }, | 248 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_DISPLAY|BUTTON_RIGHT, BUTTON_NONE }, |
288 | { ACTION_KBD_UP, BUTTON_SCROLL_UP, BUTTON_NONE }, | 249 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_DISPLAY|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, |
289 | { ACTION_KBD_UP, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | 250 | { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE }, |
290 | { ACTION_KBD_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | 251 | { ACTION_KBD_PAGE_FLIP, BUTTON_DISPLAY|BUTTON_MENU, BUTTON_NONE }, |
291 | { ACTION_KBD_DOWN, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | 252 | { ACTION_KBD_DONE, BUTTON_DISPLAY|BUTTON_REL, BUTTON_DISPLAY }, |
292 | { ACTION_KBD_MORSE_INPUT, BUTTON_REW|BUTTON_PLAY, BUTTON_NONE }, | 253 | { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, |
293 | { ACTION_KBD_MORSE_SELECT, BUTTON_REW|BUTTON_REL, BUTTON_NONE }, | 254 | { ACTION_KBD_BACKSPACE, BUTTON_MENU, BUTTON_NONE }, |
255 | { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, | ||
256 | { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, | ||
257 | { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
258 | { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
259 | { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
260 | { ACTION_KBD_MORSE_INPUT, BUTTON_DISPLAY|BUTTON_POWER, BUTTON_NONE }, | ||
261 | { ACTION_KBD_MORSE_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, | ||
294 | 262 | ||
295 | LAST_ITEM_IN_LIST | 263 | LAST_ITEM_IN_LIST |
296 | }; /* button_context_keyboard */ | 264 | }; /* button_context_keyboard */ |
297 | 265 | ||
298 | static const struct button_mapping button_context_bmark[] = { | 266 | /***************************************************************************** |
299 | { ACTION_BMS_DELETE, BUTTON_REW, BUTTON_NONE }, | 267 | * Remote control mappings |
300 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | 268 | *****************************************************************************/ |
301 | }; /* button_context_bmark */ | ||
302 | 269 | ||
303 | const struct button_mapping button_context_recscreen[] = { | 270 | static const struct button_mapping remote_button_context_standard[] = { |
304 | { ACTION_REC_PAUSE, BUTTON_PLAY, BUTTON_NONE }, | 271 | { ACTION_STD_PREV, BUTTON_RC_PLAY, BUTTON_NONE }, |
305 | 272 | { ACTION_STD_PREVREPEAT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | |
306 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) | 273 | { ACTION_STD_NEXT, BUTTON_RC_DISPLAY, BUTTON_NONE }, |
307 | }; /* button_context_recscreen */ | 274 | { ACTION_STD_NEXTREPEAT, BUTTON_RC_DISPLAY|BUTTON_REPEAT,BUTTON_NONE }, |
275 | { ACTION_STD_CANCEL, BUTTON_RC_REW, BUTTON_NONE }, | ||
276 | { ACTION_STD_OK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, | ||
277 | { ACTION_STD_CONTEXT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF }, | ||
278 | { ACTION_STD_MENU, BUTTON_RC_FAV, BUTTON_NONE }, | ||
279 | |||
280 | LAST_ITEM_IN_LIST | ||
281 | }; | ||
282 | |||
283 | static const struct button_mapping remote_button_context_wps[] = { | ||
284 | { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, | ||
285 | |||
286 | { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, | ||
287 | { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW }, | ||
288 | |||
289 | { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
290 | { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
291 | { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT }, | ||
292 | { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT }, | ||
293 | |||
294 | { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, | ||
295 | { ACTION_WPS_MENU, BUTTON_RC_FAV, BUTTON_NONE }, | ||
296 | |||
297 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
298 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
299 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
300 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
301 | |||
302 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
303 | }; | ||
304 | |||
305 | static const struct button_mapping remote_button_context_tree[] = { | ||
306 | { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, | ||
307 | { ACTION_TREE_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, | ||
308 | { ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
309 | |||
310 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
311 | }; | ||
308 | 312 | ||
309 | static const struct button_mapping* get_context_mapping_remote( int context ) | 313 | static const struct button_mapping* get_context_mapping_remote( int context ) |
310 | { | 314 | { |
311 | context ^= CONTEXT_REMOTE; | 315 | context ^= CONTEXT_REMOTE; |
312 | 316 | ||
313 | switch (context) | 317 | switch (context) |
314 | { | 318 | { |
315 | case CONTEXT_STD: | ||
316 | case CONTEXT_MAINMENU: | ||
317 | return remote_button_context_standard; | ||
318 | |||
319 | case CONTEXT_WPS: | 319 | case CONTEXT_WPS: |
320 | return remote_button_context_wps; | 320 | return remote_button_context_wps; |
321 | 321 | case CONTEXT_MAINMENU: | |
322 | case CONTEXT_LIST: | ||
323 | return remote_button_context_list; | ||
324 | case CONTEXT_TREE: | 322 | case CONTEXT_TREE: |
325 | if (global_settings.hold_lr_for_scroll_in_list) | ||
326 | return remote_button_context_listtree_scroll_without_combo; | ||
327 | else | ||
328 | return remote_button_context_listtree_scroll_with_combo; | ||
329 | case CONTEXT_CUSTOM|CONTEXT_TREE: | ||
330 | return remote_button_context_tree; | 323 | return remote_button_context_tree; |
331 | |||
332 | case CONTEXT_QUICKSCREEN: | ||
333 | return remote_button_context_quickscreen; | ||
334 | case CONTEXT_PITCHSCREEN: | ||
335 | return remote_button_context_pitchscreen; | ||
336 | case CONTEXT_RECSCREEN: | ||
337 | return button_context_recscreen; | ||
338 | |||
339 | default: | ||
340 | return remote_button_context_standard; | ||
341 | } | 324 | } |
325 | return remote_button_context_standard; | ||
342 | } | 326 | } |
343 | 327 | ||
344 | /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ | ||
345 | const struct button_mapping* get_context_mapping(int context) | 328 | const struct button_mapping* get_context_mapping(int context) |
346 | { | 329 | { |
347 | if (context&CONTEXT_REMOTE) | 330 | if (context&CONTEXT_REMOTE) |
@@ -351,17 +334,16 @@ const struct button_mapping* get_context_mapping(int context) | |||
351 | { | 334 | { |
352 | case CONTEXT_STD: | 335 | case CONTEXT_STD: |
353 | return button_context_standard; | 336 | return button_context_standard; |
354 | |||
355 | case CONTEXT_WPS: | 337 | case CONTEXT_WPS: |
356 | return button_context_wps; | 338 | return button_context_wps; |
357 | 339 | ||
358 | case CONTEXT_LIST: | 340 | case CONTEXT_LIST: |
359 | return button_context_list; | 341 | return button_context_list; |
360 | case CONTEXT_TREE: | ||
361 | case CONTEXT_MAINMENU: | 342 | case CONTEXT_MAINMENU: |
343 | case CONTEXT_TREE: | ||
362 | if (global_settings.hold_lr_for_scroll_in_list) | 344 | if (global_settings.hold_lr_for_scroll_in_list) |
363 | return button_context_listtree_scroll_without_combo; | 345 | return button_context_listtree_scroll_without_combo; |
364 | else | 346 | else |
365 | return button_context_listtree_scroll_with_combo; | 347 | return button_context_listtree_scroll_with_combo; |
366 | case CONTEXT_CUSTOM|CONTEXT_TREE: | 348 | case CONTEXT_CUSTOM|CONTEXT_TREE: |
367 | return button_context_tree; | 349 | return button_context_tree; |
@@ -369,13 +351,18 @@ const struct button_mapping* get_context_mapping(int context) | |||
369 | case CONTEXT_SETTINGS: | 351 | case CONTEXT_SETTINGS: |
370 | return button_context_settings; | 352 | return button_context_settings; |
371 | case CONTEXT_CUSTOM|CONTEXT_SETTINGS: | 353 | case CONTEXT_CUSTOM|CONTEXT_SETTINGS: |
354 | return button_context_settings_right_is_inc; | ||
355 | |||
372 | case CONTEXT_SETTINGS_COLOURCHOOSER: | 356 | case CONTEXT_SETTINGS_COLOURCHOOSER: |
357 | return button_context_colorchooser; | ||
373 | case CONTEXT_SETTINGS_EQ: | 358 | case CONTEXT_SETTINGS_EQ: |
359 | return button_context_eq; | ||
360 | |||
374 | case CONTEXT_SETTINGS_TIME: | 361 | case CONTEXT_SETTINGS_TIME: |
375 | return button_context_settings_right_is_inc; | 362 | return button_context_time; |
376 | 363 | ||
377 | case CONTEXT_YESNOSCREEN: | 364 | case CONTEXT_YESNOSCREEN: |
378 | return button_context_yesno; | 365 | return button_context_yesno; |
379 | case CONTEXT_BOOKMARKSCREEN: | 366 | case CONTEXT_BOOKMARKSCREEN: |
380 | return button_context_bmark; | 367 | return button_context_bmark; |
381 | case CONTEXT_QUICKSCREEN: | 368 | case CONTEXT_QUICKSCREEN: |
@@ -384,11 +371,6 @@ const struct button_mapping* get_context_mapping(int context) | |||
384 | return button_context_pitchscreen; | 371 | return button_context_pitchscreen; |
385 | case CONTEXT_KEYBOARD: | 372 | case CONTEXT_KEYBOARD: |
386 | return button_context_keyboard; | 373 | return button_context_keyboard; |
387 | case CONTEXT_RECSCREEN: | 374 | } |
388 | return button_context_recscreen; | ||
389 | |||
390 | default: | ||
391 | return button_context_standard; | ||
392 | } | ||
393 | return button_context_standard; | 375 | return button_context_standard; |
394 | } | 376 | } |
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c index ce90ad9004..85b65b26e4 100644 --- a/apps/plugins/lib/pluginlib_actions.c +++ b/apps/plugins/lib/pluginlib_actions.c | |||
@@ -73,7 +73,8 @@ const struct button_mapping generic_directions[] = | |||
73 | || (CONFIG_KEYPAD == ARCHOS_AV300_PAD) \ | 73 | || (CONFIG_KEYPAD == ARCHOS_AV300_PAD) \ |
74 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ | 74 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ |
75 | || (CONFIG_KEYPAD == SANSA_C200_PAD) \ | 75 | || (CONFIG_KEYPAD == SANSA_C200_PAD) \ |
76 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) | 76 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ |
77 | || (CONFIG_KEYPAD == MROBE100_PAD) | ||
77 | { PLA_UP, BUTTON_UP, BUTTON_NONE}, | 78 | { PLA_UP, BUTTON_UP, BUTTON_NONE}, |
78 | { PLA_DOWN, BUTTON_DOWN, BUTTON_NONE}, | 79 | { PLA_DOWN, BUTTON_DOWN, BUTTON_NONE}, |
79 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, | 80 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, |
@@ -112,8 +113,7 @@ const struct button_mapping generic_directions[] = | |||
112 | {PLA_DOWN_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, | 113 | {PLA_DOWN_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, |
113 | {PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, | 114 | {PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, |
114 | {PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, | 115 | {PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, |
115 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) \ | 116 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) |
116 | || (CONFIG_KEYPAD == MROBE100_PAD) | ||
117 | { PLA_UP, BUTTON_SCROLL_UP, BUTTON_NONE}, | 117 | { PLA_UP, BUTTON_SCROLL_UP, BUTTON_NONE}, |
118 | { PLA_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE}, | 118 | { PLA_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE}, |
119 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, | 119 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, |
@@ -150,10 +150,11 @@ const struct button_mapping generic_left_right_fire[] = | |||
150 | { | 150 | { |
151 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) \ | 151 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) \ |
152 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ | 152 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ |
153 | || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ | 153 | || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ |
154 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ | 154 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ |
155 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ | 155 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ |
156 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) | 156 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ |
157 | || (CONFIG_KEYPAD == MROBE100_PAD) | ||
157 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, | 158 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, |
158 | { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE}, | 159 | { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE}, |
159 | { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, | 160 | { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, |
@@ -205,8 +206,7 @@ const struct button_mapping generic_left_right_fire[] = | |||
205 | { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, | 206 | { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, |
206 | { PLA_FIRE, BUTTON_SELECT, BUTTON_NONE}, | 207 | { PLA_FIRE, BUTTON_SELECT, BUTTON_NONE}, |
207 | { PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_NONE}, | 208 | { PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_NONE}, |
208 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) \ | 209 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) |
209 | || (CONFIG_KEYPAD == MROBE100_PAD) | ||
210 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, | 210 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE}, |
211 | { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE}, | 211 | { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE}, |
212 | { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, | 212 | { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, |
@@ -312,8 +312,7 @@ const struct button_mapping generic_actions[] = | |||
312 | {PLA_MENU, BUTTON_DOWN, BUTTON_NONE}, | 312 | {PLA_MENU, BUTTON_DOWN, BUTTON_NONE}, |
313 | {PLA_FIRE, BUTTON_SELECT, BUTTON_NONE}, | 313 | {PLA_FIRE, BUTTON_SELECT, BUTTON_NONE}, |
314 | {PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, | 314 | {PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, |
315 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD \ | 315 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD |
316 | || (CONFIG_KEYPAD == MROBE100_PAD) | ||
317 | {PLA_QUIT, BUTTON_POWER, BUTTON_NONE}, | 316 | {PLA_QUIT, BUTTON_POWER, BUTTON_NONE}, |
318 | {PLA_START, BUTTON_PLAY, BUTTON_NONE}, | 317 | {PLA_START, BUTTON_PLAY, BUTTON_NONE}, |
319 | {PLA_MENU, BUTTON_FF, BUTTON_NONE}, | 318 | {PLA_MENU, BUTTON_FF, BUTTON_NONE}, |
@@ -331,6 +330,12 @@ const struct button_mapping generic_actions[] = | |||
331 | {PLA_MENU, BUTTON_RC_MODE, BUTTON_NONE}, | 330 | {PLA_MENU, BUTTON_RC_MODE, BUTTON_NONE}, |
332 | {PLA_FIRE, BUTTON_RC_HEART, BUTTON_NONE}, | 331 | {PLA_FIRE, BUTTON_RC_HEART, BUTTON_NONE}, |
333 | {PLA_FIRE_REPEAT, BUTTON_RC_HEART|BUTTON_REPEAT, BUTTON_NONE}, | 332 | {PLA_FIRE_REPEAT, BUTTON_RC_HEART|BUTTON_REPEAT, BUTTON_NONE}, |
333 | #elif CONFIG_KEYPAD == MROBE100_PAD | ||
334 | {PLA_QUIT, BUTTON_DISPLAY, BUTTON_NONE}, | ||
335 | {PLA_START, BUTTON_PLAY, BUTTON_NONE}, | ||
336 | {PLA_MENU, BUTTON_MENU, BUTTON_NONE}, | ||
337 | {PLA_FIRE, BUTTON_SELECT, BUTTON_NONE}, | ||
338 | {PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, | ||
334 | #elif (CONFIG_KEYPAD == COWOND2_PAD) | 339 | #elif (CONFIG_KEYPAD == COWOND2_PAD) |
335 | {PLA_QUIT, BUTTON_POWER, BUTTON_NONE}, | 340 | {PLA_QUIT, BUTTON_POWER, BUTTON_NONE}, |
336 | {PLA_START, BUTTON_UP, BUTTON_NONE}, | 341 | {PLA_START, BUTTON_UP, BUTTON_NONE}, |
@@ -347,14 +352,15 @@ const struct button_mapping generic_increase_decrease[] = | |||
347 | { | 352 | { |
348 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) \ | 353 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) \ |
349 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ | 354 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ |
350 | || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ | 355 | || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ |
351 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ | 356 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ |
352 | || (CONFIG_KEYPAD == RECORDER_PAD) \ | 357 | || (CONFIG_KEYPAD == RECORDER_PAD) \ |
353 | || (CONFIG_KEYPAD == ARCHOS_AV300_PAD) \ | 358 | || (CONFIG_KEYPAD == ARCHOS_AV300_PAD) \ |
354 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ | 359 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ |
355 | || (CONFIG_KEYPAD == ONDIO_PAD) \ | 360 | || (CONFIG_KEYPAD == ONDIO_PAD) \ |
356 | || (CONFIG_KEYPAD == COWOND2_PAD) \ | 361 | || (CONFIG_KEYPAD == COWOND2_PAD) \ |
357 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) | 362 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ |
363 | || (CONFIG_KEYPAD == MROBE100_PAD) | ||
358 | {PLA_INC, BUTTON_UP, BUTTON_NONE}, | 364 | {PLA_INC, BUTTON_UP, BUTTON_NONE}, |
359 | {PLA_DEC, BUTTON_DOWN, BUTTON_NONE}, | 365 | {PLA_DEC, BUTTON_DOWN, BUTTON_NONE}, |
360 | {PLA_INC_REPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE}, | 366 | {PLA_INC_REPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE}, |
@@ -375,8 +381,7 @@ const struct button_mapping generic_increase_decrease[] = | |||
375 | #elif CONFIG_KEYPAD == PLAYER_PAD | 381 | #elif CONFIG_KEYPAD == PLAYER_PAD |
376 | {PLA_INC, BUTTON_STOP, BUTTON_NONE}, | 382 | {PLA_INC, BUTTON_STOP, BUTTON_NONE}, |
377 | {PLA_DEC, BUTTON_PLAY, BUTTON_NONE}, | 383 | {PLA_DEC, BUTTON_PLAY, BUTTON_NONE}, |
378 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) \ | 384 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) |
379 | || (CONFIG_KEYPAD == MROBE100_PAD) | ||
380 | {PLA_INC, BUTTON_SCROLL_UP, BUTTON_NONE}, | 385 | {PLA_INC, BUTTON_SCROLL_UP, BUTTON_NONE}, |
381 | {PLA_DEC, BUTTON_SCROLL_DOWN, BUTTON_NONE}, | 386 | {PLA_DEC, BUTTON_SCROLL_DOWN, BUTTON_NONE}, |
382 | {PLA_INC_REPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE}, | 387 | {PLA_INC_REPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE}, |
diff --git a/firmware/target/arm/olympus/mrobe-100/button-mr100.c b/firmware/target/arm/olympus/mrobe-100/button-mr100.c index 49561cb8d7..43db2c5f6d 100644 --- a/firmware/target/arm/olympus/mrobe-100/button-mr100.c +++ b/firmware/target/arm/olympus/mrobe-100/button-mr100.c | |||
@@ -27,14 +27,562 @@ | |||
27 | #include "backlight-target.h" | 27 | #include "backlight-target.h" |
28 | #include "system.h" | 28 | #include "system.h" |
29 | 29 | ||
30 | void button_init_device(void) | 30 | #define LOGF_ENABLE |
31 | #include "logf.h" | ||
32 | |||
33 | /* Driver for the Synaptics Touchpad based on the "Synaptics Modular Embedded | ||
34 | Protocol: 3-Wire Interface Specification" documentation */ | ||
35 | |||
36 | #define ACK (GPIOD_INPUT_VAL & 0x1) | ||
37 | #define ACK_HI GPIOD_OUTPUT_VAL |= 0x1 | ||
38 | #define ACK_LO GPIOD_OUTPUT_VAL &= ~0x1 | ||
39 | |||
40 | #define CLK ((GPIOD_INPUT_VAL & 0x2) >> 1) | ||
41 | #define CLK_HI GPIOD_OUTPUT_VAL |= 0x2 | ||
42 | #define CLK_LO GPIOD_OUTPUT_VAL &= ~0x2 | ||
43 | |||
44 | #define DATA ((GPIOD_INPUT_VAL & 0x4) >> 2) | ||
45 | #define DATA_HI GPIOD_OUTPUT_EN |= 0x4; GPIOD_OUTPUT_VAL |= 0x4 | ||
46 | #define DATA_LO GPIOD_OUTPUT_EN |= 0x4; GPIOD_OUTPUT_VAL &= ~0x4 | ||
47 | |||
48 | #define LO 0 | ||
49 | #define HI 1 | ||
50 | |||
51 | #define STATUS_READY 1 | ||
52 | #define READ_RETRY 8 | ||
53 | #define READ_ERROR -1 | ||
54 | |||
55 | #define HELLO_HEADER 0x19 | ||
56 | #define HELLO_ID 0x1 | ||
57 | #define BUTTONS_HEADER 0x1a | ||
58 | #define BUTTONS_ID 0x9 | ||
59 | #define ABSOLUTE_HEADER 0x0b | ||
60 | |||
61 | static int syn_status = 0; | ||
62 | static int int_btn = BUTTON_NONE; | ||
63 | |||
64 | static int syn_wait_clk_change(unsigned int val) | ||
65 | { | ||
66 | int i; | ||
67 | |||
68 | for (i = 0; i < 10000; i++) | ||
69 | { | ||
70 | if (CLK == val) | ||
71 | return 1; | ||
72 | } | ||
73 | |||
74 | return 0; | ||
75 | } | ||
76 | |||
77 | static inline int syn_get_data(void) | ||
78 | { | ||
79 | GPIOD_OUTPUT_EN &= ~0x4; | ||
80 | return DATA; | ||
81 | } | ||
82 | |||
83 | static void syn_wait_guest_flush(void) | ||
84 | { | ||
85 | /* Flush receiving (flushee) state: | ||
86 | handshake until DATA goes high during P3 stage */ | ||
87 | if (CLK == LO) | ||
88 | { | ||
89 | ACK_HI; /* P1 -> P2 */ | ||
90 | syn_wait_clk_change(HI); /* P2 -> P3 */ | ||
91 | } | ||
92 | |||
93 | while (syn_get_data() == LO) | ||
94 | { | ||
95 | ACK_HI; /* P3 -> P0 */ | ||
96 | syn_wait_clk_change(LO); /* P0 -> P1 */ | ||
97 | ACK_LO; /* P1 -> P2 */ | ||
98 | syn_wait_clk_change(HI); /* P2 -> P3 */ | ||
99 | } | ||
100 | |||
101 | /* Continue handshaking until back to P0 */ | ||
102 | ACK_HI; /* P3 -> P0 */ | ||
103 | } | ||
104 | |||
105 | static void syn_flush(void) | ||
106 | { | ||
107 | int i; | ||
108 | |||
109 | logf("syn_flush..."); | ||
110 | |||
111 | /* Flusher holds DATA low for at least 36 handshake cycles */ | ||
112 | DATA_LO; | ||
113 | |||
114 | for (i = 0; i < 36; i++) | ||
115 | { | ||
116 | syn_wait_clk_change(LO); /* P0 -> P1 */ | ||
117 | ACK_LO; /* P1 -> P2 */ | ||
118 | syn_wait_clk_change(HI); /* P2 -> P3 */ | ||
119 | ACK_HI; /* P3 -> P0 */ | ||
120 | } | ||
121 | |||
122 | /* Raise DATA in P1 stage */ | ||
123 | syn_wait_clk_change(LO); /* P0 -> P1 */ | ||
124 | DATA_HI; | ||
125 | |||
126 | /* After a flush, the flushing device enters a flush-receiving (flushee) | ||
127 | state */ | ||
128 | syn_wait_guest_flush(); | ||
129 | } | ||
130 | |||
131 | static int syn_send_data(int *data, int len) | ||
132 | { | ||
133 | int i, bit; | ||
134 | int parity = 0; | ||
135 | |||
136 | logf("syn_send_data..."); | ||
137 | |||
138 | /* 1. Lower DATA line to issue a request-to-send to guest */ | ||
139 | DATA_LO; | ||
140 | |||
141 | /* 2. Wait for guest to lower CLK */ | ||
142 | syn_wait_clk_change(LO); | ||
143 | |||
144 | /* 3. Lower ACK (with DATA still low) */ | ||
145 | ACK_LO; | ||
146 | |||
147 | /* 4. Wait for guest to raise CLK */ | ||
148 | syn_wait_clk_change(HI); | ||
149 | |||
150 | /* 5. Send data */ | ||
151 | for (i = 0; i < len; i++) | ||
152 | { | ||
153 | logf(" sending byte: %d", data[i]); | ||
154 | |||
155 | bit = 0; | ||
156 | while (bit < 8) | ||
157 | { | ||
158 | /* 5a. Drive data low if bit is 0, or high if bit is 1 */ | ||
159 | if (data[i] & (1 << bit)) | ||
160 | { | ||
161 | DATA_HI; | ||
162 | parity++; | ||
163 | } | ||
164 | else | ||
165 | { | ||
166 | DATA_LO; | ||
167 | } | ||
168 | bit++; | ||
169 | |||
170 | /* 5b. Invert ACK to indicate that the data bit is ready */ | ||
171 | ACK_HI; | ||
172 | |||
173 | /* 5c. Wait for guest to invert CLK */ | ||
174 | syn_wait_clk_change(LO); | ||
175 | |||
176 | /* Repeat for next bit */ | ||
177 | if (data[i] & (1 << bit)) | ||
178 | { | ||
179 | DATA_HI; | ||
180 | parity++; | ||
181 | } | ||
182 | else | ||
183 | { | ||
184 | DATA_LO; | ||
185 | } | ||
186 | bit++; | ||
187 | |||
188 | ACK_LO; | ||
189 | |||
190 | syn_wait_clk_change(HI); | ||
191 | } | ||
192 | } | ||
193 | |||
194 | /* 7. Transmission termination sequence: */ | ||
195 | /* 7a. Host may put parity bit on DATA. Hosts that do not generate | ||
196 | parity should set DATA high. Parity is 1 if there's an odd | ||
197 | number of '1' bits, or 0 if there's an even number of '1' bits. */ | ||
198 | parity = parity % 2; | ||
199 | logf(" send parity = %d", parity); | ||
200 | if (parity) | ||
201 | { | ||
202 | DATA_HI; | ||
203 | } | ||
204 | else | ||
205 | { | ||
206 | DATA_LO; | ||
207 | } | ||
208 | |||
209 | /* 7b. Raise ACK to indicate that the optional parity bit is ready */ | ||
210 | ACK_HI; | ||
211 | |||
212 | /* 7c. Guest lowers CLK */ | ||
213 | syn_wait_clk_change(LO); | ||
214 | |||
215 | /* 7d. Pull DATA high (if parity bit was 0) */ | ||
216 | DATA_HI; | ||
217 | |||
218 | /* 7e. Lower ACK to indicate that the stop bit is ready */ | ||
219 | ACK_LO; | ||
220 | |||
221 | /* 7f. Guest raises CLK */ | ||
222 | syn_wait_clk_change(HI); | ||
223 | |||
224 | /* 7g. If DATA is low, guest is flushing this transfer. Host should | ||
225 | enter the flushee state. */ | ||
226 | if (syn_get_data() == LO) | ||
227 | { | ||
228 | logf(" module flushing"); | ||
229 | syn_wait_guest_flush(); | ||
230 | return -1; | ||
231 | } | ||
232 | |||
233 | /* 7h. Host raises ACK and the link enters the idle state */ | ||
234 | ACK_HI; | ||
235 | |||
236 | return len; | ||
237 | } | ||
238 | |||
239 | static int syn_read_data(int *data, int data_len) | ||
31 | { | 240 | { |
32 | /* taken from the mr-100 bootloader (offset 0x1e72) */ | 241 | int i, len, bit, parity, tmp; |
33 | //~ DEV_EN |= 0x20000; /* enable the touchpad ?? */ | 242 | int *data_ptr; |
243 | |||
244 | logf("syn_read_data..."); | ||
245 | |||
246 | /* 1. Guest drives CLK low */ | ||
247 | if (CLK != LO) | ||
248 | return 0; | ||
249 | |||
250 | /* 1a. If the host is willing to receive a packet it lowers ACK */ | ||
251 | ACK_LO; | ||
252 | |||
253 | /* 2. Guest may issue a request-to-send by lowering DATA. If the | ||
254 | guest decides not to transmit a packet, it may abort the | ||
255 | transmission by not lowering DATA. */ | ||
256 | |||
257 | /* 3. The guest raises CLK */ | ||
258 | syn_wait_clk_change(HI); | ||
259 | |||
260 | /* 4. If the guest is still driving DATA low, the transfer is commited | ||
261 | to occur. Otherwise, the transfer is aborted. In either case, | ||
262 | the host raises ACK. */ | ||
263 | if (syn_get_data() == HI) | ||
264 | { | ||
265 | logf(" read abort"); | ||
266 | |||
267 | ACK_HI; | ||
268 | return READ_ERROR; | ||
269 | } | ||
270 | else | ||
271 | { | ||
272 | ACK_HI; | ||
273 | } | ||
274 | |||
275 | /* 5. Read the incoming data packet */ | ||
276 | i = 0; | ||
277 | len = 0; | ||
278 | parity = 0; | ||
279 | while (i <= len) | ||
280 | { | ||
281 | bit = 0; | ||
282 | |||
283 | if (i < data_len) | ||
284 | data_ptr = &data[i]; | ||
285 | else | ||
286 | data_ptr = &tmp; | ||
287 | |||
288 | *data_ptr = 0; | ||
289 | while (bit < 8) | ||
290 | { | ||
291 | /* 5b. Guset inverts CLK to indicate that data is ready */ | ||
292 | syn_wait_clk_change(LO); | ||
293 | |||
294 | /* 5d. Read the data bit from DATA */ | ||
295 | if (syn_get_data() == HI) | ||
296 | { | ||
297 | *data_ptr |= (1 << bit); | ||
298 | parity++; | ||
299 | } | ||
300 | bit++; | ||
34 | 301 | ||
302 | /* 5e. Invert ACK to indicate that data has been read */ | ||
303 | ACK_LO; | ||
304 | |||
305 | /* Repeat for next bit */ | ||
306 | syn_wait_clk_change(HI); | ||
307 | |||
308 | if (syn_get_data() == HI) | ||
309 | { | ||
310 | *data_ptr |= (1 << bit); | ||
311 | parity++; | ||
312 | } | ||
313 | bit++; | ||
314 | |||
315 | ACK_HI; | ||
316 | } | ||
317 | |||
318 | /* First byte is the packet header */ | ||
319 | if (i == 0) | ||
320 | { | ||
321 | /* Format control (bit 3) should be 1 */ | ||
322 | if (*data_ptr & 0x8) | ||
323 | { | ||
324 | /* Packet length is bits 0:2 */ | ||
325 | len = *data_ptr & 0x7; | ||
326 | logf(" packet length = %d", len); | ||
327 | } | ||
328 | else | ||
329 | { | ||
330 | logf(" invalid format ctrl bit"); | ||
331 | return READ_ERROR; | ||
332 | } | ||
333 | } | ||
334 | |||
335 | i++; | ||
336 | } | ||
337 | |||
338 | /* 7. Transmission termination cycle */ | ||
339 | /* 7a. The guest generates a parity bit on DATA */ | ||
340 | /* 7b. The host waits for guest to lower CLK */ | ||
341 | syn_wait_clk_change(LO); | ||
342 | |||
343 | /* 7c. The host verifies the parity bit is correct */ | ||
344 | parity = parity % 2; | ||
345 | logf(" parity check: %d / %d", syn_get_data(), parity); | ||
346 | /* TODO: parity error handling */ | ||
347 | |||
348 | /* 7d. The host lowers ACK */ | ||
349 | ACK_LO; | ||
350 | |||
351 | /* 7e. The host waits for the guest to raise CLK indicating | ||
352 | that the stop bit is ready */ | ||
353 | syn_wait_clk_change(HI); | ||
354 | |||
355 | /* 7f. The host reads DATA and verifies that it is 1 */ | ||
356 | if (syn_get_data() == LO) | ||
357 | { | ||
358 | logf(" framing error"); | ||
359 | |||
360 | ACK_HI; | ||
361 | return READ_ERROR; | ||
362 | } | ||
363 | |||
364 | ACK_HI; | ||
365 | |||
366 | return len; | ||
367 | } | ||
368 | |||
369 | static int syn_read_device(int *data, int len) | ||
370 | { | ||
371 | int i; | ||
372 | int ret = READ_ERROR; | ||
373 | |||
374 | for (i = 0; i < READ_RETRY; i++) | ||
375 | { | ||
376 | if (syn_wait_clk_change(LO)) | ||
377 | { | ||
378 | /* module is sending data */ | ||
379 | ret = syn_read_data(data, len); | ||
380 | if (ret != READ_ERROR) | ||
381 | return ret; | ||
382 | |||
383 | syn_flush(); | ||
384 | } | ||
385 | else | ||
386 | { | ||
387 | /* module is idle */ | ||
388 | return 0; | ||
389 | } | ||
390 | } | ||
391 | |||
392 | return ret; | ||
393 | } | ||
394 | |||
395 | static int syn_reset(void) | ||
396 | { | ||
397 | int val, id; | ||
398 | int data[2]; | ||
399 | |||
400 | logf("syn_reset..."); | ||
401 | |||
402 | /* reset module 0 */ | ||
403 | val = (0 << 4) | (1 << 3) | 0; | ||
404 | syn_send_data(&val, 1); | ||
405 | |||
406 | val = syn_read_device(data, 2); | ||
407 | if (val == 1) | ||
408 | { | ||
409 | val = data[0] & 0xff; /* packet header */ | ||
410 | id = (data[1] >> 4) & 0xf; /* packet id */ | ||
411 | if ((val == HELLO_HEADER) && (id == HELLO_ID)) | ||
412 | { | ||
413 | logf(" module 0 reset"); | ||
414 | return 1; | ||
415 | } | ||
416 | } | ||
417 | |||
418 | logf(" reset failed"); | ||
419 | return 0; | ||
420 | } | ||
421 | |||
422 | #if defined(ROCKBOX_HAS_LOGF) && defined(LOGF_ENABLE) | ||
423 | static void syn_info(void) | ||
424 | { | ||
425 | int i, val; | ||
426 | int data[8]; | ||
427 | |||
428 | logf("syn_info..."); | ||
429 | |||
430 | /* module base info */ | ||
431 | logf("module base info:"); | ||
432 | data[0] = (0 << 4) | (0 << 3) | 1; | ||
433 | data[1] = 0x80; | ||
434 | syn_send_data(data, 2); | ||
435 | val = syn_read_device(data, 8); | ||
436 | if (val > 0) | ||
437 | { | ||
438 | for (i = 0; i < 8; i++) | ||
439 | logf(" data[%d] = 0x%02x", i, data[i]); | ||
440 | } | ||
441 | |||
442 | /* module product info */ | ||
443 | logf("module product info:"); | ||
444 | data[0] = (0 << 4) | (0 << 3) | 1; | ||
445 | data[1] = 0x81; | ||
446 | syn_send_data(data, 2); | ||
447 | val = syn_read_device(data, 8); | ||
448 | if (val > 0) | ||
449 | { | ||
450 | for (i = 0; i < 8; i++) | ||
451 | logf(" data[%d] = 0x%02x", i, data[i]); | ||
452 | } | ||
453 | |||
454 | /* module serialization */ | ||
455 | logf("module serialization:"); | ||
456 | data[0] = (0 << 4) | (0 << 3) | 1; | ||
457 | data[1] = 0x82; | ||
458 | syn_send_data(data, 2); | ||
459 | val = syn_read_device(data, 8); | ||
460 | if (val > 0) | ||
461 | { | ||
462 | for (i = 0; i < 8; i++) | ||
463 | logf(" data[%d] = 0x%02x", i, data[i]); | ||
464 | } | ||
465 | |||
466 | /* 1-D sensor info */ | ||
467 | logf("1-d sensor info:"); | ||
468 | data[0] = (0 << 4) | (0 << 3) | 1; | ||
469 | data[1] = 0x80 + 0x20; | ||
470 | syn_send_data(data, 2); | ||
471 | val = syn_read_device(data, 8); | ||
472 | if (val > 0) | ||
473 | { | ||
474 | for (i = 0; i < 8; i++) | ||
475 | logf(" data[%d] = 0x%02x", i, data[i]); | ||
476 | } | ||
477 | } | ||
478 | #endif | ||
479 | |||
480 | void button_init_device(void) | ||
481 | { | ||
35 | /* enable touchpad leds */ | 482 | /* enable touchpad leds */ |
36 | GPIOA_ENABLE |= 0xff; | 483 | GPIOA_ENABLE |= BUTTONLIGHT_ALL; |
37 | GPIOA_OUTPUT_EN |= BUTTONLIGHT_ALL; | 484 | GPIOA_OUTPUT_EN |= BUTTONLIGHT_ALL; |
485 | |||
486 | /* enable touchpad */ | ||
487 | GPO32_ENABLE |= 0x40000000; | ||
488 | GPO32_VAL &= ~0x40000000; | ||
489 | |||
490 | /* enable ACK, CLK, DATA lines */ | ||
491 | GPIOD_ENABLE |= (0x1 | 0x2 | 0x4); | ||
492 | |||
493 | GPIOD_OUTPUT_EN |= 0x1; /* ACK */ | ||
494 | GPIOD_OUTPUT_VAL |= 0x1; /* high */ | ||
495 | |||
496 | GPIOD_OUTPUT_EN &= ~0x2; /* CLK */ | ||
497 | |||
498 | GPIOD_OUTPUT_EN |= 0x4; /* DATA */ | ||
499 | GPIOD_OUTPUT_VAL |= 0x4; /* high */ | ||
500 | |||
501 | syn_flush(); | ||
502 | |||
503 | if (syn_reset()) | ||
504 | { | ||
505 | #if defined(ROCKBOX_HAS_LOGF) && defined(LOGF_ENABLE) | ||
506 | syn_info(); | ||
507 | #endif | ||
508 | |||
509 | syn_status = STATUS_READY; | ||
510 | |||
511 | /* enable interrupts */ | ||
512 | GPIOD_INT_LEV &= ~0x2; | ||
513 | GPIOD_INT_CLR |= 0x2; | ||
514 | GPIOD_INT_EN |= 0x2; | ||
515 | |||
516 | CPU_INT_EN |= HI_MASK; | ||
517 | CPU_HI_INT_EN |= GPIO0_MASK; | ||
518 | } | ||
519 | } | ||
520 | |||
521 | /* | ||
522 | * Button interrupt handler | ||
523 | */ | ||
524 | void button_int(void) | ||
525 | { | ||
526 | int data[4]; | ||
527 | int val, id; | ||
528 | |||
529 | int_btn = BUTTON_NONE; | ||
530 | |||
531 | if (syn_status == STATUS_READY) | ||
532 | { | ||
533 | /* disable interrupt while we read the touchpad */ | ||
534 | GPIOD_INT_EN &= ~0x2; | ||
535 | |||
536 | val = syn_read_device(data, 4); | ||
537 | if (val > 0) | ||
538 | { | ||
539 | val = data[0] & 0xff; /* packet header */ | ||
540 | id = (data[1] >> 4) & 0xf; /* packet id */ | ||
541 | |||
542 | logf("button_read_device..."); | ||
543 | logf(" data[0] = 0x%08x", data[0]); | ||
544 | logf(" data[1] = 0x%08x", data[1]); | ||
545 | logf(" data[2] = 0x%08x", data[2]); | ||
546 | logf(" data[3] = 0x%08x", data[3]); | ||
547 | |||
548 | if ((val == BUTTONS_HEADER) && (id == BUTTONS_ID)) | ||
549 | { | ||
550 | /* Buttons packet - touched one of the 5 "buttons" */ | ||
551 | if (data[1] & 0x1) | ||
552 | int_btn |= BUTTON_PLAY; | ||
553 | if (data[1] & 0x2) | ||
554 | int_btn |= BUTTON_MENU; | ||
555 | if (data[1] & 0x4) | ||
556 | int_btn |= BUTTON_LEFT; | ||
557 | if (data[1] & 0x8) | ||
558 | int_btn |= BUTTON_DISPLAY; | ||
559 | if (data[2] & 0x1) | ||
560 | int_btn |= BUTTON_RIGHT; | ||
561 | |||
562 | /* An Absolute packet should follow which we ignore */ | ||
563 | val = syn_read_device(data, 4); | ||
564 | |||
565 | logf(" int_btn = 0x%04x", int_btn); | ||
566 | } | ||
567 | else if (val == ABSOLUTE_HEADER) | ||
568 | { | ||
569 | /* Absolute packet - the finger is on the vertical strip. | ||
570 | Position ranges from 1-4095, with 1 at the bottom. */ | ||
571 | val = ((data[1] >> 4) << 8) | data[2]; /* position */ | ||
572 | if ((val > 0) && (val <= 1365)) | ||
573 | int_btn |= BUTTON_DOWN; | ||
574 | else if ((val > 1365) && (val <= 2730)) | ||
575 | int_btn |= BUTTON_SELECT; | ||
576 | else if ((val > 2730) && (val <= 4095)) | ||
577 | int_btn |= BUTTON_UP; | ||
578 | } | ||
579 | } | ||
580 | |||
581 | /* re-enable interrupts */ | ||
582 | GPIOD_INT_LEV &= ~0x2; | ||
583 | GPIOD_INT_CLR |= 0x2; | ||
584 | GPIOD_INT_EN |= 0x2; | ||
585 | } | ||
38 | } | 586 | } |
39 | 587 | ||
40 | /* | 588 | /* |
@@ -42,11 +590,11 @@ void button_init_device(void) | |||
42 | */ | 590 | */ |
43 | int button_read_device(void) | 591 | int button_read_device(void) |
44 | { | 592 | { |
45 | int btn = BUTTON_NONE; | 593 | int btn = int_btn; |
46 | 594 | ||
47 | if(~GPIOA_INPUT_VAL & 0x40) | 595 | if (~GPIOA_INPUT_VAL & 0x40) |
48 | btn |= BUTTON_POWER; | 596 | btn |= BUTTON_POWER; |
49 | 597 | ||
50 | return btn; | 598 | return btn; |
51 | } | 599 | } |
52 | 600 | ||
diff --git a/firmware/target/arm/olympus/mrobe-100/button-target.h b/firmware/target/arm/olympus/mrobe-100/button-target.h index c7d9114004..78b37f6ba6 100644 --- a/firmware/target/arm/olympus/mrobe-100/button-target.h +++ b/firmware/target/arm/olympus/mrobe-100/button-target.h | |||
@@ -28,6 +28,7 @@ | |||
28 | bool button_hold(void); | 28 | bool button_hold(void); |
29 | void button_init_device(void); | 29 | void button_init_device(void); |
30 | int button_read_device(void); | 30 | int button_read_device(void); |
31 | void button_int(void); | ||
31 | 32 | ||
32 | #define POWEROFF_BUTTON BUTTON_POWER | 33 | #define POWEROFF_BUTTON BUTTON_POWER |
33 | #define POWEROFF_COUNT 10 | 34 | #define POWEROFF_COUNT 10 |
@@ -36,25 +37,33 @@ int button_read_device(void); | |||
36 | for the H10 keypad & remote. THESE ARE NOT CORRECT! */ | 37 | for the H10 keypad & remote. THESE ARE NOT CORRECT! */ |
37 | 38 | ||
38 | /* Main unit's buttons */ | 39 | /* Main unit's buttons */ |
39 | #define BUTTON_POWER 0x00000001 | 40 | #define BUTTON_PLAY 0x00000001 |
40 | #define BUTTON_LEFT 0x00000002 | 41 | #define BUTTON_MENU 0x00000002 |
41 | #define BUTTON_RIGHT 0x00000004 | 42 | #define BUTTON_LEFT 0x00000004 |
42 | #define BUTTON_REW 0x00000008 | 43 | #define BUTTON_DISPLAY 0x00000008 |
43 | #define BUTTON_PLAY 0x00000010 | 44 | #define BUTTON_RIGHT 0x00000010 |
44 | #define BUTTON_FF 0x00000020 | 45 | #define BUTTON_SELECT 0x00000020 |
45 | #define BUTTON_SCROLL_UP 0x00000040 | 46 | #define BUTTON_UP 0x00000040 |
46 | #define BUTTON_SCROLL_DOWN 0x00000080 | 47 | #define BUTTON_SLIDE_UP 0x00000080 |
47 | #define BUTTON_MAIN (BUTTON_POWER|BUTTON_O|BUTTON_BACK|BUTTON_REW\ | 48 | #define BUTTON_DOWN 0x00000100 |
48 | |BUTTON_PLAY|BUTTON_FF) | 49 | #define BUTTON_SLIDE_DOWN 0x00000200 |
50 | #define BUTTON_POWER 0x00000400 | ||
51 | #define BUTTON_MAIN (BUTTON_PLAY|BUTTON_MENU|BUTTON_LEFT|BUTTON_DISPLAY\ | ||
52 | |BUTTON_RIGHT|BUTTON_SELECT|BUTTON_UP|BUTTON_SLIDE_UP\ | ||
53 | |BUTTON_DOWN|BUTTON_SLIDE_DOWN|BUTTON_POWER) | ||
49 | 54 | ||
50 | /* Remote control's buttons */ | 55 | /* Remote control's buttons */ |
51 | #define BUTTON_RC_REW 0x00080000 | 56 | #define BUTTON_RC_PLAY 0x00010000 |
52 | #define BUTTON_RC_PLAY 0x00100000 | 57 | #define BUTTON_RC_REW 0x00020000 |
53 | #define BUTTON_RC_FF 0x00200000 | 58 | #define BUTTON_RC_FF 0x00040000 |
59 | #define BUTTON_RC_DISPLAY 0x00080000 | ||
60 | #define BUTTON_RC_FAV 0x00100000 | ||
61 | #define BUTTON_RC_MODE 0x00200000 | ||
54 | #define BUTTON_RC_VOL_UP 0x00400000 | 62 | #define BUTTON_RC_VOL_UP 0x00400000 |
55 | #define BUTTON_RC_VOL_DOWN 0x00800000 | 63 | #define BUTTON_RC_VOL_DOWN 0x00800000 |
56 | #define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN\ | 64 | #define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_REW|BUTTON_RC_FF|\ |
57 | |BUTTON_RC_REW|BUTTON_RC_FF) | 65 | |BUTTON_RC_DISPLAY|BUTTON_RC_FAV|BUTTON_RC_MODE\ |
66 | |BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN) | ||
58 | #define RC_POWEROFF_BUTTON BUTTON_RC_PLAY | 67 | #define RC_POWEROFF_BUTTON BUTTON_RC_PLAY |
59 | 68 | ||
60 | #endif /* _BUTTON_TARGET_H_ */ | 69 | #endif /* _BUTTON_TARGET_H_ */ |
diff --git a/firmware/target/arm/system-pp502x.c b/firmware/target/arm/system-pp502x.c index 0b5e9e1c13..3dd802a3ed 100644 --- a/firmware/target/arm/system-pp502x.c +++ b/firmware/target/arm/system-pp502x.c | |||
@@ -35,6 +35,9 @@ extern void microsd_int(void); /* Sansa E200 and C200 */ | |||
35 | extern void button_int(void); | 35 | extern void button_int(void); |
36 | extern void clickwheel_int(void); | 36 | extern void clickwheel_int(void); |
37 | #endif | 37 | #endif |
38 | #ifdef MROBE_100 | ||
39 | extern void button_int(void); | ||
40 | #endif | ||
38 | 41 | ||
39 | void irq(void) | 42 | void irq(void) |
40 | { | 43 | { |
@@ -66,6 +69,11 @@ void irq(void) | |||
66 | if (GPIOL_INT_STAT & 0x08) | 69 | if (GPIOL_INT_STAT & 0x08) |
67 | microsd_int(); | 70 | microsd_int(); |
68 | } | 71 | } |
72 | #elif defined(MROBE_100) | ||
73 | else if (CPU_HI_INT_STAT & GPIO0_MASK) { | ||
74 | if (GPIOD_INT_STAT & 0x2) | ||
75 | button_int(); | ||
76 | } | ||
69 | #endif | 77 | #endif |
70 | #ifdef HAVE_USBSTACK | 78 | #ifdef HAVE_USBSTACK |
71 | else if (CPU_INT_STAT & USB_MASK) { | 79 | else if (CPU_INT_STAT & USB_MASK) { |
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c index cea65c9fa6..0b347c9322 100644 --- a/uisimulator/sdl/button.c +++ b/uisimulator/sdl/button.c | |||
@@ -673,6 +673,15 @@ void button_event(int key, bool pressed) | |||
673 | break; | 673 | break; |
674 | 674 | ||
675 | #elif CONFIG_KEYPAD == MROBE100_PAD | 675 | #elif CONFIG_KEYPAD == MROBE100_PAD |
676 | case SDLK_KP1: | ||
677 | new_btn = BUTTON_DISPLAY; | ||
678 | break; | ||
679 | case SDLK_KP7: | ||
680 | new_btn = BUTTON_MENU; | ||
681 | break; | ||
682 | case SDLK_KP9: | ||
683 | new_btn = BUTTON_PLAY; | ||
684 | break; | ||
676 | case SDLK_KP4: | 685 | case SDLK_KP4: |
677 | case SDLK_LEFT: | 686 | case SDLK_LEFT: |
678 | new_btn = BUTTON_LEFT; | 687 | new_btn = BUTTON_LEFT; |
@@ -683,32 +692,21 @@ void button_event(int key, bool pressed) | |||
683 | break; | 692 | break; |
684 | case SDLK_KP8: | 693 | case SDLK_KP8: |
685 | case SDLK_UP: | 694 | case SDLK_UP: |
686 | new_btn = BUTTON_SCROLL_UP; | 695 | new_btn = BUTTON_UP; |
687 | break; | 696 | break; |
688 | case SDLK_KP2: | 697 | case SDLK_KP2: |
689 | case SDLK_DOWN: | 698 | case SDLK_DOWN: |
690 | new_btn = BUTTON_SCROLL_DOWN; | 699 | new_btn = BUTTON_DOWN; |
691 | break; | 700 | break; |
692 | case SDLK_KP_PLUS: | 701 | case SDLK_KP5: |
693 | case SDLK_F8: | 702 | case SDLK_SPACE: |
694 | new_btn = BUTTON_POWER; | 703 | new_btn = BUTTON_SELECT; |
695 | break; | 704 | break; |
705 | case SDLK_F8: | ||
696 | case SDLK_ESCAPE: | 706 | case SDLK_ESCAPE: |
697 | new_btn = BUTTON_POWER; | 707 | new_btn = BUTTON_POWER; |
698 | break; | 708 | break; |
699 | case SDLK_KP_DIVIDE: | 709 | |
700 | case SDLK_F1: | ||
701 | new_btn = BUTTON_REW; | ||
702 | break; | ||
703 | case SDLK_KP_MULTIPLY: | ||
704 | case SDLK_F2: | ||
705 | new_btn = BUTTON_FF; | ||
706 | break; | ||
707 | case SDLK_KP5: | ||
708 | case SDLK_SPACE: | ||
709 | new_btn = BUTTON_PLAY; | ||
710 | break; | ||
711 | |||
712 | #elif CONFIG_KEYPAD == COWOND2_PAD | 710 | #elif CONFIG_KEYPAD == COWOND2_PAD |
713 | case SDLK_KP4: | 711 | case SDLK_KP4: |
714 | case SDLK_LEFT: | 712 | case SDLK_LEFT: |