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

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

?? chap_9.c

?? 51單片機控制USB的源代碼,不帶DMA控制功能.
?? C
字號:
/*
   //*************************************************************************
   //
   //                  		ZLGMCU
   //				www.zlgmcu.com
   // File Name:	chap_9.C
   // Revision:		0.2(2002-04-08)
   // Author:		Liu Ying Bin
   // Use library:  	USB51S.LIB
   // Note:		USB51S.LIB不帶DMA控制功能
   //*************************************************************************
   */

#include <stdio.h>
#include <string.h>

#include <reg51.h>                /* special function register declarations   */

//#include "epphal.h"
#include "d12ci.h"
#include "mainloop.h"
#include "isr.h"
#include "usb100.h"
#include "chap_9.h"

#define NUM_ENDPOINTS	4

#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))

extern CONTROL_XFER ControlData;
extern IO_REQUEST idata ioRequest;
extern EPPFLAGS bEPPflags;
extern code void (*VendorDeviceRequest[])(void);

//extern void help_devreq(unsigned char typ, unsigned char req);


/*
//*************************************************************************
// USB protocol function pointer arrays
//*************************************************************************
*/

//USB標準設(shè)備請求入口地址指針表
code 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
};


//設(shè)備描述符
code USB_DEVICE_DESCRIPTOR DeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),
    USB_DEVICE_DESCRIPTOR_TYPE,
    SWAP(0x0100),
    USB_CLASS_CODE_TEST_CLASS_DEVICE,
    0, 0,
	EP0_PACKET_SIZE,
	SWAP(0x0471),
	SWAP(0x0666),
	SWAP(0x0100),
    0, 0, 0,
	25
};

//配置描述符
code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
    sizeof(USB_CONFIGURATION_DESCRIPTOR),
    USB_CONFIGURATION_DESCRIPTOR_TYPE,
    SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,
	1,
    0,
	0x60,
	0x1
};

//接口描述符
code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
    sizeof(USB_INTERFACE_DESCRIPTOR),
    USB_INTERFACE_DESCRIPTOR_TYPE,
    0,
    0,
	NUM_ENDPOINTS,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS_D12,
	USB_PROTOCOL_CODE_TEST_CLASS_D12,
	0
};

//端點描述符
code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x81,
	USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP(EP1_PACKET_SIZE),
	10
};

code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x1,
	USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP(EP1_PACKET_SIZE),
	10
};

code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x82,
	USB_ENDPOINT_TYPE_BULK,
	SWAP(EP2_PACKET_SIZE),
	10
};

code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x2,
	USB_ENDPOINT_TYPE_BULK,
	SWAP(EP2_PACKET_SIZE),
	10
};

/*
   //*************************************************************************
   // USB Protocol Layer
   //*************************************************************************
*/

void reserved(void)
{
	stall_ep0();
}

/*
   //*************************************************************************
   // USB standard device requests
   //*************************************************************************
*/


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)
			/* clear TX stall for IN on EPn. */
			D12_SetEndpointStatus(endp*2 + 1, 0);
		else
			/* clear RX stall for OUT on EPn. */
			D12_SetEndpointStatus(endp*2, 0);
		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)
			/* clear TX stall for IN on EPn. */
			D12_SetEndpointStatus(endp*2 + 1, 1);
		else
			/* clear RX stall for OUT on EPn. */
			D12_SetEndpointStatus(endp*2, 1);
		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 = MSB(ControlData.DeviceRequest.wValue);

	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {
		code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
	} else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) {
		if (ControlData.DeviceRequest.wLength>CONFIG_DESCRIPTOR_LENGTH) 
			{ControlData.DeviceRequest.wLength=CONFIG_DESCRIPTOR_LENGTH;}
		code_transmit((unsigned char code *)&ConfigDescr, ControlData.DeviceRequest.wLength);
		//code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
	} else
		stall_ep0();
}

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();
}






//Move by Liu Ying Bin


void init_unconfig(void)
{
	//unsigned char i;

	D12_SetEndpointEnable(0);	/* Disable all endpoints but EPP0. */
}

void init_config(void)
{
	D12_SetEndpointEnable(1);	/* Enable  generic/iso endpoints. */
}

