⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wps.c

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -