diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/settings.c | 1 | ||||
-rw-r--r-- | apps/settings.h | 4 | ||||
-rw-r--r-- | apps/settings_menu.c | 7 | ||||
-rw-r--r-- | apps/wps.c | 184 |
4 files changed, 148 insertions, 48 deletions
diff --git a/apps/settings.c b/apps/settings.c index 6abdd822b5..ef51727105 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -357,6 +357,7 @@ void settings_reset(void) { | |||
357 | global_settings.discharge = 0; | 357 | global_settings.discharge = 0; |
358 | global_settings.total_uptime = 0; | 358 | global_settings.total_uptime = 0; |
359 | global_settings.scroll_speed = 8; | 359 | global_settings.scroll_speed = 8; |
360 | global_settings.ff_rewind = DEFAULT_FF_REWIND_SETTING; | ||
360 | } | 361 | } |
361 | 362 | ||
362 | 363 | ||
diff --git a/apps/settings.h b/apps/settings.h index 6175ef942d..115aab0f74 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -69,6 +69,9 @@ struct user_settings | |||
69 | 69 | ||
70 | /* geeky persistent statistics */ | 70 | /* geeky persistent statistics */ |
71 | unsigned int total_uptime; /* total uptime since rockbox was first booted */ | 71 | unsigned int total_uptime; /* total uptime since rockbox was first booted */ |
72 | |||
73 | /* FF/Rewind step size (in seconds) */ | ||
74 | int ff_rewind; | ||
72 | }; | 75 | }; |
73 | 76 | ||
74 | /* prototypes */ | 77 | /* prototypes */ |
@@ -112,5 +115,6 @@ extern struct user_settings global_settings; | |||
112 | #define DEFAULT_POWEROFF_SETTING 0 | 115 | #define DEFAULT_POWEROFF_SETTING 0 |
113 | #define DEFAULT_BACKLIGHT_SETTING 5 | 116 | #define DEFAULT_BACKLIGHT_SETTING 5 |
114 | #define DEFAULT_WPS_DISPLAY 0 | 117 | #define DEFAULT_WPS_DISPLAY 0 |
118 | #define DEFAULT_FF_REWIND_SETTING 2 | ||
115 | 119 | ||
116 | #endif /* __SETTINGS_H__ */ | 120 | #endif /* __SETTINGS_H__ */ |
diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 0dbe50d9cb..3def0574a1 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c | |||
@@ -132,6 +132,12 @@ static void timedate_set(void) | |||
132 | } | 132 | } |
133 | #endif | 133 | #endif |
134 | 134 | ||
135 | static void ff_rewind(void) | ||
136 | { | ||
137 | set_int("[FF/Rewind Step Size]", "s", &global_settings.ff_rewind, | ||
138 | NULL, 1, 1, 999 ); | ||
139 | } | ||
140 | |||
135 | void settings_menu(void) | 141 | void settings_menu(void) |
136 | { | 142 | { |
137 | int m; | 143 | int m; |
@@ -152,6 +158,7 @@ void settings_menu(void) | |||
152 | #ifdef HAVE_RTC | 158 | #ifdef HAVE_RTC |
153 | { "Time/Date", timedate_set }, | 159 | { "Time/Date", timedate_set }, |
154 | #endif | 160 | #endif |
161 | { "FF/Rewind", ff_rewind }, | ||
155 | }; | 162 | }; |
156 | bool old_shuffle = global_settings.playlist_shuffle; | 163 | bool old_shuffle = global_settings.playlist_shuffle; |
157 | 164 | ||
diff --git a/apps/wps.c b/apps/wps.c index acb6d90a13..f80cec95a4 100644 --- a/apps/wps.c +++ b/apps/wps.c | |||
@@ -54,12 +54,13 @@ | |||
54 | #define PLAY_DISPLAY_TRACK_TITLE 2 | 54 | #define PLAY_DISPLAY_TRACK_TITLE 2 |
55 | 55 | ||
56 | #ifdef HAVE_RECORDER_KEYPAD | 56 | #ifdef HAVE_RECORDER_KEYPAD |
57 | #define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN) | 57 | #define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN | BUTTON_LEFT | BUTTON_RIGHT) |
58 | #else | 58 | #else |
59 | #define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP) | 59 | #define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP | BUTTON_LEFT | BUTTON_RIGHT) |
60 | #endif | 60 | #endif |
61 | 61 | ||
62 | bool keys_locked = false; | 62 | bool keys_locked = false; |
63 | static bool ff_rewind = false; | ||
63 | 64 | ||
64 | static void draw_screen(struct mp3entry* id3) | 65 | static void draw_screen(struct mp3entry* id3) |
65 | { | 66 | { |
@@ -291,6 +292,39 @@ int player_id3_show(void) | |||
291 | return(0); | 292 | return(0); |
292 | } | 293 | } |
293 | 294 | ||
295 | static void display_file_time(unsigned int elapsed, unsigned int length) | ||
296 | { | ||
297 | char buffer[32]; | ||
298 | |||
299 | #ifdef HAVE_LCD_BITMAP | ||
300 | snprintf(buffer,sizeof(buffer), | ||
301 | "Time:%3d:%02d/%d:%02d", | ||
302 | elapsed / 60000, | ||
303 | elapsed % 60000 / 1000, | ||
304 | length / 60000, | ||
305 | length % 60000 / 1000 ); | ||
306 | |||
307 | lcd_puts(0, 6, buffer); | ||
308 | slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, elapsed*100/length, Grow_Right); | ||
309 | lcd_update(); | ||
310 | #else | ||
311 | /* Display time with the filename scroll only because | ||
312 | the screen has room. */ | ||
313 | if ((global_settings.wps_display == PLAY_DISPLAY_FILENAME_SCROLL) || | ||
314 | ff_rewind ) | ||
315 | { | ||
316 | snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ", | ||
317 | elapsed / 60000, | ||
318 | elapsed % 60000 / 1000, | ||
319 | length / 60000, | ||
320 | length % 60000 / 1000 ); | ||
321 | |||
322 | lcd_puts(0, 1, buffer); | ||
323 | lcd_update(); | ||
324 | } | ||
325 | #endif | ||
326 | } | ||
327 | |||
294 | void display_keylock_text(bool locked) | 328 | void display_keylock_text(bool locked) |
295 | { | 329 | { |
296 | lcd_stop_scroll(); | 330 | lcd_stop_scroll(); |
@@ -354,7 +388,7 @@ int wps_show(void) | |||
354 | bool pending_keylock = true; /* Keylock will go ON next time */ | 388 | bool pending_keylock = true; /* Keylock will go ON next time */ |
355 | int old_release_mask; | 389 | int old_release_mask; |
356 | int button; | 390 | int button; |
357 | char buffer[32]; | 391 | int ff_rewind_count = 0; |
358 | 392 | ||
359 | old_release_mask = button_set_release(RELEASE_MASK); | 393 | old_release_mask = button_set_release(RELEASE_MASK); |
360 | 394 | ||
@@ -461,26 +495,112 @@ int wps_show(void) | |||
461 | status_draw(); | 495 | status_draw(); |
462 | break; | 496 | break; |
463 | 497 | ||
464 | case BUTTON_LEFT: | 498 | case BUTTON_LEFT | BUTTON_REPEAT: |
465 | if (keys_locked) | 499 | if (!keys_locked) |
466 | { | 500 | { |
467 | display_keylock_text(keys_locked); | 501 | if (ff_rewind) |
502 | { | ||
503 | ff_rewind_count -= global_settings.ff_rewind*1000; | ||
504 | } | ||
505 | else | ||
506 | { | ||
507 | if ( mpeg_is_playing() && id3 && id3->length ) | ||
508 | { | ||
509 | mpeg_pause(); | ||
510 | status_set_playmode(STATUS_FASTBACKWARD); | ||
511 | status_draw(); | ||
512 | ff_rewind = true; | ||
513 | ff_rewind_count = -global_settings.ff_rewind*1000; | ||
514 | } | ||
515 | else | ||
516 | break; | ||
517 | } | ||
518 | |||
519 | if ((int)(id3->elapsed + ff_rewind_count) < 0) | ||
520 | ff_rewind_count = -id3->elapsed; | ||
521 | |||
522 | display_file_time(id3->elapsed + ff_rewind_count, | ||
523 | id3->length); | ||
524 | } | ||
525 | break; | ||
526 | |||
527 | case BUTTON_RIGHT | BUTTON_REPEAT: | ||
528 | if (!keys_locked) | ||
529 | { | ||
530 | if (ff_rewind) | ||
531 | { | ||
532 | ff_rewind_count += global_settings.ff_rewind*1000; | ||
533 | } | ||
534 | else | ||
535 | { | ||
536 | if ( mpeg_is_playing() && id3 && id3->length ) | ||
537 | { | ||
538 | mpeg_pause(); | ||
539 | status_set_playmode(STATUS_FASTFORWARD); | ||
540 | status_draw(); | ||
541 | ff_rewind = true; | ||
542 | ff_rewind_count = global_settings.ff_rewind*1000; | ||
543 | } | ||
544 | else | ||
545 | break; | ||
546 | } | ||
547 | |||
548 | if ((id3->elapsed + ff_rewind_count) > id3->length) | ||
549 | ff_rewind_count = id3->length - id3->elapsed; | ||
550 | |||
551 | display_file_time(id3->elapsed + ff_rewind_count, | ||
552 | id3->length); | ||
553 | } | ||
554 | break; | ||
555 | |||
556 | case BUTTON_LEFT | BUTTON_REL: | ||
557 | if (ff_rewind) | ||
558 | { | ||
559 | /* rewind */ | ||
560 | mpeg_ff_rewind(ff_rewind_count); | ||
561 | ff_rewind_count = 0; | ||
562 | ff_rewind = false; | ||
563 | status_set_playmode(STATUS_PLAY); | ||
564 | #ifdef HAVE_LCD_CHARCELLS | ||
468 | draw_screen(id3); | 565 | draw_screen(id3); |
469 | break; | 566 | #endif |
567 | } | ||
568 | else | ||
569 | { | ||
570 | if (keys_locked) | ||
571 | { | ||
572 | display_keylock_text(keys_locked); | ||
573 | draw_screen(id3); | ||
574 | break; | ||
575 | } | ||
576 | mpeg_prev(); | ||
577 | status_set_playmode(STATUS_PLAY); | ||
470 | } | 578 | } |
471 | mpeg_prev(); | ||
472 | status_set_playmode(STATUS_PLAY); | ||
473 | break; | 579 | break; |
474 | 580 | ||
475 | case BUTTON_RIGHT: | 581 | case BUTTON_RIGHT | BUTTON_REL: |
476 | if (keys_locked) | 582 | if (ff_rewind) |
477 | { | 583 | { |
478 | display_keylock_text(keys_locked); | 584 | /* fast forward */ |
585 | mpeg_ff_rewind(ff_rewind_count); | ||
586 | ff_rewind_count = 0; | ||
587 | ff_rewind = false; | ||
588 | status_set_playmode(STATUS_PLAY); | ||
589 | #ifdef HAVE_LCD_CHARCELLS | ||
479 | draw_screen(id3); | 590 | draw_screen(id3); |
480 | break; | 591 | #endif |
592 | } | ||
593 | else | ||
594 | { | ||
595 | if (keys_locked) | ||
596 | { | ||
597 | display_keylock_text(keys_locked); | ||
598 | draw_screen(id3); | ||
599 | break; | ||
600 | } | ||
601 | mpeg_next(); | ||
602 | status_set_playmode(STATUS_PLAY); | ||
481 | } | 603 | } |
482 | mpeg_next(); | ||
483 | status_set_playmode(STATUS_PLAY); | ||
484 | break; | 604 | break; |
485 | 605 | ||
486 | #ifdef HAVE_PLAYER_KEYPAD | 606 | #ifdef HAVE_PLAYER_KEYPAD |
@@ -683,39 +803,7 @@ int wps_show(void) | |||
683 | #endif | 803 | #endif |
684 | case BUTTON_NONE: /* Timeout */ | 804 | case BUTTON_NONE: /* Timeout */ |
685 | if (mpeg_is_playing() && id3) | 805 | if (mpeg_is_playing() && id3) |
686 | { | 806 | display_file_time(id3->elapsed, id3->length); |
687 | #ifdef HAVE_LCD_BITMAP | ||
688 | snprintf(buffer,sizeof(buffer), | ||
689 | "Time:%3d:%02d/%d:%02d", | ||
690 | id3->elapsed / 60000, | ||
691 | id3->elapsed % 60000 / 1000, | ||
692 | id3->length / 60000, | ||
693 | id3->length % 60000 / 1000 ); | ||
694 | |||
695 | lcd_puts(0, 6, buffer); | ||
696 | |||
697 | slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, | ||
698 | id3->elapsed*100/id3->length, | ||
699 | Grow_Right); | ||
700 | |||
701 | lcd_update(); | ||
702 | #else | ||
703 | /* Display time with the filename scroll only because | ||
704 | the screen has room. */ | ||
705 | if (global_settings.wps_display == | ||
706 | PLAY_DISPLAY_FILENAME_SCROLL) | ||
707 | { | ||
708 | snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ", | ||
709 | id3->elapsed / 60000, | ||
710 | id3->elapsed % 60000 / 1000, | ||
711 | id3->length / 60000, | ||
712 | id3->length % 60000 / 1000 ); | ||
713 | |||
714 | lcd_puts(0, 1, buffer); | ||
715 | lcd_update(); | ||
716 | } | ||
717 | #endif | ||
718 | } | ||
719 | 807 | ||
720 | status_draw(); | 808 | status_draw(); |
721 | break; | 809 | break; |