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

📄 usbdisk.c

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 C
字号:
/*
********************************************************************************
*                       ACTOS
*                      usbmain
*
*                (c) Copyright 2002-2003, Actions Co,Ld.
*                        All Right Reserved
*
* File   : main.c
* By     : Chliang
* Version: v1.00     first version     04-1-6 14:33
********************************************************************************
*/
//#define USB_SHOW 
 
#ifdef USB_SHOW
extern unsigned char *databuffer;
#endif  
 
#include "Udisk.h"    
#include "message.h"
#include "res.h" 

non_banked void LCM_DrawBmp(int id, int x, int y);
void main();
non_banked void usb_exit_result();

#pragma memory=dataseg(UDISK_RD)
char DisplayIndi,USBStatus;
extern char MenuKeyPress;
#pragma memory=default    

#pragma codeseg(UDISK_RC)
non_banked int usb_main(void)
{
    char    dispIndibak=0xff;
    char    rii=0;

    //~~~~~~~~~~~~~~~~~~~~~
    //init usb disk
    //~~~~~~~~~~~~~~~~~~~~~
    DisplayIndi=0x00;                       //变量初始化
         
    if(!UDiskInitAll(0))                     //AP初始化
    {
        return 0;
    }

    for(rii=0;rii<0x7f;rii++)
    {
        ;   //delay
    }     
     
    LCM_DrawBmp(BACK,0,0);  
    LCM_DrawBmp(USBIMG,4,14); 
//    LCD_P0_On();
//    if(!LCD_P0_Init())
//        return 0;
    while(1)
    { 
                //清watch dog!!
//        output8(0x4e,input8(0x4e)|0x08);

        MsgHandle();                  //消息解释
        UDiskHandle();                  //调用状态机执行命令


        USBStatus=UDiskGetStatus();

        //0:空闲  10h:上传  20h:下传  30h:弹出要求退出  40h:拔线要求退出  50h:切换到韧件升级应用
        //60h:分区处理状态  70h:出错要求退出  80h:进入Suspend状态  90h:退出Suspend状态
        if( (DisplayIndi==0xff) && ( USBStatus !=0x80 ) )
        {
//            sKY_OpenBacklight();
//            StandbyScreen(1);       //开显示屏
//            SetContrast(g_comval.DisplayContrast);      //设对比度
        }

        if ( (USBStatus==0x30) || (USBStatus==0x40) || (USBStatus==0x50) || (USBStatus==0x70) )
        {             
            break;        
        }
        if((MenuKeyPress==1) && (USBStatus==0) )
            break;          //0x00

        switch (USBStatus)
        {
            case 0:

                if(DisplayIndi!=0x00)
                {
                    DisplayIndi=0x00;
                    LCM_DrawBmp(USBIDEL,30,18);//显示模块 0:传输结束  01:上传  02:下传 
                }
                break;

            case 0x10:
                if(DisplayIndi!=0x01)
                {
                    if(DisplayIndi == 0x00)
                        LCM_DrawBmp(BLANK,30,18);    
                    DisplayIndi=0x01;
                    LCM_DrawBmp(USBUP,33,24);
                }
                break;

            case 0x11://显示Commu
            case 0x21://显示DownLoad
            case 0x31://显示UpLoad
            case 0x41://显示Succ
            case 0x61://显示Succ,退出
                DisplayIndi=USBStatus>>4;
                if (USBStatus==0x61)
                {
                    DisplayIndi -= 1;       //0x61与0x51显示一致
                }
                DisplayIndi += 0x10;
                if(dispIndibak != DisplayIndi)   //保证只显示一次
                {
                    dispIndibak=DisplayIndi;
                }
                break;

            case 0x51:      //切换到adfu
//                output8(0x27,input8(0x27) & 0x9f);  //关键盘和RTC中断------------------
                DisplayIndi=0x10;
                if(dispIndibak != DisplayIndi)      //保证只显示一次
                {
                    dispIndibak=DisplayIndi;
//                    Display(DisplayIndi);
                }
                break;

            case 0x20:
                if(DisplayIndi!=0x02)
                {
                    if(DisplayIndi == 0x00)
                        LCM_DrawBmp(BLANK,30,18);    
                    DisplayIndi=0x02;
                    LCM_DrawBmp(USBDOWN,33,24);
                }
                break;

            case 0x80:
/*                sKY_CloseBacklight();
                ClearScreen(NULL);      //清成白屏
                UpdateScreen(NULL);
                StandbyScreen(0);       //关显示屏*/
//            LCD_P0_Init();
                DisplayIndi=0xff;       //置成其他值,为了退出Suspend时能显示
                break;

            case 0x90:                  //退出Suspend状态
/*                sKY_OpenBacklight();
                StandbyScreen(1);       //开显示屏
                SetContrast(g_comval.DisplayContrast);      //设对比度*/
                output8(0x27,input8(0x27) | 0x04);
                break;
            default:
                break;
        }

    }


    //~~~~~~~~~~~~~~~~~~~~~
    //usb disk exit
    //~~~~~~~~~~~~~~~~~~~~~
    UDiskExit();                            //USB退出
//    main();
    disable_interrupt();
    usb_exit_result();
//    ResClose(res_fp);                       //关资源文件

//    sKY_CloseBacklight();

//    DRV_ActiveUD(0x00,MODE_SLOW);

//    while(1)
//        {
//
//    }
//
//    if(USBStatus == 0x00)                   //按Mode退出,return RESULT_MAIN
//            return 10;
//    else if(USBStatus == 0x50)              //升级退出,return RESULT_UPGRADE
//            return 3;
//    else
//            return 0;                       //拔线,弹出

}

//void MsgHandle(void)
//{ 
//    unsigned char msg_rcv=0x0; 
//    msg_rcv = GetSysMsg();
//    if (msg_rcv == 0x4d) //0x4d mode 键抬起
//    {
//        
//    }
//    if (msg_rcv == MSG_USB_UNSTICK) 
//    {
//        main();
//    }
//}

#pragma memory=default

⌨️ 快捷键说明

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