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

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

?? chap_9.c

?? 周立功的 usb設備端驅動程序,適用于D12/1161 的DC,自己的高質量源碼不多,有些也不是很通用,希望這個源碼能為貴網添磚加瓦,我懷著虔誠的心想加入這個大集體!
?? C
?? 第 1 頁 / 共 2 頁
字號:
	INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
																	//讀取請求類型		get the request type
	if (bRecipient == USB_RECIPIENT_DEVICE							//對設備請求		the request of device	
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
		bEPPflags.bits.remote_wakeup = 1;							//置1遠程喚醒標志	set the flag of wakeup remove
		single_transmit(0, 0);										//返回一個空的數(shù)據表示執(zhí)行完畢
	}																//indicate that transmit end by transmitting a empty packet	
	
	else if (bRecipient == USB_RECIPIENT_ENDPOINT					//對端點請求		get request of endpoint
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
		endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if ((ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK) == 0){
			if (endp == 0)											
			    endp = -1;											//被請求的端點為控制OUT the requested endpoint is control OUT
		}
		
		D13_SetEndpointStatus(endp + 1,D13REG_EPSTS_STALL);			//禁止端點				stall  endpoint
		single_transmit(0, 0);										//返回一個空的數(shù)據表示執(zhí)行完畢
	} else															//indicate that transmit end by transmitting a empty packet
		stall_ep0();					//沒有該請求,返回STALL
}										//the unknown request,transmit stall


/************************************************************************************************************************
** 函數(shù)名稱: set_address()					Name:		set_address()
** 功能描述: 設置地址						Function:	set address
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
************************************************************************************************************************/
void set_address(void)
{
	D13_SetAddressEnable((INT8U)(ControlData.DeviceRequest.wValue &
						 DEVICE_ADDRESS_MASK), 1);		//使能USB設備地址		 enable USB device address
	single_transmit(0, 0);								//發(fā)送一個空的數(shù)據響應   reponse by transmitting a empty packet 
}


/************************************************************************************************************************
** 函數(shù)名稱: get_descriptor()				Name:		get_descriptor()
** 功能描述: 獲取描述符						Function:	get descriptor
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
*************************************************************************************************************************/
void get_descriptor(void)
{
	INT8U bDescriptor = MSB(ControlData.DeviceRequest.wValue);			//讀取請求的描述符類型 get the request descriptor type

	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE){						//要獲取設備描述符	 want to get the device descriptor		
		code_transmit((INT8U *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
	
	}else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) {		//要獲取其它描述符   want to get other descriptor
		  		if (ControlData.DeviceRequest.wLength > CONFIG_DESCRIPTOR_LENGTH){ 
					 ControlData.DeviceRequest.wLength = CONFIG_DESCRIPTOR_LENGTH;
				}
			    code_transmit((INT8U *)&(usb_descr.ConfigDescr), ControlData.DeviceRequest.wLength);
			    														//發(fā)送描述符內容	transmit the content of descriptor	
	   	   }else
				stall_ep0();					//沒有該請求,返回STALL	the unknown request,transmit stall
}


/*************************************************************************************************************************
** 函數(shù)名稱: get_configuration()			Name:		get_configuration()
** 功能描述: 獲取USB事件的配置值			Function:	get the configuration value of USB events
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
*************************************************************************************************************************/
void get_configuration(void)
{
	INT8U c = bEPPflags.bits.configuration;	//取出配置值		get the configuration value
		
	single_transmit(&c, 1);					//發(fā)送配置值		transmit the configuration value
}