void single_transmit(unsigned char * buf, unsigned char len)
{
	if( len <= EP0_PACKET_SIZE) {
		D12_WriteEndpoint(1, len, buf);
	}
}

void code_transmit(unsigned char code * 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, EP0_PACKET_SIZE, ControlData.pData);
		ControlData.wCount += EP0_PACKET_SIZE;

		DISABLE;
		bEPPflags.bits.control_state = USB_TRANSMIT;
		ENABLE;
	}
	else {
		D12_WriteEndpoint(1, ControlData.wLength, pRomData);
		ControlData.wCount += ControlData.wLength;
		DISABLE;
		bEPPflags.bits.control_state = USB_IDLE;
		ENABLE;
	}
}

void control_handler()
{
	unsigned char type, req;

	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;

	if (type == USB_STANDARD_REQUEST)
		(*StandardDeviceRequest[req])();
	else if (type == USB_VENDOR_REQUEST)
		(*VendorDeviceRequest[req])();
	else
		stall_ep0();
}


void fn_usb_isr()
{
	unsigned int i_st;
	bEPPflags.bits.in_isr = 1;
	i_st = D12_ReadInterruptRegister();

	if(i_st != 0) {
		if(i_st & D12_INT_BUSRESET) {
			bus_reset();
			bEPPflags.bits.bus_reset = 1;
		}

		if(i_st & D12_INT_EOT)
			dma_eot();

		if(i_st & D12_INT_SUSPENDCHANGE)
			bEPPflags.bits.suspend = 1;

		if(i_st & D12_INT_ENDP0IN)
			ep0_txdone();
		if(i_st & D12_INT_ENDP0OUT)
			ep0_rxdone();
		if(i_st & D12_INT_ENDP1IN)
			ep1_txdone();
		if(i_st & D12_INT_ENDP1OUT)
			ep1_rxdone();
		if(i_st & D12_INT_ENDP2IN)
			ep2_txdone();
		if(i_st & D12_INT_ENDP2OUT)
			ep2_rxdone();
	}
		
	bEPPflags.bits.in_isr = 0;
}

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

void ep0_rxdone(void)
{
	unsigned char ep_last, i;

	ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag

	if (ep_last & D12_SETUPPACKET) {

		ControlData.wLength = 0;
		ControlData.wCount = 0;

		if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
			(unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {

			D12_SetEndpointStatus(0, 1);
			D12_SetEndpointStatus(1, 1);
			bEPPflags.bits.control_state = USB_IDLE;
			
			return;
		}

		ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
		ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
		ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);

		// Acknowledge setup here to unlock in/out endp
		D12_AcknowledgeEndpoint(0);
		D12_AcknowledgeEndpoint(1);

		ControlData.wLength = ControlData.DeviceRequest.wLength;
		ControlData.wCount = 0;

		if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
			bEPPflags.bits.setup_packet = 1;
			bEPPflags.bits.control_state = USB_TRANSMIT;		/* get command */
		}
		else {
			if (ControlData.DeviceRequest.wLength == 0) {
				bEPPflags.bits.setup_packet = 1;
				bEPPflags.bits.control_state = USB_IDLE;		/* set command */
			}
			else {
				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
					bEPPflags.bits.control_state = USB_IDLE;
					D12_SetEndpointStatus(0, 1);
					D12_SetEndpointStatus(1, 1);
				}
				else {
					bEPPflags.bits.control_state = USB_RECEIVE;	/* set command with OUT token */
				}
			} // set command with data
		} // else set command
	} // if setup packet

	else if (bEPPflags.bits.control_state == USB_RECEIVE) {
		i =	D12_ReadEndpoint(0, EP0_PACKET_SIZE,
			ControlData.dataBuffer + ControlData.wCount);

		ControlData.wCount += i;
		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
			bEPPflags.bits.setup_packet = 1;
			bEPPflags.bits.control_state = USB_IDLE;
		}
	}

	else {
		bEPPflags.bits.control_state = USB_IDLE;
	}
}

