亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.c

?? 自己動手做U盤
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include  "config.h" 
#include  "LPC2294.h"
#include  "sourceHead.h" 
#include  "other.h"
#include  "flash.h"
#include  "usb.h" 
#include  "uart.h"
#include  "menu.h"
#include  "LCD.h"
#include  "fat.h"

#define CFG_NUM  32

unsigned char *pDeviceDescr,*pConfigDescr;




extern unsigned char Data_buffer[0x200];

unsigned char inquirydata[36]=
{0,0x80,02,02,
 0x1f,0,0,0,
 0x6b,0x70,0x6d,0x20,
 0x20,0x20,0x20,0x20,
 0x6b,0x70,0x6d,0x20,
 0x20,0x20,0x20,0x20,
 0x20,0x20,0x20,0x20,
 0x20,0x20,0x20,0x20,
 0x20,0x20,0x20,0x20,
};
unsigned char csw[64],cbw[31];
const char cap[8]={0,0x01,0xff,0xff,0x00,0x00,0x02,0x00};
const char fcap[12]={0,0,0,8,0,2,0,0,2,0,2,0};
const char mode[12]={0x0b,0,0,8,0,2,0,0,0,0,2,0};     

extern  unsigned  char receive_buffer[0x4000];
extern char STATUS;

unsigned long int count=0,count1=0;
unsigned long int block_addr,block_addr_old;
unsigned long int trans_start_page,flash_page_start;
unsigned int trans_num;
unsigned char USBMode;
/////////////////////////
void analyse(void);	
unsigned char dataCount=0;

//*************  PDIUSBD12  ****************//
void Outport_command(unsigned char val)
{
	USBA0H=val;
	Delay100ns(5);
}
void Outport_data(unsigned char val)
{
	USBA0L=val;
	Delay100ns(5);
}
unsigned char Inport_data(void)
{
	unsigned char c;
	c=USBA0L;
	Delay100ns(5);
	return c;
}

void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
{
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0xD0);
	if(bEnable)		bAddress |= 0x80;
	Outport_data( bAddress);
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
}

void D12_SetEndpointEnable(unsigned char bEnable)
{
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0xD8);
	if(bEnable)		Outport_data( 1);
	else	Outport_data( 0);
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
}

void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
{
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0xF3);
	Outport_data( bConfig);
	Outport_data( bClkDiv);
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
}
void D12_SetDMA(unsigned char bMode)
{
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0xFB);
	Outport_data( bMode);
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
}
unsigned short D12_ReadInterruptRegister(void)
{
	unsigned char b1;
	unsigned int j;
	Outport_command( 0xF4);
	b1 = Inport_data();Delay100ns(1);
	j = Inport_data();
	j <<= 8;
	j += b1;
	return j;
}

unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
	unsigned char c;
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( bEndp);
	c = Inport_data();
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
	return c;
}

unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
	Outport_command( 0x40 + bEndp);
	return Inport_data();
}

unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
	unsigned char c;
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0x80 + bEndp);
	c = Inport_data();
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
	return c;
}

void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
{
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0x40 + bEndp);
	Outport_data( bStalled);
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
}
void D12_SendResume(void)
{
	Outport_command( 0xF6);
}
unsigned short D12_ReadCurrentFrameNumber(void)
{
	unsigned short i,j;
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0xF5);
	i= Inport_data();
	j = Inport_data();
	i += (j<<8);
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
	return i;
}

unsigned short D12_ReadChipID(void)
{
	unsigned short i,j;
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0xFD);
	i=Inport_data();
	j=Inport_data();
	i += (j<<8);
	if(bEPPflags.bits.in_isr == 0)ENABLE;
	return i;
}

unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char * buf, unsigned char len)
{
	unsigned char i, j;
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( endp);
	if((Inport_data() & D12_FULLEMPTY) == 0) 
	{
		if(bEPPflags.bits.in_isr == 0)	ENABLE;
		return 0;
	}
	Outport_command( 0xF0);
	j = Inport_data();
	j = Inport_data();
	if(j > len)	j = len;
	for(i=0; i<j; i++)
	*(buf+i) = Inport_data();
	Outport_command( 0xF2);
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
	return j;
}

