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

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

?? cdc_enumerate.c

?? AT91SAM7S系列USB驅動
?? C
字號:
//* File Name           : cdc_enumerate.c
//* Object              : Handle CDC enumeration
#include "board.h"
#include "cdc_enumerate.h"

typedef unsigned char  uchar;
typedef unsigned short ushort;
typedef unsigned int   uint;

#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define AT91C_EP_IN_SIZE 0x40

const char devDescriptor[] = {      // 設備描述符
	0x12,   // bLength
	0x01,   // bDescriptorType
	0x10,   // bcdUSBL
	0x01,   //
	0x02,   // bDeviceClass:    CDC class code
	0x00,   // bDeviceSubclass: CDC class sub code
	0x00,   // bDeviceProtocol: CDC Device protocol
	0x08,   // bMaxPacketSize0
	0xEB,   // idVendorL
	0x03,   //
	0x24,   // idProductL
	0x61,   //
	0x10,   // bcdDeviceL
	0x01,   //
	0x00,   // iManufacturer    // 0x01
	0x00,   // iProduct
	0x00,   // SerialNumber
	0x01    // bNumConfigs
};

const char cfgDescriptor[] = {       // 配置描述符
	0x09,   // CbLength
	0x02,   // CbDescriptorType
	0x43,   // CwTotalLength 2 EP + Control
	0x00,
	0x02,   // CbNumInterfaces
	0x01,   // CbConfigurationValue
	0x00,   // CiConfiguration
	0xC0,   // CbmAttributes 0xA0
	0x00,   // CMaxPower

	/* 通信類接口描述符 */
	0x09, // bLength
	0x04, // bDescriptorType
	0x00, // bInterfaceNumber
	0x00, // bAlternateSetting
	0x01, // bNumEndpoints
	0x02, // bInterfaceClass
	0x02, // bInterfaceSubclass
	0x00, // bInterfaceProtocol
	0x00, // iInterface

	/* 頭函數描述符 */
	0x05, // bFunction Length
	0x24, // bDescriptor type: CS_INTERFACE
	0x00, // bDescriptor subtype: Header Func Desc
	0x10, // bcdCDC:1.1
	0x01,

	/* ACM 函數描述符 */
	0x04, // bFunctionLength
	0x24, // bDescriptor Type: CS_INTERFACE
	0x02, // bDescriptor Subtype: ACM Func Desc
	0x00, // bmCapabilities

	/* 聯合函數描述符 */
	0x05, // bFunctionLength
	0x24, // bDescriptorType: CS_INTERFACE
	0x06, // bDescriptor Subtype: Union Func Desc
	0x00, // bMasterInterface: Communication Class Interface
	0x01, // bSlaveInterface0: Data Class Interface

	/* 調用管理函數描述符 */
	0x05, // bFunctionLength
	0x24, // bDescriptor Type: CS_INTERFACE
	0x01, // bDescriptor Subtype: Call Management Func Desc
	0x00, // bmCapabilities: D1 + D0
	0x01, // bDataInterface: Data Class Interface 1

	/* 端點1描述符 */
	0x07,   // bLength
	0x05,   // bDescriptorType
	0x83,   // bEndpointAddress, Endpoint 03 - IN
	0x03,   // bmAttributes      INT
	0x08,   // wMaxPacketSize
	0x00,
	0xFF,   // bInterval

	/* 數據類接口描述符 */
	0x09, // bLength
	0x04, // bDescriptorType
	0x01, // bInterfaceNumber
	0x00, // bAlternateSetting
	0x02, // bNumEndpoints
	0x0A, // bInterfaceClass
	0x00, // bInterfaceSubclass
	0x00, // bInterfaceProtocol
	0x00, // iInterface

	/* 首次交替設置 */
	/* 端點1描述符 */
	0x07,   // bLength
	0x05,   // bDescriptorType
	0x01,   // bEndpointAddress, Endpoint 01 - OUT
	0x02,   // bmAttributes      BULK
	AT91C_EP_OUT_SIZE,   // wMaxPacketSize
	0x00,
	0x00,   // bInterval

	/* 端點2描述符 */
	0x07,   // bLength
	0x05,   // bDescriptorType
	0x82,   // bEndpointAddress, Endpoint 02 - IN
	0x02,   // bmAttributes      BULK
	AT91C_EP_IN_SIZE,   // wMaxPacketSize
	0x00,
	0x00    // bInterval
};

