summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/debug_menu.c6
-rw-r--r--apps/keymaps/keymap-h10.c131
-rwxr-xr-xfirmware/target/arm/iriver/h10/adc-h10.c4
-rw-r--r--firmware/target/arm/iriver/h10/adc-target.h2
-rw-r--r--firmware/target/arm/iriver/h10/button-h10.c47
-rw-r--r--firmware/target/arm/iriver/h10/button-target.h16
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
55const 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
55const struct button_mapping button_context_wps[] = { 64const 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
89const 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
80const struct button_mapping button_context_settings[] = { 110const 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
131const 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
101const struct button_mapping button_context_tree[] = { 138const 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
145const 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
108const struct button_mapping button_context_listtree_scroll_without_combo[] = { 152const 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
159const 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
115const struct button_mapping button_context_listtree_scroll_with_combo[] = { 166const 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
181const 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
130const struct button_mapping button_context_yesno[] = { 196const 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
214const 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
148const struct button_mapping button_context_settings_right_is_inc[] = { 227const 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
259const 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
180const struct button_mapping button_context_keyboard[] = { 273const 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
296static 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 */
204const struct button_mapping* get_context_mapping(int context) 330const 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
53bool 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 */
56int button_read_device(void) 61int 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
30bool button_hold(void); 31bool button_hold(void);
32bool remote_button_hold(void);
31void button_init_device(void); 33void button_init_device(void);
32int button_read_device(void); 34int 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_ */