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

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

?? chap_9.c

?? LPC2146 的USB 開發
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			Chap_9.c
** Last modified Date:	2005-8-6
** Last Version:		V1.0
** Descriptions:		chap_9.c, 實現USB1.1協議
**						chap_9.c, realize USB1.1 protocol
**------------------------------------------------------------------------------------------------------
** Created by:			鄭明遠 		MingYuan Zheng
** Created date:		2005-8-6
** Version:				V1.0
** Descriptions:		初始版本	The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			
** Modified date:
** Version:				
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by: 
** Modified date:
** Version:	
** Descriptions: 
**
********************************************************************************************************/

#include "config.h"
#include "USBConfig.h"

#include "USBCI.h"
#include "USBDriver.h"
#include "Chap_9.h"
#include "Descriptor.h"

/* define control transfer structure variable */
CONTROL_XFER ControlData;								/* 定義傳輸控制結構變量 */

/*************************************************************************
** 函數名稱:  USB 標準設備請求入口地址指針表
** Function:  Entry address of USB standard device request Function 
**************************************************************************/
void (*StandardDeviceRequest[])(void) =
{
	get_status,
	clear_feature,
	reserved,
	set_feature,
	reserved,
	set_address,
	get_descriptor,
	reserved,
	get_configuration,
	set_configuration,
	get_interface,
	set_interface,
	reserved,
	reserved,
	reserved,
	reserved
};

   //*************************************************************************
   //		 		USB 協議層函數       USB Protocal Function 
   //*************************************************************************

/*************************************************************************************************
** 函數名稱: stall_ep0()							Name:  	  stall_ep0()	
** 功能描述: 使控制端點處于停止狀態					Function: stall logical endpoint 0
*************************************************************************************************/   
void stall_ep0(void)
{
	USB_SetEndpointStatus(0, 1);
	USB_SetEndpointStatus(1, 1);
}
   
/*************************************************************************************************
** 函數名稱: reserved()								Name:  	  reserved()
** 功能描述: 保留子程序                        		Function: reserved function
*************************************************************************************************/
void reserved(void)
{
	stall_ep0();
}

/*************************************************************************************************
** 函數名稱: init_unconfig()						Name:  	  init_unconfig()
** 功能描述: 進入地址狀態,禁止 0 除外的所有端點		Function: disable all endpoints except for control endpoint 0
*************************************************************************************************/
void init_unconfig(void)
{
	USB_SetEndpointEnable(0);
}

/*************************************************************************************************
** 函數名稱: init_config()							Name:  	 init_config()
** 功能描述: 配置處理,允許端點收發					Function: enable all endpoints		
*************************************************************************************************/
void init_config(void)
{
	USB_SetEndpointEnable(1);
}

/*************************************************************************************************
** 函數名稱: single_transmit()						Name:  	  single_transmit()
** 功能描述: 通過物理端點 1 發送數據				Function: send data by physical endpoint 1
** 輸	 入: INT8U * buf:	發送數據指針			Input:	  INT8U * buf:  send buffer		
			 INT8U len:		發送數據長度					  INT8U len:	send data length
** 輸	 出: 無										Output:	  NULL
*************************************************************************************************/
void single_transmit(INT8U * buf, INT8U len)
{
	/* the len must below the maxpacket size of physical endpoint 1 */	
	if( len <= EP0_PACKET_SIZE)
	{												/* len 必須小于端點的最大包信息長度 */
		USB_WriteEndpoint(1, len, buf);
	}
}