/* USB標準請求代碼 */
#define STD_GET_STATUS_ZERO           0x0080
#define STD_GET_STATUS_INTERFACE      0x0081
#define STD_GET_STATUS_ENDPOINT       0x0082

#define STD_CLEAR_FEATURE_ZERO        0x0100
#define STD_CLEAR_FEATURE_INTERFACE   0x0101
#define STD_CLEAR_FEATURE_ENDPOINT    0x0102

#define STD_SET_FEATURE_ZERO          0x0300
#define STD_SET_FEATURE_INTERFACE     0x0301
#define STD_SET_FEATURE_ENDPOINT      0x0302

#define STD_SET_ADDRESS               0x0500
#define STD_GET_DESCRIPTOR            0x0680
#define STD_SET_DESCRIPTOR            0x0700
#define STD_GET_CONFIGURATION         0x0880
#define STD_SET_CONFIGURATION         0x0900
#define STD_GET_INTERFACE             0x0A81
#define STD_SET_INTERFACE             0x0B01
#define STD_SYNCH_FRAME               0x0C82

/* CDC類特殊請求代碼 */
#define GET_LINE_CODING               0x21A1
#define SET_LINE_CODING               0x2021
#define SET_CONTROL_LINE_STATE        0x2221

typedef struct {
	unsigned int dwDTERRate;
	char bCharFormat;
	char bParityType;
	char bDataBits;
} AT91S_CDC_LINE_CODING, *AT91PS_CDC_LINE_CODING;

AT91S_CDC_LINE_CODING line = {
	115200, // 波特率
	0,      // 1位停止位
	0,      // 無校驗
	8};     // 8位數據

uint currentReceiveBank = AT91C_UDP_RX_DATA_BK0;

static uchar AT91F_UDP_IsConfigured(AT91PS_CDC pCdc);
static uint AT91F_UDP_Read(AT91PS_CDC pCdc, char *pData, uint length);
static uint AT91F_UDP_Write(AT91PS_CDC pCdc, const char *pData, uint length);
static void AT91F_CDC_Enumerate(AT91PS_CDC pCdc);

/*******************************************************************************
 * 說明:AT91F_CDC_Open函數
*******************************************************************************/
AT91PS_CDC AT91F_CDC_Open(AT91PS_CDC pCdc, AT91PS_UDP pUdp) {
	pCdc->pUdp = pUdp;
	pCdc->currentConfiguration = 0;
	pCdc->currentConnection    = 0;
	pCdc->currentRcvBank       = AT91C_UDP_RX_DATA_BK0;
	pCdc->IsConfigured = AT91F_UDP_IsConfigured;
	pCdc->Write        = AT91F_UDP_Write;
	pCdc->Read         = AT91F_UDP_Read;
	return pCdc;
}

/*******************************************************************************
 * 說明:AT91F_UDP_IsConfigured函數,測試設備配置并處理枚舉
*******************************************************************************/
static uchar AT91F_UDP_IsConfigured(AT91PS_CDC pCdc) {
	AT91PS_UDP pUDP = pCdc->pUdp;
	AT91_REG isr = pUDP->UDP_ISR;
	if (isr & AT91C_UDP_ENDBUSRES) {
		pUDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
		pUDP->UDP_RSTEP  = (unsigned int)-1;  // 復位所有端點
		pUDP->UDP_RSTEP  = 0;
		pUDP->UDP_FADDR = AT91C_UDP_FEN;      // 功能允許
		pUDP->UDP_CSR[0] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL);  // 配置端點0
	}
	else if (isr & AT91C_UDP_EPINT0) {
		pUDP->UDP_ICR = AT91C_UDP_EPINT0;
		AT91F_CDC_Enumerate(pCdc);
	}
	return pCdc->currentConfiguration;
}