void ep0_txdone(void)
{
	short i = ControlData.wLength - ControlData.wCount;

	D12_ReadLastTransactionStatus(1); // Clear interrupt flag

	if (bEPPflags.bits.control_state != USB_TRANSMIT) 
	{
		single_transmit(0, 0);			
		return;
	}
	
	if( i >= EP0_PACKET_SIZE) {
		D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
		ControlData.wCount += EP0_PACKET_SIZE;

		bEPPflags.bits.control_state = USB_TRANSMIT;
	}
	else if( i != 0) {
		D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
		ControlData.wCount += i;

		bEPPflags.bits.control_state = USB_IDLE;
	}
	else if (i == 0){
		D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???

		bEPPflags.bits.control_state = USB_IDLE;
	}
}


void usbserve(void)
{
	if (bEPPflags.bits.bus_reset) {
		DISABLE;
		bEPPflags.bits.bus_reset = 0;
		ENABLE;      
		// Release D12's SUSPEND pin after bus reset
		// Enable 74HCT123 pulse generation before disconnect
		//D12SUSPD = 1;
	} // if bus reset

	if (bEPPflags.bits.suspend) {
		DISABLE;
		bEPPflags.bits.suspend= 0;
		ENABLE;
		/*
		if(D12SUSPD == 1) {
			D12SUSPD = 0;
			P0 = 0xFF;
			P1 = 0xFF;
			P2 = 0xFF;
			P3 = 0xFF;
			D12_SetDMA(0x0);
			D12SUSPD = 1;
			PCON |= 0x02;
			while (1);
		}*/
		
	} // if suspend change

	if (bEPPflags.bits.setup_packet){
		DISABLE;
		bEPPflags.bits.setup_packet = 0;
		control_handler();
		ENABLE;
		//D12SUSPD = 1;
	} // if setup_packet
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线视频全部完| 国内一区二区在线| 色婷婷国产精品综合在线观看| 国产欧美一区二区在线观看| 国产美女av一区二区三区| 久久毛片高清国产| 国产成都精品91一区二区三| 亚洲国产精品av| 99精品国产热久久91蜜凸| 亚洲丝袜制服诱惑| 欧美视频在线播放| 蜜乳av一区二区| 一区二区在线观看免费视频播放| 91麻豆文化传媒在线观看| 夜夜嗨av一区二区三区四季av | 欧美色综合天天久久综合精品| 亚洲精品v日韩精品| 欧美日韩国产中文| 裸体在线国模精品偷拍| 国产人成亚洲第一网站在线播放| 99久久婷婷国产| 亚洲高清视频的网址| 欧美一区二区三区播放老司机| 久久se这里有精品| 国产精品久久久久久久浪潮网站| 色伊人久久综合中文字幕| 爽好久久久欧美精品| 精品国产乱码久久久久久久| 波多野结衣中文字幕一区二区三区| 亚洲视频一二区| 欧美一区二区三区系列电影| 国产成人av自拍| 亚洲一区二区三区中文字幕在线| 欧美va日韩va| 91网站黄www| 久久国产夜色精品鲁鲁99| 亚洲视频在线观看一区| 欧美一区二区大片| 99久久精品免费观看| 青青草97国产精品免费观看无弹窗版| 日本一区二区综合亚洲| 欧美性猛交xxxxxx富婆| 国产精品一级二级三级| 亚洲一区av在线| 国产亚洲综合在线| 欧美视频日韩视频| 波多野结衣中文字幕一区 | 制服丝袜亚洲网站| 成人av网站在线| 另类小说图片综合网| 夜夜嗨av一区二区三区| 久久久久99精品一区| 678五月天丁香亚洲综合网| aaa国产一区| 国内久久精品视频| 日本怡春院一区二区| 亚洲精品免费一二三区| 久久久午夜电影| 制服丝袜亚洲网站| 在线免费观看视频一区| k8久久久一区二区三区| 国产一区二区精品久久99| 天天影视色香欲综合网老头| 国产精品免费久久| 欧美videofree性高清杂交| 欧美另类高清zo欧美| 色中色一区二区| 成人精品视频网站| 风间由美一区二区av101| 久久99精品久久久久久国产越南 | 中日韩免费视频中文字幕| 日韩你懂的电影在线观看| 欧美精品在欧美一区二区少妇| 一本一道波多野结衣一区二区| 丁香天五香天堂综合| 国产尤物一区二区| 国产专区欧美精品| 久久成人免费日本黄色| 日韩va欧美va亚洲va久久| 亚洲电影一级黄| 亚洲在线免费播放| 亚洲国产精品一区二区久久| 亚洲精品免费一二三区| 樱花影视一区二区| 亚洲综合免费观看高清完整版在线| 亚洲色图欧美偷拍| 一区二区三区久久| 亚洲一区在线视频| 亚洲777理论| 日韩精品成人一区二区三区| 日韩成人精品在线观看| 日韩av一区二| 美女视频网站久久| 国产在线一区二区| 北条麻妃一区二区三区| 91浏览器入口在线观看| 欧美亚洲高清一区二区三区不卡| 欧美日韩国产乱码电影| 69堂成人精品免费视频| 精品美女在线播放| 国产精品美女视频| 亚洲精品欧美激情| 日韩黄色免费电影| 国产在线精品不卡| caoporn国产一区二区| 欧美自拍丝袜亚洲| 日韩欧美一级二级三级久久久| 精品国精品国产| 中文字幕高清一区| 亚洲色图在线看| 日韩成人dvd| 国产成人av一区二区三区在线观看| 99久久久国产精品免费蜜臀| 欧美日韩在线亚洲一区蜜芽| 欧美一级日韩免费不卡| 日本一区二区三区视频视频| 亚洲综合清纯丝袜自拍| 看电视剧不卡顿的网站| 99精品国产91久久久久久| 欧美日韩精品一区二区三区四区 | 国产麻豆午夜三级精品| 一道本成人在线| 日韩视频一区在线观看| 国产精品色一区二区三区| 亚洲不卡av一区二区三区| 国产一区二三区好的| 91在线精品一区二区| 欧美一级日韩一级| 综合激情成人伊人| 精品伊人久久久久7777人| 91免费看视频| 久久综合久久99| 亚洲午夜久久久久| 国产精品性做久久久久久| 欧美日韩亚洲另类| 国产精品久久久久久户外露出| 天堂影院一区二区| 不卡一区在线观看| 精品日本一线二线三线不卡| 一个色在线综合| 国产**成人网毛片九色| 欧美一区二区三区系列电影| 亚洲色图欧美偷拍| 高清在线观看日韩| 欧美一区二区人人喊爽| 亚洲另类在线视频| 国产91精品免费| 精品欧美一区二区三区精品久久| 亚洲综合网站在线观看| 成人黄色片在线观看| 日韩精品在线一区| 日韩国产一区二| 欧美中文字幕一区二区三区亚洲| 中文字幕久久午夜不卡| 久久精品国产成人一区二区三区 | 欧美国产精品一区| 极品尤物av久久免费看| 欧美精品18+| 亚洲高清久久久| 色菇凉天天综合网| 国产精品久久久久国产精品日日 | 欧美不卡在线视频| 视频一区视频二区在线观看| 在线看不卡av| 曰韩精品一区二区| 色婷婷狠狠综合| 亚洲天堂av老司机| 91视频精品在这里| 亚洲视频免费看| 色综合久久天天综合网| 欧美国产一区二区在线观看| 国产伦精品一区二区三区免费| 精品国产区一区| 激情欧美日韩一区二区| 日韩精品一区二区三区视频播放 | 欧美日韩大陆一区二区| 午夜精品福利一区二区三区av| 欧美日韩在线播放三区| 亚洲高清免费一级二级三级| 欧美丰满少妇xxxbbb| 日韩影院在线观看| 欧美va亚洲va在线观看蝴蝶网| 麻豆精品一区二区综合av| 欧美videossexotv100| 国产美女娇喘av呻吟久久| 国产日产欧美精品一区二区三区| 丁香亚洲综合激情啪啪综合| 亚洲国产高清不卡| 91久久奴性调教| 亚洲成人自拍一区| 欧美大片一区二区三区| 国内精品国产三级国产a久久| 国产午夜精品一区二区| 97久久人人超碰| 亚洲18色成人| 精品国产在天天线2019| 成人国产在线观看| 一区二区三区四区乱视频| 4438x成人网最大色成网站| 紧缚捆绑精品一区二区|