// D12_ReadMainEndpoint() added by V2_2 to support double-buffering_
// Caller should assume maxium 128 bytes of returned data_
unsigned char D12_ReadMainEndpoint(unsigned char * buf)
{
	unsigned char i, j, k = 0, bDblBuf = 1;
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command( 0x84);
	if( (Inport_data() & 0x60) == 0x60)	bDblBuf = 2;
	while(bDblBuf) 
	{
		Outport_command( 4);
		if((Inport_data() & D12_FULLEMPTY) == 0)	break;
		Outport_command( 0xF0);
		j = Inport_data();
		j = Inport_data();
		for(i=0; i<j; i++)
		*(buf+i+k) = Inport_data();
		k += j;
		Outport_command( 0xF2);
		bDblBuf --;
	}
	if(bEPPflags.bits.in_isr == 0)	ENABLE;
	return k;
}

unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char * buf, unsigned char len)
{
	unsigned char i;
	if(bEPPflags.bits.in_isr == 0)	DISABLE;
	Outport_command(endp);
	Inport_data();
	Outport_command( 0xF0);
	Outport_data( 0);
	Outport_data( len);
	for(i=0; i<len; i++)
	Outport_data( *(buf+i));
	Outport_command( 0xFA);
	if(bEPPflags.bits.in_isr == 0)
	ENABLE;
	return len;
}

void D12_AcknowledgeEndpoint(unsigned char endp)
{
	Outport_command( endp);
	Outport_command( 0xF1);
	if(endp == 0)	Outport_command( 0xF2);
}

unsigned char  uDisk_DeviceDescr[] =//USB_DEVICE_DESCRIPTOR
{
	0x12,
	0x01,
	0x10,0x01,
	0x00 ,
	0, 0,
	0x10,
	0x71,0x04,//SWAP(0x0471),
	0x28,0x02,//SWAP(0x0222),
	0x00,0x01,//SWAP(0x0100),
	0, 0, 0,
	1
};


unsigned char uDisk_ConfigDescr[] =//USB_CONFIGURATION_DESCRIPTOR
{
//Configuration Description
	9,					
	02,
	CFG_NUM,0,
	1,
	1,
	0,
	0x80,
	0x32,
	
 //Bulk-only Data Interface Descriptor	
	9,                    
	0x04,
	0,
	0,
	2,
	8,
	0x06,
	0x50,
	0,
//Bulk-In Endpoit 2 Descriptor
	7,					   
	0x05,
	0x82,
	2,
	64,0,
	01,
//Bulk-Out Endpoit 2 Descriptor
	7,					
	0x05,
	0x02,
	2,
	64,0,
	1,
	
};

unsigned char ctl_DeviceDescr[] =//USB_DEVICE_DESCRIPTOR
{
	0x12,
	0x01,
	0x10,0x01,
	0xdc ,
	0, 0,
	0x10,
	0x71,0x04,//SWAP(0x0471),
	0x66,0x06,//SWAP(0x0666),
	0x00,0x01,//SWAP(0x0100),
	0, 0, 0,
	1
};


unsigned char ctl_ConfigDescr[] =//USB_CONFIGURATION_DESCRIPTOR
{
//Configuration Description
	9,					
	02,
	CFG_NUM,0,
	1,
	1,
	0,
	0x80,
	0x32,
	
 //Bulk-only Data Interface Descriptor	
	9,                    
	0x04,
	0,
	0,
	2,
	0xdc,
	0xa0,
	0xb0,
	0,
//Bulk-In Endpoit 1 Descriptor
	7,					   
	0x05,
	0x81,
	2,
	0x10,0,
	10,
//Bulk-Out Endpoit 1 Descriptor
	7,					
	0x05,
	0x01,
	2,
	0x10,0,
	10,
		
};