/*************************************************************************************************
** 函數名稱: code_transmit()						Name:  	   code_transmit()
** 功能描述: 通過物理端點 1 發送數據				Function:  send data by physical endpoint 1
** 輸	 入: INT8U  *pRomData:	發送數據指針		Inptut:	   INT8U * buf:  send buffer		
			 INT16U len:		發送數據長度		INT8U len: send data length(the value can above 
			 												   EP0_PACKET_SIZE) 
** 輸	 出: 無										Output:    NULL
*************************************************************************************************/
void code_transmit(INT8U * pRomData, INT16U len)
{
	ControlData.wCount = 0;
	
	if(ControlData.wLength > len)
		ControlData.wLength = len;									/* 長度要小于len 		the wLength can't above len */

	ControlData.pData = pRomData;
	if( ControlData.wLength >= EP0_PACKET_SIZE)
	{	/* wLength above MaxPacketSize of physical endpoint 1 */
		USB_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);	
		ControlData.wCount += EP0_PACKET_SIZE;						/* 計數器累加			count number have been sent */

		DISABLE();
		bEPPflags.bits.control_state = USB_TRANSMIT;				/* 標識發送狀態			flag transmit state */		
		ENABLE();
	}
	else 
	{
		USB_WriteEndpoint(1, ControlData.wLength, pRomData);		/* 將全部數據寫入端點 	write all data into endpoint */
		ControlData.wCount += ControlData.wLength;					/* 計數器累加			count number have been sent */
		DISABLE();
		bEPPflags.bits.control_state = USB_IDLE;					/* 標識空閑狀態			flag IDLE state */
		ENABLE();
	}
}



   //*************************************************************************
   // USB 標準設備請求服務程序    USB standard device request service program
   //*************************************************************************


/***************************************************************************************************************
** 函數名稱: get_status()							Name:  	  get_status()
** 功能描述: 主機要求獲取狀態,設備返回16位的		Function: the USB host request get the status of USB device,
			 狀態描述符給主機								  USB device will response 16-bit descriptor 
****************************************************************************************************************/
void get_status(void)
{
	INT8U endp, txdat[2], c;
	INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;	
																/* 獲取請求類型			get the Request type */	
	if (bRecipient == USB_RECIPIENT_DEVICE) 
	{	/* request device */ 
		if(bEPPflags.bits.remote_wakeup == 1)			
			txdat[0] = 3;										/* 支持遠程喚醒和自供電	support reamote wakeup and power itself */ 
		else
			txdat[0] = 1;										/* 不支持以上兩個功能	not support two function above */
		txdat[1]=0;												/* 高 8 位清 0          upper 8-bit clear */
		single_transmit(txdat, 2);								/* 發送16ibt到USB主機	transmit 16-bit to USB host */
	} 
	
	else if (bRecipient == USB_RECIPIENT_INTERFACE) 
	{	/* request interface */
		txdat[0]=0;
		txdat[1]=0;
		single_transmit(txdat, 2);								/* 發送16ibt到USB主機	transmit 16-bit to USB host */
	}
	
	else if (bRecipient == USB_RECIPIENT_ENDPOINT) 
	{	/* request endpoint */
		endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK)
			c = USB_SelectEndpoint(endp * 2 + 1);				/* 讀 IN 端點狀態		read status of the IN endpoint */
		else
			c = USB_SelectEndpoint(endp * 2);					/* 讀 OUT 端點狀態		read status of the OUT endpoint */
		if(c & USB_STALL)
			txdat[0] = 1;										/* 端點已被禁止			the endpoint is stalled */
		else
			txdat[0] = 0;										/* 端點已解禁			the endpoint is unstalled */
		txdat[1] = 0;
		single_transmit(txdat, 2);								/* 發送16ibt到USB主機	transmit 16-bit to USB host */

	}
	else
		stall_ep0();											/* 非標準請求,禁止邏輯端點0 */
																/* not standard request, stall logical endpoint 0 */	
}																


/***************************************************************************************************************
** 函數名稱: clear_feature()						Name:  	  clear_feature()
** 功能描述: 清除特性								Function: clear feature
****************************************************************************************************************/
void clear_feature(void)
{
	INT8U endp;
	INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
																/* 獲取請求類型	 		 get request type */
	if (bRecipient == USB_RECIPIENT_DEVICE					
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP)
    {	/* request device */
		DISABLE();								
		bEPPflags.bits.remote_wakeup = 0;						/* 清除遠程喚醒特性		clear reamote wakeup feature */	
		ENABLE();
		single_transmit(0, 0);									/* 返回一個空包			return an empty packet */
	}
	
	else if (bRecipient == USB_RECIPIENT_ENDPOINT
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)
	{
		/* request endpoint */
		endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK)
			USB_SetEndpointStatus(endp * 2 + 1, 0);				/* 解禁 IN 端點			the IN endpoint is unstalled */
		else
			USB_SetEndpointStatus(endp * 2, 0);					/* 解禁 OUT 端點		the OUT endpoint is unstalled */
		single_transmit(0, 0);									/* 發送空包表示執行成功 return an empty packet indicate perform sucessfully */
	} else
		stall_ep0();											/* 不成功,禁止邏輯端點0 not the request, stall logical endpoint 0 */							
}


