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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb.c

?? USBN9603的DEMO程序
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
				*--------------------------------------*/
				device_buffers.zero_data=0; 
			else 
				/*----------------------------------
				* zero lada length will be required
				*----------------------------------*/
				device_buffers.zero_data=1; 

			send_control_data(desc_buf, desc_length);

			break;
		case INTERFACE_REQ:
		case ENDPOINT_REQ:
		case OTHER_REQ:
		default:
			STALL_EP0();
			return;
	}
}

/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_std_dev_set_descriptor(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
* 		 Handles the SET_DESCRIPTOR device request from the USB host.
*  		Not supported request. Stall Endpoint Zero.		
----------------------------------------------------------------------------------------------*/

void usb_std_dev_set_descriptor(USB_request_t *req)
{
    STALL_EP0();
}
/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_dev_get_config(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
*		Handles the GET_CONFIGURATION device request from the USB host.
----------------------------------------------------------------------------------------------*/

void usb_dev_get_config(USB_request_t *req)
{
    if (DEVICE_STATE(device_status) == DEV_ATTACHED) 
    {
		STALL_EP0();
		return;
	}
	/*-------------------------------------------
	* wValue, wIndex, wLength must be zero. 
	* Otherwize device behavior is not specified.
	*--------------------------------------------*/
	if (IS_REQ_VALUE_NOT_ZERO(req))
	{
		STALL_EP0();
		return;
	}
	if (IS_REQ_INDEX_NOT_ZERO(req))
	{
		STALL_EP0();
		return;
	}
	if (REQ_LENGTH(req) != 0x1)
	{
		STALL_EP0();
		return;
	}
	switch (REQ_RECIPIENT(req)) 
	{
		case DEVICE_REQ:
			/*----------------------------------------
			* returns configuration number as appears 
			* at the device configuration register 
			*---------------------------------------*/
			device_buffers.state = (DEVICE_STATE(device_status) == DEV_CONFIGURED)?
						usb_dev_long_config_desc.usb_dev_config_desc.bConfigurationValue : 0;
			send_control_data((byte *)&device_buffers.state, sizeof(device_buffers.state));
			break;
		case INTERFACE_REQ:
		case ENDPOINT_REQ:
		case OTHER_REQ:
		default:
			STALL_EP0();
			break;
    }
}
/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_dev_set_config(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
*		Handles the SET_CONFIGURATION device request from the USB host.
----------------------------------------------------------------------------------------------*/

void usb_dev_set_config(USB_request_t *req)
{
   int i;

	/*-------------------------------------------
	* wValue, wIndex, wLength must be zero. 
	* Otherwize device behavior is not specified.
	*--------------------------------------------*/

	if (IS_REQ_INDEX_NOT_ZERO(req))
	{
		STALL_EP0();
		return;
	}
	if (REQ_LENGTH(req) != 0)
	{
		STALL_EP0();
		return;
	}    
	switch (REQ_RECIPIENT(req)) 
	{
		case DEVICE_REQ:
			if (DEVICE_STATE(device_status) == DEV_ATTACHED) 
			{
				STALL_EP0();
				break;
			}
			if (REQ_VALUE(req).as_bytes.lsb == 0) 
			{
				/*--------------------------------------------------------
				 * The zero value places the device in unconfigured state 
				 *-------------------------------------------------------*/
				if (DEVICE_STATE(device_status) == DEV_CONFIGURED) 
				{

					/*----------------------------------
					 * Deactivate current configuration 
					 *---------------------------------*/
					for (i=1; i<MAX_NUM_OF_ENDPOINTS; i++) 
					{
						if (usb_dev_endpoints[device_status.curAltSetting][i] != NULL) 
							usb_dev_disable_ep(usb_dev_endpoints[device_status.curAltSetting][i]);
					}

					SET_DEVICE_STATE(device_status, DEV_ADDRESS);
					zero_length_data_response(ENDPOINT_0);
				}
				else
					STALL_EP0();
			}
			else if (REQ_VALUE(req).as_bytes.lsb == usb_dev_long_config_desc.usb_dev_config_desc.bConfigurationValue) 
			{
				
				/*----------------------------------
				 * Deactivate previous configuration 
				 *---------------------------------*/
				for (i=1; i<MAX_NUM_OF_ENDPOINTS; i++) 
				{
					if (usb_dev_endpoints[device_status.curAltSetting][i] != NULL) 
						usb_dev_disable_ep(usb_dev_endpoints[device_status.curAltSetting][i]);
				}
				device_status.curAltSetting = 0;
				/*---------------------------
				* Activate this configuration 
				*---------------------------*/
				for (i=0; i<MAX_NUM_OF_ENDPOINTS; i++)
					if (usb_dev_endpoints[device_status.curAltSetting][i] != NULL) 
					{
						usb_dev_enable_ep(usb_dev_endpoints[device_status.curAltSetting][i]);
					}
				endpoint_status_init();
				SET_DEVICE_STATE(device_status, DEV_CONFIGURED);
				zero_length_data_response(ENDPOINT_0);
			}
			else 
			   /*---------------------------
				* wrong configuration value
				*-------------------------*/
				STALL_EP0();
			break;
		case INTERFACE_REQ:
		case ENDPOINT_REQ:
		case OTHER_REQ:
		default:
			/*--------------------------------------------------------
			* If configuration value is unsupported STALL Enpoint Zero
			*---------------------------------------------------------*/
			STALL_EP0();
			break;
	}
}
/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_dev_get_interface(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
*		Handles the GET_INTERFACE device request from the USB host.
----------------------------------------------------------------------------------------------*/
void usb_dev_get_interface(USB_request_t *req)
{
    byte interface_no  = REQ_INDEX(req).as_bytes.lsb;
	
	if (DEVICE_STATE(device_status) != DEV_CONFIGURED) 
	{
		STALL_EP0();
		return;
	}

	if (interface_no != 0) 
	{ 
	   /*------------------------------------
		* only single interface is supported
		*-----------------------------------*/
		STALL_EP0();
		return;
	}
	if (IS_REQ_VALUE_NOT_ZERO(req)) 
	{
		STALL_EP0();
		return;
	}
	if (REQ_LENGTH(req) != 0x1) 
	{
		STALL_EP0();
		return;
	}
	
    switch (REQ_RECIPIENT(req)) 
	{
		case INTERFACE_REQ:
			device_buffers.state = device_status.curAltSetting;
			send_control_data((byte *)&device_buffers.state, sizeof(device_buffers.state));
			break;
			/* If Interface value is unsupported STALL Enpoint Zero */
		case DEVICE_REQ:
		case ENDPOINT_REQ:
		case OTHER_REQ:
		default:
			STALL_EP0();
			break;
    }
}

/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_dev_set_interface(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
*		 Handles the SET_INTERFACE device request from the USB host.
----------------------------------------------------------------------------------------------*/

void usb_dev_set_interface(USB_request_t *req)
{

    byte interface_no  = REQ_INDEX(req).as_bytes.lsb;
    byte altSet = REQ_VALUE(req).as_bytes.lsb;
    int i;
	
	if (DEVICE_STATE(device_status) != DEV_CONFIGURED) 
	{
		STALL_EP0();
		return;
	}

	if (interface_no != 0) 
	{ 
	   /*------------------------------------
		* only single interface is supported
		*-----------------------------------*/
		STALL_EP0();
		return;
	}
	if (IS_REQ_VALUE_NOT_ZERO(req)) 
	{
		STALL_EP0();
		return;
	}
	if (REQ_LENGTH(req) != 0) 
	{
		STALL_EP0();
		return;
	}
	
    switch (REQ_RECIPIENT(req)) 
	{
		case INTERFACE_REQ:
			
			if (altSet > 1)
				{
				  /*------------------------------------
				  * Not supported Alternative setting
				  *-----------------------------------*/
					  STALL_EP0();
					  break;
				}
			if (altSet != device_status.curAltSetting)
			{
				/*----------------
				* Change setting
				*----------------*/
				
				/*----------------------------------
				 * Deactivate previous setting
				 *---------------------------------*/
				for (i=1; i<MAX_NUM_OF_ENDPOINTS; i++) 
				{
					if (usb_dev_endpoints[device_status.curAltSetting][i] != NULL) 
						usb_dev_disable_ep(usb_dev_endpoints[device_status.curAltSetting][i]);
				}
				device_status.curAltSetting = altSet;
				/*---------------------------
				* Activate this configuration 
				*---------------------------*/
				for (i=0; i<MAX_NUM_OF_ENDPOINTS; i++)
					if (usb_dev_endpoints[device_status.curAltSetting][i] != NULL) 
					{
						usb_dev_enable_ep(usb_dev_endpoints[device_status.curAltSetting][i]);
					}
				endpoint_status_init();
			}
			zero_length_data_response(ENDPOINT_0);		
			break;
			/* If Interface value is unsupported STALL Enpoint Zero */
		case DEVICE_REQ:
		case ENDPOINT_REQ:
		case OTHER_REQ:
		default:
			STALL_EP0();
			break;
    }

}
/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_dev_sync_frame(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
*  		Handles the SYNCH_FRAME device request from the USB host.
*
* 		 The SYNCH_FRAME device request is not a supported device request
*  		and stalls endpoint 0 immediately.		
----------------------------------------------------------------------------------------------*/

void usb_dev_sync_frame(USB_request_t *req)
{
    STALL_EP0();
}

/*----------------------------------------------------------------------------------------------
*	Prototype
*		void USB_req_reserved(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
*  		Place holder for undefined functions in Standard and Vendor device
*  		request arrays. When it's called that wrong request has been received,
*  		then stall endpoint 0. The input req is for compatibility only		
----------------------------------------------------------------------------------------------*/

void USB_req_reserved(USB_request_t *req)
{
    STALL_EP0();
}

/*----------------------------------------------------------------------------------------------
*	Prototype
*		void USB_req_undefined(USB_request_t *req)
*
*	Parameters
*		req - pointer to struct of USB request
*
*	Returns
*		None
*
*	Description
*		
----------------------------------------------------------------------------------------------*/

void USB_req_undefined(USB_request_t *req)
{
    /*----------------------------
    * undefined	but don't stall;
    *---------------------------*/
}

/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_dev_enable_ep(const USB_endpoint_desc_t *ep)
*
*	Parameters
*		ep - pointer to the endpoint struct
*
*	Returns
*		None
*
*	Description
*		Enables the IN/OUT endpoints
----------------------------------------------------------------------------------------------*/

void usb_dev_enable_ep(const USB_endpoint_desc_t *ep)
{
    endpoint_t ep_no = ep->bEndpointAddress.address;

    if (ep->bEndpointAddress.direction == IN)
		FLUSH_TXEP(ep_no);
	else
		FLUSH_RXEP(ep_no);

	/*---------------------------------
	* enable endpoint & set its address
	*---------------------------------*/
	if (ep->bmAttributes== ISOCHRONOUS_ENDPOINT)
		write_usb(EPC_ADDR(ep_no), (byte)ep_no | EP_EN | ISO) ;
	else 
		write_usb(EPC_ADDR(ep_no), (byte)ep_no | EP_EN) ;

    if (ep->bEndpointAddress.direction == OUT)
		ENABLE_RX(ep_no);
}
/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_dev_disable_ep(const USB_endpoint_desc_t *ep)	
*
*	Parameters
*		ep - pointer to the endpoint struct
*
*	Returns
*		None
*
*	Description
*		Disables the IN/OUT endpoints	
----------------------------------------------------------------------------------------------*/
void usb_dev_disable_ep(const USB_endpoint_desc_t *ep)
{
    if (ep->bEndpointAddress.direction == IN)
		FLUSH_TXEP(ep->bEndpointAddress.address);
	else
		FLUSH_RXEP(ep->bEndpointAddress.address);
	
	write_usb(EPC_ADDR(ep->bEndpointAddress.address),0);

}

/*----------------------------------------------------------------------------------------------
*	Prototype
*		void USB_device_req_handler() 
*
*	Parameters
*		None
*
*	Returns
*		None
*
*	Description
*  		Handles the device requests from the USB host.
*
*  		Check the request, if the request has at least one error, it stalls
*  		endpoint 0. Calls the request specific function.		
----------------------------------------------------------------------------------------------*/

void USB_device_req_handler() 
{
	byte *msg = control_receive_buffer.data;
    USB_request_t *req = (USB_request_t *)msg;

    if (msg == NULL) return;

    switch (REQ_TYPE(req)) {
	case STANDARD_REQ:
	    (*usb_std_device_req[REQ_DEVICE(req)])(req);
	    device_status.last_req = REQ_DEVICE(req);
	    break;
	case VENDOR_REQ:
	    (*usb_vendor_device_req[REQ_VENDOR_TYPE(req)])(req);
	    break;
    case CLASS_REQ:
	default:
	    STALL_EP0();
	    break;
    }
}

__inline__ void STALL_EP0()			
{ 
	write_usb(EPC0, read_usb(EPC0) | STALL); 
	ENABLE_TX(ENDPOINT_0);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产一区二区| 久久精品国产99| 欧美不卡一区二区三区四区| av成人免费在线观看| 日韩av成人高清| 亚洲天堂av老司机| 精品处破学生在线二十三| 色999日韩国产欧美一区二区| 久久国产尿小便嘘嘘| 一区二区三区免费看视频| 久久亚洲精精品中文字幕早川悠里| 91女厕偷拍女厕偷拍高清| 国产一区二区三区蝌蚪| 午夜国产精品一区| 亚洲女人小视频在线观看| 久久伊99综合婷婷久久伊| 7777精品伊人久久久大香线蕉的 | 国内久久精品视频| 亚洲国产日韩a在线播放性色| 中文欧美字幕免费| 2021国产精品久久精品| 欧美一区二区在线观看| 欧美丝袜第三区| 99久久久精品| 国产91对白在线观看九色| 精品在线视频一区| 美女视频黄 久久| 日韩中文欧美在线| 一区二区三区四区亚洲| 亚洲色图在线看| 日韩一区中文字幕| 国产精品免费视频一区| 国产欧美精品一区二区色综合| 精品久久人人做人人爽| 欧美xxxxx裸体时装秀| 日韩欧美一级在线播放| 日韩免费成人网| 欧美一级日韩免费不卡| 欧美精品久久天天躁| 欧美激情一区三区| 久久一留热品黄| 国产亚洲婷婷免费| 久久久久久久久久看片| 欧美精品一区二| 久久久久免费观看| 久久这里都是精品| 中文字幕精品三区| 中文字幕在线一区免费| 日韩理论在线观看| 亚洲一区二区在线免费看| 亚洲香肠在线观看| 日韩高清不卡在线| 精品亚洲国内自在自线福利| 黑人巨大精品欧美一区| 国产一区不卡精品| 成人国产精品免费观看| 色呦呦日韩精品| 欧美裸体一区二区三区| 日韩免费看网站| 国产婷婷色一区二区三区在线| 国产日韩欧美在线一区| 亚洲色图一区二区| 午夜激情久久久| 精品一区二区av| 岛国精品在线播放| 色综合激情五月| 91精品国产丝袜白色高跟鞋| 欧美成人a∨高清免费观看| 国产欧美一二三区| 亚洲制服丝袜av| 免费成人美女在线观看.| 国产福利不卡视频| 在线视频国内自拍亚洲视频| 欧美一区二区三区免费观看视频| 久久久久久久综合| 一区二区国产视频| 激情久久久久久久久久久久久久久久| 懂色中文一区二区在线播放| 色婷婷综合久色| 精品国产99国产精品| 亚洲天堂成人在线观看| 免费看日韩a级影片| 日韩欧美不卡在线观看视频| 日本一区二区三区在线不卡| 亚洲综合色噜噜狠狠| 国产在线麻豆精品观看| 在线观看av一区二区| 日韩欧美一区在线| 成人欧美一区二区三区1314 | 国产乱理伦片在线观看夜一区 | 在线视频欧美精品| 久久色在线观看| 亚洲国产欧美日韩另类综合| 国产伦精品一区二区三区免费迷 | 欧美手机在线视频| 久久久久久**毛片大全| 亚洲国产一二三| 成人不卡免费av| 91精品国产综合久久精品性色| 国产精品嫩草99a| 久久国产精品99久久人人澡| 在线精品观看国产| 国产精品无遮挡| 九色porny丨国产精品| 欧美日韩中文字幕一区| 中文字幕一区二区三区不卡在线| 久久精品国产一区二区三| 欧美性受极品xxxx喷水| 中文字幕一区二区三| 国产精品主播直播| 91精品在线麻豆| 亚洲综合色区另类av| av午夜精品一区二区三区| 久久久青草青青国产亚洲免观| 日韩高清在线一区| 欧美三级韩国三级日本三斤| 亚洲图片另类小说| 成人a区在线观看| 精品日韩欧美一区二区| 免费人成在线不卡| 9191国产精品| 亚洲一区二区黄色| 色av成人天堂桃色av| 自拍视频在线观看一区二区| 国产成人高清在线| 国产婷婷色一区二区三区在线| 蜜臀av性久久久久蜜臀aⅴ | 成人精品视频一区| 国产亚洲成年网址在线观看| 久久99国产精品久久| 日韩三级电影网址| 美女任你摸久久 | 国产午夜亚洲精品羞羞网站| 麻豆一区二区99久久久久| 91精品国产91久久久久久一区二区| 亚洲18色成人| 欧美美女直播网站| 肉色丝袜一区二区| 欧美高清精品3d| 日韩精品欧美成人高清一区二区| 欧美日韩一区三区四区| 亚洲高清视频的网址| 欧美年轻男男videosbes| 首页国产欧美久久| 日韩一区二区在线播放| 久久精品国产**网站演员| 欧美精品一区二区精品网| 国模冰冰炮一区二区| 国产欧美日韩另类视频免费观看| 风间由美一区二区三区在线观看 | 日韩av成人高清| 欧美成人在线直播| 欧美性大战久久久久久久 | 日韩电影在线一区二区三区| 欧美一区二区三区日韩| 国产一区二三区| 中文字幕久久午夜不卡| 91免费视频观看| 亚洲一区二区三区四区五区中文| 欧美军同video69gay| 久久99国产乱子伦精品免费| 国产免费观看久久| 欧美中文字幕不卡| 美女诱惑一区二区| 国产精品私人自拍| 欧美日韩一区 二区 三区 久久精品| 亚洲高清一区二区三区| 欧美精品一区二区三区久久久| 成年人国产精品| 五月激情六月综合| 国产性色一区二区| 欧美在线视频日韩| 另类小说一区二区三区| 国产精品欧美一级免费| 欧美色图天堂网| 激情综合色播五月| 综合欧美亚洲日本| 日韩一区二区三区视频| 成人av先锋影音| 五月天精品一区二区三区| 国产香蕉久久精品综合网| 欧美午夜电影在线播放| 国产精品亚洲综合一区在线观看| 一区二区在线观看视频| 欧美xingq一区二区| 色婷婷久久一区二区三区麻豆| 日韩av一区二区三区四区| 国产精品美女久久久久久久久| 欧美伦理电影网| hitomi一区二区三区精品| 蜜臀99久久精品久久久久久软件| 中文字幕一区二区三区乱码在线| 日韩亚洲国产中文字幕欧美| 国产.欧美.日韩| 免费人成在线不卡| 亚洲国产视频a| 国产精品久久久久永久免费观看 | 一区二区三区国产精品| 久久精品一区二区| 在线成人免费观看|