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

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

?? transfer.c

?? zlg/fs源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define TRANSFER_GLOBALS

#include "config.h"



INT8U Control_Setup(	USB_Device_Request *dev_req,
							endpoint_info *epi_ptr)
							
{
	INT8U uc_SetupBuf[8];
	INT8U uc_Data0Addr;
	INT8U uc_Intr;
	INT8U uc_Result;
	INT8U uc_Timeout;
	
	uc_Timeout = 0;
	uc_Data0Addr = EP0_Buf;
	
	uc_SetupBuf[0] = dev_req->bmRequestType;
	uc_SetupBuf[1] = dev_req->bRequest;
	uc_SetupBuf[2] = (INT8U)(dev_req->wValue);
	uc_SetupBuf[3] = (INT8U)(dev_req->wValue>>8);	
	uc_SetupBuf[4] = (INT8U)(dev_req->wIndex);
	uc_SetupBuf[5] = (INT8U)(dev_req->wIndex>>8);
	uc_SetupBuf[6] = (INT8U)(dev_req->wLength);
	uc_SetupBuf[7] = (INT8U)(dev_req->wLength>>8);

	
	SL811BufWrite(uc_Data0Addr, uc_SetupBuf, 8);
	SL811Write(EP0Status,((epi_ptr->endpoint_descriptor.bEndpointAddress&0x0F)|PID_SETUP));						// PID + EP address
	SL811Write(EP0Counter,epi_ptr->dvi_ptr->address);										// USB address
	SL811Write(EP0Address, uc_Data0Addr);													// buffer address, start with "data0"
	SL811Write(EP0XferLen, 8);															// data transfer length
	SL811Write(IntStatus, INT_CLEAR); 														// clear interrupt status
	SL811Write(EP0Control, sDATA0_WR);													// Enable ARM and USB transfer start here	

WaitForOver:
	
	while(1) {
		uc_Intr = SL811Read(IntStatus);							// wait for interrupt to be done, and 
		if((uc_Intr & USB_RESET) || (uc_Intr & INSERT_REMOVE))			// proceed to parse result from slave 
		{													// device.
			return 0xff;										// flag true, so that main loop will 
		}													// know this condition and exit gracefully
		if(uc_Intr & USB_A_DONE)								
			break;											// interrupt done !!!
	}

	SL811Write(IntStatus, INT_CLEAR);
	USB_Delay(50);
	uc_Result = SL811Read(EP0Status);

	if (uc_Result & EP0_ACK) {
		return 0;
	}

	if (uc_Result & EP0_STALL) {
		return 0;
	}
	
	if (uc_Result & EP0_NAK) {
		if (++uc_Timeout >= TIMEOUT_RETRY) {
			return 0xff;
		}
		SL811Write(IntStatus, INT_CLEAR); 
		SL811Write(EP0Control, sDATA0_WR);
		goto WaitForOver;
	}

	if (uc_Result & EP0_TIMEOUT) {
		if (++uc_Timeout >= TIMEOUT_RETRY) {
			return 0xff;
		}
		SL811Write(IntStatus, INT_CLEAR); 
		SL811Write(EP0Control, sDATA0_WR);
		goto WaitForOver;
	}

	// EP0_OVERFLOW, EP0_ERROR, EP0_SEQUENCE, EP0_SETUP
	return 0xff;			
}



	


INT8U Control_Out(	INT8U *data_ptr,
						INT16U size,
						endpoint_info *epi_ptr)
{
	INT8U uc_Data0Addr;
	INT8U uc_Data1Addr;
	INT8U uc_TranLen;
	INT8U uc_UnTranLen;
	INT8U uc_Cmd;
	INT8U uc_Result;
	INT8U uc_Timeout;
	INT8U uc_Intr;
	//INT8U uc_BufLen;
	INT8U uc_Addr;
	INT8U uc_Toggle;
	uc_Timeout = 0;
	uc_Toggle = 1;
	uc_Data0Addr = EP0_Buf;
	uc_Data1Addr = uc_Data0Addr+ epi_ptr->endpoint_descriptor.wMaxPacketSize;
	
	uc_Addr = uc_Data1Addr;
	uc_TranLen = m_MIN(epi_ptr->endpoint_descriptor.wMaxPacketSize, size);
	uc_Cmd = sDATA0_WR|0x40;
	SL811BufWrite(uc_Addr, data_ptr, uc_TranLen);
	SL811Write(EP0Status, ((epi_ptr->endpoint_descriptor.bEndpointAddress&0x0F)|PID_OUT));					// PID + EP address
	SL811Write(EP0Counter, epi_ptr->dvi_ptr->address);									// USB address
	SL811Write(EP0Address, uc_Addr);												// buffer address, start with "data0"
	SL811Write(EP0XferLen, uc_TranLen);												// data transfer length
	SL811Write(IntStatus,INT_CLEAR); 													// clear interrupt status
	SL811Write(EP0Control, uc_Cmd);														// Enable ARM and USB transfer start here
	
WaitForOver:
	
	while(1) {
		uc_Intr = SL811Read(IntStatus);							// wait for interrupt to be done, and 
		if((uc_Intr & USB_RESET) || (uc_Intr & INSERT_REMOVE))			// proceed to parse result from slave 
		{													// device.
			return 0xff;										// flag true, so that main loop will 
		}													// know this condition and exit gracefully
		if(uc_Intr & USB_A_DONE)								
			break;											// interrupt done !!!
	}

	SL811Write(IntStatus, INT_CLEAR);
	USB_Delay(50);
	uc_Result = SL811Read(EP0Status);
	uc_UnTranLen = SL811Read(EP0Counter);

	if (uc_Result & EP0_ACK) {
		size -= uc_TranLen;
		data_ptr += uc_TranLen;
		uc_Toggle = !uc_Toggle;
		if (size) {
			uc_Addr = (uc_Toggle&1)?uc_Data1Addr:uc_Data0Addr;
			uc_TranLen = m_MIN(size, epi_ptr->endpoint_descriptor.wMaxPacketSize);
			uc_Cmd ^= 0x40;
			uc_Cmd |= 0x20;
			SL811BufWrite(uc_Addr, data_ptr, uc_TranLen);
			SL811Write(EP0XferLen, uc_TranLen);
			SL811Write(EP0Address, uc_Addr);
			SL811Write(IntStatus, INT_CLEAR);
			SL811Write(EP0Control, uc_Cmd);
			goto WaitForOver;
		}
		else {
			return 0;
		}
		
	}
	
	if (uc_Result & EP0_STALL) {
		return 0;
	}
	
	if (uc_Result & EP0_NAK) {
		if (++uc_Timeout >= TIMEOUT_RETRY) {
			return 0xff;
		}
		SL811Write(IntStatus, INT_CLEAR); 
		SL811Write(EP0Control, sDATA0_WR);
		goto WaitForOver;
	}

	if (uc_Result & EP0_TIMEOUT) {
		if (++uc_Timeout>= TIMEOUT_RETRY) {
			return 0xff;
		}
		SL811Write(IntStatus, INT_CLEAR); 
		SL811Write(EP0Control, sDATA0_WR);
		goto WaitForOver;
	}

	// EP0_OVERFLOW, EP0_ERROR, EP0_SEQUENCE, EP0_SETUP
	return 0xff;			
}