/*******************************************************************************
 * 說明:AT91F_UDP_Read函數,從輸出端點讀取數據
*******************************************************************************/
static uint AT91F_UDP_Read(AT91PS_CDC pCdc, char *pData, uint length) {
	AT91PS_UDP pUdp = pCdc->pUdp;
	uint packetSize, nbBytesRcv = 0, currentReceiveBank = pCdc->currentRcvBank;
	while (length) {
		if ( !AT91F_UDP_IsConfigured(pCdc) )
			break;
		if ( pUdp->UDP_CSR[AT91C_EP_OUT] & currentReceiveBank ) {
			packetSize = MIN(pUdp->UDP_CSR[AT91C_EP_OUT] >> 16, length);
			length -= packetSize;
			if (packetSize < AT91C_EP_OUT_SIZE)
				length = 0;
			while(packetSize--)
				pData[nbBytesRcv++] = pUdp->UDP_FDR[AT91C_EP_OUT];
			pUdp->UDP_CSR[AT91C_EP_OUT] &= ~(currentReceiveBank);
			if (currentReceiveBank == AT91C_UDP_RX_DATA_BK0)
				currentReceiveBank = AT91C_UDP_RX_DATA_BK1;
			else
				currentReceiveBank = AT91C_UDP_RX_DATA_BK0;
		}
	}
	pCdc->currentRcvBank = currentReceiveBank;
	return nbBytesRcv;
}

/*******************************************************************************
 * 說明:AT91F_UDP_Write函數,通過端點2發送數據
*******************************************************************************/
static uint AT91F_UDP_Write(AT91PS_CDC pCdc, const char *pData, uint length) {
	AT91PS_UDP pUdp = pCdc->pUdp;
	uint cpt = 0;
	cpt = MIN(length, AT91C_EP_IN_SIZE);                  // 發送第一個數據包
	length -= cpt;
	while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
	pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
	while (length) {
		cpt = MIN(length, AT91C_EP_IN_SIZE);          // 填充第二段
		length -= cpt;
		while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
		while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )
			if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
		pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
		while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
		pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
	}
	while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )          // 等待傳送結束
		if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
	pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
	while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
	return length;
}

/*******************************************************************************
 * 說明:AT91F_USB_SendData函數,通過控制端點發送數據
*******************************************************************************/
unsigned int csrTab[100];
unsigned char csrIdx = 0;
static void AT91F_USB_SendData(AT91PS_UDP pUdp, const char *pData, uint length) {
	uint cpt = 0;
	AT91_REG csr;
	do {
		cpt = MIN(length, 8);
		length -= cpt;
		while (cpt--)
			pUdp->UDP_FDR[0] = *pData++;
		if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
			pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
			while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
		}
		pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
		do {
			csr = pUdp->UDP_CSR[0];
			if (csr & AT91C_UDP_RX_DATA_BK0) {
				pUdp->UDP_CSR[0] &= ~(AT91C_UDP_RX_DATA_BK0);
				return;
			}
		} while ( !(csr & AT91C_UDP_TXCOMP) );
	} while (length);
	if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
		pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
		while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
	}
}

/*******************************************************************************
 * 說明:AT91F_USB_SendZlp函數,通過控制端點發送0長度數據包
*******************************************************************************/
void AT91F_USB_SendZlp(AT91PS_UDP pUdp) {
	pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
	while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) );
	pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
	while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
}

/*******************************************************************************
 * 說明:AT91F_USB_SendStall函數,停止控制端點
*******************************************************************************/
void AT91F_USB_SendStall(AT91PS_UDP pUdp) {
	pUdp->UDP_CSR[0] |= AT91C_UDP_FORCESTALL;
	while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_ISOERROR) );
	pUdp->UDP_CSR[0] &= ~(AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR);
	while (pUdp->UDP_CSR[0] & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR));
}