/***************************************************************************************************************
** 函數名稱: set_feature()				   			Name:  	 set_feature() 
** 功能描述: 設置特性							    Function: set feature
****************************************************************************************************************/
void set_feature(void)
{
	INT8U endp;											
	INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
																/* 獲取請求類型			get request type */
	if (bRecipient == USB_RECIPIENT_DEVICE						/* 請求設備				request device */
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) 
	{	
		DISABLE();
		bEPPflags.bits.remote_wakeup = 1;						/* 設置遠程喚醒標志		set reamote wakeup flag */
		ENABLE();
		single_transmit(0, 0);									/* 返回一個空包			return an empty packet */
	}	
	
	else if (bRecipient == USB_RECIPIENT_ENDPOINT				/* 請求端點				request endpoint */
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)
	{
		endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
		if (ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK)
			USB_SetEndpointStatus(endp * 2 + 1, 1);				/* IN 端點被禁止		the IN endpoint is stalled */
		else
			USB_SetEndpointStatus(endp * 2, 1);					/* OUT端點被禁止		the OUT endpoint is stalled */
		single_transmit(0, 0);									/* 返回一個空包			return an empty packet */
	} else
		stall_ep0();											/* 非標準請求,禁止邏輯端點0  not the request, stall logical endpoint 0 */
}

/***************************************************************************************************************
** 函數名稱: set_address()			   				Name:  	  set_address()
** 功能描述: 設置地址						   		Function: set the address of the USB device 
****************************************************************************************************************/
void set_address(void)
{
	USB_SetAddressEnable((INT8U)(ControlData.DeviceRequest.wValue &
						 DEVICE_ADDRESS_MASK), 1);

	single_transmit(0, 0);										/* 返回一個空包		return an empty packet */
}