void suspend_change(void)
{
}
void stall_ep0(void)
{
	D12_SetEndpointStatus(0, 1);
	D12_SetEndpointStatus(1, 1);
}

void single_transmit(unsigned char * buf, unsigned char len)
{
	if( len <= EP0_PACKET_SIZE) {
	D12_WriteEndpoint(1, buf, len);}
}
void init_unconfig(void)
{
	
	D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. */
}
void init_config(void)
{
	D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. */
}

void setup_dma()
{
	
}

void code_transmit(unsigned char  * pRomData, unsigned short len)
{
	ControlData.wCount = 0;
	if(ControlData.wLength > len)	ControlData.wLength = len;
	ControlData.pData = pRomData;
	if( ControlData.wLength >= EP0_PACKET_SIZE)
	{
		D12_WriteEndpoint(1, ControlData.pData, EP0_PACKET_SIZE);
		ControlData.wCount += EP0_PACKET_SIZE;
		DISABLE;
		bEPPflags.bits.control_state = USB_TRANSMIT;
		ENABLE;
	}
	else 
	{
		D12_WriteEndpoint(1, pRomData, ControlData.wLength);
		ControlData.wCount += ControlData.wLength;
		DISABLE;
		bEPPflags.bits.control_state = USB_IDLE;
		ENABLE;
	}
	
}

void CSW_transmit(unsigned char  * pRomData, unsigned short len)
{
	unsigned int index=0,L;
	unsigned char i;
	ControlData.pData = pRomData;
	L=len;
	while(L>64)
	{	
		
		D12_WriteEndpoint(5, (ControlData.pData+index*64), 64);
		index++;
		L-=64;
		rr:	Outport_command(5);
	 	i=Inport_data();	
  		if(i!=0){goto rr;}
	}
	if(L!=0)
	D12_WriteEndpoint(5, (ControlData.pData+index*64), L);
	
}
void reserved(void)
{
	stall_ep0();
}

void get_status(void)
{
	unsigned char endp, txdat[2];
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
	unsigned char c;
	if (bRecipient == USB_RECIPIENT_DEVICE) 
	{
		if(bEPPflags.bits.remote_wakeup == 1)	txdat[0] = 3;
		else	txdat[0] = 1;
		txdat[1]=0;
		single_transmit(txdat, 2);
	} 
	else if (bRecipient == USB_RECIPIENT_INTERFACE) 
	{
		txdat[0]=0;
		txdat[1]=0;
		single_transmit(txdat, 2);
	}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT) 
	{
		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)	c = D12_SelectEndpoint(endp*2 + 1); /* Control-in */
		else	c = D12_SelectEndpoint(endp*2); /* Control-out */
		if(c & D12_STALL)	txdat[0] = 1;
		else	txdat[0] = 0;
		txdat[1] = 0;
		single_transmit(txdat, 2);
	} 
	else	stall_ep0();
}

void clear_feature(void)
{
	unsigned char endp;
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
	if (bRecipient == USB_RECIPIENT_DEVICE&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) 
	{
		DISABLE;
		bEPPflags.bits.remote_wakeup = 0;
		ENABLE;
		single_transmit(0, 0);
	}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) 
	{
		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)	D12_SetEndpointStatus(endp*2 + 1, 0);/* clear TX stall for IN on EPn_ */
		else	D12_SetEndpointStatus(endp*2, 0);	/* clear RX stall for OUT on EPn_ */
		single_transmit(0, 0);
	}
	else	stall_ep0();
}

void set_feature(void)
{
	unsigned char endp;
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
	if (bRecipient == USB_RECIPIENT_DEVICE&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) 
	{
		DISABLE;
		bEPPflags.bits.remote_wakeup = 1;
		ENABLE;
		single_transmit(0, 0);
	}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) 
	{
		endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)	D12_SetEndpointStatus(endp*2 + 1, 1);/* clear TX stall for IN on EPn_ */
		else	D12_SetEndpointStatus(endp*2, 1);/* clear RX stall for OUT on EPn_ */
		single_transmit(0, 0);
	} 
	else	stall_ep0();
}

void set_address(void)
{

	D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &	DEVICE_ADDRESS_MASK), 1);
	single_transmit(0, 0);
}

void get_descriptor(void)
{
	unsigned char bDescriptor =(ControlData.DeviceRequest.wValue>>8);
	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) 
	{
		code_transmit(pDeviceDescr, 18);
	} 
	else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) 
	{
		code_transmit(pConfigDescr, CFG_NUM);
	} 

}

void get_configuration(void)
{
	unsigned char c = bEPPflags.bits.configuration;
	single_transmit(&c, 1);
}

void set_configuration(void)
{
	if (ControlData.DeviceRequest.wValue == 0)/* put device in unconfigured state */ 
	{
		single_transmit(0, 0);
		DISABLE;
		bEPPflags.bits.configuration = 0;
		ENABLE;
		init_unconfig();
	} 
	else if (ControlData.DeviceRequest.wValue == 1) /* Configure device */
	{
		single_transmit(0, 0);
		init_unconfig();
		init_config();
		DISABLE;
		bEPPflags.bits.configuration = 1;
		ENABLE;
	} 
	else	stall_ep0();
}

void get_interface(void)
{
	unsigned char txdat = 0; /* Only/Current interface = 0 */
	single_transmit(&txdat, 1);
}

void set_interface(void)
{
	if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)	single_transmit(0, 0);
	else	stall_ep0();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线不卡视频| 成+人+亚洲+综合天堂| 亚洲天堂成人在线观看| 国产日韩欧美精品一区| 精品久久久网站| 久久综合久色欧美综合狠狠| 精品国产自在久精品国产| 欧美一区欧美二区| 精品国产乱码久久久久久闺蜜| 日韩一级完整毛片| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美不卡一区二区三区四区| 精品久久国产老人久久综合| 久久影院视频免费| 中文字幕高清不卡| 成人免费在线视频| 五月天激情综合| 九九视频精品免费| 波多野结衣在线aⅴ中文字幕不卡| 成人h动漫精品一区二| 成人99免费视频| 色噜噜久久综合| 91精品久久久久久久91蜜桃| 精品久久人人做人人爽| 国产精品剧情在线亚洲| 一区二区三区av电影| 一区二区久久久久久| 奇米精品一区二区三区在线观看一| 国产自产高清不卡| 色综合久久88色综合天天免费| 欧美性感一区二区三区| 欧美大片拔萝卜| 亚洲欧美中日韩| 日欧美一区二区| 国产精品69久久久久水密桃| 色婷婷av一区二区三区软件| 欧美一区二区三区日韩| 国产精品美女一区二区在线观看| 亚洲午夜在线视频| 国产成人一区在线| 69堂亚洲精品首页| 日韩伦理免费电影| 国内成+人亚洲+欧美+综合在线| av电影一区二区| 欧美成人vps| 亚洲午夜在线观看视频在线| 处破女av一区二区| 精品日韩成人av| 亚洲精品欧美专区| www.欧美日韩国产在线| 精品国产一区二区三区忘忧草| 亚洲视频一区二区在线观看| 久久99国产精品久久| 欧美日本在线播放| 亚洲欧美偷拍另类a∨色屁股| 国产呦精品一区二区三区网站| 欧美唯美清纯偷拍| 最新中文字幕一区二区三区 | 麻豆精品一区二区av白丝在线| 成人av动漫在线| 久久久不卡网国产精品二区 | 国产精品综合久久| 日韩西西人体444www| 亚洲一二三四区不卡| 97久久精品人人做人人爽50路| 国产午夜精品久久久久久免费视| 蜜桃视频在线观看一区二区| 欧美猛男男办公室激情| 亚洲国产你懂的| 欧美视频在线一区| 亚洲成人动漫精品| 555www色欧美视频| 婷婷亚洲久悠悠色悠在线播放 | 91精品国产乱| 日本美女一区二区| 日韩欧美二区三区| 精品一区在线看| 久久久久一区二区三区四区| 国产一区二区三区免费| 久久综合久久鬼色| 成人综合婷婷国产精品久久免费| 精品国产一区久久| 国产成人精品午夜视频免费 | 亚洲免费观看高清在线观看| 成人免费视频免费观看| 国产精品情趣视频| 日本韩国一区二区| 一区二区三区不卡视频| 欧美视频在线不卡| 另类人妖一区二区av| 久久久久久久久免费| 成人爽a毛片一区二区免费| 国产精品久久久久久久久免费桃花 | 精品在线播放午夜| 亚洲精品在线电影| 美女一区二区在线观看| 精品理论电影在线| 成人免费观看av| 亚洲国产综合色| 精品免费日韩av| 99精品热视频| 婷婷久久综合九色综合伊人色| 91麻豆精品国产91久久久久| 老司机精品视频导航| 亚洲国产精品成人久久综合一区| 91色综合久久久久婷婷| 热久久国产精品| 中文字幕欧美激情一区| 欧美三级蜜桃2在线观看| 奇米影视7777精品一区二区| 欧美激情中文字幕一区二区| 欧美亚洲综合在线| 国产 欧美在线| 日韩一区欧美二区| 国产精品美女久久久久久久久| 欧美三级视频在线播放| 国产精品一区在线观看乱码| 亚洲与欧洲av电影| 中文av字幕一区| 日韩欧美成人午夜| 欧美中文字幕一区| 成人性生交大片免费看中文| 视频一区国产视频| **性色生活片久久毛片| 欧美成人精精品一区二区频| 欧美亚洲禁片免费| eeuss鲁片一区二区三区在线观看| 日韩av在线播放中文字幕| 国产精品久久久久久久久免费相片 | 亚洲日本在线天堂| 精品盗摄一区二区三区| 99精品国产99久久久久久白柏| 免费观看日韩av| 亚洲超碰97人人做人人爱| 久久精品夜色噜噜亚洲a∨| 91精品国产综合久久久久久久| 91在线观看免费视频| 国产呦萝稀缺另类资源| 免费在线观看一区| 一区二区三区成人| 自拍偷拍国产亚洲| 国产精品欧美经典| 国产女同互慰高潮91漫画| 亚洲精品在线三区| 日韩欧美自拍偷拍| 日韩一级成人av| 宅男噜噜噜66一区二区66| 欧美日韩在线不卡| 欧美亚日韩国产aⅴ精品中极品| 97久久人人超碰| 99国产精品国产精品毛片| 99久久婷婷国产综合精品| 国产美女精品一区二区三区| 精品中文字幕一区二区| 日本怡春院一区二区| 婷婷开心激情综合| 男男成人高潮片免费网站| 日本欧美一区二区| 久草中文综合在线| 精品在线一区二区三区| 国产一区二区在线电影| 国产一区二区主播在线| 国产成人精品影院| 北条麻妃一区二区三区| 不卡av免费在线观看| 91在线观看美女| 欧美三级在线视频| 宅男噜噜噜66一区二区66| 欧美成人三级电影在线| 国产日韩欧美亚洲| 一区二区三区在线视频观看58| 亚洲午夜一区二区| 美女久久久精品| 成人看片黄a免费看在线| 93久久精品日日躁夜夜躁欧美| 成人黄色在线视频| 欧美三区在线观看| 久久综合丝袜日本网| 中文字幕在线一区| 天堂影院一区二区| 国产剧情在线观看一区二区| 99精品黄色片免费大全| 欧美精品在线观看一区二区| 久久亚洲精品国产精品紫薇| 国产精品无遮挡| 天堂蜜桃91精品| 国产精品2024| 欧美午夜电影网| 国产三级一区二区| 一级特黄大欧美久久久| 国内成+人亚洲+欧美+综合在线| www.色综合.com| 日韩视频不卡中文| 亚洲欧美色图小说| 国产最新精品精品你懂的| 色综合天天综合网天天狠天天 | 懂色中文一区二区在线播放| 在线观看91视频| 国产人妖乱国产精品人妖| 亚洲天堂精品视频|