/*******************************************************************************
 * 說明:AT91F_CDC_Enumerate函數,收到SETUP數舉包時的回調函數
*******************************************************************************/
static void AT91F_CDC_Enumerate(AT91PS_CDC pCdc) {
	AT91PS_UDP pUDP = pCdc->pUdp;
	uchar bmRequestType, bRequest;
	ushort wValue, wIndex, wLength, wStatus;
	if ( !(pUDP->UDP_CSR[0] & AT91C_UDP_RXSETUP) )
        return;

        bmRequestType = pUDP->UDP_FDR[0];
	bRequest      = pUDP->UDP_FDR[0];
	wValue        = (pUDP->UDP_FDR[0] & 0xFF);
	wValue       |= (pUDP->UDP_FDR[0] << 8);
	wIndex        = (pUDP->UDP_FDR[0] & 0xFF);
	wIndex       |= (pUDP->UDP_FDR[0] << 8);
	wLength       = (pUDP->UDP_FDR[0] & 0xFF);
	wLength      |= (pUDP->UDP_FDR[0] << 8);

	if (bmRequestType & 0x80) {
		pUDP->UDP_CSR[0] |= AT91C_UDP_DIR;
		while ( !(pUDP->UDP_CSR[0] & AT91C_UDP_DIR) );
	}
	pUDP->UDP_CSR[0] &= ~AT91C_UDP_RXSETUP;
	while ( (pUDP->UDP_CSR[0]  & AT91C_UDP_RXSETUP)  );

	switch ((bRequest << 8) | bmRequestType) {
	case STD_GET_DESCRIPTOR:
		if (wValue == 0x100)       // 返回設備描述符
			AT91F_USB_SendData(pUDP, devDescriptor, MIN(sizeof(devDescriptor), wLength));
		else if (wValue == 0x200)  // 返回配置描述符
			AT91F_USB_SendData(pUDP, cfgDescriptor, MIN(sizeof(cfgDescriptor), wLength));
		else
			AT91F_USB_SendStall(pUDP);
		break;
	case STD_SET_ADDRESS:
		AT91F_USB_SendZlp(pUDP);
		pUDP->UDP_FADDR = (AT91C_UDP_FEN | wValue);
		pUDP->UDP_GLBSTATE  = (wValue) ? AT91C_UDP_FADDEN : 0;
		break;
	case STD_SET_CONFIGURATION:
		pCdc->currentConfiguration = wValue;
		AT91F_USB_SendZlp(pUDP);
		pUDP->UDP_GLBSTATE  = (wValue) ? AT91C_UDP_CONFG : AT91C_UDP_FADDEN;
		pUDP->UDP_CSR[1] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT) : 0;
		pUDP->UDP_CSR[2] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN)  : 0;
		pUDP->UDP_CSR[3] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_ISO_IN)   : 0;
		break;
	case STD_GET_CONFIGURATION:
		AT91F_USB_SendData(pUDP, (char *) &(pCdc->currentConfiguration), sizeof(pCdc->currentConfiguration));
		break;
	case STD_GET_STATUS_ZERO:
		wStatus = 0;
		AT91F_USB_SendData(pUDP, (char *) &wStatus, sizeof(wStatus));
		break;
	case STD_GET_STATUS_INTERFACE:
		wStatus = 0;
		AT91F_USB_SendData(pUDP, (char *) &wStatus, sizeof(wStatus));
		break;
	case STD_GET_STATUS_ENDPOINT:
		wStatus = 0;
		wIndex &= 0x0F;
		if ((pUDP->UDP_GLBSTATE & AT91C_UDP_CONFG) && (wIndex <= 3)) {
			wStatus = (pUDP->UDP_CSR[wIndex] & AT91C_UDP_EPEDS) ? 0 : 1;
			AT91F_USB_SendData(pUDP, (char *) &wStatus, sizeof(wStatus));
		}
		else if ((pUDP->UDP_GLBSTATE & AT91C_UDP_FADDEN) && (wIndex == 0)) {
			wStatus = (pUDP->UDP_CSR[wIndex] & AT91C_UDP_EPEDS) ? 0 : 1;
			AT91F_USB_SendData(pUDP, (char *) &wStatus, sizeof(wStatus));
		}
		else
			AT91F_USB_SendStall(pUDP);
		break;
	case STD_SET_FEATURE_ZERO:
		AT91F_USB_SendStall(pUDP);
	    break;
	case STD_SET_FEATURE_INTERFACE:
		AT91F_USB_SendZlp(pUDP);
		break;
	case STD_SET_FEATURE_ENDPOINT:
		wIndex &= 0x0F;
		if ((wValue == 0) && wIndex && (wIndex <= 3)) {
			pUDP->UDP_CSR[wIndex] = 0;
			AT91F_USB_SendZlp(pUDP);
		}
		else
			AT91F_USB_SendStall(pUDP);
		break;
	case STD_CLEAR_FEATURE_ZERO:
		AT91F_USB_SendStall(pUDP);
	    break;
	case STD_CLEAR_FEATURE_INTERFACE:
		AT91F_USB_SendZlp(pUDP);
		break;
	case STD_CLEAR_FEATURE_ENDPOINT:
		wIndex &= 0x0F;
		if ((wValue == 0) && wIndex && (wIndex <= 3)) {
			if (wIndex == 1)
				pUDP->UDP_CSR[1] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT);
			else if (wIndex == 2)
				pUDP->UDP_CSR[2] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN);
			else if (wIndex == 3)
				pUDP->UDP_CSR[3] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_ISO_IN);
			AT91F_USB_SendZlp(pUDP);
		}
		else
			AT91F_USB_SendStall(pUDP);
		break;

	// 處理 CDC 類請求
	case SET_LINE_CODING:
		while ( !(pUDP->UDP_CSR[0] & AT91C_UDP_RX_DATA_BK0) );
		pUDP->UDP_CSR[0] &= ~(AT91C_UDP_RX_DATA_BK0);
		AT91F_USB_SendZlp(pUDP);
		break;
	case GET_LINE_CODING:
		AT91F_USB_SendData(pUDP, (char *) &line, MIN(sizeof(line), wLength));
		break;
	case SET_CONTROL_LINE_STATE:
		pCdc->currentConnection = wValue;
		AT91F_USB_SendZlp(pUDP);
		break;
	default:
		AT91F_USB_SendStall(pUDP);
	    break;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
