diff options
author | Barry Wardell <rockbox@barrywardell.net> | 2006-09-29 15:59:08 +0000 |
---|---|---|
committer | Barry Wardell <rockbox@barrywardell.net> | 2006-09-29 15:59:08 +0000 |
commit | b692fb11b3bb081f51a7bab7351ccbfc78df6617 (patch) | |
tree | 0ab0d56062d3865e17e9ec77d4da8c368195fc41 | |
parent | d9fe5a77b0ad3fb03e5381501e76c7f9a97ab944 (diff) | |
download | rockbox-b692fb11b3bb081f51a7bab7351ccbfc78df6617.tar.gz rockbox-b692fb11b3bb081f51a7bab7351ccbfc78df6617.zip |
Add support for H10 remote. Remote buttons have the same keymappings as their counterparts on the H10 itself, with vol-/vol+ being the same as scroll up/down.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11093 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/debug_menu.c | 6 | ||||
-rw-r--r-- | apps/keymaps/keymap-h10.c | 131 | ||||
-rwxr-xr-x | firmware/target/arm/iriver/h10/adc-h10.c | 4 | ||||
-rw-r--r-- | firmware/target/arm/iriver/h10/adc-target.h | 2 | ||||
-rw-r--r-- | firmware/target/arm/iriver/h10/button-h10.c | 47 | ||||
-rw-r--r-- | firmware/target/arm/iriver/h10/button-target.h | 16 |
6 files changed, 192 insertions, 14 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c index d0b9373d24..2cae418528 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c | |||
@@ -1125,11 +1125,11 @@ bool dbg_ports(void) | |||
1125 | lcd_puts(0, line++, buf); | 1125 | lcd_puts(0, line++, buf); |
1126 | #if defined(IRIVER_H10) || defined(IRIVER_H10_5GB) | 1126 | #if defined(IRIVER_H10) || defined(IRIVER_H10_5GB) |
1127 | line++; | 1127 | line++; |
1128 | snprintf(buf, sizeof(buf), "ADC_BATTERY: %02x", adc_read(ADC_BATTERY)); | 1128 | snprintf(buf, sizeof(buf), "ADC_BATTERY: %02x", adc_read(ADC_BATTERY)); |
1129 | lcd_puts(0, line++, buf); | 1129 | lcd_puts(0, line++, buf); |
1130 | snprintf(buf, sizeof(buf), "ADC_UNKNOWN_1: %02x", adc_read(ADC_UNKNOWN_1)); | 1130 | snprintf(buf, sizeof(buf), "ADC_UNKNOWN_1: %02x", adc_read(ADC_UNKNOWN_1)); |
1131 | lcd_puts(0, line++, buf); | 1131 | lcd_puts(0, line++, buf); |
1132 | snprintf(buf, sizeof(buf), "ADC_UNKNOWN_2: %02x", adc_read(ADC_UNKNOWN_2)); | 1132 | snprintf(buf, sizeof(buf), "ADC_REMOTE: %02x", adc_read(ADC_REMOTE)); |
1133 | lcd_puts(0, line++, buf); | 1133 | lcd_puts(0, line++, buf); |
1134 | snprintf(buf, sizeof(buf), "ADC_SCROLLPAD: %02x", adc_read(ADC_SCROLLPAD)); | 1134 | snprintf(buf, sizeof(buf), "ADC_SCROLLPAD: %02x", adc_read(ADC_SCROLLPAD)); |
1135 | lcd_puts(0, line++, buf); | 1135 | lcd_puts(0, line++, buf); |
diff --git a/apps/keymaps/keymap-h10.c b/apps/keymaps/keymap-h10.c index 1be904727e..7cced51951 100644 --- a/apps/keymaps/keymap-h10.c +++ b/apps/keymaps/keymap-h10.c | |||
@@ -52,6 +52,15 @@ const struct button_mapping button_context_standard[] = { | |||
52 | LAST_ITEM_IN_LIST | 52 | LAST_ITEM_IN_LIST |
53 | }; /* button_context_standard */ | 53 | }; /* button_context_standard */ |
54 | 54 | ||
55 | const struct button_mapping remote_button_context_standard[] = { | ||
56 | { ACTION_STD_PREV, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
57 | { ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
58 | { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
59 | { ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
60 | |||
61 | LAST_ITEM_IN_LIST | ||
62 | }; /* remote_button_context_standard */ | ||
63 | |||
55 | const struct button_mapping button_context_wps[] = { | 64 | const struct button_mapping button_context_wps[] = { |
56 | { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | 65 | { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, |
57 | { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT,BUTTON_PLAY }, | 66 | { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT,BUTTON_PLAY }, |
@@ -77,6 +86,27 @@ const struct button_mapping button_context_wps[] = { | |||
77 | LAST_ITEM_IN_LIST | 86 | LAST_ITEM_IN_LIST |
78 | }; /* button_context_wps */ | 87 | }; /* button_context_wps */ |
79 | 88 | ||
89 | const struct button_mapping remote_button_context_wps[] = { | ||
90 | { ACTION_WPS_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, | ||
91 | { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT,BUTTON_RC_PLAY }, | ||
92 | { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW}, | ||
93 | { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
94 | { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT }, | ||
95 | { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, | ||
96 | { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
97 | { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT }, | ||
98 | |||
99 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
100 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
101 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
102 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
103 | |||
104 | { ACTION_WPS_PITCHSCREEN, BUTTON_RC_PLAY|BUTTON_LEFT, BUTTON_RC_PLAY }, | ||
105 | { ACTION_WPS_ID3SCREEN, BUTTON_RC_PLAY|BUTTON_RIGHT, BUTTON_RC_PLAY }, | ||
106 | |||
107 | LAST_ITEM_IN_LIST | ||
108 | }; /* remote_button_context_wps */ | ||
109 | |||
80 | const struct button_mapping button_context_settings[] = { | 110 | const struct button_mapping button_context_settings[] = { |
81 | { ACTION_SETTINGS_INC, BUTTON_SCROLL_UP, BUTTON_NONE }, | 111 | { ACTION_SETTINGS_INC, BUTTON_SCROLL_UP, BUTTON_NONE }, |
82 | { ACTION_SETTINGS_INCREPEAT,BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | 112 | { ACTION_SETTINGS_INCREPEAT,BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, |
@@ -98,6 +128,13 @@ const struct button_mapping button_context_list[] = { | |||
98 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | 128 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) |
99 | }; /* button_context_list */ | 129 | }; /* button_context_list */ |
100 | 130 | ||
131 | const struct button_mapping remote_button_context_list[] = { | ||
132 | { ACTION_LISTTREE_PGUP, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW }, | ||
133 | { ACTION_LISTTREE_PGDOWN, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, | ||
134 | |||
135 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
136 | }; /* button_context_list */ | ||
137 | |||
101 | const struct button_mapping button_context_tree[] = { | 138 | const struct button_mapping button_context_tree[] = { |
102 | { ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | 139 | { ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, |
103 | { ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, | 140 | { ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, |
@@ -105,6 +142,13 @@ const struct button_mapping button_context_tree[] = { | |||
105 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | 142 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), |
106 | }; /* button_context_tree */ | 143 | }; /* button_context_tree */ |
107 | 144 | ||
145 | const struct button_mapping remote_button_context_tree[] = { | ||
146 | { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, | ||
147 | { ACTION_TREE_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, | ||
148 | |||
149 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | ||
150 | }; /* button_context_tree */ | ||
151 | |||
108 | const struct button_mapping button_context_listtree_scroll_without_combo[] = { | 152 | const struct button_mapping button_context_listtree_scroll_without_combo[] = { |
109 | { ACTION_TREE_ROOT_INIT, BUTTON_REW|BUTTON_REPEAT, BUTTON_REW }, | 153 | { ACTION_TREE_ROOT_INIT, BUTTON_REW|BUTTON_REPEAT, BUTTON_REW }, |
110 | { ACTION_TREE_PGLEFT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, | 154 | { ACTION_TREE_PGLEFT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, |
@@ -112,6 +156,13 @@ const struct button_mapping button_context_listtree_scroll_without_combo[] = { | |||
112 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | 156 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), |
113 | }; /* button_context_listtree_scroll_without_combo */ | 157 | }; /* button_context_listtree_scroll_without_combo */ |
114 | 158 | ||
159 | const struct button_mapping remote_button_context_listtree_scroll_without_combo[] = { | ||
160 | { ACTION_TREE_ROOT_INIT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW }, | ||
161 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
162 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
163 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | ||
164 | }; /* button_context_listtree_scroll_without_combo */ | ||
165 | |||
115 | const struct button_mapping button_context_listtree_scroll_with_combo[] = { | 166 | const struct button_mapping button_context_listtree_scroll_with_combo[] = { |
116 | { ACTION_LISTTREE_PGUP, BUTTON_REW|BUTTON_REPEAT, BUTTON_REW }, | 167 | { ACTION_LISTTREE_PGUP, BUTTON_REW|BUTTON_REPEAT, BUTTON_REW }, |
117 | { ACTION_LISTTREE_PGDOWN, BUTTON_FF|BUTTON_REPEAT, BUTTON_FF }, | 168 | { ACTION_LISTTREE_PGDOWN, BUTTON_FF|BUTTON_REPEAT, BUTTON_FF }, |
@@ -127,6 +178,21 @@ const struct button_mapping button_context_listtree_scroll_with_combo[] = { | |||
127 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | 178 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), |
128 | }; /* button_context_listtree_scroll_with_combo */ | 179 | }; /* button_context_listtree_scroll_with_combo */ |
129 | 180 | ||
181 | const struct button_mapping remote_button_context_listtree_scroll_with_combo[] = { | ||
182 | { ACTION_LISTTREE_PGUP, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW }, | ||
183 | { ACTION_LISTTREE_PGDOWN, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF }, | ||
184 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_RC_PLAY, BUTTON_RC_PLAY }, | ||
185 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_RC_PLAY }, | ||
186 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_RC_PLAY, BUTTON_RC_REW|BUTTON_REL }, | ||
187 | { ACTION_TREE_ROOT_INIT, BUTTON_RC_REW|BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_REW|BUTTON_RC_PLAY }, | ||
188 | { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | ||
189 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_RC_PLAY, BUTTON_RC_PLAY }, | ||
190 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_RC_PLAY }, | ||
191 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_RC_PLAY, BUTTON_RC_FF|BUTTON_REL }, | ||
192 | { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | ||
193 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | ||
194 | }; /* button_context_listtree_scroll_with_combo */ | ||
195 | |||
130 | const struct button_mapping button_context_yesno[] = { | 196 | const struct button_mapping button_context_yesno[] = { |
131 | { ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE }, | 197 | { ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE }, |
132 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | 198 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), |
@@ -145,6 +211,19 @@ const struct button_mapping button_context_quickscreen[] = { | |||
145 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | 211 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), |
146 | }; /* button_context_quickscreen */ | 212 | }; /* button_context_quickscreen */ |
147 | 213 | ||
214 | const struct button_mapping remote_button_context_quickscreen[] = { | ||
215 | { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
216 | { ACTION_QS_DOWNINV, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
217 | { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
218 | { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
219 | { ACTION_QS_LEFT, BUTTON_RC_REW, BUTTON_NONE }, | ||
220 | { ACTION_QS_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, | ||
221 | { ACTION_QS_RIGHT, BUTTON_RC_FF, BUTTON_NONE }, | ||
222 | { ACTION_QS_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, | ||
223 | |||
224 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | ||
225 | }; /* button_context_quickscreen */ | ||
226 | |||
148 | const struct button_mapping button_context_settings_right_is_inc[] = { | 227 | const struct button_mapping button_context_settings_right_is_inc[] = { |
149 | { ACTION_SETTINGS_INC, BUTTON_SCROLL_UP, BUTTON_NONE }, | 228 | { ACTION_SETTINGS_INC, BUTTON_SCROLL_UP, BUTTON_NONE }, |
150 | { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, | 229 | { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, |
@@ -177,6 +256,20 @@ const struct button_mapping button_context_pitchscreen[] = { | |||
177 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | 256 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), |
178 | }; /* button_context_pitchscreen */ | 257 | }; /* button_context_pitchscreen */ |
179 | 258 | ||
259 | const struct button_mapping remote_button_context_pitchscreen[] = { | ||
260 | { ACTION_PS_INC_SMALL, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
261 | { ACTION_PS_INC_BIG, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
262 | { ACTION_PS_DEC_SMALL, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
263 | { ACTION_PS_DEC_BIG, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
264 | { ACTION_PS_NUDGE_LEFT, BUTTON_RC_REW, BUTTON_NONE }, | ||
265 | { ACTION_PS_NUDGE_LEFTOFF, BUTTON_RC_REW|BUTTON_REL, BUTTON_NONE }, | ||
266 | { ACTION_PS_NUDGE_RIGHT, BUTTON_RC_FF, BUTTON_NONE }, | ||
267 | { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RC_FF|BUTTON_REL, BUTTON_NONE }, | ||
268 | { ACTION_PS_RESET, BUTTON_RC_PLAY, BUTTON_NONE }, | ||
269 | |||
270 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | ||
271 | }; /* button_context_pitchscreen */ | ||
272 | |||
180 | const struct button_mapping button_context_keyboard[] = { | 273 | const struct button_mapping button_context_keyboard[] = { |
181 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, | 274 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, |
182 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | 275 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, |
@@ -200,9 +293,45 @@ const struct button_mapping button_context_bmark[] = { | |||
200 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), | 293 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), |
201 | }; /* button_context_bmark */ | 294 | }; /* button_context_bmark */ |
202 | 295 | ||
296 | static const struct button_mapping* get_context_mapping_remote( int context ) | ||
297 | { | ||
298 | context ^= CONTEXT_REMOTE; | ||
299 | |||
300 | switch (context) | ||
301 | { | ||
302 | case CONTEXT_STD: | ||
303 | case CONTEXT_MAINMENU: | ||
304 | return remote_button_context_standard; | ||
305 | |||
306 | case CONTEXT_WPS: | ||
307 | return remote_button_context_wps; | ||
308 | |||
309 | case CONTEXT_LIST: | ||
310 | return remote_button_context_list; | ||
311 | case CONTEXT_TREE: | ||
312 | if (global_settings.hold_lr_for_scroll_in_list) | ||
313 | return remote_button_context_listtree_scroll_without_combo; | ||
314 | else | ||
315 | return remote_button_context_listtree_scroll_with_combo; | ||
316 | case CONTEXT_CUSTOM|CONTEXT_TREE: | ||
317 | return remote_button_context_tree; | ||
318 | |||
319 | case CONTEXT_QUICKSCREEN: | ||
320 | return remote_button_context_quickscreen; | ||
321 | case CONTEXT_PITCHSCREEN: | ||
322 | return remote_button_context_pitchscreen; | ||
323 | |||
324 | default: | ||
325 | return remote_button_context_standard; | ||
326 | } | ||
327 | } | ||
328 | |||
203 | /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ | 329 | /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ |
204 | const struct button_mapping* get_context_mapping(int context) | 330 | const struct button_mapping* get_context_mapping(int context) |
205 | { | 331 | { |
332 | if (context&CONTEXT_REMOTE) | ||
333 | return get_context_mapping_remote(context); | ||
334 | |||
206 | switch (context) | 335 | switch (context) |
207 | { | 336 | { |
208 | case CONTEXT_STD: | 337 | case CONTEXT_STD: |
@@ -220,7 +349,7 @@ const struct button_mapping* get_context_mapping(int context) | |||
220 | else | 349 | else |
221 | return button_context_listtree_scroll_with_combo; | 350 | return button_context_listtree_scroll_with_combo; |
222 | case CONTEXT_CUSTOM|CONTEXT_TREE: | 351 | case CONTEXT_CUSTOM|CONTEXT_TREE: |
223 | return button_context_tree; | 352 | return remote_button_context_tree; |
224 | 353 | ||
225 | case CONTEXT_SETTINGS: | 354 | case CONTEXT_SETTINGS: |
226 | return button_context_settings; | 355 | return button_context_settings; |
diff --git a/firmware/target/arm/iriver/h10/adc-h10.c b/firmware/target/arm/iriver/h10/adc-h10.c index 0dc0e8aee5..cf937851b9 100755 --- a/firmware/target/arm/iriver/h10/adc-h10.c +++ b/firmware/target/arm/iriver/h10/adc-h10.c | |||
@@ -69,7 +69,7 @@ static void adc_tick(void) | |||
69 | adc_counter = 0; | 69 | adc_counter = 0; |
70 | adc_scan(ADC_BATTERY); | 70 | adc_scan(ADC_BATTERY); |
71 | adc_scan(ADC_UNKNOWN_1); | 71 | adc_scan(ADC_UNKNOWN_1); |
72 | adc_scan(ADC_UNKNOWN_2); | 72 | adc_scan(ADC_REMOTE); |
73 | adc_scan(ADC_SCROLLPAD); | 73 | adc_scan(ADC_SCROLLPAD); |
74 | } | 74 | } |
75 | } | 75 | } |
@@ -85,7 +85,7 @@ void adc_init(void) | |||
85 | /* Force a scan of all channels to get initial values */ | 85 | /* Force a scan of all channels to get initial values */ |
86 | adc_scan(ADC_BATTERY); | 86 | adc_scan(ADC_BATTERY); |
87 | adc_scan(ADC_UNKNOWN_1); | 87 | adc_scan(ADC_UNKNOWN_1); |
88 | adc_scan(ADC_UNKNOWN_2); | 88 | adc_scan(ADC_REMOTE); |
89 | adc_scan(ADC_SCROLLPAD); | 89 | adc_scan(ADC_SCROLLPAD); |
90 | 90 | ||
91 | tick_add_task(adc_tick); | 91 | tick_add_task(adc_tick); |
diff --git a/firmware/target/arm/iriver/h10/adc-target.h b/firmware/target/arm/iriver/h10/adc-target.h index 3aab373290..741c293baa 100644 --- a/firmware/target/arm/iriver/h10/adc-target.h +++ b/firmware/target/arm/iriver/h10/adc-target.h | |||
@@ -32,7 +32,7 @@ | |||
32 | 32 | ||
33 | #define ADC_BATTERY 0 | 33 | #define ADC_BATTERY 0 |
34 | #define ADC_UNKNOWN_1 1 | 34 | #define ADC_UNKNOWN_1 1 |
35 | #define ADC_UNKNOWN_2 2 | 35 | #define ADC_REMOTE 2 |
36 | #define ADC_SCROLLPAD 3 | 36 | #define ADC_SCROLLPAD 3 |
37 | #define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */ | 37 | #define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */ |
38 | 38 | ||
diff --git a/firmware/target/arm/iriver/h10/button-h10.c b/firmware/target/arm/iriver/h10/button-h10.c index 6980948336..520a616b4c 100644 --- a/firmware/target/arm/iriver/h10/button-h10.c +++ b/firmware/target/arm/iriver/h10/button-h10.c | |||
@@ -50,15 +50,23 @@ bool button_hold(void) | |||
50 | return (GPIOA_INPUT_VAL & 0x4)?false:true; | 50 | return (GPIOA_INPUT_VAL & 0x4)?false:true; |
51 | } | 51 | } |
52 | 52 | ||
53 | bool remote_button_hold(void) | ||
54 | { | ||
55 | return adc_scan(ADC_REMOTE) < 0x17; | ||
56 | } | ||
57 | |||
53 | /* | 58 | /* |
54 | * Get button pressed from hardware | 59 | * Get button pressed from hardware |
55 | */ | 60 | */ |
56 | int button_read_device(void) | 61 | int button_read_device(void) |
57 | { | 62 | { |
58 | int btn = BUTTON_NONE; | 63 | int btn = BUTTON_NONE; |
64 | int data; | ||
59 | unsigned char state; | 65 | unsigned char state; |
60 | static bool hold_button = false; | 66 | static bool hold_button = false; |
67 | static bool remote_hold_button = false; | ||
61 | bool hold_button_old; | 68 | bool hold_button_old; |
69 | bool remote_hold_button_old; | ||
62 | 70 | ||
63 | /* Hold */ | 71 | /* Hold */ |
64 | hold_button_old = hold_button; | 72 | hold_button_old = hold_button; |
@@ -72,6 +80,7 @@ int button_read_device(void) | |||
72 | } | 80 | } |
73 | #endif | 81 | #endif |
74 | 82 | ||
83 | /* device buttons */ | ||
75 | if (!hold_button) | 84 | if (!hold_button) |
76 | { | 85 | { |
77 | /* Read normal buttons */ | 86 | /* Read normal buttons */ |
@@ -88,14 +97,12 @@ int button_read_device(void) | |||
88 | /* Read scroller */ | 97 | /* Read scroller */ |
89 | if ( GPIOD_INPUT_VAL & 0x20 ) | 98 | if ( GPIOD_INPUT_VAL & 0x20 ) |
90 | { | 99 | { |
91 | int scroll_pos; | ||
92 | |||
93 | GPIOD_OUTPUT_VAL &=~ 0x40; | 100 | GPIOD_OUTPUT_VAL &=~ 0x40; |
94 | udelay(50); | 101 | udelay(50); |
95 | scroll_pos = adc_scan(ADC_SCROLLPAD); | 102 | data = adc_scan(ADC_SCROLLPAD); |
96 | GPIOD_OUTPUT_VAL |= 0x40; | 103 | GPIOD_OUTPUT_VAL |= 0x40; |
97 | 104 | ||
98 | if(scroll_pos < 0x210) | 105 | if(data < 0x210) |
99 | { | 106 | { |
100 | btn |= BUTTON_SCROLL_DOWN; | 107 | btn |= BUTTON_SCROLL_DOWN; |
101 | } else { | 108 | } else { |
@@ -104,5 +111,37 @@ int button_read_device(void) | |||
104 | } | 111 | } |
105 | } | 112 | } |
106 | 113 | ||
114 | /* remote buttons */ | ||
115 | remote_hold_button_old = remote_hold_button; | ||
116 | |||
117 | data = adc_scan(ADC_REMOTE); | ||
118 | remote_hold_button = data < 0x17; | ||
119 | |||
120 | #ifndef BOOTLOADER | ||
121 | if (remote_hold_button != remote_hold_button_old) | ||
122 | backlight_hold_changed(remote_hold_button); | ||
123 | #endif | ||
124 | |||
125 | if(!remote_hold_button) | ||
126 | { | ||
127 | if (data < 0x3FF) | ||
128 | { | ||
129 | if(data < 0x1F0) | ||
130 | if(data < 0x141) | ||
131 | btn |= BUTTON_RC_FF; | ||
132 | else | ||
133 | btn |= BUTTON_RC_REW; | ||
134 | else | ||
135 | if(data < 0x2BC) | ||
136 | btn |= BUTTON_RC_VOL_DOWN; | ||
137 | else | ||
138 | btn |= BUTTON_RC_VOL_UP; | ||
139 | } | ||
140 | } | ||
141 | |||
142 | /* remote play button should be dead if hold */ | ||
143 | if (!remote_hold_button && !(GPIOA_INPUT_VAL & 0x1)) | ||
144 | btn |= BUTTON_RC_PLAY; | ||
145 | |||
107 | return btn; | 146 | return btn; |
108 | } | 147 | } |
diff --git a/firmware/target/arm/iriver/h10/button-target.h b/firmware/target/arm/iriver/h10/button-target.h index 48aa10c124..4831aa4efb 100644 --- a/firmware/target/arm/iriver/h10/button-target.h +++ b/firmware/target/arm/iriver/h10/button-target.h | |||
@@ -26,8 +26,10 @@ | |||
26 | #include "config.h" | 26 | #include "config.h" |
27 | 27 | ||
28 | #define HAS_BUTTON_HOLD | 28 | #define HAS_BUTTON_HOLD |
29 | #define HAS_REMOTE_BUTTON_HOLD | ||
29 | 30 | ||
30 | bool button_hold(void); | 31 | bool button_hold(void); |
32 | bool remote_button_hold(void); | ||
31 | void button_init_device(void); | 33 | void button_init_device(void); |
32 | int button_read_device(void); | 34 | int button_read_device(void); |
33 | 35 | ||
@@ -49,10 +51,18 @@ int button_read_device(void); | |||
49 | #define BUTTON_MAIN (BUTTON_POWER|BUTTON_O|BUTTON_BACK|BUTTON_REW\ | 51 | #define BUTTON_MAIN (BUTTON_POWER|BUTTON_O|BUTTON_BACK|BUTTON_REW\ |
50 | |BUTTON_PLAY|BUTTON_FF) | 52 | |BUTTON_PLAY|BUTTON_FF) |
51 | 53 | ||
52 | /* No Remote control */ | 54 | /* Remote control's buttons */ |
53 | #define BUTTON_REMOTE 0 | 55 | #define BUTTON_RC_REW 0x00080000 |
56 | #define BUTTON_RC_PLAY 0x00100000 | ||
57 | #define BUTTON_RC_FF 0x00200000 | ||
58 | #define BUTTON_RC_VOL_UP 0x00400000 | ||
59 | #define BUTTON_RC_VOL_DOWN 0x00800000 | ||
54 | 60 | ||
55 | #define POWEROFF_BUTTON BUTTON_POWER | 61 | #define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN\ |
62 | |BUTTON_RC_REW|BUTTON_RC_FF) | ||
63 | |||
64 | #define POWEROFF_BUTTON BUTTON_POWER | ||
65 | #define RC_POWEROFF_BUTTON BUTTON_RC_PLAY | ||
56 | #define POWEROFF_COUNT 10 | 66 | #define POWEROFF_COUNT 10 |
57 | 67 | ||
58 | #endif /* _BUTTON_TARGET_H_ */ | 68 | #endif /* _BUTTON_TARGET_H_ */ |