www.pudn.com > OS.rar > SystemIntoUSB.c, change:2006-12-11,size:4427b


#define CREATEUSBVAR 
#include ".\System\GPL162002_Far\include\system_head.h" 
#include ".\Driver\GPL162002_Far\include\Driver_Head.h" 
#include ".\Component\GPL162002_Far\include\Component_Head.h" 
#include ".\Component\GPL162002_Far\include\FileSystem\nand.h" 
 
#include ".\Component\\GPL162002_Far\include\USB\USB_Constant.h" 
#include ".\Component\\GPL162002_Far\include\USB\USBD_MSDC.h" 
#include ".\Component\\GPL162002_Far\include\USB\USB_CV.h" 
 
extern unsigned int	_Nand_ErasePhysicalBlock(unsigned long BlockAddr); 
extern void USB_Reset(void); 
extern void System_Initial(void); 
extern unsigned int USB_ServiceLoop(void); 
void USB_TimeOut_Disable(void); 
 
extern unsigned int R_Write_protect; 
extern unsigned int CurDrv; 
char cAddr_PassWord[16]; 
unsigned int R_USB_DisplayTime; 
//extern unsigned long	USB_RW_Buffer; 
//extern BSPTR ucBSMalloc(BSINTU size); 
 
extern void USBISR(void); 
extern void USB_Insert_TimeOut(void); 
 
int SystemIntoUDisk() 
{ 
	int ret; 
	int i; 
	#ifdef OS_vension 
	DrvSDCCreatSem(); 
	USB_RW_Buffer= (unsigned long )ucBSMalloc(512); //256 //by zhangxh for two Buffer 2006/01/23 
//	USB_RW_Buffer= (unsigned long )&usbbuffer; 
	SysDisableWaitMode(INT_USB); 
	SysIntoHighSpeed(); 
	#endif 
	unOSRegisterISR(INT_USB,(INT32U)(USBISR)); 
	unOSRegisterISR(INT_TIMERA, (INT32U)(USB_Insert_TimeOut)); 
 
//	CurDrv = 1; 
 
    CurDrvA = 1; 
    CurDrvB = 2; 
//	for(;;) 
//	{ 
		R_NANDA_Present=0; 
		R_NANDB_Present=0; 
		R_SDC_Present=0; 
	 	USB_DiskTotalNum = 1; 
		USB_DiskNandNum  = 2; 
     //   USB_DiskNandNum  = 1; 
 
	 	i = 0; 
	 	if (i) 
	 	{ 
			_Nand_Initial(); 
		 	for(i=0;i<2048;i++) 
			{ 
				ret = _Nand_ErasePhysicalBlock(i); 
				if(ret&0x01) 
				{ 
//					SetBadBlock(i); 
				} 
			} 
	 	} 
		ret = _Nand_Initial(); 
	 	ret = InitMapTable(); 
		if(ret!=0) 
		{ 
			_Nand_Reset(); 
			_Nand_Initial(); 
			ret = BuildMapTable(); 
		} 
	ret = 0; 
		if(ret==0) 
		{ 
			 R_NANDA_Present=1; 
		     R_NANDB_Present=1; 
		} 
 
		if (CurDrvA == 1) 
			NandTotalSectorA=  Nand_Part0_Size;// FileSysDrv[CurDrv].Drv_GetMemSize(); 
		if (CurDrvA == 2) 
			NandTotalSectorA=  Nand_Part1_Size;// FileSysDrv[CurDrv].Drv_GetMemSize(); 
		if (CurDrvA == 3) 
			NandTotalSectorA=  Nand_Part2_Size;// FileSysDrv[CurDrv].Drv_GetMemSize(); 
 
        USB_DiskTotalNum = 0; 
 
        if (USB_DiskNandNum==2) 
        { 
			if (CurDrvB == 1&&CurDrvA!=1) 
				NandTotalSectorB=  Nand_Part0_Size;// FileSysDrv[CurDrv].Drv_GetMemSize(); 
			if (CurDrvB == 2&&CurDrvA!=2) 
				NandTotalSectorB=  Nand_Part1_Size;// FileSysDrv[CurDrv].Drv_GetMemSize(); 
			if (CurDrvB == 3&&CurDrvA!=3) 
				NandTotalSectorB=  Nand_Part2_Size;// FileSysDrv[CurDrv].Drv_GetMemSize(); 
 
            USB_DiskTotalNum = 1; 
        } 
		//NandTotalSector = _NAND_GetSize(); 
		for(i=0 ; i<5 ; i++) 
		{ 
			ret = DrvSDCInitial(); 
			if(ret==0) 
			{ 
				R_SDC_Present=1;		// SD Card Initial Success 
				USB_DiskTotalNum++; 
				break; 
			} 
		} 
		*P_TimerA_Preload=0x10000-(4096*10); 
		*P_TimerA_Ctrl=0xe064; 
 
		R_USB_NandWriterData = 0x00; 
		USB_Reset(); 
		ret=USB_ServiceLoop(); 
		USB_TimeOut_Disable(); 
 
		*P_USBD_Config=0x00; 
		*P_USBD_INTEN=0x00; 
//	} 
 
	//while(1); 
 
	return 0; 
} 
void Check_SDC_Present(void) 
{ 
	int ret; 
 
 	if(0) 
	{ 
		ret = *((volatile unsigned int*)(0x7060)); 
		ret &= 0x0001; 
		//ret表示这一次循环,SD卡状态 1:insert, 0:pull out 
		//R_SDC_Present表示上一循环SD卡状态 
 
		if (R_SDC_Present == 0 && ret ==1)//insert 
		{ 
			ret = DrvSDCInitial(); 
			if(ret == 0) 
			{ 
				R_SDC_Present = 1; 
				R_Media_Change = 1; 
				R_Write_protect = 0x80; 
 
			} 
		} 
		else if (R_SDC_Present == 1 && ret ==0)//pull out 
		{ 
			R_SDC_Present = 0; 
			R_Media_Change = 0; 
		} 
	} 
 
	// User have to implement this API. 
	// If SDC is inserted, please initialize the SDC and set R_SDC_Present to 1. 
	// If SDC is removed, please clear R_SDC_Present to 0. 
 
} 
 
void USB_TimeOut_Disable(void) 
{ 
	*P_TimerA_Ctrl=0x8000; 
 
} 
 
 
void USB_Insert_TimeOut(void) 
{ 
	int temp; 
	temp=*P_TimerA_Ctrl; 
	*P_TimerA_Ctrl=temp;	//clear timerA int flag 
	R_USB_Suspend=1; 
} 
 
int*  Request_GetPassWord(void) 
{ 
	//int Addr[16]; 
	int i; 
	for(i= 0x00;i<16;i++) 
	{ 
		cAddr_PassWord[i] = 1; 
	} 
	return (int*)cAddr_PassWord; 
} 
int Responsion_PassWord(int *p) 
{ 
	int i; 
	for (i=0x0;i<16;i++) 
	{ 
		if (*(p+i)!=0x0001) 
			return 0; 
	} 
	return 1; 
}