diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/wps.c | 934 |
1 files changed, 446 insertions, 488 deletions
diff --git a/apps/wps.c b/apps/wps.c index d9aed39588..6f4ccf782e 100644 --- a/apps/wps.c +++ b/apps/wps.c | |||
@@ -68,10 +68,11 @@ | |||
68 | #endif | 68 | #endif |
69 | 69 | ||
70 | bool keys_locked = false; | 70 | bool keys_locked = false; |
71 | bool device_muted = false; | ||
72 | static bool ff_rewind = false; | 71 | static bool ff_rewind = false; |
73 | static bool paused = false; | 72 | static bool paused = false; |
74 | int ff_rewind_count = 0; | 73 | static int ff_rewind_count = 0; |
74 | static struct mp3entry* id3 = NULL; | ||
75 | static int old_release_mask; | ||
75 | 76 | ||
76 | #ifdef CUSTOM_WPS | 77 | #ifdef CUSTOM_WPS |
77 | static char custom_wps[5][64]; | 78 | static char custom_wps[5][64]; |
@@ -80,7 +81,7 @@ static int scroll_line; | |||
80 | static int scroll_line_custom; | 81 | static int scroll_line_custom; |
81 | #endif | 82 | #endif |
82 | 83 | ||
83 | static void draw_screen(struct mp3entry* id3) | 84 | static void draw_screen(void) |
84 | { | 85 | { |
85 | int font_height; | 86 | int font_height; |
86 | 87 | ||
@@ -327,9 +328,6 @@ bool refresh_wps(bool refresh_scroll) | |||
327 | #endif | 328 | #endif |
328 | #endif | 329 | #endif |
329 | 330 | ||
330 | struct mp3entry* id3 = NULL; | ||
331 | id3 = mpeg_current_track(); | ||
332 | |||
333 | if(!id3) | 331 | if(!id3) |
334 | { | 332 | { |
335 | lcd_stop_scroll(); | 333 | lcd_stop_scroll(); |
@@ -437,14 +435,12 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) | |||
437 | char cchr3; | 435 | char cchr3; |
438 | unsigned int seek; | 436 | unsigned int seek; |
439 | 437 | ||
440 | struct mp3entry* id3 = NULL; | ||
441 | char* szLast; | 438 | char* szLast; |
442 | 439 | ||
443 | id3 = mpeg_current_track(); | ||
444 | szLast = strrchr(id3->path, '/'); | 440 | szLast = strrchr(id3->path, '/'); |
445 | if(szLast) | 441 | if(szLast) |
446 | /* point to the first letter in the file name */ | 442 | /* point to the first letter in the file name */ |
447 | szLast++; | 443 | szLast++; |
448 | 444 | ||
449 | buffer[0] = 0; | 445 | buffer[0] = 0; |
450 | 446 | ||
@@ -468,11 +464,11 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) | |||
468 | { | 464 | { |
469 | case 't': /* ID3 Title */ | 465 | case 't': /* ID3 Title */ |
470 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", | 466 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", |
471 | id3->title?id3->title:"<no title>"); | 467 | id3->title?id3->title:"<no title>"); |
472 | break; | 468 | break; |
473 | case 'a': /* ID3 Artist */ | 469 | case 'a': /* ID3 Artist */ |
474 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", | 470 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", |
475 | id3->artist?id3->artist:"<no artist>"); | 471 | id3->artist?id3->artist:"<no artist>"); |
476 | break; | 472 | break; |
477 | case 'n': /* ID3 Track Number */ | 473 | case 'n': /* ID3 Track Number */ |
478 | snprintf(tmpbuf, sizeof(tmpbuf), "%d", id3->tracknum); | 474 | snprintf(tmpbuf, sizeof(tmpbuf), "%d", id3->tracknum); |
@@ -490,11 +486,11 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) | |||
490 | case 'c': /* Conditional Filename \ ID3 Artist-Title */ | 486 | case 'c': /* Conditional Filename \ ID3 Artist-Title */ |
491 | if(id3->artist && id3->title) | 487 | if(id3->artist && id3->title) |
492 | snprintf(tmpbuf, sizeof(tmpbuf), "%s - %s", | 488 | snprintf(tmpbuf, sizeof(tmpbuf), "%s - %s", |
493 | id3->artist?id3->artist:"<no artist>", | 489 | id3->artist?id3->artist:"<no artist>", |
494 | id3->title?id3->title:"<no title>"); | 490 | id3->title?id3->title:"<no title>"); |
495 | else | 491 | else |
496 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", | 492 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", |
497 | szLast?szLast:id3->path); | 493 | szLast?szLast:id3->path); |
498 | break; | 494 | break; |
499 | case 'd': /* Conditional Filename \ ID3 Title-Artist */ | 495 | case 'd': /* Conditional Filename \ ID3 Title-Artist */ |
500 | if(id3->artist && id3->title) | 496 | if(id3->artist && id3->title) |
@@ -503,7 +499,7 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) | |||
503 | id3->artist?id3->artist:"<no artist>"); | 499 | id3->artist?id3->artist:"<no artist>"); |
504 | else | 500 | else |
505 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", | 501 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", |
506 | szLast?szLast:id3->path); | 502 | szLast?szLast:id3->path); |
507 | break; | 503 | break; |
508 | case 'b': /* File Bitrate */ | 504 | case 'b': /* File Bitrate */ |
509 | snprintf(tmpbuf, sizeof(tmpbuf), "%d", id3->bitrate); | 505 | snprintf(tmpbuf, sizeof(tmpbuf), "%d", id3->bitrate); |
@@ -516,11 +512,11 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) | |||
516 | break; | 512 | break; |
517 | case 'n': /* File Name */ | 513 | case 'n': /* File Name */ |
518 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", | 514 | snprintf(tmpbuf, sizeof(tmpbuf), "%s", |
519 | szLast?szLast:id3->path); | 515 | szLast?szLast:id3->path); |
520 | break; | 516 | break; |
521 | case 's': /* File Size (In Kilobytes) */ | 517 | case 's': /* File Size (In Kilobytes) */ |
522 | snprintf(tmpbuf, sizeof(tmpbuf), "%d", | 518 | snprintf(tmpbuf, sizeof(tmpbuf), "%d", |
523 | id3->filesize / 1024); | 519 | id3->filesize / 1024); |
524 | break; | 520 | break; |
525 | } | 521 | } |
526 | break; | 522 | break; |
@@ -537,13 +533,13 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) | |||
537 | break; | 533 | break; |
538 | case 'c': /* Current Time in Song */ | 534 | case 'c': /* Current Time in Song */ |
539 | snprintf(tmpbuf, sizeof(tmpbuf), "%d:%02d", | 535 | snprintf(tmpbuf, sizeof(tmpbuf), "%d:%02d", |
540 | (id3->elapsed + ff_rewind_count) / 60000, | 536 | (id3->elapsed + ff_rewind_count) / 60000, |
541 | (id3->elapsed + ff_rewind_count) % 60000 / 1000); | 537 | (id3->elapsed + ff_rewind_count) % 60000 / 1000); |
542 | break; | 538 | break; |
543 | case 't': /* Total Time */ | 539 | case 't': /* Total Time */ |
544 | snprintf(tmpbuf, sizeof(tmpbuf), "%d:%02d", | 540 | snprintf(tmpbuf, sizeof(tmpbuf), "%d:%02d", |
545 | id3->length / 60000, | 541 | id3->length / 60000, |
546 | id3->length % 60000 / 1000); | 542 | id3->length % 60000 / 1000); |
547 | break; | 543 | break; |
548 | } | 544 | } |
549 | break; | 545 | break; |
@@ -623,7 +619,6 @@ int player_id3_show(void) | |||
623 | int menu_max = 6; | 619 | int menu_max = 6; |
624 | bool menu_changed = true; | 620 | bool menu_changed = true; |
625 | char scroll_text[MAX_PATH]; | 621 | char scroll_text[MAX_PATH]; |
626 | struct mp3entry* id3 = NULL; | ||
627 | 622 | ||
628 | lcd_stop_scroll(); | 623 | lcd_stop_scroll(); |
629 | lcd_clear_display(); | 624 | lcd_clear_display(); |
@@ -633,7 +628,6 @@ int player_id3_show(void) | |||
633 | 628 | ||
634 | while(1) | 629 | while(1) |
635 | { | 630 | { |
636 | id3 = mpeg_current_track(); | ||
637 | button = button_get(false); | 631 | button = button_get(false); |
638 | 632 | ||
639 | switch(button) | 633 | switch(button) |
@@ -727,7 +721,6 @@ int player_id3_show(void) | |||
727 | lcd_puts_scroll(0, 1, scroll_text); | 721 | lcd_puts_scroll(0, 1, scroll_text); |
728 | } | 722 | } |
729 | 723 | ||
730 | status_draw(); | ||
731 | lcd_update(); | 724 | lcd_update(); |
732 | yield(); | 725 | yield(); |
733 | } | 726 | } |
@@ -736,9 +729,10 @@ int player_id3_show(void) | |||
736 | } | 729 | } |
737 | 730 | ||
738 | #ifndef CUSTOM_WPS | 731 | #ifndef CUSTOM_WPS |
739 | static void display_file_time(unsigned int elapsed, unsigned int length) | 732 | static void display_file_time(void) |
740 | { | 733 | { |
741 | char buffer[32]; | 734 | char buffer[32]; |
735 | int elapsed = id3->elapsed + ff_rewind_count; | ||
742 | 736 | ||
743 | #ifdef HAVE_LCD_BITMAP | 737 | #ifdef HAVE_LCD_BITMAP |
744 | int line; | 738 | int line; |
@@ -750,11 +744,12 @@ static void display_file_time(unsigned int elapsed, unsigned int length) | |||
750 | "Time:%3d:%02d/%d:%02d", | 744 | "Time:%3d:%02d/%d:%02d", |
751 | elapsed / 60000, | 745 | elapsed / 60000, |
752 | elapsed % 60000 / 1000, | 746 | elapsed % 60000 / 1000, |
753 | length / 60000, | 747 | id3->length / 60000, |
754 | length % 60000 / 1000 ); | 748 | id3->length % 60000 / 1000 ); |
755 | 749 | ||
756 | lcd_puts(0, line, buffer); | 750 | lcd_puts(0, line, buffer); |
757 | slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, elapsed*100/length, Grow_Right); | 751 | slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, |
752 | elapsed*100/id3->length, Grow_Right); | ||
758 | lcd_update(); | 753 | lcd_update(); |
759 | #else | 754 | #else |
760 | /* Display time with the filename scroll only because | 755 | /* Display time with the filename scroll only because |
@@ -767,8 +762,8 @@ static void display_file_time(unsigned int elapsed, unsigned int length) | |||
767 | snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ", | 762 | snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ", |
768 | elapsed / 60000, | 763 | elapsed / 60000, |
769 | elapsed % 60000 / 1000, | 764 | elapsed % 60000 / 1000, |
770 | length / 60000, | 765 | id3->length / 60000, |
771 | length % 60000 / 1000 ); | 766 | id3->length % 60000 / 1000 ); |
772 | 767 | ||
773 | lcd_puts(0, 1, buffer); | 768 | lcd_puts(0, 1, buffer); |
774 | lcd_update(); | 769 | lcd_update(); |
@@ -813,7 +808,6 @@ void display_keylock_text(bool locked) | |||
813 | { | 808 | { |
814 | lcd_puts(2, 3, "Key lock is OFF"); | 809 | lcd_puts(2, 3, "Key lock is OFF"); |
815 | } | 810 | } |
816 | status_draw(); | ||
817 | lcd_update(); | 811 | lcd_update(); |
818 | #endif | 812 | #endif |
819 | 813 | ||
@@ -839,370 +833,328 @@ void display_mute_text(bool muted) | |||
839 | { | 833 | { |
840 | lcd_puts(2, 3, "Mute is OFF"); | 834 | lcd_puts(2, 3, "Mute is OFF"); |
841 | } | 835 | } |
842 | status_draw(); | ||
843 | lcd_update(); | 836 | lcd_update(); |
844 | #endif | 837 | #endif |
845 | 838 | ||
846 | sleep(HZ); | 839 | sleep(HZ); |
847 | } | 840 | } |
848 | 841 | ||
849 | /* demonstrates showing different formats from playtune */ | 842 | static void handle_usb(void) |
850 | int wps_show(void) | ||
851 | { | 843 | { |
852 | struct mp3entry* id3 = NULL; | 844 | #ifndef SIMULATOR |
845 | #ifdef HAVE_LCD_BITMAP | ||
846 | bool laststate=statusbar(false); | ||
847 | #endif | ||
848 | /* Tell the USB thread that we are safe */ | ||
849 | DEBUGF("wps got SYS_USB_CONNECTED\n"); | ||
850 | usb_acknowledge(SYS_USB_CONNECTED_ACK); | ||
851 | |||
852 | /* Wait until the USB cable is extracted again */ | ||
853 | usb_wait_for_disconnect(&button_queue); | ||
853 | 854 | ||
854 | #ifdef HAVE_PLAYER_KEYPAD | 855 | #ifdef HAVE_LCD_BITMAP |
855 | int retval; | 856 | statusbar(laststate); |
856 | #endif | 857 | #endif |
857 | bool dont_go_to_menu = false; | 858 | #endif |
858 | bool menu_button_is_down = false; | 859 | } |
859 | bool pending_keylock = true; /* Keylock will go ON next time */ | 860 | |
860 | bool pending_mute = true; /* Mute will go ON next time */ | 861 | static bool ffwd_rew(int button) |
861 | int old_release_mask; | 862 | { |
862 | int button; | ||
863 | unsigned int ff_rewind_step = 0; /* current rewind step size */ | 863 | unsigned int ff_rewind_step = 0; /* current rewind step size */ |
864 | unsigned int ff_rewind_max_step = 0; /* max rewind step size */ | 864 | unsigned int ff_rewind_max_step = 0; /* max rewind step size */ |
865 | long ff_rewind_accel_tick = 0; /* next time to bump ff/rewind step size */ | 865 | long ff_rewind_accel_tick = 0; /* next time to bump ff/rewind step size */ |
866 | bool ignore_keyup = true; | 866 | bool exit = false; |
867 | bool restore = false; | 867 | bool usb = false; |
868 | 868 | ||
869 | old_release_mask = button_set_release(RELEASE_MASK); | 869 | while (!exit) { |
870 | 870 | switch ( button ) { | |
871 | #ifdef HAVE_LCD_CHARCELLS | 871 | case BUTTON_LEFT | BUTTON_REPEAT: |
872 | lcd_icon(ICON_AUDIO, true); | 872 | if (ff_rewind) |
873 | lcd_icon(ICON_PARAM, false); | 873 | { |
874 | #else | 874 | ff_rewind_count -= ff_rewind_step; |
875 | if(global_settings.statusbar) | 875 | if (global_settings.ff_rewind_accel != 0 && |
876 | lcd_setmargins(0, STATUSBAR_HEIGHT); | 876 | current_tick >= ff_rewind_accel_tick) |
877 | else | 877 | { |
878 | lcd_setmargins(0, 0); | 878 | ff_rewind_step *= 2; |
879 | #endif | 879 | if (ff_rewind_step > ff_rewind_max_step) |
880 | ff_rewind_step = ff_rewind_max_step; | ||
881 | ff_rewind_accel_tick = current_tick + | ||
882 | global_settings.ff_rewind_accel*HZ; | ||
883 | } | ||
884 | } | ||
885 | else | ||
886 | { | ||
887 | if ( mpeg_is_playing() && id3 && id3->length ) | ||
888 | { | ||
889 | if (!paused) | ||
890 | mpeg_pause(); | ||
891 | #ifdef HAVE_PLAYER_KEYPAD | ||
892 | lcd_stop_scroll(); | ||
893 | #endif | ||
894 | status_set_playmode(STATUS_FASTBACKWARD); | ||
895 | ff_rewind = true; | ||
896 | ff_rewind_max_step = | ||
897 | id3->length * FF_REWIND_MAX_PERCENT / 100; | ||
898 | ff_rewind_step = FF_REWIND_MIN_STEP; | ||
899 | if (ff_rewind_step > ff_rewind_max_step) | ||
900 | ff_rewind_step = ff_rewind_max_step; | ||
901 | ff_rewind_count = -ff_rewind_step; | ||
902 | ff_rewind_accel_tick = current_tick + | ||
903 | global_settings.ff_rewind_accel*HZ; | ||
904 | } | ||
905 | else | ||
906 | break; | ||
907 | } | ||
880 | 908 | ||
881 | ff_rewind = false; | 909 | if ((int)(id3->elapsed + ff_rewind_count) < 0) |
910 | ff_rewind_count = -id3->elapsed; | ||
882 | 911 | ||
883 | #ifdef CUSTOM_WPS | 912 | #ifdef CUSTOM_WPS |
884 | load_custom_wps(); /* Load the Custom WPS file, if there is one */ | 913 | refresh_wps(false); |
914 | #else | ||
915 | display_file_time(); | ||
885 | #endif | 916 | #endif |
917 | break; | ||
886 | 918 | ||
887 | if(mpeg_is_playing()) | 919 | case BUTTON_RIGHT | BUTTON_REPEAT: |
888 | { | 920 | if (ff_rewind) |
889 | id3 = mpeg_current_track(); | ||
890 | draw_screen(id3); | ||
891 | restore = true; | ||
892 | } | ||
893 | |||
894 | while ( 1 ) | ||
895 | { | ||
896 | button = button_get_w_tmo(HZ/5); | ||
897 | |||
898 | /* discard first event if it's a button release */ | ||
899 | if (button && ignore_keyup) | ||
900 | { | ||
901 | ignore_keyup = false; | ||
902 | if (button & BUTTON_REL && button != SYS_USB_CONNECTED) | ||
903 | continue; | ||
904 | } | ||
905 | |||
906 | if(mpeg_has_changed_track()) | ||
907 | { | ||
908 | lcd_stop_scroll(); | ||
909 | id3 = mpeg_current_track(); | ||
910 | draw_screen(id3); | ||
911 | } | ||
912 | |||
913 | switch(button) | ||
914 | { | ||
915 | case BUTTON_ON: | ||
916 | if (keys_locked) | ||
917 | { | 921 | { |
918 | display_keylock_text(keys_locked); | 922 | ff_rewind_count += ff_rewind_step; |
919 | restore = true; | 923 | if (global_settings.ff_rewind_accel != 0 && |
920 | break; | 924 | current_tick >= ff_rewind_accel_tick) |
925 | { | ||
926 | ff_rewind_step *= 2; | ||
927 | if (ff_rewind_step > ff_rewind_max_step) | ||
928 | ff_rewind_step = ff_rewind_max_step; | ||
929 | ff_rewind_accel_tick = current_tick + | ||
930 | global_settings.ff_rewind_accel*HZ; | ||
931 | } | ||
921 | } | 932 | } |
922 | 933 | else | |
923 | #ifdef HAVE_LCD_CHARCELLS | ||
924 | lcd_icon(ICON_RECORD, false); | ||
925 | lcd_icon(ICON_AUDIO, false); | ||
926 | #endif | ||
927 | button_set_release(old_release_mask); | ||
928 | return 0; | ||
929 | |||
930 | case BUTTON_PLAY: | ||
931 | if (keys_locked) | ||
932 | { | 934 | { |
933 | display_keylock_text(keys_locked); | 935 | if ( mpeg_is_playing() && id3 && id3->length ) |
934 | restore = true; | 936 | { |
935 | break; | 937 | if (!paused) |
938 | mpeg_pause(); | ||
939 | #ifdef HAVE_PLAYER_KEYPAD | ||
940 | lcd_stop_scroll(); | ||
941 | #endif | ||
942 | status_set_playmode(STATUS_FASTFORWARD); | ||
943 | ff_rewind = true; | ||
944 | ff_rewind_max_step = | ||
945 | id3->length * FF_REWIND_MAX_PERCENT / 100; | ||
946 | ff_rewind_step = FF_REWIND_MIN_STEP; | ||
947 | if (ff_rewind_step > ff_rewind_max_step) | ||
948 | ff_rewind_step = ff_rewind_max_step; | ||
949 | ff_rewind_count = ff_rewind_step; | ||
950 | ff_rewind_accel_tick = current_tick + | ||
951 | global_settings.ff_rewind_accel*HZ; | ||
952 | } | ||
953 | else | ||
954 | break; | ||
936 | } | 955 | } |
937 | 956 | ||
938 | if ( !paused ) | 957 | if ((id3->elapsed + ff_rewind_count) > id3->length) |
939 | { | 958 | ff_rewind_count = id3->length - id3->elapsed; |
940 | mpeg_pause(); | 959 | |
941 | paused = true; | 960 | #ifdef CUSTOM_WPS |
942 | status_set_playmode(STATUS_PAUSE); | 961 | refresh_wps(false); |
943 | status_draw(); | 962 | #else |
944 | if (global_settings.resume) { | 963 | display_file_time(); |
945 | settings_save(); | ||
946 | #ifndef HAVE_RTC | ||
947 | ata_flush(); | ||
948 | #endif | 964 | #endif |
949 | } | 965 | break; |
950 | } | 966 | |
951 | else | 967 | case BUTTON_LEFT | BUTTON_REL: |
952 | { | 968 | /* rewind */ |
969 | mpeg_ff_rewind(ff_rewind_count); | ||
970 | ff_rewind_count = 0; | ||
971 | ff_rewind = false; | ||
972 | if (paused) | ||
973 | status_set_playmode(STATUS_PAUSE); | ||
974 | else { | ||
953 | mpeg_resume(); | 975 | mpeg_resume(); |
954 | paused = false; | ||
955 | status_set_playmode(STATUS_PLAY); | 976 | status_set_playmode(STATUS_PLAY); |
956 | status_draw(); | ||
957 | } | 977 | } |
958 | break; | 978 | #ifdef HAVE_LCD_CHARCELLS |
959 | 979 | draw_screen(); | |
960 | #ifdef HAVE_RECORDER_KEYPAD | ||
961 | case BUTTON_UP: | ||
962 | case BUTTON_UP | BUTTON_REPEAT: | ||
963 | #endif | 980 | #endif |
964 | case BUTTON_VOL_UP: | 981 | exit = true; |
965 | if (keys_locked) | ||
966 | { | ||
967 | display_keylock_text(keys_locked); | ||
968 | restore = true; | ||
969 | break; | ||
970 | } | ||
971 | |||
972 | global_settings.volume++; | ||
973 | if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) | ||
974 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); | ||
975 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
976 | status_draw(); | ||
977 | settings_save(); | ||
978 | break; | 982 | break; |
979 | 983 | ||
980 | #ifdef HAVE_RECORDER_KEYPAD | 984 | case BUTTON_RIGHT | BUTTON_REL: |
981 | case BUTTON_DOWN: | 985 | /* fast forward */ |
982 | case BUTTON_DOWN | BUTTON_REPEAT: | 986 | mpeg_ff_rewind(ff_rewind_count); |
983 | #endif | 987 | ff_rewind_count = 0; |
984 | case BUTTON_VOL_DOWN: | 988 | ff_rewind = false; |
985 | if (keys_locked) | 989 | if (paused) |
986 | { | 990 | status_set_playmode(STATUS_PAUSE); |
987 | display_keylock_text(keys_locked); | 991 | else { |
988 | restore = true; | 992 | mpeg_resume(); |
989 | break; | 993 | status_set_playmode(STATUS_PLAY); |
990 | } | 994 | } |
995 | #ifdef HAVE_LCD_CHARCELLS | ||
996 | draw_screen(); | ||
997 | #endif | ||
998 | exit = true; | ||
999 | break; | ||
991 | 1000 | ||
992 | global_settings.volume--; | 1001 | case SYS_USB_CONNECTED: |
993 | if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) | 1002 | handle_usb(); |
994 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); | 1003 | usb = true; |
995 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | 1004 | exit = true; |
996 | status_draw(); | ||
997 | settings_save(); | ||
998 | break; | 1005 | break; |
1006 | } | ||
1007 | if (!exit) | ||
1008 | button = button_get(true); | ||
1009 | } | ||
999 | 1010 | ||
1000 | case BUTTON_LEFT | BUTTON_REPEAT: | 1011 | return usb; |
1001 | if (!keys_locked) | 1012 | } |
1002 | { | ||
1003 | if (ff_rewind) | ||
1004 | { | ||
1005 | ff_rewind_count -= ff_rewind_step; | ||
1006 | if (global_settings.ff_rewind_accel != 0 && | ||
1007 | current_tick >= ff_rewind_accel_tick) | ||
1008 | { | ||
1009 | ff_rewind_step *= 2; | ||
1010 | if (ff_rewind_step > ff_rewind_max_step) | ||
1011 | ff_rewind_step = ff_rewind_max_step; | ||
1012 | ff_rewind_accel_tick = current_tick + | ||
1013 | global_settings.ff_rewind_accel*HZ; | ||
1014 | } | ||
1015 | } | ||
1016 | else | ||
1017 | { | ||
1018 | if ( mpeg_is_playing() && id3 && id3->length ) | ||
1019 | { | ||
1020 | if (!paused) | ||
1021 | mpeg_pause(); | ||
1022 | #ifdef HAVE_PLAYER_KEYPAD | ||
1023 | lcd_stop_scroll(); | ||
1024 | #endif | ||
1025 | status_set_playmode(STATUS_FASTBACKWARD); | ||
1026 | status_draw(); | ||
1027 | ff_rewind = true; | ||
1028 | ff_rewind_max_step = | ||
1029 | id3->length * FF_REWIND_MAX_PERCENT / 100; | ||
1030 | ff_rewind_step = FF_REWIND_MIN_STEP; | ||
1031 | if (ff_rewind_step > ff_rewind_max_step) | ||
1032 | ff_rewind_step = ff_rewind_max_step; | ||
1033 | ff_rewind_count = -ff_rewind_step; | ||
1034 | ff_rewind_accel_tick = current_tick + | ||
1035 | global_settings.ff_rewind_accel*HZ; | ||
1036 | } | ||
1037 | else | ||
1038 | break; | ||
1039 | } | ||
1040 | 1013 | ||
1041 | if ((int)(id3->elapsed + ff_rewind_count) < 0) | 1014 | static void update(void) |
1042 | ff_rewind_count = -id3->elapsed; | 1015 | { |
1016 | if (mpeg_has_changed_track()) | ||
1017 | { | ||
1018 | lcd_stop_scroll(); | ||
1019 | id3 = mpeg_current_track(); | ||
1020 | draw_screen(); | ||
1021 | } | ||
1043 | 1022 | ||
1023 | if (id3) { | ||
1044 | #ifdef CUSTOM_WPS | 1024 | #ifdef CUSTOM_WPS |
1045 | refresh_wps(false); | 1025 | refresh_wps(false); |
1046 | #else | 1026 | #else |
1047 | display_file_time(id3->elapsed + ff_rewind_count, | 1027 | display_file_time(); |
1048 | id3->length); | ||
1049 | #endif | 1028 | #endif |
1050 | } | 1029 | } |
1051 | break; | ||
1052 | 1030 | ||
1053 | case BUTTON_RIGHT | BUTTON_REPEAT: | 1031 | status_draw(); |
1054 | if (!keys_locked) | ||
1055 | { | ||
1056 | if (ff_rewind) | ||
1057 | { | ||
1058 | ff_rewind_count += ff_rewind_step; | ||
1059 | if (global_settings.ff_rewind_accel != 0 && | ||
1060 | current_tick >= ff_rewind_accel_tick) | ||
1061 | { | ||
1062 | ff_rewind_step *= 2; | ||
1063 | if (ff_rewind_step > ff_rewind_max_step) | ||
1064 | ff_rewind_step = ff_rewind_max_step; | ||
1065 | ff_rewind_accel_tick = current_tick + | ||
1066 | global_settings.ff_rewind_accel*HZ; | ||
1067 | } | ||
1068 | } | ||
1069 | else | ||
1070 | { | ||
1071 | if ( mpeg_is_playing() && id3 && id3->length ) | ||
1072 | { | ||
1073 | if (!paused) | ||
1074 | mpeg_pause(); | ||
1075 | #ifdef HAVE_PLAYER_KEYPAD | ||
1076 | lcd_stop_scroll(); | ||
1077 | #endif | ||
1078 | status_set_playmode(STATUS_FASTFORWARD); | ||
1079 | status_draw(); | ||
1080 | ff_rewind = true; | ||
1081 | ff_rewind_max_step = | ||
1082 | id3->length * FF_REWIND_MAX_PERCENT / 100; | ||
1083 | ff_rewind_step = FF_REWIND_MIN_STEP; | ||
1084 | if (ff_rewind_step > ff_rewind_max_step) | ||
1085 | ff_rewind_step = ff_rewind_max_step; | ||
1086 | ff_rewind_count = ff_rewind_step; | ||
1087 | ff_rewind_accel_tick = current_tick + | ||
1088 | global_settings.ff_rewind_accel*HZ; | ||
1089 | } | ||
1090 | else | ||
1091 | break; | ||
1092 | } | ||
1093 | 1032 | ||
1094 | if ((id3->elapsed + ff_rewind_count) > id3->length) | 1033 | /* save resume data */ |
1095 | ff_rewind_count = id3->length - id3->elapsed; | 1034 | if ( id3 && |
1035 | global_settings.resume && | ||
1036 | global_settings.resume_offset != id3->offset ) { | ||
1037 | DEBUGF("R%X,%X (%X)\n", global_settings.resume_offset, | ||
1038 | id3->offset,id3); | ||
1039 | global_settings.resume_index = id3->index; | ||
1040 | global_settings.resume_offset = id3->offset; | ||
1041 | settings_save(); | ||
1042 | } | ||
1043 | } | ||
1096 | 1044 | ||
1097 | #ifdef CUSTOM_WPS | ||
1098 | refresh_wps(false); | ||
1099 | #else | ||
1100 | display_file_time(id3->elapsed + ff_rewind_count, | ||
1101 | id3->length); | ||
1102 | #endif | ||
1103 | } | ||
1104 | break; | ||
1105 | 1045 | ||
1106 | case BUTTON_LEFT | BUTTON_REL: | 1046 | static bool keylock(void) |
1107 | if (menu_button_is_down && keys_locked) | 1047 | { |
1108 | { | 1048 | bool exit = false; |
1109 | sleep(HZ/6); | 1049 | |
1110 | draw_screen(id3); | ||
1111 | } | ||
1112 | if (!keys_locked) | ||
1113 | { | ||
1114 | if (ff_rewind) | ||
1115 | { | ||
1116 | /* rewind */ | ||
1117 | mpeg_ff_rewind(ff_rewind_count); | ||
1118 | ff_rewind_count = 0; | ||
1119 | ff_rewind = false; | ||
1120 | if (paused) | ||
1121 | status_set_playmode(STATUS_PAUSE); | ||
1122 | else { | ||
1123 | mpeg_resume(); | ||
1124 | status_set_playmode(STATUS_PLAY); | ||
1125 | } | ||
1126 | #ifdef HAVE_LCD_CHARCELLS | 1050 | #ifdef HAVE_LCD_CHARCELLS |
1127 | draw_screen(id3); | 1051 | lcd_icon(ICON_RECORD, true); |
1128 | #endif | 1052 | #endif |
1129 | } | 1053 | display_keylock_text(true); |
1130 | #ifdef HAVE_PLAYER_KEYPAD | 1054 | keys_locked = true; |
1131 | else if(!menu_button_is_down) | 1055 | draw_screen(); |
1056 | status_draw(); | ||
1057 | while (button_get(false)); /* clear button queue */ | ||
1058 | |||
1059 | while (!exit) { | ||
1060 | switch ( button_get_w_tmo(HZ/5) ) { | ||
1061 | #ifdef HAVE_RECORDER_KEYPAD | ||
1062 | case BUTTON_F1 | BUTTON_DOWN: | ||
1132 | #else | 1063 | #else |
1133 | else | 1064 | case BUTTON_MENU | BUTTON_STOP: |
1134 | #endif | 1065 | #endif |
1135 | { | 1066 | #ifdef HAVE_LCD_CHARCELLS |
1136 | if (!id3 || (id3->elapsed < 3*1000)) | 1067 | lcd_icon(ICON_RECORD, false); |
1137 | mpeg_prev(); | 1068 | #endif |
1138 | else { | 1069 | display_keylock_text(false); |
1139 | if (!paused) | 1070 | keys_locked = false; |
1140 | mpeg_pause(); | 1071 | exit = true; |
1072 | while (button_get(false)); /* clear button queue */ | ||
1073 | break; | ||
1141 | 1074 | ||
1142 | mpeg_ff_rewind(-(id3->elapsed)); | 1075 | case SYS_USB_CONNECTED: |
1076 | handle_usb(); | ||
1077 | return true; | ||
1143 | 1078 | ||
1144 | if (!paused) | 1079 | case BUTTON_NONE: |
1145 | mpeg_resume(); | 1080 | update(); |
1146 | } | 1081 | break; |
1147 | } | 1082 | |
1148 | } | 1083 | #ifdef HAVE_RECORDER_KEYPAD |
1149 | #ifdef HAVE_PLAYER_KEYPAD | 1084 | case BUTTON_F1: |
1150 | else if(!menu_button_is_down) | ||
1151 | #else | 1085 | #else |
1152 | else | 1086 | case BUTTON_MENU: |
1153 | #endif | 1087 | #endif |
1154 | { | 1088 | /* ignore menu key, to avoid displaying "Keylock ON" |
1155 | display_keylock_text(keys_locked); | 1089 | every time we unlock the keys */ |
1156 | restore = true; | ||
1157 | } | ||
1158 | break; | 1090 | break; |
1159 | 1091 | ||
1160 | case BUTTON_RIGHT | BUTTON_REL: | 1092 | default: |
1161 | if (menu_button_is_down && keys_locked) | 1093 | display_keylock_text(true); |
1162 | { | 1094 | while (button_get(false)); /* clear button queue */ |
1163 | sleep(HZ/6); | 1095 | draw_screen(); |
1164 | draw_screen(id3); | 1096 | break; |
1165 | } | 1097 | } |
1166 | if (!keys_locked) | 1098 | } |
1167 | { | 1099 | return false; |
1168 | if (ff_rewind) | 1100 | } |
1169 | { | 1101 | |
1170 | /* fast forward */ | 1102 | static bool menu(void) |
1171 | mpeg_ff_rewind(ff_rewind_count); | 1103 | { |
1172 | ff_rewind_count = 0; | 1104 | static bool muted = false; |
1173 | ff_rewind = false; | 1105 | bool exit = false; |
1174 | if (paused) | 1106 | int last_button = 0; |
1175 | status_set_playmode(STATUS_PAUSE); | 1107 | |
1176 | else { | ||
1177 | mpeg_resume(); | ||
1178 | status_set_playmode(STATUS_PLAY); | ||
1179 | } | ||
1180 | #ifdef HAVE_LCD_CHARCELLS | 1108 | #ifdef HAVE_LCD_CHARCELLS |
1181 | draw_screen(id3); | 1109 | lcd_icon(ICON_PARAM, true); |
1182 | #endif | 1110 | #endif |
1183 | } | 1111 | |
1184 | #ifdef HAVE_PLAYER_KEYPAD | 1112 | while (!exit) { |
1185 | else if(!menu_button_is_down) | 1113 | int button = button_get(true); |
1114 | |||
1115 | switch ( button ) { | ||
1116 | /* go into menu */ | ||
1117 | #ifdef HAVE_RECORDER_KEYPAD | ||
1118 | case BUTTON_F1 | BUTTON_REL: | ||
1186 | #else | 1119 | #else |
1187 | else | 1120 | case BUTTON_MENU | BUTTON_REL: |
1188 | #endif | 1121 | #endif |
1189 | { | 1122 | exit = true; |
1190 | mpeg_next(); | 1123 | if ( !last_button ) { |
1191 | } | 1124 | lcd_stop_scroll(); |
1125 | button_set_release(old_release_mask); | ||
1126 | main_menu(); | ||
1127 | old_release_mask = button_set_release(RELEASE_MASK); | ||
1192 | } | 1128 | } |
1129 | break; | ||
1130 | |||
1131 | /* mute */ | ||
1193 | #ifdef HAVE_PLAYER_KEYPAD | 1132 | #ifdef HAVE_PLAYER_KEYPAD |
1194 | else if(!menu_button_is_down) | 1133 | case BUTTON_PLAY: |
1195 | #else | 1134 | #else |
1135 | case BUTTON_UP: | ||
1136 | #endif | ||
1137 | if ( muted ) | ||
1138 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
1196 | else | 1139 | else |
1140 | mpeg_sound_set(SOUND_VOLUME, 0); | ||
1141 | muted = !muted; | ||
1142 | display_mute_text(muted); | ||
1143 | break; | ||
1144 | |||
1145 | /* key lock */ | ||
1146 | #ifdef HAVE_RECORDER_KEYPAD | ||
1147 | case BUTTON_F1 | BUTTON_DOWN: | ||
1148 | #else | ||
1149 | case BUTTON_MENU | BUTTON_STOP: | ||
1197 | #endif | 1150 | #endif |
1198 | { | 1151 | if (keylock()) |
1199 | display_keylock_text(keys_locked); | 1152 | return true; |
1200 | restore = true; | 1153 | exit = true; |
1201 | break; | ||
1202 | } | ||
1203 | break; | 1154 | break; |
1204 | 1155 | ||
1205 | #ifdef HAVE_PLAYER_KEYPAD | 1156 | #ifdef HAVE_PLAYER_KEYPAD |
1157 | /* change volume */ | ||
1206 | case BUTTON_MENU | BUTTON_LEFT: | 1158 | case BUTTON_MENU | BUTTON_LEFT: |
1207 | case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: | 1159 | case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: |
1208 | dont_go_to_menu = true; | 1160 | dont_go_to_menu = true; |
@@ -1211,11 +1163,12 @@ int wps_show(void) | |||
1211 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); | 1163 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); |
1212 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | 1164 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); |
1213 | display_volume_level(global_settings.volume); | 1165 | display_volume_level(global_settings.volume); |
1214 | draw_screen(id3); | 1166 | draw_screen(); |
1215 | status_draw(); | 1167 | status_draw(); |
1216 | settings_save(); | 1168 | settings_save(); |
1217 | break; | 1169 | break; |
1218 | 1170 | ||
1171 | /* change volume */ | ||
1219 | case BUTTON_MENU | BUTTON_RIGHT: | 1172 | case BUTTON_MENU | BUTTON_RIGHT: |
1220 | case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: | 1173 | case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: |
1221 | dont_go_to_menu = true; | 1174 | dont_go_to_menu = true; |
@@ -1224,11 +1177,12 @@ int wps_show(void) | |||
1224 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); | 1177 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); |
1225 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | 1178 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); |
1226 | display_volume_level(global_settings.volume); | 1179 | display_volume_level(global_settings.volume); |
1227 | draw_screen(id3); | 1180 | draw_screen(); |
1228 | status_draw(); | 1181 | status_draw(); |
1229 | settings_save(); | 1182 | settings_save(); |
1230 | break; | 1183 | break; |
1231 | 1184 | ||
1185 | /* show id3 tags */ | ||
1232 | case BUTTON_MENU | BUTTON_ON: | 1186 | case BUTTON_MENU | BUTTON_ON: |
1233 | if (keys_locked) | 1187 | if (keys_locked) |
1234 | { | 1188 | { |
@@ -1237,139 +1191,184 @@ int wps_show(void) | |||
1237 | break; | 1191 | break; |
1238 | } | 1192 | } |
1239 | lcd_stop_scroll(); | 1193 | lcd_stop_scroll(); |
1240 | dont_go_to_menu = false; | ||
1241 | menu_button_is_down = false; | ||
1242 | lcd_icon(ICON_PARAM, true); | 1194 | lcd_icon(ICON_PARAM, true); |
1243 | lcd_icon(ICON_AUDIO, true); | 1195 | lcd_icon(ICON_AUDIO, true); |
1244 | retval = player_id3_show(); | 1196 | if(player_id3_show() == SYS_USB_CONNECTED) |
1245 | if(retval == SYS_USB_CONNECTED) | 1197 | return true; |
1246 | return SYS_USB_CONNECTED; | ||
1247 | lcd_icon(ICON_PARAM, false); | 1198 | lcd_icon(ICON_PARAM, false); |
1248 | lcd_icon(ICON_AUDIO, true); | 1199 | lcd_icon(ICON_AUDIO, true); |
1249 | draw_screen(id3); | 1200 | draw_screen(); |
1250 | break; | 1201 | break; |
1202 | #endif | ||
1251 | 1203 | ||
1252 | case BUTTON_MENU: | 1204 | case SYS_USB_CONNECTED: |
1253 | lcd_icon(ICON_PARAM, true); | 1205 | handle_usb(); |
1254 | lcd_icon(ICON_AUDIO, false); | 1206 | return true; |
1255 | menu_button_is_down = true; | 1207 | } |
1256 | break; | 1208 | last_button = button; |
1209 | } | ||
1257 | 1210 | ||
1258 | case BUTTON_PLAY | BUTTON_REL: | 1211 | #ifdef HAVE_LCD_CHARCELLS |
1259 | /* The PLAY key has been release while the MENU key | 1212 | lcd_icon(ICON_PARAM, false); |
1260 | was held */ | 1213 | #endif |
1261 | if(menu_button_is_down) | ||
1262 | pending_mute = !pending_mute; | ||
1263 | break; | ||
1264 | 1214 | ||
1265 | case BUTTON_STOP | BUTTON_REL: | 1215 | draw_screen(); |
1266 | /* The STOP key has been release while the MENU key | 1216 | |
1267 | was held */ | 1217 | return false; |
1268 | if(menu_button_is_down) | 1218 | } |
1269 | pending_keylock = !pending_keylock; | 1219 | |
1270 | break; | 1220 | /* demonstrates showing different formats from playtune */ |
1271 | #else | 1221 | int wps_show(void) |
1272 | case BUTTON_F1: | 1222 | { |
1273 | menu_button_is_down = true; | 1223 | |
1274 | break; | 1224 | #ifdef HAVE_PLAYER_KEYPAD |
1275 | 1225 | int retval; | |
1276 | case BUTTON_UP | BUTTON_REL: | ||
1277 | /* The UP key has been release while the F1 key | ||
1278 | was held */ | ||
1279 | if(menu_button_is_down) | ||
1280 | { | ||
1281 | pending_mute = !pending_mute; | ||
1282 | debugf("pending: %d\n", pending_mute); | ||
1283 | } | ||
1284 | break; | ||
1285 | |||
1286 | case BUTTON_DOWN | BUTTON_REL: | ||
1287 | /* The DOWN key has been release while the F1 key | ||
1288 | was held */ | ||
1289 | if(menu_button_is_down) | ||
1290 | { | ||
1291 | pending_keylock = !pending_keylock; | ||
1292 | debugf("pending: %d\n", pending_keylock); | ||
1293 | } | ||
1294 | break; | ||
1295 | #endif | 1226 | #endif |
1227 | int button; | ||
1228 | bool ignore_keyup = true; | ||
1229 | bool restore = false; | ||
1296 | 1230 | ||
1297 | #ifdef HAVE_RECORDER_KEYPAD | 1231 | id3 = NULL; |
1298 | case BUTTON_F1 | BUTTON_UP: | 1232 | |
1233 | old_release_mask = button_set_release(RELEASE_MASK); | ||
1234 | |||
1235 | #ifdef HAVE_LCD_CHARCELLS | ||
1236 | lcd_icon(ICON_AUDIO, true); | ||
1237 | lcd_icon(ICON_PARAM, false); | ||
1299 | #else | 1238 | #else |
1300 | case BUTTON_MENU | BUTTON_PLAY: | 1239 | if(global_settings.statusbar) |
1240 | lcd_setmargins(0, STATUSBAR_HEIGHT); | ||
1241 | else | ||
1242 | lcd_setmargins(0, 0); | ||
1243 | #endif | ||
1244 | |||
1245 | ff_rewind = false; | ||
1246 | ff_rewind_count = 0; | ||
1247 | |||
1248 | #ifdef CUSTOM_WPS | ||
1249 | load_custom_wps(); /* Load the Custom WPS file, if there is one */ | ||
1250 | #endif | ||
1251 | |||
1252 | if(mpeg_is_playing()) | ||
1253 | { | ||
1254 | id3 = mpeg_current_track(); | ||
1255 | if (id3) { | ||
1256 | draw_screen(); | ||
1257 | display_file_time(); | ||
1258 | } | ||
1259 | restore = true; | ||
1260 | } | ||
1261 | |||
1262 | while ( 1 ) | ||
1263 | { | ||
1264 | button = button_get_w_tmo(HZ/5); | ||
1265 | |||
1266 | /* discard first event if it's a button release */ | ||
1267 | if (button && ignore_keyup) | ||
1268 | { | ||
1269 | ignore_keyup = false; | ||
1270 | if (button & BUTTON_REL && button != SYS_USB_CONNECTED) | ||
1271 | continue; | ||
1272 | } | ||
1273 | |||
1274 | switch(button) | ||
1275 | { | ||
1276 | /* exit to dir browser */ | ||
1277 | case BUTTON_ON: | ||
1278 | #ifdef HAVE_LCD_CHARCELLS | ||
1279 | lcd_icon(ICON_RECORD, false); | ||
1280 | lcd_icon(ICON_AUDIO, false); | ||
1301 | #endif | 1281 | #endif |
1302 | if(keys_locked) | 1282 | button_set_release(old_release_mask); |
1283 | return 0; | ||
1284 | |||
1285 | /* play/pause */ | ||
1286 | case BUTTON_PLAY: | ||
1287 | if ( paused ) | ||
1303 | { | 1288 | { |
1304 | display_keylock_text(keys_locked); | 1289 | mpeg_resume(); |
1305 | restore = true; | 1290 | paused = false; |
1306 | break; | 1291 | status_set_playmode(STATUS_PLAY); |
1307 | } | 1292 | } |
1308 | 1293 | else | |
1309 | if(device_muted != pending_mute) | ||
1310 | { | 1294 | { |
1311 | device_muted = pending_mute; | 1295 | mpeg_pause(); |
1312 | 1296 | paused = true; | |
1313 | if(device_muted) | 1297 | status_set_playmode(STATUS_PAUSE); |
1314 | mpeg_sound_set(SOUND_VOLUME, 0); | 1298 | if (global_settings.resume) { |
1315 | else | 1299 | settings_save(); |
1316 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | 1300 | #ifndef HAVE_RTC |
1317 | display_mute_text(device_muted); | 1301 | ata_flush(); |
1318 | restore = true; | 1302 | #endif |
1303 | } | ||
1319 | } | 1304 | } |
1320 | dont_go_to_menu = true; | ||
1321 | break; | 1305 | break; |
1322 | 1306 | ||
1307 | /* volume up */ | ||
1323 | #ifdef HAVE_RECORDER_KEYPAD | 1308 | #ifdef HAVE_RECORDER_KEYPAD |
1324 | case BUTTON_F1 | BUTTON_DOWN: | 1309 | case BUTTON_UP: |
1325 | #else | 1310 | case BUTTON_UP | BUTTON_REPEAT: |
1326 | case BUTTON_MENU | BUTTON_STOP: | ||
1327 | #endif | 1311 | #endif |
1328 | if(keys_locked != pending_keylock) | 1312 | case BUTTON_VOL_UP: |
1329 | { | 1313 | global_settings.volume++; |
1330 | keys_locked = pending_keylock; | 1314 | if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) |
1315 | global_settings.volume = mpeg_sound_max(SOUND_VOLUME); | ||
1316 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
1317 | status_draw(); | ||
1318 | settings_save(); | ||
1319 | break; | ||
1331 | 1320 | ||
1332 | #ifdef HAVE_LCD_CHARCELLS | 1321 | /* volume down */ |
1333 | if(keys_locked) | 1322 | #ifdef HAVE_RECORDER_KEYPAD |
1334 | lcd_icon(ICON_RECORD, true); | 1323 | case BUTTON_DOWN: |
1335 | else | 1324 | case BUTTON_DOWN | BUTTON_REPEAT: |
1336 | lcd_icon(ICON_RECORD, false); | ||
1337 | #endif | 1325 | #endif |
1338 | display_keylock_text(keys_locked); | 1326 | case BUTTON_VOL_DOWN: |
1339 | restore = true; | 1327 | global_settings.volume--; |
1328 | if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) | ||
1329 | global_settings.volume = mpeg_sound_min(SOUND_VOLUME); | ||
1330 | mpeg_sound_set(SOUND_VOLUME, global_settings.volume); | ||
1331 | status_draw(); | ||
1332 | settings_save(); | ||
1333 | break; | ||
1334 | |||
1335 | /* fast forward / rewind */ | ||
1336 | case BUTTON_LEFT | BUTTON_REPEAT: | ||
1337 | case BUTTON_RIGHT | BUTTON_REPEAT: | ||
1338 | ffwd_rew(button); | ||
1339 | break; | ||
1340 | |||
1341 | /* prev / restart */ | ||
1342 | case BUTTON_LEFT | BUTTON_REL: | ||
1343 | if (!id3 || (id3->elapsed < 3*1000)) | ||
1344 | mpeg_prev(); | ||
1345 | else { | ||
1346 | if (!paused) | ||
1347 | mpeg_pause(); | ||
1348 | |||
1349 | mpeg_ff_rewind(-(id3->elapsed)); | ||
1350 | |||
1351 | if (!paused) | ||
1352 | mpeg_resume(); | ||
1340 | } | 1353 | } |
1354 | break; | ||
1341 | 1355 | ||
1342 | dont_go_to_menu = true; | 1356 | /* next */ |
1357 | case BUTTON_RIGHT | BUTTON_REL: | ||
1358 | mpeg_next(); | ||
1343 | break; | 1359 | break; |
1344 | 1360 | ||
1345 | #ifdef HAVE_RECORDER_KEYPAD | 1361 | /* menu key functions */ |
1346 | case BUTTON_F1 | BUTTON_REL: | 1362 | #ifdef HAVE_PLAYER_KEYPAD |
1363 | case BUTTON_MENU: | ||
1347 | #else | 1364 | #else |
1348 | case BUTTON_MENU | BUTTON_REL: | 1365 | case BUTTON_F1: |
1349 | #endif | ||
1350 | #ifdef HAVE_LCD_CHARCELLS | ||
1351 | lcd_icon(ICON_PARAM, false); | ||
1352 | #endif | ||
1353 | if(!keys_locked && !dont_go_to_menu && menu_button_is_down) | ||
1354 | { | ||
1355 | lcd_stop_scroll(); | ||
1356 | button_set_release(old_release_mask); | ||
1357 | main_menu(); | ||
1358 | old_release_mask = button_set_release(RELEASE_MASK); | ||
1359 | ignore_keyup = true; | ||
1360 | id3 = mpeg_current_track(); | ||
1361 | restore = true; | ||
1362 | } | ||
1363 | else | ||
1364 | { | ||
1365 | dont_go_to_menu = false; | ||
1366 | } | ||
1367 | #ifdef HAVE_LCD_CHARCELLS | ||
1368 | lcd_icon(ICON_AUDIO, true); | ||
1369 | #endif | 1366 | #endif |
1370 | menu_button_is_down = false; | 1367 | if (menu()) |
1368 | return SYS_USB_CONNECTED; | ||
1371 | break; | 1369 | break; |
1372 | 1370 | ||
1371 | /* toggle status bar */ | ||
1373 | #ifdef HAVE_RECORDER_KEYPAD | 1372 | #ifdef HAVE_RECORDER_KEYPAD |
1374 | case BUTTON_F3: | 1373 | case BUTTON_F3: |
1375 | #ifdef HAVE_LCD_BITMAP | 1374 | #ifdef HAVE_LCD_BITMAP |
@@ -1384,18 +1383,12 @@ int wps_show(void) | |||
1384 | break; | 1383 | break; |
1385 | #endif | 1384 | #endif |
1386 | 1385 | ||
1386 | /* stop and exit wps */ | ||
1387 | #ifdef HAVE_RECORDER_KEYPAD | 1387 | #ifdef HAVE_RECORDER_KEYPAD |
1388 | case BUTTON_OFF: | 1388 | case BUTTON_OFF: |
1389 | #else | 1389 | #else |
1390 | case BUTTON_STOP: | 1390 | case BUTTON_STOP: |
1391 | #endif | 1391 | #endif |
1392 | if (keys_locked) | ||
1393 | { | ||
1394 | display_keylock_text(keys_locked); | ||
1395 | restore = true; | ||
1396 | break; | ||
1397 | } | ||
1398 | |||
1399 | #ifdef HAVE_LCD_CHARCELLS | 1392 | #ifdef HAVE_LCD_CHARCELLS |
1400 | lcd_icon(ICON_RECORD, false); | 1393 | lcd_icon(ICON_RECORD, false); |
1401 | lcd_icon(ICON_AUDIO, false); | 1394 | lcd_icon(ICON_AUDIO, false); |
@@ -1406,62 +1399,27 @@ int wps_show(void) | |||
1406 | return 0; | 1399 | return 0; |
1407 | 1400 | ||
1408 | #ifndef SIMULATOR | 1401 | #ifndef SIMULATOR |
1409 | case SYS_USB_CONNECTED: { | 1402 | case SYS_USB_CONNECTED: |
1410 | #ifdef HAVE_LCD_BITMAP | 1403 | handle_usb(); |
1411 | bool laststate=statusbar(false); | ||
1412 | #endif | ||
1413 | /* Tell the USB thread that we are safe */ | ||
1414 | DEBUGF("wps got SYS_USB_CONNECTED\n"); | ||
1415 | usb_acknowledge(SYS_USB_CONNECTED_ACK); | ||
1416 | |||
1417 | /* Wait until the USB cable is extracted again */ | ||
1418 | usb_wait_for_disconnect(&button_queue); | ||
1419 | |||
1420 | #ifdef HAVE_LCD_BITMAP | ||
1421 | statusbar(laststate); | ||
1422 | #endif | ||
1423 | /* Signal to our caller that we have been in USB mode */ | ||
1424 | return SYS_USB_CONNECTED; | 1404 | return SYS_USB_CONNECTED; |
1425 | break; | ||
1426 | } | ||
1427 | #endif | 1405 | #endif |
1428 | case BUTTON_NONE: /* Timeout */ | ||
1429 | if(!mpeg_is_playing()) | ||
1430 | restore = true; | ||
1431 | |||
1432 | if (id3) | ||
1433 | #ifdef CUSTOM_WPS | ||
1434 | refresh_wps(false); | ||
1435 | #else | ||
1436 | display_file_time(id3->elapsed, id3->length); | ||
1437 | #endif | ||
1438 | |||
1439 | /* save resume data */ | ||
1440 | if ( id3 && | ||
1441 | global_settings.resume && | ||
1442 | global_settings.resume_offset != id3->offset ) { | ||
1443 | DEBUGF("R%X,%X (%X)\n", global_settings.resume_offset, | ||
1444 | id3->offset,id3); | ||
1445 | global_settings.resume_index = id3->index; | ||
1446 | global_settings.resume_offset = id3->offset; | ||
1447 | settings_save(); | ||
1448 | } | ||
1449 | 1406 | ||
1450 | status_draw(); | 1407 | case BUTTON_NONE: /* Timeout */ |
1408 | update(); | ||
1451 | break; | 1409 | break; |
1452 | } | 1410 | } |
1453 | 1411 | ||
1454 | if ( button ) | 1412 | if ( button ) |
1455 | ata_spin(); | 1413 | ata_spin(); |
1456 | 1414 | ||
1457 | if(restore) { | 1415 | if (restore) { |
1458 | restore = false; | 1416 | restore = false; |
1459 | draw_screen(id3); | 1417 | draw_screen(); |
1460 | if (mpeg_is_playing() && id3) | 1418 | if (id3) |
1461 | #ifdef CUSTOM_WPS | 1419 | #ifdef CUSTOM_WPS |
1462 | refresh_wps(false); | 1420 | refresh_wps(false); |
1463 | #else | 1421 | #else |
1464 | display_file_time(id3->elapsed, id3->length); | 1422 | display_file_time(); |
1465 | #endif | 1423 | #endif |
1466 | } | 1424 | } |
1467 | } | 1425 | } |