/************************************************************************************************************************
** 函數(shù)名稱: set_configuration()			Name:		set_configuration()
** 功能描述: 設置USB事件的配置值			Function:	set the configuration value of USB events						
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
*************************************************************************************************************************/
void set_configuration(void)
{
	if (ControlData.DeviceRequest.wValue == 0) {			
		//配置值不對,設備進入未配置狀態(tài)		the configuration value is error,device enter no configuration status
		single_transmit(0, 0);								//發(fā)向一個空包響應	respone by transmitting a empty packet
		bEPPflags.bits.configuration = 0;					//標記未配置		mark the USB be not configurated
		init_unconfig();
		
	} else if (ControlData.DeviceRequest.wValue == 1) {		//配置設備			configurate the device
		single_transmit(0, 0);								//發(fā)向一個空包響應	response by transmittign a empty packet
		init_unconfig();
		init_config();
		bEPPflags.bits.configuration = 1;					//標志已配置		mark the USB has be configurated
	} else
		stall_ep0();						//沒有該請求,返回STALL     the unknown request,transmit stall
}


/************************************************************************************************************************
** 函數(shù)名稱: get_interface()				Name:		get_interface()
** 功能描述: 獲取接口信息					Function:	get the information of interface
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
*************************************************************************************************************************/
void get_interface(void)
{
	INT8U txdat = 0;						//本設備只有一個接口	the device has only a interface
	single_transmit(&txdat, 1);				//發(fā)送一個字節(jié)			transmit a byte
}


/************************************************************************************************************************
** 函數(shù)名稱: set_interface()				Name:		set_interface()
** 功能描述: 設置接口信息					Function:	set the information of interface
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
************************************************************************************************************************/
void set_interface(void)
{
	if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
		single_transmit(0, 0);			   //回復一個空的數(shù)據表示執(zhí)行完畢	respone by transmitting a empty packet
	else		
		stall_ep0();					   //沒有該請求,返回STALL			the unknown request,transmit stall		
}

/***********************************************************************************************************************
** 函數(shù)名稱: control_handler()				Name:		control_handler()
** 功能描述: 控制傳輸處理函數(shù)				Function:	the function of dealing with control transfer
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
************************************************************************************************************************/
void control_handler(void)
{
	INT8U type, req;

	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
												//讀取請求代碼			get the request code
	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
	if (type == USB_STANDARD_REQUEST)
		(*StandardDeviceRequest[req])();		//標準請求處理			the normal request
	//else if (type == USB_VENDOR_REQUEST)		//廠商請求				the vector request
	//	(*VendorDeviceRequest[req])();
	//else if(type == USB_CLASS_REQUEST)
	//	(*ClassDeviceRequest[req])();			//類請求,如大容量類		class request,example mass class
	else
		stall_ep0();							//無效請求,返回STALL		the unknown request,transmit stall		
}

/************************************************************************************************************************
** 函數(shù)名稱: ep0_rxdone()					Name:		ep0_rxdone()
** 功能描述: 通過端點0接收數(shù)據				Function:	receive datat via endpoint 0
** 輸	 入: 無								Input:		NULL
** 輸	 出: 無								Output:		NULL
************************************************************************************************************************/
void ep0_rxdone(void)
{
	INT8U ep_last, i;
	INT8U req[sizeof(DEVICE_REQUEST)];						 //SETUP包接收緩沖區(qū)

	ep_last = D13_GetEndpointStatusWInteruptClear(EPINDEX4EP0_CONTROL_OUT);			
															 //清除控制OUT端點中斷寄存器標志,取得該端點處理狀態(tài)
															 //clear interrupt register flag of control out,get the endpoint status
	if (ep_last & D13REG_EPSTS_SETUP) {					 	 //如果收到了建立包(Setup包)	  if receive the SETUP packet
		ControlData.wLength = 0;							
		ControlData.wCount = 0;
		if(D13_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),req) 
							!= sizeof(DEVICE_REQUEST) ) {
												 			 //從控制OUT端點讀8個字節(jié)失敗	  read 8 bytes fail from control out
			stall_ep0();									 //停止端點0					  stall endpoint 0
			bEPPflags.bits.control_state = USB_IDLE;		 //設置為等待狀態(tài)			      set idle status
			return;
		}
		/******* 以下語句通信中的解決大小端問題,使該函數(shù)與編譯器無關  resolve big-little endian ****/
		ControlData.DeviceRequest.bmRequestType = req[0];
		ControlData.DeviceRequest.bRequest	    = req[1];
		ControlData.DeviceRequest.wValue 	 	= req[3] * 256 + req[2]; 
		ControlData.DeviceRequest.wIndex        = req[5] * 256 + req[4];
		ControlData.DeviceRequest.wLength       = req[7] * 256 + req[6]; 
		
		/********  接收建立包成功 **********/
		D13_ClearBuffer(0);									 		 //清空接收緩沖區(qū)			  clear receive buffer	
		D13_AcknowledgeSETUP();								 		 //應答SETUP				  acknowledge SETUP
		ControlData.wLength = ControlData.DeviceRequest.wLength; 	 //取出要傳輸數(shù)據的總字節(jié)數(shù)
		ControlData.wCount = 0;
		if (ControlData.DeviceRequest.bmRequestType & (INT8U)USB_ENDPOINT_DIRECTION_MASK) {
 																	 //如果是控制讀取		 	  control read 
 			 OSSemPost(pSetup_Event);								 //通知control_handler()處理Setup包
 			 														 //inform control_handler()	deal with SETUP packet		
			 bEPPflags.bits.control_state = USB_TRANSMIT;	         //設置為發(fā)送狀態(tài)    set transmit status
		}
		else{								 						 //如果是控制寫入	 control write
			  if (ControlData.DeviceRequest.wLength == 0) {
				  OSSemPost(pSetup_Event);							 //通知control_handler()處理Setup包
				  													 //inform control_handle() deal with SETUP packet
				  bEPPflags.bits.control_state = USB_IDLE;	       	 //設置為等待狀態(tài)    set idle status
			  }
			  else {
				    if (ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {	
																	 //數(shù)據長度出錯	   the length of data is error
					     bEPPflags.bits.control_state = USB_IDLE;	 //設置為等待狀態(tài)  set idele status
					     stall_ep0();								 //停止端點0	   stall endpoint 0
				    }
				    else
					    bEPPflags.bits.control_state = USB_RECEIVE;  //設置為接收狀態(tài)  set receive status
			  }// set command with data
		 }// else set command
	}// if setup packet

	/*****  下面為控制輸出的數(shù)據階段 data phase of control out ***************/
	else if (bEPPflags.bits.control_state == USB_RECEIVE) {	  	     //如果為接收狀態(tài)  receive status
			 i = D13_ReadEndpoint(0, EP0_PACKET_SIZE,
			 ControlData.dataBuffer + ControlData.wCount);	 	     //從端點0接收數(shù)據 receive data from endpoint 0
			 ControlData.wCount += i;
			 if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {  	
			 	 OSSemPost(pSetup_Event);							 //通知control_handler()處理Setup包
			 	 													 //inform control_handle() deal with SETUP packet
				 bEPPflags.bits.control_state = USB_IDLE;	         //設置為等待狀態(tài)  set idle status
			 }
		 }else 
		  	 bEPPflags.bits.control_state = USB_IDLE;				 //設置等待狀態(tài)    set idle status
		 
	D13_ClearBuffer(0); 						//清除緩沖區(qū)0 clear ep0 buffer
}

/************************************************************************************************************************
** 函數(shù)名稱: ep0_txdone()						Name:		ep0_txdone()
** 功能描述: 通過端點索引 0 發(fā)送數(shù)據				Function:	send data via endpoint 0 
** 輸	 入: 無									Input:		NULL
** 輸	 出: 無									Output:		NULL
***********************************************************************************************************************/
void ep0_txdone(void)
{
	INT16 i = ControlData.wLength - ControlData.wCount;		//計算未發(fā)送的字節(jié)數(shù)   calculate the bytes that will be transmitted

	D13_GetEndpointStatusWInteruptClear(1); 				//清除中斷寄存器標志位 clear the interrupt flag of the interrupt register

	if (bEPPflags.bits.control_state != USB_TRANSMIT){		//非發(fā)送狀態(tài)		   if it is not the status of transmit,													
		single_transmit(0, 0);								//回復一個空包		   respone by transmitting a empty packet
		return;												//返回				   return
	}
	
	if( i >= EP0_PACKET_SIZE) {								//發(fā)送16個字節(jié)		   transmit 16 bytes
		D13_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
		ControlData.wCount += EP0_PACKET_SIZE;
		bEPPflags.bits.control_state = USB_TRANSMIT;	
	}
	else if( i != 0) {										//發(fā)送所有字節(jié) 		   transmit all bytes
		D13_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
		ControlData.wCount += i;
		bEPPflags.bits.control_state = USB_IDLE;			//置狀態(tài)為等待狀態(tài)	   set idle status
	}
	else if (i == 0){
		D13_WriteEndpoint(1, 0, 0); 						//發(fā)送完畢,發(fā)0個字節(jié)   transmit zero bytes 
		bEPPflags.bits.control_state = USB_IDLE;			//置狀態(tài)為等待狀態(tài)	   set idle status
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久免费看少妇高潮| 亚洲精品中文在线影院| 久久久美女毛片| 国产精品美女久久久久久久久久久| 国产精品伦理一区二区| 亚洲伦理在线精品| 久久成人综合网| 韩日欧美一区二区三区| 国模冰冰炮一区二区| 波多野结衣欧美| 欧美伦理影视网| 久久综合久久鬼色| 亚洲精品videosex极品| 久久精品国产一区二区三 | 欧美国产激情二区三区| 国产精品美女久久久久aⅴ| 亚州成人在线电影| 丝袜国产日韩另类美女| 国产精品18久久久久久久久久久久 | 亚洲欧美日韩在线不卡| 蜜臀久久99精品久久久画质超高清| 粉嫩av一区二区三区| 国产人伦精品一区二区| 日本一区二区在线不卡| 石原莉奈在线亚洲二区| 国产精品综合二区| 欧美天天综合网| 中文字幕不卡一区| 亚洲夂夂婷婷色拍ww47| 成人国产精品视频| 国产亚洲短视频| 亚洲婷婷国产精品电影人久久| 青青草97国产精品免费观看无弹窗版| 欧美在线啊v一区| 91精品午夜视频| 国产精品久久久一本精品| 国内精品国产成人国产三级粉色| 色噜噜久久综合| 91在线无精精品入口| 精品免费视频一区二区| 一区av在线播放| 国产成人午夜精品5599| 欧美三电影在线| 亚洲欧美日韩国产一区二区三区| 亚洲国产另类av| 久久99热狠狠色一区二区| 91精彩视频在线| 亚洲欧洲综合另类| 91捆绑美女网站| 国产精品久久久久久久久久久免费看 | 99久久99久久久精品齐齐| 欧美日本在线播放| 亚洲人妖av一区二区| 成人免费观看视频| 26uuu另类欧美| 亚洲少妇30p| fc2成人免费人成在线观看播放| 欧美一区二区在线免费播放| 夜夜嗨av一区二区三区四季av | 成人久久视频在线观看| 精品1区2区在线观看| 精品亚洲免费视频| 久久久精品国产99久久精品芒果| 国产一区欧美日韩| 日韩美女一区二区三区四区| 麻豆精品在线视频| 国产午夜精品久久| 99精品一区二区| 亚洲一卡二卡三卡四卡五卡| 欧美性大战久久久久久久| 亚洲不卡av一区二区三区| gogogo免费视频观看亚洲一| 一区二区三国产精华液| 欧美日韩电影在线| 国内外精品视频| 中文字幕亚洲视频| 欧美日韩一卡二卡| 久久99国产精品麻豆| 26uuu亚洲综合色| 久久99国产精品久久99 | 青娱乐精品视频| 欧美精三区欧美精三区| 奇米亚洲午夜久久精品| 精品粉嫩超白一线天av| 国产电影一区在线| 亚洲另类春色校园小说| 欧美日韩视频在线观看一区二区三区 | 国产精品动漫网站| 欧美亚洲精品一区| 另类综合日韩欧美亚洲| 中文一区在线播放| jvid福利写真一区二区三区| 亚洲成人av在线电影| 亚洲精品在线观看视频| 成人激情小说乱人伦| 午夜精品久久久久影视| 国产欧美一区二区三区鸳鸯浴| 成人app网站| 男女性色大片免费观看一区二区 | 国产精品黄色在线观看| 欧美三级电影精品| 国产乱码精品一品二品| 亚洲国产一区二区三区青草影视 | 麻豆国产欧美日韩综合精品二区 | 欧美疯狂做受xxxx富婆| 国模大尺度一区二区三区| 亚洲一区中文日韩| 欧美国产日韩亚洲一区| 91精品在线麻豆| 丰满少妇久久久久久久| 日韩高清不卡一区二区| 亚洲人成7777| 国产亚洲欧美一级| 日韩一级完整毛片| 欧美三级视频在线观看| 99精品一区二区| 免费欧美日韩国产三级电影| 亚洲黄色小视频| 国产网站一区二区三区| 欧美xxxxxxxx| 欧美日韩www| 高清日韩电视剧大全免费| 三级在线观看一区二区| 亚洲自拍偷拍综合| 中文字幕亚洲精品在线观看| 久久综合九色综合欧美就去吻| 91麻豆视频网站| www.欧美色图| 国产v综合v亚洲欧| 国产精品一区二区在线观看不卡 | 国产精品一区不卡| 成人午夜私人影院| 91一区二区在线观看| 日本精品免费观看高清观看| 欧美亚一区二区| 欧美一级精品大片| 国产视频一区不卡| 亚洲免费电影在线| 青草av.久久免费一区| 国产麻豆精品在线| 91视频.com| 337p亚洲精品色噜噜| 精品日韩欧美一区二区| 久久精品人人做人人爽97| 中文字幕一区不卡| 亚洲图片自拍偷拍| 韩国v欧美v日本v亚洲v| 97se狠狠狠综合亚洲狠狠| 欧美精品亚洲二区| 久久久久久久久岛国免费| 亚洲欧美国产77777| 丝袜国产日韩另类美女| 国产精品99久久久久| 91视视频在线直接观看在线看网页在线看| 色诱视频网站一区| 精品免费国产一区二区三区四区| 国产亚洲欧美日韩俺去了| 亚洲一区二区在线免费看| 老色鬼精品视频在线观看播放| 成人精品国产免费网站| 91免费看片在线观看| www.日韩av| 欧美一区二区国产| 一区在线观看视频| 久久99久久精品欧美| 91激情在线视频| 国产亚洲一二三区| 亚洲成a人片在线观看中文| 国产99久久久国产精品免费看| 欧美性大战xxxxx久久久| 日本一二三不卡| 久久国产精品色婷婷| 在线观看日产精品| 国产欧美精品一区| 蜜臀久久久99精品久久久久久| 国产成人av一区二区三区在线观看| 欧美午夜寂寞影院| 成人欧美一区二区三区黑人麻豆| 亚洲精品日日夜夜| 国产ts人妖一区二区| 91精品国产综合久久香蕉麻豆| 中文字幕在线观看一区二区| 另类小说视频一区二区| 欧美日韩高清一区二区不卡| 国产精品久久久久久久久晋中| 亚洲超丰满肉感bbw| 日本高清不卡视频| 成人欧美一区二区三区在线播放| 精品一区二区免费视频| 欧美精品 国产精品| 亚洲综合999| 欧美无人高清视频在线观看| 亚洲欧美日韩成人高清在线一区| 国产成人久久精品77777最新版本| 在线不卡中文字幕| 亚洲h动漫在线| 欧美日韩一二三| 亚洲综合在线视频| 91蜜桃免费观看视频| 亚洲视频中文字幕|