/***********  USB  Mouse report descriptor   2007-03-20**********/
const INT8U Mouse_Descr[52]=
{
	0x05,0x01,
	0x09,0x02,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美色电影| 色综合视频在线观看| 日韩精品一区二区三区老鸭窝| 日本强好片久久久久久aaa| 精品视频在线免费观看| 亚洲成a人片在线观看中文| 欧美日韩卡一卡二| 日韩黄色免费网站| 337p日本欧洲亚洲大胆色噜噜| 国产精品一线二线三线| 欧美激情一区二区三区四区| 99久久精品免费看| 亚洲第一成年网| 欧美成人高清电影在线| 国产高清精品网站| 亚洲精品日韩一| 91精品一区二区三区久久久久久| 精品亚洲porn| 国产精品二三区| 日本精品裸体写真集在线观看 | 亚洲一区二区三区中文字幕 | 一区二区在线看| 91精品综合久久久久久| 国产成a人亚洲精| 亚洲影院在线观看| 精品国产一区二区三区久久影院| av电影一区二区| 三级一区在线视频先锋| 日本一区二区三区国色天香| 91精品福利视频| 国产一区在线看| 亚洲精品福利视频网站| 欧美不卡在线视频| 色婷婷香蕉在线一区二区| 久久国产乱子精品免费女| 欧美激情一区二区三区蜜桃视频| 欧美在线观看一二区| 国产九九视频一区二区三区| 亚洲国产精品精华液网站| 久久精品一区蜜桃臀影院| 欧美午夜精品久久久| 国产精品一区免费视频| 成人免费毛片app| 国产精品成人在线观看| 91麻豆精品国产无毒不卡在线观看| 国产91清纯白嫩初高中在线观看| 亚洲二区在线视频| 国产精品麻豆欧美日韩ww| 欧美一级免费大片| 日本韩国一区二区| 国产成人在线视频网站| 日韩电影在线一区二区| 亚洲天堂久久久久久久| 国产亚洲精品福利| 日韩欧美一级精品久久| 欧美精品乱码久久久久久 | 懂色av一区二区三区免费看| 亚洲国产日韩综合久久精品| 国产精品免费av| 日韩欧美高清一区| 欧美人牲a欧美精品| 91一区二区三区在线观看| 国产宾馆实践打屁股91| 久久福利视频一区二区| 午夜欧美电影在线观看| 一区二区在线观看av| 亚洲欧美在线观看| 国产亚洲短视频| 久久综合狠狠综合久久综合88| 欧美丝袜丝交足nylons| 99精品视频中文字幕| 成人爽a毛片一区二区免费| 毛片一区二区三区| 蜜桃视频在线一区| 免费看欧美美女黄的网站| 亚洲一区二区三区在线播放| 亚洲精品成a人| 亚洲免费伊人电影| 亚洲免费观看在线视频| 日韩毛片视频在线看| 亚洲靠逼com| 亚洲精品美腿丝袜| 亚洲成人高清在线| 亚洲尤物视频在线| 亚洲va欧美va人人爽午夜| 亚洲午夜三级在线| 天天做天天摸天天爽国产一区| 亚洲一二三四久久| 天堂蜜桃一区二区三区 | 亚洲天堂av老司机| 亚洲人精品一区| 亚洲理论在线观看| 亚洲午夜电影在线观看| 日日噜噜夜夜狠狠视频欧美人| 日日摸夜夜添夜夜添亚洲女人| 久久se这里有精品| 国产福利91精品一区二区三区| 成人美女在线观看| 在线观看国产精品网站| 欧美日本不卡视频| 精品国产乱码久久久久久牛牛| 久久久久久久久久电影| 成人免费一区二区三区在线观看 | 26uuuu精品一区二区| 欧美国产精品中文字幕| 自拍偷拍欧美精品| 偷拍与自拍一区| 国产精品911| 在线区一区二视频| 日韩欧美国产1| 国产精品午夜电影| 午夜精品福利在线| 黄色小说综合网站| 97精品国产97久久久久久久久久久久| 在线免费观看日本一区| 日韩视频永久免费| 综合久久久久综合| 免费成人在线观看| 成人激情综合网站| 欧美高清你懂得| 国产视频911| 亚洲国产一区二区在线播放| 国产一区免费电影| 91久久精品午夜一区二区| 精品理论电影在线观看| 亚洲欧洲三级电影| 蜜桃av一区二区三区电影| 99re视频这里只有精品| 91精品国产综合久久蜜臀| 亚洲国产成人在线| 日本午夜一本久久久综合| bt7086福利一区国产| 色婷婷久久久久swag精品| 久久影音资源网| 午夜精品一区二区三区三上悠亚| 国产精品77777竹菊影视小说| 在线视频你懂得一区二区三区| 久久免费视频色| 日本最新不卡在线| 日本电影亚洲天堂一区| 国产日韩av一区二区| 日韩精品亚洲专区| 国产aⅴ精品一区二区三区色成熟| 欧美日韩精品一区二区在线播放| 亚洲国产高清不卡| 理论片日本一区| 欧美日韩国产首页| 亚洲精品高清在线| 99精品偷自拍| 国产精品免费丝袜| 黑人巨大精品欧美黑白配亚洲| 777亚洲妇女| 亚洲成在人线免费| av一区二区不卡| 国产日韩欧美在线一区| 老司机精品视频一区二区三区| 欧美日韩在线播放三区| 亚洲欧洲中文日韩久久av乱码| 国产91精品一区二区麻豆亚洲| 精品国产一区二区精华| 日本成人在线视频网站| 欧美亚洲尤物久久| 亚洲综合清纯丝袜自拍| 91美女片黄在线观看91美女| 国产精品毛片无遮挡高清| 国产成人精品一区二区三区四区 | 欧美成人一区二区三区| 日本一不卡视频| 欧美日韩视频在线第一区| 怡红院av一区二区三区| 色综合色狠狠综合色| 亚洲色图欧美在线| 在线观看一区二区精品视频| 亚洲午夜在线电影| 色婷婷亚洲婷婷| 亚洲影院久久精品| 欧美亚洲综合色| 日韩电影在线观看电影| 欧美一区二区久久| 久久99精品国产.久久久久久| 日韩免费福利电影在线观看| 久久成人久久爱| 久久无码av三级| 成人激情视频网站| 最新国产の精品合集bt伙计| 一本色道久久加勒比精品| 亚洲一本大道在线| 在线播放91灌醉迷j高跟美女| 日日夜夜精品免费视频| 精品国产一二三区| 成人午夜大片免费观看| 亚洲欧美福利一区二区| 欧美色视频一区| 另类小说视频一区二区| 久久久夜色精品亚洲| 91在线码无精品| 视频一区中文字幕| 久久老女人爱爱| www.欧美色图| 午夜精品一区在线观看|