INT8U Control_In(	INT8U *data_ptr,
						INT16U size,
						endpoint_info *epi_ptr)
{
	INT8U uc_Data0Addr;
	INT8U uc_Data1Addr;
	INT8U uc_TranLen;
	INT8U uc_UnTranLen;
	INT8U uc_Cmd;
	INT8U uc_Result;
	INT8U uc_Timeout;
	INT8U uc_Intr;
	//INT8U uc_BufLen;
	INT8U uc_Addr;
	INT8U uc_Toggle;
	uc_Timeout = 0;
	uc_Toggle = 1;
	uc_Data0Addr = EP0_Buf;
	uc_Data1Addr = uc_Data0Addr+ epi_ptr->endpoint_descriptor.wMaxPacketSize;
	
	uc_Addr = uc_Data1Addr;
	uc_TranLen = m_MIN(epi_ptr->endpoint_descriptor.wMaxPacketSize, size);
	uc_Cmd = sDATA0_RD|0x40;
	SL811Write(EP0Status, ((epi_ptr->endpoint_descriptor.bEndpointAddress&0x0F)|PID_IN));	// PID + EP address
	SL811Write(EP0Counter, epi_ptr->dvi_ptr->address);									// USB address
	SL811Write(EP0Address, uc_Addr);												// buffer address, start with "data0"
	SL811Write(EP0XferLen, uc_TranLen);												// data transfer length
	SL811Write(IntStatus,INT_CLEAR); 													// clear interrupt status
	SL811Write(EP0Control, uc_Cmd);														// Enable ARM and USB transfer start here
	
WaitForOver:
	
	while(1) {
		uc_Intr = SL811Read(IntStatus);							// wait for interrupt to be done, and 
		if((uc_Intr & USB_RESET) || (uc_Intr & INSERT_REMOVE))			// proceed to parse result from slave 
		{													// device.
			return 0xff;										// flag true, so that main loop will 
		}													// know this condition and exit gracefully
		if(uc_Intr & USB_A_DONE)								
			break;											// interrupt done !!!
	}

	SL811Write(IntStatus, INT_CLEAR);
	USB_Delay(50);
	uc_Result = SL811Read(EP0Status);
	uc_UnTranLen = SL811Read(EP0Counter);

	if (uc_Result & EP0_ACK) {
		SL811BufRead(((uc_Toggle&1)?uc_Data1Addr:uc_Data0Addr), data_ptr, uc_TranLen);
		data_ptr += uc_TranLen;
		size -= uc_TranLen;
		uc_Toggle = !uc_Toggle;
		if (size) {
			uc_Addr = (uc_Toggle&1)?uc_Data1Addr:uc_Data0Addr;
			uc_TranLen = m_MIN(size, epi_ptr->endpoint_descriptor.wMaxPacketSize);
			uc_Cmd ^= 0x40;
			uc_Cmd |= 0x20;
			SL811Write(EP0XferLen, uc_TranLen);
			SL811Write(EP0Address, uc_Addr);
			SL811Write(IntStatus, INT_CLEAR);
			SL811Write(EP0Control, uc_Cmd);
			goto WaitForOver;
		}
		else {
			return 0;
		}
		
	}
	
	if (uc_Result & EP0_STALL) {
		return 0;
	}
	
	if (uc_Result & EP0_NAK) {
		if (++uc_Timeout >= TIMEOUT_RETRY) {
			return 0xff;
		}
		SL811Write(IntStatus, INT_CLEAR); 
		SL811Write(EP0Control, sDATA0_WR);
		goto WaitForOver;
	}

	if (uc_Result & EP0_TIMEOUT) {
		if (++uc_Timeout>= TIMEOUT_RETRY) {
			return 0xff;
		}
		SL811Write(IntStatus, INT_CLEAR); 
		SL811Write(EP0Control, sDATA0_WR);
		goto WaitForOver;
	}

	// EP0_OVERFLOW, EP0_ERROR, EP0_SEQUENCE, EP0_SETUP
	return 0xff;		
}

INT16U Control_Transfer(	USB_Device_Request	*dev_req, 
							device_instance *dvi_ptr, 
							INT8U *data_ptr )
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人久久精品二区三区红 | 国产精品婷婷午夜在线观看| 成人h版在线观看| 91精品在线免费| 爽爽淫人综合网网站| 国产欧美日韩一区二区三区在线观看| 亚洲一区二区三区小说| 91小宝寻花一区二区三区| 激情综合色播激情啊| 国产白丝精品91爽爽久久| 欧美区在线观看| 91在线视频官网| 狠狠色丁香婷婷综合久久片| 亚洲午夜视频在线| 国产精品久久国产精麻豆99网站| 亚洲精品一区二区在线观看| 4438x成人网最大色成网站| 91成人网在线| 久久久久97国产精华液好用吗| 韩国v欧美v日本v亚洲v| 国产精品久久久久久久久久久免费看| 成人免费看的视频| 亚洲一区二区在线观看视频 | 91黄色免费版| 亚洲影院免费观看| 欧美日韩一卡二卡| 狠狠色伊人亚洲综合成人| 亚洲国产精品激情在线观看| 99精品一区二区三区| 亚洲成a人v欧美综合天堂下载 | 亚洲一区在线观看免费| 91精品国产色综合久久不卡蜜臀| 精品写真视频在线观看| 亚洲特级片在线| 91精品国产91久久久久久一区二区 | 午夜精品福利视频网站| 国产亚洲精品超碰| 成人免费视频免费观看| 国产日韩精品一区二区三区在线| 欧美日韩中文字幕一区| 国产女主播在线一区二区| 久久久久亚洲综合| 欧美日韩电影在线播放| 欧美在线综合视频| 视频一区二区中文字幕| 国产精品无人区| 国产欧美一区二区精品秋霞影院 | 99久久精品免费精品国产| 精品三级在线看| 日本一区二区成人| 欧美日韩国产成人在线免费| 不卡的av电影在线观看| a美女胸又www黄视频久久| 国产精品99久久久| 国产成人av一区二区三区在线| 国产一区二区三区日韩| 国产99久久久久| 成人一区二区三区| 欧美亚洲综合一区| 欧美男人的天堂一二区| 精品国产91亚洲一区二区三区婷婷| 日韩精品一区二区三区视频播放| 欧美日韩aaaaa| 国产欧美精品国产国产专区| 国产视频一区二区在线观看| 久久久久国产精品免费免费搜索| 91精品福利在线一区二区三区 | 精品一区二区免费视频| 福利91精品一区二区三区| 欧美日韩在线一区二区| 欧美一区二区三区人| 日韩视频国产视频| 国产精品福利在线播放| 日日欢夜夜爽一区| 91丨porny丨首页| 日本视频一区二区三区| 欧美午夜精品理论片a级按摩| 91在线视频18| 精品国产乱子伦一区| 亚洲最新视频在线观看| 国产.欧美.日韩| 欧美日韩免费在线视频| 精品三级在线观看| 久久精品国产亚洲5555| 精品捆绑美女sm三区| 亚洲高清免费观看| 欧美高清视频www夜色资源网| 午夜精品影院在线观看| 欧美丰满一区二区免费视频 | 在线免费观看日本欧美| 2014亚洲片线观看视频免费| 看片的网站亚洲| 国产精品成人一区二区艾草 | 国产精品综合网| 宅男在线国产精品| 亚洲乱码中文字幕综合| 欧美在线不卡一区| 亚洲欧美一区二区久久| 在线观看免费成人| 蜜桃av一区二区三区电影| 精品国产一区二区三区久久影院| 久久99精品视频| 中文字幕亚洲在| 欧美乱妇一区二区三区不卡视频| 精品成人一区二区| 99re视频这里只有精品| 六月丁香婷婷色狠狠久久| 国产精品久久久99| 一区二区三区 在线观看视频| 欧美日韩精品综合在线| 国内精品嫩模私拍在线| 最新国产成人在线观看| 欧美在线免费观看亚洲| 国内精品自线一区二区三区视频| 久久久久青草大香线综合精品| 91丝袜美腿高跟国产极品老师 | 成人在线综合网站| 六月丁香婷婷久久| 美女视频一区二区| 久久99蜜桃精品| 国产一区亚洲一区| 精品系列免费在线观看| 久草中文综合在线| 国产精品资源在线看| 韩国成人福利片在线播放| 国产精品欧美一区喷水| 精品国精品国产| 日韩一区二区三区视频在线| 色婷婷av一区二区三区大白胸 | 亚洲一二三区不卡| 精品处破学生在线二十三| 欧美无乱码久久久免费午夜一区 | 国产蜜臀av在线一区二区三区| 91丝袜美腿高跟国产极品老师| 美日韩黄色大片| 日韩精品午夜视频| 亚洲国产高清在线| 欧美大片在线观看| 欧美日韩一区三区四区| 国产激情一区二区三区四区| 午夜国产精品影院在线观看| 亚洲人成精品久久久久| 中文久久乱码一区二区| 国产亚洲欧洲997久久综合| 精品av综合导航| 欧美电视剧在线看免费| 欧美成人一级视频| 欧美mv日韩mv亚洲| 久久综合色鬼综合色| 日韩欧美亚洲国产另类| 精品国产伦一区二区三区免费| 538在线一区二区精品国产| 3d成人动漫网站| 欧美一级高清片| 久久久亚洲精品一区二区三区| 欧美精品一区在线观看| 欧美激情中文字幕一区二区| 国产性天天综合网| 亚洲视频 欧洲视频| 亚洲国产aⅴ天堂久久| 亚洲小说欧美激情另类| 青青青爽久久午夜综合久久午夜| 日日摸夜夜添夜夜添精品视频| 三级久久三级久久久| 奇米888四色在线精品| 天天影视网天天综合色在线播放| 蜜桃一区二区三区在线观看| 国产成人免费视频网站高清观看视频| 国产成人亚洲综合a∨婷婷图片| 成人h动漫精品| 欧美一区二区三区思思人| 国产欧美精品日韩区二区麻豆天美| 亚洲日本丝袜连裤袜办公室| 日韩综合在线视频| 国产一区二区三区在线看麻豆| 91色乱码一区二区三区| 欧美美女网站色| 中文字幕一区免费在线观看| 亚洲gay无套男同| 99国产欧美另类久久久精品| 欧美mv日韩mv| 亚洲日本一区二区| 国产麻豆精品theporn| 欧美日韩精品一区二区三区蜜桃 | 日本欧美在线看| 亚洲精品五月天| 亚洲成av人片观看| 国模套图日韩精品一区二区| 国产香蕉久久精品综合网| 在线观看免费一区| 国产精品白丝av| 亚洲国产精品欧美一二99| 欧美高清在线精品一区| 欧美一区二区三区免费大片| 国产凹凸在线观看一区二区| 日韩成人免费在线| 欧美xingq一区二区| 亚洲国产精品一区二区尤物区| 色哟哟精品一区| 久久综合九色综合97婷婷|