偷偷要91色婷婷| 国产精品中文字幕日韩精品 | 欧美亚洲一区二区在线| 日韩免费高清视频| 国产精品国产三级国产普通话蜜臀 | 国模套图日韩精品一区二区| 色综合色综合色综合色综合色综合| 欧美精品久久久久久久多人混战 | 午夜久久久影院| 99久久精品久久久久久清纯| 91精品国产欧美一区二区成人| 亚洲免费在线观看| 成人深夜在线观看| 欧美成人午夜电影| 天天亚洲美女在线视频| 99精品视频中文字幕| 久久综合色婷婷| 日韩电影在线观看网站| 欧美午夜精品免费| 亚洲精品水蜜桃| 成人丝袜18视频在线观看| 久久这里只精品最新地址| 久久福利视频一区二区| 欧美大片在线观看一区二区| 五月激情六月综合| 欧美久久久久久久久| 午夜精品久久久久久久久久| 色婷婷激情一区二区三区| 国产精品不卡在线观看| 成人av资源下载| 中文欧美字幕免费| 高清国产一区二区| 国产精品色呦呦| 成人毛片在线观看| 国产精品国产三级国产aⅴ中文| 国产呦精品一区二区三区网站| 精品日韩成人av| 久久成人羞羞网站| 久久嫩草精品久久久久| 国产精品18久久久久| 国产欧美日韩中文久久| 成人免费视频国产在线观看| 亚洲免费三区一区二区| 欧美三级电影网站| 日韩综合一区二区| 精品国产成人在线影院| 国产成人自拍网| 成人免费在线视频| 欧美在线啊v一区| 欧美aaaaa成人免费观看视频| 日韩精品中文字幕在线不卡尤物 | 在线视频综合导航| 日韩精品欧美精品| 2023国产精品自拍| 日本韩国欧美一区| 免费成人av资源网| 中文字幕免费不卡| 欧美主播一区二区三区| 婷婷成人综合网| 精品粉嫩aⅴ一区二区三区四区| 国产精品自拍在线| 伊人夜夜躁av伊人久久| 欧美一区二区三区日韩视频| 国产高清精品在线| 亚洲福中文字幕伊人影院| 精品奇米国产一区二区三区| 成人动漫中文字幕| 日韩电影在线一区| 中文字幕亚洲欧美在线不卡| 欧美一区二区免费观在线| 成人美女视频在线看| 天堂成人免费av电影一区| 国产女人18水真多18精品一级做| 欧洲人成人精品| 国产精品影音先锋| 日韩精品每日更新| 国产精品久久久久婷婷| 91精品国产一区二区三区蜜臀| 丰满白嫩尤物一区二区| 天天av天天翘天天综合网色鬼国产| 欧美精品一区二区不卡| 91视频免费看| 毛片av一区二区三区| 亚洲国产精品精华液2区45| 九色综合狠狠综合久久| 亚洲高清久久久| 国产午夜亚洲精品羞羞网站| 91小宝寻花一区二区三区| 免费在线观看视频一区| 国产精品久久久久久久久搜平片 | 欧美高清性hdvideosex| 国产一区二区在线看| 日韩一区中文字幕| 日韩精品中文字幕在线一区| 91在线小视频| 亚洲国产毛片aaaaa无费看 | 亚洲国产精品视频| 国产喂奶挤奶一区二区三区 | 国产电影精品久久禁18| 午夜一区二区三区在线观看| 国产欧美日韩在线观看| 日韩一级黄色片| 欧美另类z0zxhd电影| 成人av免费网站| 精品一区二区国语对白| 亚洲国产乱码最新视频| 国产精品伦理在线| 国产午夜精品一区二区三区视频 | 精品黑人一区二区三区久久| 色天天综合色天天久久| 精品一区二区三区av| 成人一区在线看| 丝袜诱惑制服诱惑色一区在线观看 | 国产69精品一区二区亚洲孕妇| 青青草原综合久久大伊人精品| 中文字幕一区二区三区精华液 | 欧美变态tickle挠乳网站| 欧美最新大片在线看| 不卡电影免费在线播放一区| 国产一区视频导航| 久久99国产精品尤物| 热久久免费视频| 亚洲欧洲日韩av| 亚洲黄色片在线观看| 亚洲色欲色欲www| 中文一区在线播放| 国产日产欧产精品推荐色| 欧美videos中文字幕| 亚洲欧美日韩精品久久久久| 国产精品的网站| 国产亚洲一区二区三区在线观看| 日本高清无吗v一区| 99久久99久久免费精品蜜臀| 国产福利不卡视频| 国产精品影视在线观看| 成人午夜电影网站| 丁香天五香天堂综合| 国产麻豆午夜三级精品| 国产一区日韩二区欧美三区| 国产福利91精品一区| 国产suv精品一区二区三区| 国产精品18久久久久久久久 | 91视频一区二区| 欧美在线免费观看视频| 欧美日本精品一区二区三区| 日韩免费观看2025年上映的电影| 欧美mv和日韩mv的网站| 久久嫩草精品久久久精品| 国产亚洲成av人在线观看导航| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲网友自拍偷拍| 日韩高清中文字幕一区| 蜜桃精品在线观看| 国产精品99久久久久久久vr| caoporm超碰国产精品| 色婷婷综合久色| 一本久道中文字幕精品亚洲嫩| 91精品国产麻豆国产自产在线 | 日韩av电影天堂| 免费久久99精品国产| 成人av午夜影院| 欧美日韩一本到| 精品久久久久久久久久久院品网 | 欧美精品一区二区在线播放| 中文子幕无线码一区tr| 亚洲尤物视频在线| 久久se精品一区二区| 99久久久久久99| 日韩欧美一区二区视频| 亚洲久草在线视频| 久久99最新地址| 色94色欧美sute亚洲13| 精品精品国产高清一毛片一天堂| 国产精品美女久久久久aⅴ| 午夜伦欧美伦电影理论片| 国产91对白在线观看九色| 欧美日韩不卡一区二区| 欧美国产欧美综合| 天天综合色天天综合色h| 国产成人午夜99999| 精品婷婷伊人一区三区三| 欧美一区二区视频观看视频| 亚洲一区免费视频| 国产成人在线电影| 7777女厕盗摄久久久| 中文字幕欧美一区| 极品美女销魂一区二区三区| 成人精品鲁一区一区二区| 欧美日韩国产三级| 中文字幕av免费专区久久| 久草这里只有精品视频| 欧美性生活一区| 自拍偷自拍亚洲精品播放| 亚洲超碰精品一区二区| 色婷婷亚洲精品| 日韩美女久久久| 国产成人在线观看免费网站| 亚洲精品一区在线观看| 日本 国产 欧美色综合| 欧美日韩一区中文字幕|