📄 usbdisk.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 + -