📄 wps.c
字号:
#endif if ( muted ) mpeg_sound_set(SOUND_VOLUME, global_settings.volume); else mpeg_sound_set(SOUND_VOLUME, 0); muted = !muted;#ifdef HAVE_LCD_CHARCELLS status_set_param(false);#endif display_mute_text(muted); break; /* key lock */#ifdef HAVE_RECORDER_KEYPAD case BUTTON_F1 | BUTTON_DOWN:#else case BUTTON_MENU | BUTTON_STOP:#endif keys_locked = !keys_locked; display_keylock_text(keys_locked); exit = true; while (button_get(false)); /* clear button queue */ break;#ifdef BUTTON_MENU /* change volume */ case BUTTON_MENU | BUTTON_LEFT: case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: case BUTTON_MENU | BUTTON_RIGHT: case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: player_change_volume(button); exit = true; break; /* show id3 tags */#ifdef BUTTON_ON case BUTTON_MENU | BUTTON_ON: status_set_param(true); status_set_audio(true);#endif#else case BUTTON_F1 | BUTTON_ON:#endif lcd_clear_display(); lcd_puts(0, 0, str(LANG_ID3_INFO)); lcd_puts(0, 1, str(LANG_ID3_SCREEN)); lcd_update(); sleep(HZ); if(browse_id3()) return true;#ifdef HAVE_PLAYER_KEYPAD status_set_param(false); status_set_audio(true);#endif exit = true; break; case SYS_USB_CONNECTED: status_set_playmode(STATUS_STOP); usb_screen(); return true; } last_button = button; }#ifdef HAVE_LCD_CHARCELLS status_set_param(false);#endif return false;}static void fade(bool fade_in){ if (fade_in) { /* fade in */ int current_volume = 20; /* zero out the sound */ mpeg_sound_set(SOUND_VOLUME, current_volume); sleep(HZ/10); /* let mpeg thread run */ mpeg_resume(); while (current_volume < global_settings.volume) { current_volume += 2; sleep(1); mpeg_sound_set(SOUND_VOLUME, current_volume); } mpeg_sound_set(SOUND_VOLUME, global_settings.volume); } else { /* fade out */ int current_volume = global_settings.volume; while (current_volume > 20) { current_volume -= 2; sleep(1); mpeg_sound_set(SOUND_VOLUME, current_volume); } mpeg_pause(); sleep(HZ/5); /* let mpeg thread run */ /* reset volume to what it was before the fade */ mpeg_sound_set(SOUND_VOLUME, global_settings.volume); }}/* demonstrates showing different formats from playtune */int wps_show(void){ int button = 0, lastbutton = 0; bool ignore_keyup = true; bool restore = false; bool exit = false; bool update_track = false; id3 = NULL; current_track_path[0] = '\0';#ifdef HAVE_LCD_CHARCELLS status_set_audio(true); status_set_param(false);#else if(global_settings.statusbar) lcd_setmargins(0, STATUSBAR_HEIGHT); else lcd_setmargins(0, 0);#endif ff_rewind = false; if(mpeg_status() & MPEG_STATUS_PLAY) { id3 = mpeg_current_track(); if (id3) { if (wps_display(id3)) return 0; wps_refresh(id3, 0, WPS_REFRESH_ALL); memcpy(current_track_path, id3->path, sizeof(current_track_path)); } restore = true; } while ( 1 ) { bool mpeg_paused = (mpeg_status() & MPEG_STATUS_PAUSE)?true:false; status_set_playmode(paused ? STATUS_PAUSE : STATUS_PLAY); /* did someone else (i.e power thread) change mpeg pause mode? */ if (paused != mpeg_paused) { paused = mpeg_paused; /* if another thread paused mpeg, we are probably in car mode, about to shut down. lets save the settings. */ if (paused && global_settings.resume) { settings_save();#ifndef HAVE_RTC ata_flush();#endif } }#ifdef HAVE_LCD_BITMAP /* when the peak meter is enabled we want to have a few extra updates to make it look smooth. On the other hand we don't want to waste energy if it isn't displayed */ if (peak_meter_enabled) { int i; /* In high performance mode we read out the mas as often as we can. There is no sleep for cpu */ if (global_settings.peak_meter_performance) { long next_refresh = current_tick; long next_big_refresh = current_tick + HZ / 5; button = BUTTON_NONE; while (!TIME_AFTER(current_tick, next_big_refresh)) { button = button_get(false); if (button != BUTTON_NONE) { break; } peak_meter_peek(); sleep(1); if (TIME_AFTER(current_tick, next_refresh)) { wps_refresh(id3, 0, WPS_REFRESH_PEAK_METER); next_refresh = current_tick + HZ / peak_meter_fps; } } } /* In energy saver mode the cpu may sleep a little bit while waiting for buttons */ else { for (i = 0; i < 4; i++) { button = button_get_w_tmo(HZ / peak_meter_fps); if (button != 0) { break; } wps_refresh(id3, 0, WPS_REFRESH_PEAK_METER); } } } /* The peak meter is disabled -> no additional screen updates needed */ else { button = button_get_w_tmo(HZ/5); }#else button = button_get_w_tmo(HZ/5);#endif /* 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; } /* ignore non-remote buttons when keys are locked */ if (keys_locked &&#ifdef HAVE_RECORDER_KEYPAD ! ((button & BUTTON_F1) ||#else ! ((button & BUTTON_MENU) ||#endif (button == BUTTON_NONE) || (button == SYS_USB_CONNECTED)#ifdef BUTTON_REMOTE || (button & BUTTON_REMOTE)#endif )) { while (button_get(false)); /* clear button queue */ display_keylock_text(true); restore = true; continue; } /* Exit if mpeg has stopped playing. This can happen if using the sleep timer with the charger plugged or if starting a recording from F1 */ if (!mpeg_status()) exit = true; switch(button) {#ifdef BUTTON_ON case BUTTON_ON:#ifdef HAVE_RECORDER_KEYPAD switch (on_screen()) { case 2: /* usb connected? */ return SYS_USB_CONNECTED; case 1: /* was on_screen used? */ restore = true; /* pause may have been turned off by pitch screen */ if (paused && !(mpeg_status() & MPEG_STATUS_PAUSE)) { paused = false; status_set_playmode(STATUS_PLAY); } break; case 0: /* otherwise, exit to browser */#else status_set_record(false); status_set_audio(false);#endif lcd_stop_scroll(); /* set dir browser to current playing song */ if (global_settings.browse_current && current_track_path[0] != '\0') set_current_file(current_track_path); return 0;#ifdef HAVE_RECORDER_KEYPAD } break;#endif#endif /* BUTTON_ON */ /* play/pause */ case BUTTON_PLAY:#ifdef BUTTON_RC_PLAY case BUTTON_RC_PLAY:#endif if ( paused ) { paused = false; status_set_playmode(STATUS_PLAY); if ( global_settings.fade_on_stop ) fade(1); else mpeg_resume(); } else { paused = true; status_set_playmode(STATUS_PAUSE); if ( global_settings.fade_on_stop ) fade(0); else mpeg_pause(); if (global_settings.resume) { settings_save();#ifndef HAVE_RTC ata_flush();#endif } } break; /* volume up */#ifdef HAVE_RECORDER_KEYPAD case BUTTON_UP: case BUTTON_UP | BUTTON_REPEAT:#endif#ifdef BUTTON_RC_VOL_UP case BUTTON_RC_VOL_UP:#endif 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(false); settings_save(); break; /* volume down */#ifdef HAVE_RECORDER_KEYPAD case BUTTON_DOWN: case BUTTON_DOWN | BUTTON_REPEAT:#endif#ifdef BUTTON_RC_VOL_DOWN case BUTTON_RC_VOL_DOWN:#endif 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(false); settings_save(); break; /* fast forward / rewind */ case BUTTON_LEFT | BUTTON_REPEAT: case BUTTON_RIGHT | BUTTON_REPEAT: ffwd_rew(button); break; /* prev / restart */#ifdef BUTTON_RC_LEFT case BUTTON_RC_LEFT:#endif case BUTTON_LEFT | BUTTON_REL:#ifdef HAVE_RECORDER_KEYPAD if ((button == (BUTTON_LEFT | BUTTON_REL)) && (lastbutton != BUTTON_LEFT )) break; #endif if (!id3 || (id3->elapsed < 3*1000)) { mpeg_prev(); } else { if (!paused) mpeg_pause(); mpeg_ff_rewind(0); if (!paused) mpeg_resume(); } break; /* next */#ifdef BUTTON_RC_RIGHT case BUTTON_RC_RIGHT:#endif case BUTTON_RIGHT | BUTTON_REL:#ifdef HAVE_RECORDER_KEYPAD if ((button == (BUTTON_RIGHT | BUTTON_REL)) && (lastbutton != BUTTON_RIGHT)) break; #endif mpeg_next(); break; /* menu key functions */#ifdef BUTTON_MENU case BUTTON_MENU:#else case BUTTON_F1:#endif if (menu()) return SYS_USB_CONNECTED; update_track = true; restore = true; break;#ifdef HAVE_RECORDER_KEYPAD /* play settings */ case BUTTON_F2: if (f2_screen()) return SYS_USB_CONNECTED; restore = true; break; /* screen settings */ case BUTTON_F3: if (f3_screen()) return SYS_USB_CONNECTED; restore = true; break;#endif /* stop and exit wps */#ifdef BUTTON_RC_STOP case BUTTON_RC_STOP:#endif#ifdef BUTTON_OFF case BUTTON_OFF | BUTTON_REL:#else case BUTTON_STOP | BUTTON_REL: if ( lastbutton != BUTTON_STOP ) break;#endif exit = true; break; case SYS_USB_CONNECTED: status_set_playmode(STATUS_STOP); usb_screen(); return SYS_USB_CONNECTED; case BUTTON_NONE: /* Timeout */ update_track = true; break; } if (update_track) { if (update()) { /* set dir browser to current playing song */ if (global_settings.browse_current && current_track_path[0] != '\0') set_current_file(current_track_path); return 0; } update_track = false; } if (exit) {#ifdef HAVE_LCD_CHARCELLS status_set_record(false); status_set_audio(false);#endif if (global_settings.fade_on_stop) fade(0); lcd_stop_scroll(); bookmark_autobookmark(); mpeg_stop(); status_set_playmode(STATUS_STOP); /* Keys can be locked when exiting, so either unlock here or implement key locking in tree.c too */ keys_locked=false; /* set dir browser to current playing song */ if (global_settings.browse_current && current_track_path[0] != '\0') set_current_file(current_track_path); return 0; } if ( button ) ata_spin(); if (restore) { restore = false; if (wps_display(id3)) { /* set dir browser to current playing song */ if (global_settings.browse_current && current_track_path[0] != '\0') set_current_file(current_track_path); return 0; } if (id3) wps_refresh(id3, 0, WPS_REFRESH_NON_STATIC); } if(button != BUTTON_NONE) lastbutton = button; } return 0; /* unreachable - just to reduce compiler warnings */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -