diff options
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 */ |