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

📄 main_menu.c

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 C
字号:
/*************************************************************************** *             __________               __   ___. *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  / *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  < *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \ *                     \/            \/     \/    \/            \/ * $Id: main_menu.c,v 1.95 2004/03/11 10:43:53 linusnielsen Exp $ * * Copyright (C) 2002 Bj鰎n Stenberg * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/#include "config.h"#include "options.h"#include "menu.h"#include "tree.h"#include "credits.h"#include "lcd.h"#include "font.h"#include "button.h"#include "kernel.h"#include "main_menu.h"#include "version.h"#include "debug_menu.h"#include "sprintf.h"#include <string.h>#include "playlist.h"#include "settings.h"#include "settings_menu.h"#include "power.h"#include "powermgmt.h"#include "sound_menu.h"#include "status.h"#include "fat.h"#include "bookmark.h"#include "wps.h"#include "buffer.h"#include "screens.h"#include "playlist_menu.h"#ifdef HAVE_FMRADIO#include "radio.h"#endif#include "lang.h"#ifdef HAVE_MAS3587F#include "recording.h"#endif#ifdef HAVE_LCD_BITMAP#include "bmp.h"#include "icons.h"#endif /* End HAVE_LCD_BITMAP */int show_logo( void ){#ifdef HAVE_LCD_BITMAP    char version[32];    unsigned char *ptr=rockbox112x37;    int height, i, font_h, font_w;    lcd_clear_display();    for(i=0; i < 37; i+=8) {        /* the bitmap function doesn't work with full-height bitmaps           so we "stripe" the logo output */        lcd_bitmap(ptr, 0, 10+i, 112, (37-i)>8?8:37-i, false);        ptr += 112;    }    height = 37;#if 0    /*     * This code is not used anymore, but I kept it here since it shows     * one way of using the BMP reader function to display an externally     * providing logo.     */    unsigned char buffer[112 * 8];    int width;    int i;    int eline;    int failure;    failure = read_bmp_file("/rockbox112.bmp", &width, &height, buffer);    debugf("read_bmp_file() returned %d, width %d height %d\n",           failure, width, height);        for(i=0, eline=0; i < height; i+=8, eline++) {        /* the bitmap function doesn't work with full-height bitmaps           so we "stripe" the logo output */        lcd_bitmap(&buffer[eline*width], 0, 10+i, width,                   (height-i)>8?8:height-i, false);    }#endif    snprintf(version, sizeof(version), "Ver. %s", appsversion);    lcd_setfont(FONT_SYSFIXED);    lcd_getstringsize("A", &font_w, &font_h);    lcd_putsxy((LCD_WIDTH/2) - ((strlen(version)*font_w)/2),               LCD_HEIGHT-font_h, version);    lcd_update();#else    char *rockbox = "  ROCKbox!";    lcd_clear_display();    lcd_double_height(true);    lcd_puts(0, 0, rockbox);    lcd_puts(0, 1, appsversion);#endif    return 0;}bool show_credits(void){    int j = 0;    int btn;    show_logo();#ifdef HAVE_LCD_CHARCELLS    lcd_double_height(false);#endif        for (j = 0; j < 10; j++) {        sleep((HZ*2)/10);        btn = button_get(false);        if (btn !=  BUTTON_NONE && !(btn & BUTTON_REL))            return false;    }    roll_credits();    return false;}#ifdef SIMULATORextern bool simulate_usb(void);#endifbool show_info(void){    char s[32];    /* avoid overflow for 8MB mod :) was: ((mp3end - mp3buf) * 1000) / 0x100000; */    int buflen = ((mp3end - mp3buf) * 100) / 0x19999;    int integer, decimal;    bool done = false;    int key;    int state = 1;    while(!done)    {        int y=0;        lcd_clear_display();#ifdef HAVE_LCD_BITMAP        lcd_puts(0, y++, str(LANG_ROCKBOX_INFO));        y++;        state = 3;#endif        if (state & 1) {            integer = buflen / 1000;            decimal = buflen % 1000;#ifdef HAVE_LCD_CHARCELLS            snprintf(s, sizeof(s), str(LANG_BUFFER_STAT_PLAYER),                     integer, decimal);#else            snprintf(s, sizeof(s), str(LANG_BUFFER_STAT_RECORDER),                     integer, decimal);#endif            lcd_puts(0, y++, s);            #ifdef HAVE_CHARGE_CTRL            if (charge_state == 1)                snprintf(s, sizeof(s), str(LANG_BATTERY_CHARGE));            else if (charge_state == 2)                snprintf(s, sizeof(s), str(LANG_BATTERY_TOPOFF_CHARGE));            else if (charge_state == 3)                snprintf(s, sizeof(s), str(LANG_BATTERY_TRICKLE_CHARGE));            else#endif            if (battery_level() >= 0)                snprintf(s, sizeof(s), str(LANG_BATTERY_TIME), battery_level(),                         battery_time() / 60, battery_time() % 60);            else                strncpy(s, "(n/a)", sizeof(s));            lcd_puts(0, y++, s);        }        if (state & 2) {            unsigned int size, free;            fat_size( &size, &free );            size /= 1024;            integer = size / 1024;            decimal = size % 1024 / 100;            snprintf(s, sizeof s, str(LANG_DISK_STAT), integer, decimal);            lcd_puts(0, y++, s);                        free /= 1024;            integer = free / 1024;            decimal = free % 1024 / 100;            snprintf(s, sizeof s, str(LANG_DISK_FREE_STAT), integer, decimal);            lcd_puts(0, y++, s);        }        lcd_update();        /* Wait for a key to be pushed */        key = button_get_w_tmo(HZ*5);        switch(key) {#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD)            case BUTTON_STOP | BUTTON_REL:#else            case BUTTON_LEFT | BUTTON_REL:            case BUTTON_OFF | BUTTON_REL:#endif                done = true;                break;#ifdef HAVE_PLAYER_KEYPAD            case BUTTON_LEFT:            case BUTTON_RIGHT:                if (state == 1)                    state = 2;                else                    state = 1;                break;#endif            case SYS_USB_CONNECTED:                usb_screen();                return true;        }    }    return false;}static bool plugin_browse(void){    return rockbox_browse(PLUGIN_DIR, SHOW_PLUGINS);}#ifdef HAVE_MAS3587Fstatic bool recording_settings(void){    return recording_menu(false);}#endif#ifdef HAVE_MAS3587Fbool rec_menu(void){    int m;    bool result;    /* recording menu */    struct menu_items items[] = {        { str(LANG_RECORDING_MENU),     recording_screen  },        { str(LANG_RECORDING_SETTINGS), recording_settings},    };    m=menu_init( items, sizeof items / sizeof(struct menu_items) );    result = menu_run(m);    menu_exit(m);    return result;}#endifbool info_menu(void){    int m;    bool result;    /* info menu */    struct menu_items items[] = {        { str(LANG_MENU_SHOW_ID3_INFO), browse_id3        },        { str(LANG_INFO_MENU),          show_info         },        { str(LANG_VERSION),            show_credits      },#ifndef SIMULATOR        { str(LANG_DEBUG),              debug_menu        },#else        { str(LANG_USB),                simulate_usb      },#endif    };    m=menu_init( items, sizeof items / sizeof(struct menu_items) );    result = menu_run(m);    menu_exit(m);    return result;}bool main_menu(void){    int m;    bool result;    int i = 0;    /* main menu */    struct menu_items items[8];    items[i].desc = str(LANG_BOOKMARK_MENU);    items[i++].function = bookmark_menu;    items[i].desc = str(LANG_SOUND_SETTINGS);    items[i++].function = sound_menu;    items[i].desc = str(LANG_GENERAL_SETTINGS);    items[i++].function = settings_menu;#ifdef HAVE_FMRADIO    if(radio_hardware_present()) {        items[i].desc = str(LANG_FM_RADIO);        items[i++].function = radio_screen;    }#endif#ifdef HAVE_MAS3587F    items[i].desc = str(LANG_RECORDING);    items[i++].function = rec_menu;#endif    items[i].desc = str(LANG_PLAYLIST_MENU);    items[i++].function = playlist_menu;    items[i].desc = str(LANG_PLUGINS);    items[i++].function = plugin_browse;    items[i].desc = str(LANG_INFO);    items[i++].function = info_menu;    m=menu_init( items, i );#ifdef HAVE_LCD_CHARCELLS    status_set_param(true);#endif    result = menu_run(m);#ifdef HAVE_LCD_CHARCELLS    status_set_param(false);#endif    menu_exit(m);    settings_save();    return result;}/* ----------------------------------------------------------------- * vim: et sw=4 ts=8 sts=4 tw=78 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -