forked from len0rd/rockbox
Refactored. States are now handled in separate functions instead of using state variables.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2064 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
a487ef2acd
commit
87a4ed5731
1 changed files with 448 additions and 490 deletions
780
apps/wps.c
780
apps/wps.c
|
|
@ -68,10 +68,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool keys_locked = false;
|
bool keys_locked = false;
|
||||||
bool device_muted = false;
|
|
||||||
static bool ff_rewind = false;
|
static bool ff_rewind = false;
|
||||||
static bool paused = false;
|
static bool paused = false;
|
||||||
int ff_rewind_count = 0;
|
static int ff_rewind_count = 0;
|
||||||
|
static struct mp3entry* id3 = NULL;
|
||||||
|
static int old_release_mask;
|
||||||
|
|
||||||
#ifdef CUSTOM_WPS
|
#ifdef CUSTOM_WPS
|
||||||
static char custom_wps[5][64];
|
static char custom_wps[5][64];
|
||||||
|
|
@ -80,7 +81,7 @@ static int scroll_line;
|
||||||
static int scroll_line_custom;
|
static int scroll_line_custom;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void draw_screen(struct mp3entry* id3)
|
static void draw_screen(void)
|
||||||
{
|
{
|
||||||
int font_height;
|
int font_height;
|
||||||
|
|
||||||
|
|
@ -327,9 +328,6 @@ bool refresh_wps(bool refresh_scroll)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct mp3entry* id3 = NULL;
|
|
||||||
id3 = mpeg_current_track();
|
|
||||||
|
|
||||||
if(!id3)
|
if(!id3)
|
||||||
{
|
{
|
||||||
lcd_stop_scroll();
|
lcd_stop_scroll();
|
||||||
|
|
@ -437,10 +435,8 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string)
|
||||||
char cchr3;
|
char cchr3;
|
||||||
unsigned int seek;
|
unsigned int seek;
|
||||||
|
|
||||||
struct mp3entry* id3 = NULL;
|
|
||||||
char* szLast;
|
char* szLast;
|
||||||
|
|
||||||
id3 = mpeg_current_track();
|
|
||||||
szLast = strrchr(id3->path, '/');
|
szLast = strrchr(id3->path, '/');
|
||||||
if(szLast)
|
if(szLast)
|
||||||
/* point to the first letter in the file name */
|
/* point to the first letter in the file name */
|
||||||
|
|
@ -623,7 +619,6 @@ int player_id3_show(void)
|
||||||
int menu_max = 6;
|
int menu_max = 6;
|
||||||
bool menu_changed = true;
|
bool menu_changed = true;
|
||||||
char scroll_text[MAX_PATH];
|
char scroll_text[MAX_PATH];
|
||||||
struct mp3entry* id3 = NULL;
|
|
||||||
|
|
||||||
lcd_stop_scroll();
|
lcd_stop_scroll();
|
||||||
lcd_clear_display();
|
lcd_clear_display();
|
||||||
|
|
@ -633,7 +628,6 @@ int player_id3_show(void)
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
id3 = mpeg_current_track();
|
|
||||||
button = button_get(false);
|
button = button_get(false);
|
||||||
|
|
||||||
switch(button)
|
switch(button)
|
||||||
|
|
@ -727,7 +721,6 @@ int player_id3_show(void)
|
||||||
lcd_puts_scroll(0, 1, scroll_text);
|
lcd_puts_scroll(0, 1, scroll_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
status_draw();
|
|
||||||
lcd_update();
|
lcd_update();
|
||||||
yield();
|
yield();
|
||||||
}
|
}
|
||||||
|
|
@ -736,9 +729,10 @@ int player_id3_show(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CUSTOM_WPS
|
#ifndef CUSTOM_WPS
|
||||||
static void display_file_time(unsigned int elapsed, unsigned int length)
|
static void display_file_time(void)
|
||||||
{
|
{
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
|
int elapsed = id3->elapsed + ff_rewind_count;
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
int line;
|
int line;
|
||||||
|
|
@ -750,11 +744,12 @@ static void display_file_time(unsigned int elapsed, unsigned int length)
|
||||||
"Time:%3d:%02d/%d:%02d",
|
"Time:%3d:%02d/%d:%02d",
|
||||||
elapsed / 60000,
|
elapsed / 60000,
|
||||||
elapsed % 60000 / 1000,
|
elapsed % 60000 / 1000,
|
||||||
length / 60000,
|
id3->length / 60000,
|
||||||
length % 60000 / 1000 );
|
id3->length % 60000 / 1000 );
|
||||||
|
|
||||||
lcd_puts(0, line, buffer);
|
lcd_puts(0, line, buffer);
|
||||||
slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, elapsed*100/length, Grow_Right);
|
slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6,
|
||||||
|
elapsed*100/id3->length, Grow_Right);
|
||||||
lcd_update();
|
lcd_update();
|
||||||
#else
|
#else
|
||||||
/* Display time with the filename scroll only because
|
/* Display time with the filename scroll only because
|
||||||
|
|
@ -767,8 +762,8 @@ static void display_file_time(unsigned int elapsed, unsigned int length)
|
||||||
snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ",
|
snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ",
|
||||||
elapsed / 60000,
|
elapsed / 60000,
|
||||||
elapsed % 60000 / 1000,
|
elapsed % 60000 / 1000,
|
||||||
length / 60000,
|
id3->length / 60000,
|
||||||
length % 60000 / 1000 );
|
id3->length % 60000 / 1000 );
|
||||||
|
|
||||||
lcd_puts(0, 1, buffer);
|
lcd_puts(0, 1, buffer);
|
||||||
lcd_update();
|
lcd_update();
|
||||||
|
|
@ -813,7 +808,6 @@ void display_keylock_text(bool locked)
|
||||||
{
|
{
|
||||||
lcd_puts(2, 3, "Key lock is OFF");
|
lcd_puts(2, 3, "Key lock is OFF");
|
||||||
}
|
}
|
||||||
status_draw();
|
|
||||||
lcd_update();
|
lcd_update();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -839,167 +833,42 @@ void display_mute_text(bool muted)
|
||||||
{
|
{
|
||||||
lcd_puts(2, 3, "Mute is OFF");
|
lcd_puts(2, 3, "Mute is OFF");
|
||||||
}
|
}
|
||||||
status_draw();
|
|
||||||
lcd_update();
|
lcd_update();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sleep(HZ);
|
sleep(HZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* demonstrates showing different formats from playtune */
|
static void handle_usb(void)
|
||||||
int wps_show(void)
|
|
||||||
{
|
{
|
||||||
struct mp3entry* id3 = NULL;
|
#ifndef SIMULATOR
|
||||||
|
#ifdef HAVE_LCD_BITMAP
|
||||||
#ifdef HAVE_PLAYER_KEYPAD
|
bool laststate=statusbar(false);
|
||||||
int retval;
|
|
||||||
#endif
|
#endif
|
||||||
bool dont_go_to_menu = false;
|
/* Tell the USB thread that we are safe */
|
||||||
bool menu_button_is_down = false;
|
DEBUGF("wps got SYS_USB_CONNECTED\n");
|
||||||
bool pending_keylock = true; /* Keylock will go ON next time */
|
usb_acknowledge(SYS_USB_CONNECTED_ACK);
|
||||||
bool pending_mute = true; /* Mute will go ON next time */
|
|
||||||
int old_release_mask;
|
/* Wait until the USB cable is extracted again */
|
||||||
int button;
|
usb_wait_for_disconnect(&button_queue);
|
||||||
|
|
||||||
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
statusbar(laststate);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool ffwd_rew(int button)
|
||||||
|
{
|
||||||
unsigned int ff_rewind_step = 0; /* current rewind step size */
|
unsigned int ff_rewind_step = 0; /* current rewind step size */
|
||||||
unsigned int ff_rewind_max_step = 0; /* max rewind step size */
|
unsigned int ff_rewind_max_step = 0; /* max rewind step size */
|
||||||
long ff_rewind_accel_tick = 0; /* next time to bump ff/rewind step size */
|
long ff_rewind_accel_tick = 0; /* next time to bump ff/rewind step size */
|
||||||
bool ignore_keyup = true;
|
bool exit = false;
|
||||||
bool restore = false;
|
bool usb = false;
|
||||||
|
|
||||||
old_release_mask = button_set_release(RELEASE_MASK);
|
|
||||||
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
|
||||||
lcd_icon(ICON_AUDIO, true);
|
|
||||||
lcd_icon(ICON_PARAM, false);
|
|
||||||
#else
|
|
||||||
if(global_settings.statusbar)
|
|
||||||
lcd_setmargins(0, STATUSBAR_HEIGHT);
|
|
||||||
else
|
|
||||||
lcd_setmargins(0, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ff_rewind = false;
|
|
||||||
|
|
||||||
#ifdef CUSTOM_WPS
|
|
||||||
load_custom_wps(); /* Load the Custom WPS file, if there is one */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(mpeg_is_playing())
|
|
||||||
{
|
|
||||||
id3 = mpeg_current_track();
|
|
||||||
draw_screen(id3);
|
|
||||||
restore = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
button = button_get_w_tmo(HZ/5);
|
|
||||||
|
|
||||||
/* discard first event if it's a button release */
|
|
||||||
if (button && ignore_keyup)
|
|
||||||
{
|
|
||||||
ignore_keyup = false;
|
|
||||||
if (button & BUTTON_REL && button != SYS_USB_CONNECTED)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mpeg_has_changed_track())
|
|
||||||
{
|
|
||||||
lcd_stop_scroll();
|
|
||||||
id3 = mpeg_current_track();
|
|
||||||
draw_screen(id3);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(button)
|
|
||||||
{
|
|
||||||
case BUTTON_ON:
|
|
||||||
if (keys_locked)
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
|
||||||
lcd_icon(ICON_RECORD, false);
|
|
||||||
lcd_icon(ICON_AUDIO, false);
|
|
||||||
#endif
|
|
||||||
button_set_release(old_release_mask);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case BUTTON_PLAY:
|
|
||||||
if (keys_locked)
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !paused )
|
|
||||||
{
|
|
||||||
mpeg_pause();
|
|
||||||
paused = true;
|
|
||||||
status_set_playmode(STATUS_PAUSE);
|
|
||||||
status_draw();
|
|
||||||
if (global_settings.resume) {
|
|
||||||
settings_save();
|
|
||||||
#ifndef HAVE_RTC
|
|
||||||
ata_flush();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mpeg_resume();
|
|
||||||
paused = false;
|
|
||||||
status_set_playmode(STATUS_PLAY);
|
|
||||||
status_draw();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
|
||||||
case BUTTON_UP:
|
|
||||||
case BUTTON_UP | BUTTON_REPEAT:
|
|
||||||
#endif
|
|
||||||
case BUTTON_VOL_UP:
|
|
||||||
if (keys_locked)
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
global_settings.volume++;
|
|
||||||
if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME))
|
|
||||||
global_settings.volume = mpeg_sound_max(SOUND_VOLUME);
|
|
||||||
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
|
||||||
status_draw();
|
|
||||||
settings_save();
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
|
||||||
case BUTTON_DOWN:
|
|
||||||
case BUTTON_DOWN | BUTTON_REPEAT:
|
|
||||||
#endif
|
|
||||||
case BUTTON_VOL_DOWN:
|
|
||||||
if (keys_locked)
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
global_settings.volume--;
|
|
||||||
if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME))
|
|
||||||
global_settings.volume = mpeg_sound_min(SOUND_VOLUME);
|
|
||||||
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
|
||||||
status_draw();
|
|
||||||
settings_save();
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
while (!exit) {
|
||||||
|
switch ( button ) {
|
||||||
case BUTTON_LEFT | BUTTON_REPEAT:
|
case BUTTON_LEFT | BUTTON_REPEAT:
|
||||||
if (!keys_locked)
|
|
||||||
{
|
|
||||||
if (ff_rewind)
|
if (ff_rewind)
|
||||||
{
|
{
|
||||||
ff_rewind_count -= ff_rewind_step;
|
ff_rewind_count -= ff_rewind_step;
|
||||||
|
|
@ -1023,7 +892,6 @@ int wps_show(void)
|
||||||
lcd_stop_scroll();
|
lcd_stop_scroll();
|
||||||
#endif
|
#endif
|
||||||
status_set_playmode(STATUS_FASTBACKWARD);
|
status_set_playmode(STATUS_FASTBACKWARD);
|
||||||
status_draw();
|
|
||||||
ff_rewind = true;
|
ff_rewind = true;
|
||||||
ff_rewind_max_step =
|
ff_rewind_max_step =
|
||||||
id3->length * FF_REWIND_MAX_PERCENT / 100;
|
id3->length * FF_REWIND_MAX_PERCENT / 100;
|
||||||
|
|
@ -1044,15 +912,11 @@ int wps_show(void)
|
||||||
#ifdef CUSTOM_WPS
|
#ifdef CUSTOM_WPS
|
||||||
refresh_wps(false);
|
refresh_wps(false);
|
||||||
#else
|
#else
|
||||||
display_file_time(id3->elapsed + ff_rewind_count,
|
display_file_time();
|
||||||
id3->length);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUTTON_RIGHT | BUTTON_REPEAT:
|
case BUTTON_RIGHT | BUTTON_REPEAT:
|
||||||
if (!keys_locked)
|
|
||||||
{
|
|
||||||
if (ff_rewind)
|
if (ff_rewind)
|
||||||
{
|
{
|
||||||
ff_rewind_count += ff_rewind_step;
|
ff_rewind_count += ff_rewind_step;
|
||||||
|
|
@ -1076,7 +940,6 @@ int wps_show(void)
|
||||||
lcd_stop_scroll();
|
lcd_stop_scroll();
|
||||||
#endif
|
#endif
|
||||||
status_set_playmode(STATUS_FASTFORWARD);
|
status_set_playmode(STATUS_FASTFORWARD);
|
||||||
status_draw();
|
|
||||||
ff_rewind = true;
|
ff_rewind = true;
|
||||||
ff_rewind_max_step =
|
ff_rewind_max_step =
|
||||||
id3->length * FF_REWIND_MAX_PERCENT / 100;
|
id3->length * FF_REWIND_MAX_PERCENT / 100;
|
||||||
|
|
@ -1097,22 +960,11 @@ int wps_show(void)
|
||||||
#ifdef CUSTOM_WPS
|
#ifdef CUSTOM_WPS
|
||||||
refresh_wps(false);
|
refresh_wps(false);
|
||||||
#else
|
#else
|
||||||
display_file_time(id3->elapsed + ff_rewind_count,
|
display_file_time();
|
||||||
id3->length);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUTTON_LEFT | BUTTON_REL:
|
case BUTTON_LEFT | BUTTON_REL:
|
||||||
if (menu_button_is_down && keys_locked)
|
|
||||||
{
|
|
||||||
sleep(HZ/6);
|
|
||||||
draw_screen(id3);
|
|
||||||
}
|
|
||||||
if (!keys_locked)
|
|
||||||
{
|
|
||||||
if (ff_rewind)
|
|
||||||
{
|
|
||||||
/* rewind */
|
/* rewind */
|
||||||
mpeg_ff_rewind(ff_rewind_count);
|
mpeg_ff_rewind(ff_rewind_count);
|
||||||
ff_rewind_count = 0;
|
ff_rewind_count = 0;
|
||||||
|
|
@ -1124,49 +976,12 @@ int wps_show(void)
|
||||||
status_set_playmode(STATUS_PLAY);
|
status_set_playmode(STATUS_PLAY);
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
draw_screen(id3);
|
draw_screen();
|
||||||
#endif
|
#endif
|
||||||
}
|
exit = true;
|
||||||
#ifdef HAVE_PLAYER_KEYPAD
|
|
||||||
else if(!menu_button_is_down)
|
|
||||||
#else
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
if (!id3 || (id3->elapsed < 3*1000))
|
|
||||||
mpeg_prev();
|
|
||||||
else {
|
|
||||||
if (!paused)
|
|
||||||
mpeg_pause();
|
|
||||||
|
|
||||||
mpeg_ff_rewind(-(id3->elapsed));
|
|
||||||
|
|
||||||
if (!paused)
|
|
||||||
mpeg_resume();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef HAVE_PLAYER_KEYPAD
|
|
||||||
else if(!menu_button_is_down)
|
|
||||||
#else
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUTTON_RIGHT | BUTTON_REL:
|
case BUTTON_RIGHT | BUTTON_REL:
|
||||||
if (menu_button_is_down && keys_locked)
|
|
||||||
{
|
|
||||||
sleep(HZ/6);
|
|
||||||
draw_screen(id3);
|
|
||||||
}
|
|
||||||
if (!keys_locked)
|
|
||||||
{
|
|
||||||
if (ff_rewind)
|
|
||||||
{
|
|
||||||
/* fast forward */
|
/* fast forward */
|
||||||
mpeg_ff_rewind(ff_rewind_count);
|
mpeg_ff_rewind(ff_rewind_count);
|
||||||
ff_rewind_count = 0;
|
ff_rewind_count = 0;
|
||||||
|
|
@ -1178,31 +993,168 @@ int wps_show(void)
|
||||||
status_set_playmode(STATUS_PLAY);
|
status_set_playmode(STATUS_PLAY);
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
draw_screen(id3);
|
draw_screen();
|
||||||
#endif
|
#endif
|
||||||
}
|
exit = true;
|
||||||
#ifdef HAVE_PLAYER_KEYPAD
|
|
||||||
else if(!menu_button_is_down)
|
|
||||||
#else
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
mpeg_next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef HAVE_PLAYER_KEYPAD
|
|
||||||
else if(!menu_button_is_down)
|
|
||||||
#else
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SYS_USB_CONNECTED:
|
||||||
|
handle_usb();
|
||||||
|
usb = true;
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!exit)
|
||||||
|
button = button_get(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return usb;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void update(void)
|
||||||
|
{
|
||||||
|
if (mpeg_has_changed_track())
|
||||||
|
{
|
||||||
|
lcd_stop_scroll();
|
||||||
|
id3 = mpeg_current_track();
|
||||||
|
draw_screen();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (id3) {
|
||||||
|
#ifdef CUSTOM_WPS
|
||||||
|
refresh_wps(false);
|
||||||
|
#else
|
||||||
|
display_file_time();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
status_draw();
|
||||||
|
|
||||||
|
/* save resume data */
|
||||||
|
if ( id3 &&
|
||||||
|
global_settings.resume &&
|
||||||
|
global_settings.resume_offset != id3->offset ) {
|
||||||
|
DEBUGF("R%X,%X (%X)\n", global_settings.resume_offset,
|
||||||
|
id3->offset,id3);
|
||||||
|
global_settings.resume_index = id3->index;
|
||||||
|
global_settings.resume_offset = id3->offset;
|
||||||
|
settings_save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool keylock(void)
|
||||||
|
{
|
||||||
|
bool exit = false;
|
||||||
|
|
||||||
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
lcd_icon(ICON_RECORD, true);
|
||||||
|
#endif
|
||||||
|
display_keylock_text(true);
|
||||||
|
keys_locked = true;
|
||||||
|
draw_screen();
|
||||||
|
status_draw();
|
||||||
|
while (button_get(false)); /* clear button queue */
|
||||||
|
|
||||||
|
while (!exit) {
|
||||||
|
switch ( button_get_w_tmo(HZ/5) ) {
|
||||||
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
|
case BUTTON_F1 | BUTTON_DOWN:
|
||||||
|
#else
|
||||||
|
case BUTTON_MENU | BUTTON_STOP:
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
lcd_icon(ICON_RECORD, false);
|
||||||
|
#endif
|
||||||
|
display_keylock_text(false);
|
||||||
|
keys_locked = false;
|
||||||
|
exit = true;
|
||||||
|
while (button_get(false)); /* clear button queue */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SYS_USB_CONNECTED:
|
||||||
|
handle_usb();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case BUTTON_NONE:
|
||||||
|
update();
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
|
case BUTTON_F1:
|
||||||
|
#else
|
||||||
|
case BUTTON_MENU:
|
||||||
|
#endif
|
||||||
|
/* ignore menu key, to avoid displaying "Keylock ON"
|
||||||
|
every time we unlock the keys */
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
display_keylock_text(true);
|
||||||
|
while (button_get(false)); /* clear button queue */
|
||||||
|
draw_screen();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool menu(void)
|
||||||
|
{
|
||||||
|
static bool muted = false;
|
||||||
|
bool exit = false;
|
||||||
|
int last_button = 0;
|
||||||
|
|
||||||
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
lcd_icon(ICON_PARAM, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while (!exit) {
|
||||||
|
int button = button_get(true);
|
||||||
|
|
||||||
|
switch ( button ) {
|
||||||
|
/* go into menu */
|
||||||
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
|
case BUTTON_F1 | BUTTON_REL:
|
||||||
|
#else
|
||||||
|
case BUTTON_MENU | BUTTON_REL:
|
||||||
|
#endif
|
||||||
|
exit = true;
|
||||||
|
if ( !last_button ) {
|
||||||
|
lcd_stop_scroll();
|
||||||
|
button_set_release(old_release_mask);
|
||||||
|
main_menu();
|
||||||
|
old_release_mask = button_set_release(RELEASE_MASK);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* mute */
|
||||||
#ifdef HAVE_PLAYER_KEYPAD
|
#ifdef HAVE_PLAYER_KEYPAD
|
||||||
|
case BUTTON_PLAY:
|
||||||
|
#else
|
||||||
|
case BUTTON_UP:
|
||||||
|
#endif
|
||||||
|
if ( muted )
|
||||||
|
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
||||||
|
else
|
||||||
|
mpeg_sound_set(SOUND_VOLUME, 0);
|
||||||
|
muted = !muted;
|
||||||
|
display_mute_text(muted);
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* key lock */
|
||||||
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
|
case BUTTON_F1 | BUTTON_DOWN:
|
||||||
|
#else
|
||||||
|
case BUTTON_MENU | BUTTON_STOP:
|
||||||
|
#endif
|
||||||
|
if (keylock())
|
||||||
|
return true;
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef HAVE_PLAYER_KEYPAD
|
||||||
|
/* change volume */
|
||||||
case BUTTON_MENU | BUTTON_LEFT:
|
case BUTTON_MENU | BUTTON_LEFT:
|
||||||
case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT:
|
case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT:
|
||||||
dont_go_to_menu = true;
|
dont_go_to_menu = true;
|
||||||
|
|
@ -1211,11 +1163,12 @@ int wps_show(void)
|
||||||
global_settings.volume = mpeg_sound_min(SOUND_VOLUME);
|
global_settings.volume = mpeg_sound_min(SOUND_VOLUME);
|
||||||
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
||||||
display_volume_level(global_settings.volume);
|
display_volume_level(global_settings.volume);
|
||||||
draw_screen(id3);
|
draw_screen();
|
||||||
status_draw();
|
status_draw();
|
||||||
settings_save();
|
settings_save();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* change volume */
|
||||||
case BUTTON_MENU | BUTTON_RIGHT:
|
case BUTTON_MENU | BUTTON_RIGHT:
|
||||||
case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT:
|
case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT:
|
||||||
dont_go_to_menu = true;
|
dont_go_to_menu = true;
|
||||||
|
|
@ -1224,11 +1177,12 @@ int wps_show(void)
|
||||||
global_settings.volume = mpeg_sound_max(SOUND_VOLUME);
|
global_settings.volume = mpeg_sound_max(SOUND_VOLUME);
|
||||||
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
||||||
display_volume_level(global_settings.volume);
|
display_volume_level(global_settings.volume);
|
||||||
draw_screen(id3);
|
draw_screen();
|
||||||
status_draw();
|
status_draw();
|
||||||
settings_save();
|
settings_save();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* show id3 tags */
|
||||||
case BUTTON_MENU | BUTTON_ON:
|
case BUTTON_MENU | BUTTON_ON:
|
||||||
if (keys_locked)
|
if (keys_locked)
|
||||||
{
|
{
|
||||||
|
|
@ -1237,139 +1191,184 @@ int wps_show(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
lcd_stop_scroll();
|
lcd_stop_scroll();
|
||||||
dont_go_to_menu = false;
|
|
||||||
menu_button_is_down = false;
|
|
||||||
lcd_icon(ICON_PARAM, true);
|
lcd_icon(ICON_PARAM, true);
|
||||||
lcd_icon(ICON_AUDIO, true);
|
lcd_icon(ICON_AUDIO, true);
|
||||||
retval = player_id3_show();
|
if(player_id3_show() == SYS_USB_CONNECTED)
|
||||||
if(retval == SYS_USB_CONNECTED)
|
return true;
|
||||||
return SYS_USB_CONNECTED;
|
|
||||||
lcd_icon(ICON_PARAM, false);
|
lcd_icon(ICON_PARAM, false);
|
||||||
lcd_icon(ICON_AUDIO, true);
|
lcd_icon(ICON_AUDIO, true);
|
||||||
draw_screen(id3);
|
draw_screen();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case BUTTON_MENU:
|
case SYS_USB_CONNECTED:
|
||||||
lcd_icon(ICON_PARAM, true);
|
handle_usb();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
last_button = button;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
lcd_icon(ICON_PARAM, false);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
draw_screen();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* demonstrates showing different formats from playtune */
|
||||||
|
int wps_show(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef HAVE_PLAYER_KEYPAD
|
||||||
|
int retval;
|
||||||
|
#endif
|
||||||
|
int button;
|
||||||
|
bool ignore_keyup = true;
|
||||||
|
bool restore = false;
|
||||||
|
|
||||||
|
id3 = NULL;
|
||||||
|
|
||||||
|
old_release_mask = button_set_release(RELEASE_MASK);
|
||||||
|
|
||||||
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
lcd_icon(ICON_AUDIO, true);
|
||||||
|
lcd_icon(ICON_PARAM, false);
|
||||||
|
#else
|
||||||
|
if(global_settings.statusbar)
|
||||||
|
lcd_setmargins(0, STATUSBAR_HEIGHT);
|
||||||
|
else
|
||||||
|
lcd_setmargins(0, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ff_rewind = false;
|
||||||
|
ff_rewind_count = 0;
|
||||||
|
|
||||||
|
#ifdef CUSTOM_WPS
|
||||||
|
load_custom_wps(); /* Load the Custom WPS file, if there is one */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(mpeg_is_playing())
|
||||||
|
{
|
||||||
|
id3 = mpeg_current_track();
|
||||||
|
if (id3) {
|
||||||
|
draw_screen();
|
||||||
|
display_file_time();
|
||||||
|
}
|
||||||
|
restore = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
button = button_get_w_tmo(HZ/5);
|
||||||
|
|
||||||
|
/* discard first event if it's a button release */
|
||||||
|
if (button && ignore_keyup)
|
||||||
|
{
|
||||||
|
ignore_keyup = false;
|
||||||
|
if (button & BUTTON_REL && button != SYS_USB_CONNECTED)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(button)
|
||||||
|
{
|
||||||
|
/* exit to dir browser */
|
||||||
|
case BUTTON_ON:
|
||||||
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
lcd_icon(ICON_RECORD, false);
|
||||||
lcd_icon(ICON_AUDIO, false);
|
lcd_icon(ICON_AUDIO, false);
|
||||||
menu_button_is_down = true;
|
#endif
|
||||||
|
button_set_release(old_release_mask);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* play/pause */
|
||||||
|
case BUTTON_PLAY:
|
||||||
|
if ( paused )
|
||||||
|
{
|
||||||
|
mpeg_resume();
|
||||||
|
paused = false;
|
||||||
|
status_set_playmode(STATUS_PLAY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mpeg_pause();
|
||||||
|
paused = true;
|
||||||
|
status_set_playmode(STATUS_PAUSE);
|
||||||
|
if (global_settings.resume) {
|
||||||
|
settings_save();
|
||||||
|
#ifndef HAVE_RTC
|
||||||
|
ata_flush();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUTTON_PLAY | BUTTON_REL:
|
/* volume up */
|
||||||
/* The PLAY key has been release while the MENU key
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
was held */
|
case BUTTON_UP:
|
||||||
if(menu_button_is_down)
|
case BUTTON_UP | BUTTON_REPEAT:
|
||||||
pending_mute = !pending_mute;
|
#endif
|
||||||
|
case BUTTON_VOL_UP:
|
||||||
|
global_settings.volume++;
|
||||||
|
if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME))
|
||||||
|
global_settings.volume = mpeg_sound_max(SOUND_VOLUME);
|
||||||
|
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
||||||
|
status_draw();
|
||||||
|
settings_save();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUTTON_STOP | BUTTON_REL:
|
/* volume down */
|
||||||
/* The STOP key has been release while the MENU key
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
was held */
|
case BUTTON_DOWN:
|
||||||
if(menu_button_is_down)
|
case BUTTON_DOWN | BUTTON_REPEAT:
|
||||||
pending_keylock = !pending_keylock;
|
#endif
|
||||||
|
case BUTTON_VOL_DOWN:
|
||||||
|
global_settings.volume--;
|
||||||
|
if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME))
|
||||||
|
global_settings.volume = mpeg_sound_min(SOUND_VOLUME);
|
||||||
|
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
||||||
|
status_draw();
|
||||||
|
settings_save();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* fast forward / rewind */
|
||||||
|
case BUTTON_LEFT | BUTTON_REPEAT:
|
||||||
|
case BUTTON_RIGHT | BUTTON_REPEAT:
|
||||||
|
ffwd_rew(button);
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* prev / restart */
|
||||||
|
case BUTTON_LEFT | BUTTON_REL:
|
||||||
|
if (!id3 || (id3->elapsed < 3*1000))
|
||||||
|
mpeg_prev();
|
||||||
|
else {
|
||||||
|
if (!paused)
|
||||||
|
mpeg_pause();
|
||||||
|
|
||||||
|
mpeg_ff_rewind(-(id3->elapsed));
|
||||||
|
|
||||||
|
if (!paused)
|
||||||
|
mpeg_resume();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* next */
|
||||||
|
case BUTTON_RIGHT | BUTTON_REL:
|
||||||
|
mpeg_next();
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* menu key functions */
|
||||||
|
#ifdef HAVE_PLAYER_KEYPAD
|
||||||
|
case BUTTON_MENU:
|
||||||
#else
|
#else
|
||||||
case BUTTON_F1:
|
case BUTTON_F1:
|
||||||
menu_button_is_down = true;
|
#endif
|
||||||
break;
|
if (menu())
|
||||||
|
return SYS_USB_CONNECTED;
|
||||||
case BUTTON_UP | BUTTON_REL:
|
|
||||||
/* The UP key has been release while the F1 key
|
|
||||||
was held */
|
|
||||||
if(menu_button_is_down)
|
|
||||||
{
|
|
||||||
pending_mute = !pending_mute;
|
|
||||||
debugf("pending: %d\n", pending_mute);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BUTTON_DOWN | BUTTON_REL:
|
|
||||||
/* The DOWN key has been release while the F1 key
|
|
||||||
was held */
|
|
||||||
if(menu_button_is_down)
|
|
||||||
{
|
|
||||||
pending_keylock = !pending_keylock;
|
|
||||||
debugf("pending: %d\n", pending_keylock);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
|
||||||
case BUTTON_F1 | BUTTON_UP:
|
|
||||||
#else
|
|
||||||
case BUTTON_MENU | BUTTON_PLAY:
|
|
||||||
#endif
|
|
||||||
if(keys_locked)
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(device_muted != pending_mute)
|
|
||||||
{
|
|
||||||
device_muted = pending_mute;
|
|
||||||
|
|
||||||
if(device_muted)
|
|
||||||
mpeg_sound_set(SOUND_VOLUME, 0);
|
|
||||||
else
|
|
||||||
mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
|
|
||||||
display_mute_text(device_muted);
|
|
||||||
restore = true;
|
|
||||||
}
|
|
||||||
dont_go_to_menu = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
|
||||||
case BUTTON_F1 | BUTTON_DOWN:
|
|
||||||
#else
|
|
||||||
case BUTTON_MENU | BUTTON_STOP:
|
|
||||||
#endif
|
|
||||||
if(keys_locked != pending_keylock)
|
|
||||||
{
|
|
||||||
keys_locked = pending_keylock;
|
|
||||||
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
|
||||||
if(keys_locked)
|
|
||||||
lcd_icon(ICON_RECORD, true);
|
|
||||||
else
|
|
||||||
lcd_icon(ICON_RECORD, false);
|
|
||||||
#endif
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
dont_go_to_menu = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
|
||||||
case BUTTON_F1 | BUTTON_REL:
|
|
||||||
#else
|
|
||||||
case BUTTON_MENU | BUTTON_REL:
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
|
||||||
lcd_icon(ICON_PARAM, false);
|
|
||||||
#endif
|
|
||||||
if(!keys_locked && !dont_go_to_menu && menu_button_is_down)
|
|
||||||
{
|
|
||||||
lcd_stop_scroll();
|
|
||||||
button_set_release(old_release_mask);
|
|
||||||
main_menu();
|
|
||||||
old_release_mask = button_set_release(RELEASE_MASK);
|
|
||||||
ignore_keyup = true;
|
|
||||||
id3 = mpeg_current_track();
|
|
||||||
restore = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dont_go_to_menu = false;
|
|
||||||
}
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
|
||||||
lcd_icon(ICON_AUDIO, true);
|
|
||||||
#endif
|
|
||||||
menu_button_is_down = false;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* toggle status bar */
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
case BUTTON_F3:
|
case BUTTON_F3:
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
|
@ -1384,18 +1383,12 @@ int wps_show(void)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* stop and exit wps */
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
case BUTTON_OFF:
|
case BUTTON_OFF:
|
||||||
#else
|
#else
|
||||||
case BUTTON_STOP:
|
case BUTTON_STOP:
|
||||||
#endif
|
#endif
|
||||||
if (keys_locked)
|
|
||||||
{
|
|
||||||
display_keylock_text(keys_locked);
|
|
||||||
restore = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
lcd_icon(ICON_RECORD, false);
|
lcd_icon(ICON_RECORD, false);
|
||||||
lcd_icon(ICON_AUDIO, false);
|
lcd_icon(ICON_AUDIO, false);
|
||||||
|
|
@ -1406,48 +1399,13 @@ int wps_show(void)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifndef SIMULATOR
|
||||||
case SYS_USB_CONNECTED: {
|
case SYS_USB_CONNECTED:
|
||||||
#ifdef HAVE_LCD_BITMAP
|
handle_usb();
|
||||||
bool laststate=statusbar(false);
|
|
||||||
#endif
|
|
||||||
/* Tell the USB thread that we are safe */
|
|
||||||
DEBUGF("wps got SYS_USB_CONNECTED\n");
|
|
||||||
usb_acknowledge(SYS_USB_CONNECTED_ACK);
|
|
||||||
|
|
||||||
/* Wait until the USB cable is extracted again */
|
|
||||||
usb_wait_for_disconnect(&button_queue);
|
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
|
||||||
statusbar(laststate);
|
|
||||||
#endif
|
|
||||||
/* Signal to our caller that we have been in USB mode */
|
|
||||||
return SYS_USB_CONNECTED;
|
return SYS_USB_CONNECTED;
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case BUTTON_NONE: /* Timeout */
|
case BUTTON_NONE: /* Timeout */
|
||||||
if(!mpeg_is_playing())
|
update();
|
||||||
restore = true;
|
|
||||||
|
|
||||||
if (id3)
|
|
||||||
#ifdef CUSTOM_WPS
|
|
||||||
refresh_wps(false);
|
|
||||||
#else
|
|
||||||
display_file_time(id3->elapsed, id3->length);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* save resume data */
|
|
||||||
if ( id3 &&
|
|
||||||
global_settings.resume &&
|
|
||||||
global_settings.resume_offset != id3->offset ) {
|
|
||||||
DEBUGF("R%X,%X (%X)\n", global_settings.resume_offset,
|
|
||||||
id3->offset,id3);
|
|
||||||
global_settings.resume_index = id3->index;
|
|
||||||
global_settings.resume_offset = id3->offset;
|
|
||||||
settings_save();
|
|
||||||
}
|
|
||||||
|
|
||||||
status_draw();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1456,12 +1414,12 @@ int wps_show(void)
|
||||||
|
|
||||||
if (restore) {
|
if (restore) {
|
||||||
restore = false;
|
restore = false;
|
||||||
draw_screen(id3);
|
draw_screen();
|
||||||
if (mpeg_is_playing() && id3)
|
if (id3)
|
||||||
#ifdef CUSTOM_WPS
|
#ifdef CUSTOM_WPS
|
||||||
refresh_wps(false);
|
refresh_wps(false);
|
||||||
#else
|
#else
|
||||||
display_file_time(id3->elapsed, id3->length);
|
display_file_time();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue