diff options
author | Björn Stenberg <bjorn@haxx.se> | 2004-09-19 21:58:37 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2004-09-19 21:58:37 +0000 |
commit | 6c33c51a4ca9907d23e3154d956fd6781122f492 (patch) | |
tree | f0e598efaf064bb72c33c0a8a2edba4cf9ebb13c /apps/wps.c | |
parent | 17f54a40f100a3343a15a431d235699024aa76c8 (diff) | |
download | rockbox-6c33c51a4ca9907d23e3154d956fd6781122f492.tar.gz rockbox-6c33c51a4ca9907d23e3154d956fd6781122f492.zip |
Redesigned the button handling. The code now uses symbolic function defines instead of checking for specific buttons. This makes it easier to add support for new devices with different button layouts.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5091 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/wps.c')
-rw-r--r-- | apps/wps.c | 653 |
1 files changed, 192 insertions, 461 deletions
diff --git a/apps/wps.c b/apps/wps.c index 92b4e008b8..49d7d3db36 100644 --- a/apps/wps.c +++ b/apps/wps.c | |||
@@ -61,63 +61,86 @@ static struct mp3entry* id3 = NULL; | |||
61 | static struct mp3entry* nid3 = NULL; | 61 | static struct mp3entry* nid3 = NULL; |
62 | static char current_track_path[MAX_PATH+1]; | 62 | static char current_track_path[MAX_PATH+1]; |
63 | 63 | ||
64 | #if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) | 64 | /* button definitions */ |
65 | void player_change_volume(int button) | 65 | #ifdef HAVE_RECORDER_KEYPAD |
66 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
67 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
68 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
69 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
70 | #define WPS_INCVOL BUTTON_UP | ||
71 | #define WPS_DECVOL BUTTON_DOWN | ||
72 | #define WPS_PAUSE BUTTON_PLAY | ||
73 | #define WPS_MENU (BUTTON_F1 | BUTTON_REL) | ||
74 | #define WPS_MENU_PRE BUTTON_F1 | ||
75 | #define WPS_BROWSE (BUTTON_ON | BUTTON_REL) | ||
76 | #define WPS_EXIT BUTTON_OFF | ||
77 | #define WPS_KEYLOCK (BUTTON_F1 | BUTTON_DOWN) | ||
78 | #define WPS_ID3 (BUTTON_F1 | BUTTON_ON) | ||
79 | |||
80 | #define WPS_RC_NEXT BUTTON_RC_RIGHT | ||
81 | #define WPS_RC_PREV BUTTON_RC_LEFT | ||
82 | #define WPS_RC_PAUSE BUTTON_RC_PLAY | ||
83 | #define WPS_RC_INCVOL BUTTON_RC_VOL_UP | ||
84 | #define WPS_RC_DECVOL BUTTON_RC_VOL_DOWN | ||
85 | #define WPS_RC_EXIT BUTTON_RC_STOP | ||
86 | |||
87 | #elif defined HAVE_PLAYER_KEYPAD | ||
88 | #define WPS_NEXT BUTTON_RIGHT | ||
89 | #define WPS_PREV BUTTON_LEFT | ||
90 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
91 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
92 | #define WPS_INCVOL (BUTTON_MENU | BUTTON_RIGHT) | ||
93 | #define WPS_DECVOL (BUTTON_MENU | BUTTON_LEFT) | ||
94 | #define WPS_PAUSE BUTTON_PLAY | ||
95 | #define WPS_MENU (BUTTON_MENU | BUTTON_REL) | ||
96 | #define WPS_MENU_PRE BUTTON_MENU | ||
97 | #define WPS_BROWSE (BUTTON_ON | BUTTON_REL) | ||
98 | #define WPS_EXIT BUTTON_STOP | ||
99 | #define WPS_KEYLOCK (BUTTON_MENU | BUTTON_STOP) | ||
100 | #define WPS_ID3 (BUTTON_MENU | BUTTON_ON) | ||
101 | |||
102 | #define WPS_RC_NEXT BUTTON_RC_RIGHT | ||
103 | #define WPS_RC_PREV BUTTON_RC_LEFT | ||
104 | #define WPS_RC_PAUSE BUTTON_RC_PLAY | ||
105 | #define WPS_RC_INCVOL BUTTON_RC_VOL_UP | ||
106 | #define WPS_RC_DECVOL BUTTON_RC_VOL_DOWN | ||
107 | #define WPS_RC_EXIT BUTTON_RC_STOP | ||
108 | |||
109 | #elif defined HAVE_ONDIO_KEYPAD | ||
110 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
111 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
112 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
113 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
114 | #define WPS_INCVOL BUTTON_UP | ||
115 | #define WPS_DECVOL BUTTON_DOWN | ||
116 | #define WPS_PAUSE BUTTON_OFF | ||
117 | #define WPS_MENU (BUTTON_MENU | BUTTON_REPEAT) | ||
118 | #define WPS_BROWSE (BUTTON_MENU | BUTTON_REL) | ||
119 | #define WPS_KEYLOCK (BUTTON_MENU | BUTTON_DOWN) | ||
120 | |||
121 | #endif | ||
122 | |||
123 | /* set volume | ||
124 | return true if screen restore is needed | ||
125 | return false otherwise | ||
126 | */ | ||
127 | static bool setvol(void) | ||
66 | { | 128 | { |
67 | bool exit = false; | 129 | if (global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) |
68 | char buffer[32]; | 130 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); |
69 | 131 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | |
70 | lcd_stop_scroll(); | 132 | status_draw(false); |
71 | while (!exit) | 133 | wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); |
72 | { | 134 | settings_save(); |
73 | switch (button) | ||
74 | { | ||
75 | case BUTTON_MENU | BUTTON_RIGHT: | ||
76 | case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: | ||
77 | global_settings.volume++; | ||
78 | if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) | ||
79 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); | ||
80 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
81 | wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); | ||
82 | settings_save(); | ||
83 | break; | ||
84 | |||
85 | case BUTTON_MENU | BUTTON_LEFT: | ||
86 | case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: | ||
87 | global_settings.volume--; | ||
88 | if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) | ||
89 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); | ||
90 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
91 | wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); | ||
92 | settings_save(); | ||
93 | break; | ||
94 | |||
95 | case BUTTON_MENU | BUTTON_REL: | ||
96 | case BUTTON_MENU | BUTTON_LEFT | BUTTON_REL: | ||
97 | case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REL: | ||
98 | exit = true; | ||
99 | break; | ||
100 | } | ||
101 | |||
102 | snprintf(buffer,sizeof(buffer),"Vol: %d %% ", | ||
103 | mpeg_val2phys(SOUND_VOLUME, global_settings.volume)); | ||
104 | |||
105 | #ifdef HAVE_LCD_CHARCELLS | 135 | #ifdef HAVE_LCD_CHARCELLS |
106 | lcd_puts(0, 0, buffer); | 136 | splash(0, false, "Vol: %d %% ", |
107 | #else | 137 | mpeg_val2phys(SOUND_VOLUME, global_settings.volume)); |
108 | lcd_puts(2, 3, buffer); | 138 | return true; |
109 | lcd_update(); | ||
110 | #endif | 139 | #endif |
111 | status_draw(false); | 140 | return false; |
112 | |||
113 | if (!exit) | ||
114 | button = button_get(true); | ||
115 | } | ||
116 | wps_refresh(id3, nid3, 0, WPS_REFRESH_ALL); | ||
117 | } | 141 | } |
118 | #endif | ||
119 | 142 | ||
120 | void display_keylock_text(bool locked) | 143 | static void display_keylock_text(bool locked) |
121 | { | 144 | { |
122 | char* s; | 145 | char* s; |
123 | lcd_stop_scroll(); | 146 | lcd_stop_scroll(); |
@@ -135,176 +158,6 @@ void display_keylock_text(bool locked) | |||
135 | splash(HZ, true, s); | 158 | splash(HZ, true, s); |
136 | } | 159 | } |
137 | 160 | ||
138 | void display_mute_text(bool muted) | ||
139 | { | ||
140 | char *s; | ||
141 | lcd_stop_scroll(); | ||
142 | #ifdef HAVE_LCD_CHARCELLS | ||
143 | if (muted) | ||
144 | s = str(LANG_MUTE_ON_PLAYER); | ||
145 | else | ||
146 | s = str(LANG_MUTE_OFF_PLAYER); | ||
147 | #else | ||
148 | if (muted) | ||
149 | s = str(LANG_MUTE_ON_RECORDER); | ||
150 | else | ||
151 | s = str(LANG_MUTE_OFF_RECORDER); | ||
152 | #endif | ||
153 | splash(HZ, true, s); | ||
154 | } | ||
155 | |||
156 | bool browse_id3(void) | ||
157 | { | ||
158 | int button; | ||
159 | int menu_pos = 0; | ||
160 | int menu_max = 8; | ||
161 | bool exit = false; | ||
162 | char scroll_text[MAX_PATH]; | ||
163 | |||
164 | if (!(mpeg_status() & MPEG_STATUS_PLAY)) | ||
165 | return false; | ||
166 | |||
167 | while (!exit) | ||
168 | { | ||
169 | lcd_clear_display(); | ||
170 | |||
171 | switch (menu_pos) | ||
172 | { | ||
173 | case 0: | ||
174 | lcd_puts(0, 0, str(LANG_ID3_TITLE)); | ||
175 | lcd_puts_scroll(0, 1, id3->title ? id3->title : | ||
176 | (char*)str(LANG_ID3_NO_TITLE)); | ||
177 | break; | ||
178 | |||
179 | case 1: | ||
180 | lcd_puts(0, 0, str(LANG_ID3_ARTIST)); | ||
181 | lcd_puts_scroll(0, 1, | ||
182 | id3->artist ? id3->artist : | ||
183 | (char*)str(LANG_ID3_NO_ARTIST)); | ||
184 | break; | ||
185 | |||
186 | case 2: | ||
187 | lcd_puts(0, 0, str(LANG_ID3_ALBUM)); | ||
188 | lcd_puts_scroll(0, 1, id3->album ? id3->album : | ||
189 | (char*)str(LANG_ID3_NO_ALBUM)); | ||
190 | break; | ||
191 | |||
192 | case 3: | ||
193 | lcd_puts(0, 0, str(LANG_ID3_TRACKNUM)); | ||
194 | |||
195 | if (id3->tracknum) { | ||
196 | snprintf(scroll_text,sizeof(scroll_text), "%d", | ||
197 | id3->tracknum); | ||
198 | lcd_puts_scroll(0, 1, scroll_text); | ||
199 | } | ||
200 | else | ||
201 | lcd_puts_scroll(0, 1, str(LANG_ID3_NO_TRACKNUM)); | ||
202 | break; | ||
203 | |||
204 | case 4: | ||
205 | lcd_puts(0, 0, str(LANG_ID3_GENRE)); | ||
206 | lcd_puts_scroll(0, 1, | ||
207 | id3_get_genre(id3) ? | ||
208 | id3_get_genre(id3) : | ||
209 | (char*)str(LANG_ID3_NO_INFO)); | ||
210 | break; | ||
211 | |||
212 | case 5: | ||
213 | lcd_puts(0, 0, str(LANG_ID3_YEAR)); | ||
214 | if (id3->year) { | ||
215 | snprintf(scroll_text,sizeof(scroll_text), "%d", | ||
216 | id3->year); | ||
217 | lcd_puts_scroll(0, 1, scroll_text); | ||
218 | } | ||
219 | else | ||
220 | lcd_puts_scroll(0, 1, str(LANG_ID3_NO_INFO)); | ||
221 | break; | ||
222 | |||
223 | case 6: | ||
224 | lcd_puts(0, 0, str(LANG_ID3_LENGHT)); | ||
225 | snprintf(scroll_text,sizeof(scroll_text), "%d:%02d", | ||
226 | id3->length / 60000, | ||
227 | id3->length % 60000 / 1000 ); | ||
228 | lcd_puts(0, 1, scroll_text); | ||
229 | break; | ||
230 | |||
231 | case 7: | ||
232 | lcd_puts(0, 0, str(LANG_ID3_PLAYLIST)); | ||
233 | snprintf(scroll_text,sizeof(scroll_text), "%d/%d", | ||
234 | playlist_get_display_index(), playlist_amount()); | ||
235 | lcd_puts_scroll(0, 1, scroll_text); | ||
236 | break; | ||
237 | |||
238 | |||
239 | case 8: | ||
240 | lcd_puts(0, 0, str(LANG_ID3_BITRATE)); | ||
241 | snprintf(scroll_text,sizeof(scroll_text), "%d kbps", | ||
242 | id3->bitrate); | ||
243 | lcd_puts(0, 1, scroll_text); | ||
244 | break; | ||
245 | |||
246 | case 9: | ||
247 | lcd_puts(0, 0, str(LANG_ID3_FRECUENCY)); | ||
248 | snprintf(scroll_text,sizeof(scroll_text), "%d Hz", | ||
249 | id3->frequency); | ||
250 | lcd_puts(0, 1, scroll_text); | ||
251 | break; | ||
252 | |||
253 | case 10: | ||
254 | lcd_puts(0, 0, str(LANG_ID3_PATH)); | ||
255 | lcd_puts_scroll(0, 1, id3->path); | ||
256 | break; | ||
257 | } | ||
258 | lcd_update(); | ||
259 | |||
260 | button = button_get(true); | ||
261 | |||
262 | switch(button) | ||
263 | { | ||
264 | case BUTTON_LEFT: | ||
265 | #ifdef HAVE_RECORDER_KEYPAD | ||
266 | case BUTTON_UP: | ||
267 | #endif | ||
268 | if (menu_pos > 0) | ||
269 | menu_pos--; | ||
270 | else | ||
271 | menu_pos = menu_max; | ||
272 | break; | ||
273 | |||
274 | case BUTTON_RIGHT: | ||
275 | #ifdef HAVE_RECORDER_KEYPAD | ||
276 | case BUTTON_DOWN: | ||
277 | #endif | ||
278 | if (menu_pos < menu_max) | ||
279 | menu_pos++; | ||
280 | else | ||
281 | menu_pos = 0; | ||
282 | break; | ||
283 | |||
284 | case BUTTON_REPEAT: | ||
285 | break; | ||
286 | |||
287 | #ifdef BUTTON_STOP | ||
288 | case BUTTON_STOP: | ||
289 | #else | ||
290 | case BUTTON_OFF: | ||
291 | #endif | ||
292 | case BUTTON_PLAY: | ||
293 | lcd_stop_scroll(); | ||
294 | /* eat release event */ | ||
295 | button_get(true); | ||
296 | exit = true; | ||
297 | break; | ||
298 | |||
299 | default: | ||
300 | if(default_event_handler(button) == SYS_USB_CONNECTED) | ||
301 | return true; | ||
302 | break; | ||
303 | } | ||
304 | } | ||
305 | return false; | ||
306 | } | ||
307 | |||
308 | static bool ffwd_rew(int button) | 161 | static bool ffwd_rew(int button) |
309 | { | 162 | { |
310 | static const int ff_rew_steps[] = { | 163 | static const int ff_rew_steps[] = { |
@@ -324,8 +177,8 @@ static bool ffwd_rew(int button) | |||
324 | 177 | ||
325 | while (!exit) { | 178 | while (!exit) { |
326 | switch ( button ) { | 179 | switch ( button ) { |
327 | case BUTTON_LEFT | BUTTON_REPEAT: | 180 | case WPS_FFWD: |
328 | case BUTTON_RIGHT | BUTTON_REPEAT: | 181 | case WPS_REW: |
329 | if (ff_rewind) | 182 | if (ff_rewind) |
330 | { | 183 | { |
331 | if (direction == 1) | 184 | if (direction == 1) |
@@ -367,7 +220,7 @@ static bool ffwd_rew(int button) | |||
367 | #ifdef HAVE_PLAYER_KEYPAD | 220 | #ifdef HAVE_PLAYER_KEYPAD |
368 | lcd_stop_scroll(); | 221 | lcd_stop_scroll(); |
369 | #endif | 222 | #endif |
370 | direction = (button & BUTTON_RIGHT) ? 1 : -1; | 223 | direction = (button & WPS_FFWD) ? 1 : -1; |
371 | 224 | ||
372 | if (direction > 0) | 225 | if (direction > 0) |
373 | status_set_ffmode(STATUS_FASTFORWARD); | 226 | status_set_ffmode(STATUS_FASTFORWARD); |
@@ -405,8 +258,8 @@ static bool ffwd_rew(int button) | |||
405 | 258 | ||
406 | break; | 259 | break; |
407 | 260 | ||
408 | case BUTTON_LEFT | BUTTON_REL: | 261 | case WPS_PREV: |
409 | case BUTTON_RIGHT | BUTTON_REL: | 262 | case WPS_NEXT: |
410 | mpeg_ff_rewind(id3->elapsed+ff_rewind_count); | 263 | mpeg_ff_rewind(id3->elapsed+ff_rewind_count); |
411 | ff_rewind_count = 0; | 264 | ff_rewind_count = 0; |
412 | ff_rewind = false; | 265 | ff_rewind = false; |
@@ -483,133 +336,6 @@ static bool update(void) | |||
483 | return retcode; | 336 | return retcode; |
484 | } | 337 | } |
485 | 338 | ||
486 | static bool menu(void) | ||
487 | { | ||
488 | static bool muted = false; | ||
489 | bool exit = false; | ||
490 | int last_button = 0; | ||
491 | |||
492 | #ifdef HAVE_LCD_CHARCELLS | ||
493 | status_set_param(true); | ||
494 | status_draw(false); | ||
495 | #endif | ||
496 | |||
497 | while (!exit) { | ||
498 | int button = button_get(true); | ||
499 | |||
500 | /* these are never locked */ | ||
501 | switch (button) | ||
502 | { | ||
503 | /* key lock */ | ||
504 | #ifdef HAVE_RECORDER_KEYPAD | ||
505 | case BUTTON_F1 | BUTTON_DOWN: | ||
506 | #else | ||
507 | case BUTTON_MENU | BUTTON_STOP: | ||
508 | #endif | ||
509 | keys_locked = !keys_locked; | ||
510 | display_keylock_text(keys_locked); | ||
511 | exit = true; | ||
512 | while (button_get(false)); /* clear button queue */ | ||
513 | break; | ||
514 | |||
515 | default: | ||
516 | if(default_event_handler(button) == SYS_USB_CONNECTED) { | ||
517 | keys_locked = false; | ||
518 | return true; | ||
519 | } | ||
520 | break; | ||
521 | } | ||
522 | |||
523 | if (keys_locked) { | ||
524 | display_keylock_text(true); | ||
525 | break; | ||
526 | } | ||
527 | |||
528 | switch ( button ) { | ||
529 | /* go into menu */ | ||
530 | #ifdef HAVE_RECORDER_KEYPAD | ||
531 | case BUTTON_F1 | BUTTON_REL: | ||
532 | #else | ||
533 | case BUTTON_MENU | BUTTON_REL: | ||
534 | #endif | ||
535 | exit = true; | ||
536 | if ( !last_button && !keys_locked ) { | ||
537 | lcd_stop_scroll(); | ||
538 | |||
539 | if (main_menu()) | ||
540 | return true; | ||
541 | #ifdef HAVE_LCD_BITMAP | ||
542 | if(global_settings.statusbar) | ||
543 | lcd_setmargins(0, STATUSBAR_HEIGHT); | ||
544 | else | ||
545 | lcd_setmargins(0, 0); | ||
546 | #endif | ||
547 | } | ||
548 | break; | ||
549 | |||
550 | /* mute */ | ||
551 | #ifdef BUTTON_MENU | ||
552 | case BUTTON_MENU | BUTTON_PLAY: | ||
553 | #else | ||
554 | case BUTTON_F1 | BUTTON_PLAY: | ||
555 | #endif | ||
556 | if ( muted ) | ||
557 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
558 | else | ||
559 | mpeg_sound_set(SOUND_VOLUME, 0); | ||
560 | muted = !muted; | ||
561 | #ifdef HAVE_LCD_CHARCELLS | ||
562 | status_set_param(false); | ||
563 | #endif | ||
564 | display_mute_text(muted); | ||
565 | break; | ||
566 | |||
567 | #ifdef BUTTON_MENU | ||
568 | /* change volume */ | ||
569 | case BUTTON_MENU | BUTTON_LEFT: | ||
570 | case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: | ||
571 | case BUTTON_MENU | BUTTON_RIGHT: | ||
572 | case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: | ||
573 | player_change_volume(button); | ||
574 | exit = true; | ||
575 | break; | ||
576 | |||
577 | /* show id3 tags */ | ||
578 | #ifdef BUTTON_ON | ||
579 | case BUTTON_MENU | BUTTON_ON: | ||
580 | #ifdef HAVE_LCD_CHARCELLS | ||
581 | status_set_param(true); | ||
582 | status_set_audio(true); | ||
583 | #endif | ||
584 | #endif | ||
585 | #else | ||
586 | case BUTTON_F1 | BUTTON_ON: | ||
587 | #endif | ||
588 | lcd_clear_display(); | ||
589 | lcd_puts(0, 0, str(LANG_ID3_INFO)); | ||
590 | lcd_puts(0, 1, str(LANG_ID3_SCREEN)); | ||
591 | lcd_update(); | ||
592 | sleep(HZ); | ||
593 | |||
594 | if(browse_id3()) | ||
595 | return true; | ||
596 | #ifdef HAVE_PLAYER_KEYPAD | ||
597 | status_set_param(false); | ||
598 | status_set_audio(true); | ||
599 | #endif | ||
600 | exit = true; | ||
601 | break; | ||
602 | } | ||
603 | last_button = button; | ||
604 | } | ||
605 | |||
606 | #ifdef HAVE_LCD_CHARCELLS | ||
607 | status_set_param(false); | ||
608 | #endif | ||
609 | |||
610 | return false; | ||
611 | } | ||
612 | |||
613 | static void fade(bool fade_in) | 339 | static void fade(bool fade_in) |
614 | { | 340 | { |
615 | if (fade_in) { | 341 | if (fade_in) { |
@@ -647,12 +373,20 @@ static void fade(bool fade_in) | |||
647 | } | 373 | } |
648 | 374 | ||
649 | 375 | ||
376 | static void waitfor_nokey(void) | ||
377 | { | ||
378 | /* wait until all keys are released */ | ||
379 | while (button_get(false) != BUTTON_NONE) | ||
380 | yield(); | ||
381 | } | ||
382 | |||
650 | /* demonstrates showing different formats from playtune */ | 383 | /* demonstrates showing different formats from playtune */ |
651 | int wps_show(void) | 384 | int wps_show(void) |
652 | { | 385 | { |
653 | int button = 0, lastbutton = 0; | 386 | int button = 0, lastbutton = 0; |
654 | bool ignore_keyup = true; | 387 | bool ignore_keyup = true; |
655 | bool restore = false; | 388 | bool restore = false; |
389 | long restoretimer = 0; /* timer to delay screen redraw temporarily */ | ||
656 | bool exit = false; | 390 | bool exit = false; |
657 | bool update_track = false; | 391 | bool update_track = false; |
658 | 392 | ||
@@ -763,26 +497,22 @@ int wps_show(void) | |||
763 | if (button >= 0 && button & BUTTON_REL ) | 497 | if (button >= 0 && button & BUTTON_REL ) |
764 | continue; | 498 | continue; |
765 | } | 499 | } |
766 | 500 | ||
501 | #ifdef WPS_KEYLOCK | ||
767 | /* ignore non-remote buttons when keys are locked */ | 502 | /* ignore non-remote buttons when keys are locked */ |
768 | if (keys_locked && | 503 | if (keys_locked && |
769 | ! ((button < 0) || | 504 | ! ((button < 0) || |
770 | #ifdef HAVE_RECORDER_KEYPAD | 505 | (button == BUTTON_NONE) || |
771 | (button & BUTTON_F1) || | 506 | ((button & WPS_KEYLOCK) == WPS_KEYLOCK) || |
772 | #else | 507 | (button & BUTTON_REMOTE) |
773 | (button & BUTTON_MENU) || | 508 | )) |
774 | #endif | ||
775 | (button == BUTTON_NONE) | ||
776 | #ifdef BUTTON_REMOTE | ||
777 | || (button & BUTTON_REMOTE) | ||
778 | #endif | ||
779 | )) | ||
780 | { | 509 | { |
781 | while (button_get(false)); /* clear button queue */ | 510 | if (!(button & BUTTON_REL)) |
782 | display_keylock_text(true); | 511 | display_keylock_text(true); |
783 | restore = true; | 512 | restore = true; |
784 | continue; | 513 | button = BUTTON_NONE; |
785 | } | 514 | } |
515 | #endif | ||
786 | 516 | ||
787 | /* Exit if mpeg has stopped playing. This can happen if using the | 517 | /* Exit if mpeg has stopped playing. This can happen if using the |
788 | sleep timer with the charger plugged or if starting a recording | 518 | sleep timer with the charger plugged or if starting a recording |
@@ -792,49 +522,25 @@ int wps_show(void) | |||
792 | 522 | ||
793 | switch(button) | 523 | switch(button) |
794 | { | 524 | { |
795 | #ifdef BUTTON_ON | 525 | case WPS_BROWSE: |
796 | case BUTTON_ON: | ||
797 | #ifdef HAVE_RECORDER_KEYPAD | ||
798 | switch (on_screen()) { | ||
799 | case 2: | ||
800 | /* usb connected? */ | ||
801 | return SYS_USB_CONNECTED; | ||
802 | |||
803 | case 1: | ||
804 | /* was on_screen used? */ | ||
805 | restore = true; | ||
806 | |||
807 | /* pause may have been turned off by pitch screen */ | ||
808 | if (paused && !(mpeg_status() & MPEG_STATUS_PAUSE)) { | ||
809 | paused = false; | ||
810 | } | ||
811 | break; | ||
812 | |||
813 | case 0: | ||
814 | /* otherwise, exit to browser */ | ||
815 | #else | ||
816 | #ifdef HAVE_LCD_CHARCELLS | 526 | #ifdef HAVE_LCD_CHARCELLS |
817 | status_set_record(false); | 527 | status_set_record(false); |
818 | status_set_audio(false); | 528 | status_set_audio(false); |
819 | #endif | ||
820 | #endif | 529 | #endif |
821 | lcd_stop_scroll(); | 530 | lcd_stop_scroll(); |
822 | 531 | ||
823 | /* set dir browser to current playing song */ | 532 | /* set dir browser to current playing song */ |
824 | if (global_settings.browse_current && | 533 | if (global_settings.browse_current && |
825 | current_track_path[0] != '\0') | 534 | current_track_path[0] != '\0') |
826 | set_current_file(current_track_path); | 535 | set_current_file(current_track_path); |
827 | 536 | ||
828 | return 0; | 537 | return 0; |
829 | #ifdef HAVE_RECORDER_KEYPAD | ||
830 | } | ||
831 | break; | 538 | break; |
832 | #endif | 539 | |
833 | #endif /* BUTTON_ON */ | ||
834 | /* play/pause */ | 540 | /* play/pause */ |
835 | case BUTTON_PLAY: | 541 | case WPS_PAUSE: |
836 | #ifdef BUTTON_RC_PLAY | 542 | #ifdef WPS_RC_PAUSE |
837 | case BUTTON_RC_PLAY: | 543 | case WPS_RC_PAUSE: |
838 | #endif | 544 | #endif |
839 | if ( paused ) | 545 | if ( paused ) |
840 | { | 546 | { |
@@ -861,53 +567,50 @@ int wps_show(void) | |||
861 | break; | 567 | break; |
862 | 568 | ||
863 | /* volume up */ | 569 | /* volume up */ |
864 | #ifdef HAVE_RECORDER_KEYPAD | 570 | case WPS_INCVOL: |
865 | case BUTTON_UP: | 571 | case WPS_INCVOL | BUTTON_REPEAT: |
866 | case BUTTON_UP | BUTTON_REPEAT: | 572 | #ifdef WPS_RC_INCVOL |
867 | #endif | 573 | case WPS_RC_INCVOL: |
868 | #ifdef BUTTON_RC_VOL_UP | ||
869 | case BUTTON_RC_VOL_UP: | ||
870 | #endif | 574 | #endif |
871 | global_settings.volume++; | 575 | global_settings.volume++; |
872 | if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) | 576 | if (setvol()) { |
873 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); | 577 | restore = true; |
874 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | 578 | restoretimer = current_tick + HZ; |
875 | status_draw(false); | 579 | } |
876 | settings_save(); | ||
877 | break; | 580 | break; |
878 | 581 | ||
879 | /* volume down */ | 582 | /* volume down */ |
880 | #ifdef HAVE_RECORDER_KEYPAD | 583 | case WPS_DECVOL: |
881 | case BUTTON_DOWN: | 584 | case WPS_DECVOL | BUTTON_REPEAT: |
882 | case BUTTON_DOWN | BUTTON_REPEAT: | 585 | #ifdef WPS_RC_DECVOL |
883 | #endif | 586 | case WPS_RC_DECVOL: |
884 | #ifdef BUTTON_RC_VOL_DOWN | ||
885 | case BUTTON_RC_VOL_DOWN: | ||
886 | #endif | 587 | #endif |
887 | global_settings.volume--; | 588 | global_settings.volume--; |
888 | if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) | 589 | if (setvol()) { |
889 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); | 590 | restore = true; |
890 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | 591 | restoretimer = current_tick + HZ; |
891 | status_draw(false); | 592 | } |
892 | settings_save(); | ||
893 | break; | 593 | break; |
894 | 594 | ||
895 | /* fast forward / rewind */ | 595 | /* fast forward / rewind */ |
896 | case BUTTON_LEFT | BUTTON_REPEAT: | 596 | case WPS_FFWD: |
897 | case BUTTON_RIGHT | BUTTON_REPEAT: | 597 | case WPS_REW: |
598 | #ifdef WPS_RC_FFWD | ||
599 | case WPS_RC_FFWD: | ||
600 | case WPS_RC_RWD: | ||
601 | #endif | ||
898 | ffwd_rew(button); | 602 | ffwd_rew(button); |
899 | break; | 603 | break; |
900 | 604 | ||
901 | /* prev / restart */ | 605 | /* prev / restart */ |
902 | #ifdef BUTTON_RC_LEFT | 606 | #ifdef WPS_RC_PREV |
903 | case BUTTON_RC_LEFT: | 607 | case WPS_RC_PREV: |
904 | #endif | 608 | #endif |
905 | case BUTTON_LEFT | BUTTON_REL: | 609 | case WPS_PREV: |
906 | #ifdef HAVE_RECORDER_KEYPAD | 610 | /* ignore release event after rewind */ |
907 | if ((button == (BUTTON_LEFT | BUTTON_REL)) && | 611 | if (lastbutton & BUTTON_REPEAT) |
908 | (lastbutton != BUTTON_LEFT )) | ||
909 | break; | 612 | break; |
910 | #endif | 613 | |
911 | if (!id3 || (id3->elapsed < 3*1000)) { | 614 | if (!id3 || (id3->elapsed < 3*1000)) { |
912 | mpeg_prev(); | 615 | mpeg_prev(); |
913 | } | 616 | } |
@@ -923,29 +626,43 @@ int wps_show(void) | |||
923 | break; | 626 | break; |
924 | 627 | ||
925 | /* next */ | 628 | /* next */ |
926 | #ifdef BUTTON_RC_RIGHT | 629 | #ifdef WPS_RC_NEXT |
927 | case BUTTON_RC_RIGHT: | 630 | case WPS_RC_NEXT: |
928 | #endif | 631 | #endif |
929 | case BUTTON_RIGHT | BUTTON_REL: | 632 | case WPS_NEXT: |
930 | #ifdef HAVE_RECORDER_KEYPAD | 633 | #ifdef HAVE_RECORDER_KEYPAD |
931 | if ((button == (BUTTON_RIGHT | BUTTON_REL)) && | 634 | if (lastbutton & BUTTON_REPEAT) |
932 | (lastbutton != BUTTON_RIGHT)) | 635 | break; |
933 | break; | ||
934 | #endif | 636 | #endif |
935 | mpeg_next(); | 637 | mpeg_next(); |
936 | break; | 638 | break; |
937 | 639 | ||
938 | /* menu key functions */ | 640 | /* menu key functions */ |
939 | #ifdef BUTTON_MENU | 641 | case WPS_MENU: |
940 | case BUTTON_MENU: | 642 | #ifdef WPS_MENU_PRE |
941 | #else | 643 | if (lastbutton != WPS_MENU_PRE) |
942 | case BUTTON_F1: | 644 | break; |
943 | #endif | 645 | #endif |
944 | if (menu()) | 646 | lcd_stop_scroll(); |
945 | return SYS_USB_CONNECTED; | ||
946 | 647 | ||
947 | update_track = true; | 648 | if (main_menu()) |
649 | return true; | ||
650 | #ifdef HAVE_LCD_BITMAP | ||
651 | if (global_settings.statusbar) | ||
652 | lcd_setmargins(0, STATUSBAR_HEIGHT); | ||
653 | else | ||
654 | lcd_setmargins(0, 0); | ||
655 | #endif | ||
656 | restore = true; | ||
657 | break; | ||
658 | |||
659 | /* key lock */ | ||
660 | case WPS_KEYLOCK: | ||
661 | case WPS_KEYLOCK | BUTTON_REPEAT: | ||
662 | keys_locked = !keys_locked; | ||
663 | display_keylock_text(keys_locked); | ||
948 | restore = true; | 664 | restore = true; |
665 | waitfor_nokey(); | ||
949 | break; | 666 | break; |
950 | 667 | ||
951 | #ifdef HAVE_RECORDER_KEYPAD | 668 | #ifdef HAVE_RECORDER_KEYPAD |
@@ -962,22 +679,32 @@ int wps_show(void) | |||
962 | return SYS_USB_CONNECTED; | 679 | return SYS_USB_CONNECTED; |
963 | restore = true; | 680 | restore = true; |
964 | break; | 681 | break; |
682 | |||
683 | /* pitch screen */ | ||
684 | case BUTTON_ON | BUTTON_REPEAT: | ||
685 | if (2 == pitch_screen()) | ||
686 | return SYS_USB_CONNECTED; | ||
687 | restore = true; | ||
688 | break; | ||
965 | #endif | 689 | #endif |
966 | 690 | ||
967 | /* stop and exit wps */ | 691 | /* stop and exit wps */ |
968 | #ifdef BUTTON_OFF | 692 | #ifdef WPS_EXIT |
969 | case BUTTON_OFF | BUTTON_REL: | 693 | case WPS_EXIT: |
970 | #else | 694 | #ifdef WPS_RC_EXIT |
971 | case BUTTON_STOP | BUTTON_REL: | 695 | case WPS_RC_EXIT: |
972 | if ( lastbutton != BUTTON_STOP ) | ||
973 | break; | ||
974 | #endif | ||
975 | #ifdef BUTTON_RC_STOP | ||
976 | case BUTTON_RC_STOP: | ||
977 | #endif | 696 | #endif |
978 | exit = true; | 697 | exit = true; |
979 | break; | 698 | break; |
699 | #endif | ||
980 | 700 | ||
701 | #ifdef WPS_ID3 | ||
702 | case WPS_ID3: | ||
703 | browse_id3(); | ||
704 | restore = true; | ||
705 | break; | ||
706 | #endif | ||
707 | |||
981 | case BUTTON_NONE: /* Timeout */ | 708 | case BUTTON_NONE: /* Timeout */ |
982 | update_track = true; | 709 | update_track = true; |
983 | break; | 710 | break; |
@@ -1029,8 +756,12 @@ int wps_show(void) | |||
1029 | if ( button ) | 756 | if ( button ) |
1030 | ata_spin(); | 757 | ata_spin(); |
1031 | 758 | ||
1032 | if (restore) { | 759 | if (restore && |
760 | ((restoretimer == 0) || | ||
761 | (restoretimer < current_tick))) | ||
762 | { | ||
1033 | restore = false; | 763 | restore = false; |
764 | restoretimer = 0; | ||
1034 | if (wps_display(id3, nid3)) | 765 | if (wps_display(id3, nid3)) |
1035 | { | 766 | { |
1036 | /* set dir browser to current playing song */ | 767 | /* set dir browser to current playing song */ |
@@ -1044,7 +775,7 @@ int wps_show(void) | |||
1044 | if (id3) | 775 | if (id3) |
1045 | wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); | 776 | wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); |
1046 | } | 777 | } |
1047 | if(button != BUTTON_NONE) | 778 | if (button != BUTTON_NONE) |
1048 | lastbutton = button; | 779 | lastbutton = button; |
1049 | } | 780 | } |
1050 | return 0; /* unreachable - just to reduce compiler warnings */ | 781 | return 0; /* unreachable - just to reduce compiler warnings */ |