www.pudn.com > wave-bulktransfer.rar > MAIN.C


 
#include "testheader.h" 
#define ALLOCATE_EXTERN     
#include "testregs.h" 
#include  
 
#define	DELAY_COUNT	0x9248 
 
#define	min(a,b) (((a)<(b))?(a):(b)) 
#define	max(a,b) (((a)>(b))?(a):(b)) 
 
volatile BOOL	GotSUD; 
BOOL		Rwuen; 
BOOL		Selfpwr; 
volatile BOOL	Sleep; 
 
extern code DEVICEDSCR	DeviceDscr;    
extern code CONFIGDSCR	ConfigDscr; 
extern code STRINGDSCR	StringDscr; 
 
void ParseControlTransfer(void); 
 
void TD_Init(void); 
void TD_Poll(void); 
BOOL TD_Resume(void); 
BOOL TD_Suspend(void); 
BOOL DR_GetDescriptor(void); 
BOOL DR_SetConfiguration(void); 
BOOL DR_GetConfiguration(void); 
BOOL DR_SetInterface(void); 
BOOL DR_GetInterface(void); 
BOOL DR_GetStatus(void); 
BOOL DR_ClearFeature(void); 
BOOL DR_SetFeature(void); 
BOOL DR_VendorCmnd(void); 
//////////////////////////////////////////////////////////////////////		 
void UsbDisconnect(BOOL renum); 
void Delay(WORD ms); 
extern void Delay1ms(void);  
extern void EZUSB_Susp(void);   
void EZUSB_Resume(void); 
CONFIGDSCR*    GetConfigDscr(BYTE ConfigIdx); 
STRINGDSCR*    EZUSB_GetStringDscr(BYTE StrIdx); 
////////////////////////////////////////////////////////////////////// 
void main(void)                                 
{ 
	DWORD j = 0; 
         
	Sleep = FALSE;	 
	Rwuen = FALSE;	 
        Selfpwr = TRUE;	 
	GotSUD = FALSE;	 
 
	TD_Init(); 
 
        EUSB = 1;    
 
	EICON |= 0x20;	 
                 
	USBBAV = USBBAV | 1 & ~bmBREAK;	  
  
	USBIEN |= bmSUDAV | bmSUTOK | bmSUSP | bmURES; 
	EA = 1;	  
 
	while(!GotSUD) 
		{ 
			if(!GotSUD) 
				UsbDisconnect(TRUE); 
 
			for(j=0;(jlength; 
							if (len > SETUPDAT[6])  
								len = SETUPDAT[6];  
							 
							while (len)  
							{ 
								for(i=0; itype == CONFIG_DSCR) 
	{ 
		 if(index++ == ConfigIdx) 
			return(dscr); 
		length = dscr->config_len; 
		SWAP_ENDIAN(length);   
		dscr = (CONFIGDSCR code *)((WORD)dscr + length); 
	} 
	return(NULL); 
} 
 
STRINGDSCR*	EZUSB_GetStringDscr(BYTE StrIdx) 
{ 
	BYTE		index = 0; 
	STRINGDSCR*	dscr; 
 
	dscr = &StringDscr; 
 
	while(dscr->type == STRING_DSCR) 
	{ 
		if(index++ == StrIdx) 
			return(dscr); 
		dscr = (STRINGDSCR code *)((WORD)dscr + dscr->length); 
	} 
 
	return(NULL); 
} 
void EZUSB_Resume(void) 
{ 
	if(USBCS & bmRWAKEUP) 
	{ 
		USBCS |= bmSIGRESUME; 
		Delay(20); 
		USBCS &= ~bmSIGRESUME; 
	} 
} 
 
void resume_isr(void) interrupt WKUP_VECT 
{ 
	EZUSB_CLEAR_RSMIRQ(); 
}