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

📄 main.c

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 C
字号:
/*************************************************************************** *             __________               __   ___. *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  / *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  < *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \ *                     \/            \/     \/    \/            \/ * $Id: main.c,v 1.83 2004/01/05 20:42:50 hohensoh Exp $ * * Copyright (C) 2002 by 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 "ata.h"#include "disk.h"#include "fat.h"#include "lcd.h"#include "rtc.h"#include "debug.h"#include "led.h"#include "kernel.h"#include "button.h"#include "tree.h"#include "panic.h"#include "menu.h"#include "system.h"#include "usb.h"#include "powermgmt.h"#include "adc.h"#include "i2c.h"#ifndef DEBUG#include "serial.h"#endif#include "mpeg.h"#include "mp3_playback.h"#include "main_menu.h"#include "thread.h"#include "settings.h"#include "backlight.h"#include "status.h"#include "debug_menu.h"#include "version.h"#include "sprintf.h"#include "font.h"#include "language.h"#include "wps-display.h"#include "playlist.h"#include "buffer.h"#include "rolo.h"#include "screens.h"#include "power.h"char appsversion[]=APPSVERSION;void init(void);void app_main(void){    init();    browse_root();}#ifdef SIMULATORvoid init(void){    init_threads();    buffer_init();    lcd_init();    font_init();    show_logo();    settings_reset();    settings_load();    sleep(HZ/2);    tree_init();    playlist_init();    mp3_init( global_settings.volume,              global_settings.bass,              global_settings.treble,              global_settings.balance,              global_settings.loudness,              global_settings.bass_boost,              global_settings.avc,              global_settings.channel_config );    mpeg_init();    while (button_get(false) != 0)      ; /* Empty the keyboard buffer */}#else/* defined in linker script */extern int poolstart[];extern int poolend[];void init(void){    int rc, i;    struct partinfo* pinfo;    /* if nobody initialized ATA before, I consider this a cold start */    bool coldstart = (PACR2 & 0x4000) != 0; /* starting from Flash */    system_init();    kernel_init();    buffer_init();    settings_reset();        lcd_init();    font_init();    show_logo();    set_irq_level(0);#ifdef DEBUG    debug_init();#else    serial_setup();#endif    i2c_init();#ifdef HAVE_RTC    rtc_init();#endif    adc_init();        usb_init();        backlight_init();    button_init();    powermgmt_init();#ifdef HAVE_BATTERIES    if (coldstart && charger_inserted())    {        rc = charging_screen(); /* display a "charging" screen */        if (rc == 1 || rc == 2)  /* charger removed or "Off/Stop" pressed */            power_off();        /* "On" pressed or USB connected: proceed */    }#else    (void)coldstart;#endif    rc = ata_init();    if(rc)    {#ifdef HAVE_LCD_BITMAP        char str[32];        lcd_clear_display();        snprintf(str, 31, "ATA error: %d", rc);        lcd_puts(0, 1, str);        lcd_puts(0, 3, "Press ON to debug");        lcd_update();        while(button_get(true) != BUTTON_ON);        dbg_ports();#endif        panicf("ata: %d", rc);    }        pinfo = disk_init();    if (!pinfo)        panicf("disk: NULL");    for ( i=0; i<4; i++ ) {        if (!fat_mount(pinfo[i].start))            break;    }    if ( i==4 ) {        DEBUGF("No partition found, trying to mount sector 0.\n");        rc = fat_mount(0);        if(rc) {            lcd_clear_display();            lcd_puts(0,0,"No FAT32");            lcd_puts(0,1,"partition!");            lcd_update();            sleep(HZ);            while(1)                dbg_partitions();        }    }    settings_load();        status_init();    usb_start_monitoring();    playlist_init();    tree_init();    /* No buffer allocation (see buffer.c) may take place after the call to       mpeg_init() since the mpeg thread takes the rest of the buffer space */    mp3_init( global_settings.volume,              global_settings.bass,              global_settings.treble,              global_settings.balance,              global_settings.loudness,              global_settings.bass_boost,              global_settings.avc,              global_settings.channel_config );    mpeg_init();    /* no auto-rolo on startup any more, but I leave it here for reference */#if 0    if (coldstart && !usb_detect())    {   /* when starting from flash, this time _we_ have to yield */        int fd;#ifdef ARCHOS_PLAYER        static const char filename[] = "/archos.mod"; #else        static const char filename[] = "/ajbrec.ajz";#endif        fd = open(filename, O_RDONLY);        if(fd >= 0) /* no complaint if it doesn't exit */        {            close(fd);            rolo_load((char*)filename); /* start if it does */        }    }#endif // #if 0}int main(void){    app_main();    while(1) {        led(true); sleep(HZ/10);        led(false); sleep(HZ/10);    }    return 0;}#endif

⌨️ 快捷键说明

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