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

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

?? usbdisk.c

?? USB驅動程序 共寫USB單片機開發者使用
?? C
?? 第 1 頁 / 共 3 頁
字號:
	s = HostTransactInter( );  /* 從USB盤的IN端點輸入CSW */
	if ( s != ERR_SUCCESS ) return( s );  /* 接收CSW失敗 */
	mSaveDevEndpTog ^= BIT_HOST_RECV_TOG;  /* IN端點的數據同步標志翻轉 */
	len = Read374Byte( REG_USB_LENGTH );
	Read374Block( RAM_HOST_RECV, len, (PUINT8)( & mBOC.mCSW ) );
	if ( len != USB_BO_CSW_SIZE || mBOC.mCSW.mCSW_Sig != USB_BO_CSW_SIG ) return( USB_INT_DISK_ERR );
	if ( mBOC.mCSW.mCSW_Status == 0 ) return( ERR_SUCCESS );
	else if ( mBOC.mCSW.mCSW_Status >= 2 ) return( mResetErrorBOC( USB_INT_DISK_ERR ) );
	else return( USB_INT_DISK_ERR );  /* 磁盤操作錯誤 */
}

/* ********** SCSI/RBC/UFI命令層 ********** */

/* 檢查磁盤錯誤狀態 */
UINT8	mRequestSense( void )
{
	UINT8	buf[0x12];
	mDelaymS( 20 );  // 延時20毫秒
#ifdef BIG_ENDIAN
	mBOC.mCBW.mCBW_DataLen = 0x12000000;
#else
	mBOC.mCBW.mCBW_DataLen = 0x00000012;
#endif
	mBOC.mCBW.mCBW_Flag = 0x80;
	mBOC.mCBW.mCBW_CB_Len = 6;
	mBOC.mCBW.mCBW_CB_Buf[0] = 0x03;  /* 命令碼 */
	mBOC.mCBW.mCBW_CB_Buf[1] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[2] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[3] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[4] = 0x12;
	mBOC.mCBW.mCBW_CB_Buf[5] = 0x00;
	return( mBulkOnlyCmd( buf ) );  /* 執行基于BulkOnly協議的命令 */
}

/* 獲取磁盤特性 */
UINT8	mDiskInquiry( PUINT8 DataBuf )
{
#ifdef BIG_ENDIAN
	mBOC.mCBW.mCBW_DataLen = 0x24000000;
#else
	mBOC.mCBW.mCBW_DataLen = 0x00000024;
#endif
	mBOC.mCBW.mCBW_Flag = 0x80;
	mBOC.mCBW.mCBW_CB_Len = 6;
	mBOC.mCBW.mCBW_CB_Buf[0] = 0x12;  /* 命令碼 */
	mBOC.mCBW.mCBW_CB_Buf[1] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[2] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[3] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[4] = 0x24;
	mBOC.mCBW.mCBW_CB_Buf[5] = 0x00;
	return( mBulkOnlyCmd( DataBuf ) );  /* 執行基于BulkOnly協議的命令 */
}

/* 獲取磁盤容量 */
UINT8	mDiskCapacity( PUINT8 DataBuf )
{
#ifdef BIG_ENDIAN
	mBOC.mCBW.mCBW_DataLen = 0x08000000;
#else
	mBOC.mCBW.mCBW_DataLen = 0x00000008;
#endif
	mBOC.mCBW.mCBW_Flag = 0x80;
	mBOC.mCBW.mCBW_CB_Len = 10;
	mBOC.mCBW.mCBW_CB_Buf[0] = 0x25;  /* 命令碼 */
	mBOC.mCBW.mCBW_CB_Buf[1] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[2] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[3] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[4] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[5] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[6] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[7] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[8] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[9] = 0x00;
	return( mBulkOnlyCmd( DataBuf ) );  /* 執行基于BulkOnly協議的命令 */
}

/* 測試磁盤是否就緒 */
UINT8	mDiskTestReady( void )
{
	mBOC.mCBW.mCBW_DataLen = 0;
	mBOC.mCBW.mCBW_Flag = 0x00;
	mBOC.mCBW.mCBW_CB_Len = 6;
	mBOC.mCBW.mCBW_CB_Buf[0] = 0x00;  /* 命令碼 */
	mBOC.mCBW.mCBW_CB_Buf[1] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[2] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[3] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[4] = 0x00;
	mBOC.mCBW.mCBW_CB_Buf[5] = 0x00;
	return( mBulkOnlyCmd( NULL ) );  /* 執行基于BulkOnly協議的命令 */
}

/* 以扇區為單位從磁盤讀取數據 */
UINT8	mReadSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf )
{
	UINT8	err, s;
	UINT32	len;
	len = (UINT32)SectCount << 9;
	for ( err = 0; err < 3; err ++ ) {  /* 錯誤重試 */
#ifdef BIG_ENDIAN
		mBOC.mCBW.mCBW_DataLen = mSwapEndian( len );
#else
		mBOC.mCBW.mCBW_DataLen = len;
#endif
		mBOC.mCBW.mCBW_Flag = 0x80;
		mBOC.mCBW.mCBW_CB_Len = 10;
		mBOC.mCBW.mCBW_CB_Buf[0] = 0x28;  /* 命令碼 */
		mBOC.mCBW.mCBW_CB_Buf[1] = 0x00;
		mBOC.mCBW.mCBW_CB_Buf[2] = (UINT8)( StartLba >> 24 );
		mBOC.mCBW.mCBW_CB_Buf[3] = (UINT8)( StartLba >> 16 );
		mBOC.mCBW.mCBW_CB_Buf[4] = (UINT8)( StartLba >> 8 );
		mBOC.mCBW.mCBW_CB_Buf[5] = (UINT8)( StartLba );
		mBOC.mCBW.mCBW_CB_Buf[6] = 0x00;
		mBOC.mCBW.mCBW_CB_Buf[7] = 0x00;
		mBOC.mCBW.mCBW_CB_Buf[8] = SectCount;
		mBOC.mCBW.mCBW_CB_Buf[9] = 0x00;
		s = mBulkOnlyCmd( DataBuf );  /* 執行基于BulkOnly協議的命令 */
		if ( s == ERR_SUCCESS ) return( s );  /* 操作成功 */
		if ( s == USB_INT_DISCONNECT || s == USB_INT_CONNECT || s == USB_INT_CONNECT_LS ) return( s );  /* 檢測到USB設備斷開事件,磁盤已經斷開或者剛剛重新插上 */
		mRequestSense( );
	}
	return( s );  /* 錯誤 */
}

/* 以扇區為單位將數據寫入磁盤 */
UINT8	mWriteSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf )
{
	UINT8	err, s;
	UINT32	len;
	len = (UINT32)SectCount << 9;
	for ( err = 0; err < 3; err ++ ) {  /* 錯誤重試 */
#ifdef BIG_ENDIAN
		mBOC.mCBW.mCBW_DataLen = mSwapEndian( len );
#else
		mBOC.mCBW.mCBW_DataLen = len;
#endif
		mBOC.mCBW.mCBW_Flag = 0x00;
		mBOC.mCBW.mCBW_CB_Len = 10;
		mBOC.mCBW.mCBW_CB_Buf[0] = 0x2A;  /* 命令碼 */
		mBOC.mCBW.mCBW_CB_Buf[1] = 0x00;
		mBOC.mCBW.mCBW_CB_Buf[2] = (UINT8)( StartLba >> 24 );
		mBOC.mCBW.mCBW_CB_Buf[3] = (UINT8)( StartLba >> 16 );
		mBOC.mCBW.mCBW_CB_Buf[4] = (UINT8)( StartLba >> 8 );
		mBOC.mCBW.mCBW_CB_Buf[5] = (UINT8)( StartLba );
		mBOC.mCBW.mCBW_CB_Buf[6] = 0x00;
		mBOC.mCBW.mCBW_CB_Buf[7] = 0x00;
		mBOC.mCBW.mCBW_CB_Buf[8] = SectCount;
		mBOC.mCBW.mCBW_CB_Buf[9] = 0x00;
		s = mBulkOnlyCmd( DataBuf );  /* 執行基于BulkOnly協議的命令 */
		if ( s == ERR_SUCCESS ) return( s );  /* 操作成功 */
		if ( s == USB_INT_DISCONNECT || s == USB_INT_CONNECT || s == USB_INT_CONNECT_LS ) return( s );  /* 檢測到USB設備斷開事件,磁盤已經斷開或者剛剛重新插上 */
		mRequestSense( );
	}
	return( s );  /* 錯誤 */
}

/* ********** 主程序 ********** */

/* 為printf和getkey輸入輸出初始化串口 */
void	mInitSTDIO( )
{
	SCON = 0x50;
	PCON = 0x80;
	TL2 = RCAP2L = 0 - 13; /* 24MHz晶振, 57600bps */
	TH2 = RCAP2H = 0xFF;
	T2CON = 0x34;  /* 定時器2用于串口的波特率發生器 */
	TI = 1;
}

int	main( void )  // USB host
{
	UINT8	i, s;
	UINT8 idata	buf[64];
	UINT8 xdata	DISK_BUF[512];
//	P1&=0xF8; // 如果在U盤文件讀寫模塊上試用本程序必須加上本行
	mDelaymS( 50 );  // 等待CH374復位完成
	CH374_PORT_INIT( );  /* CH374接口初始化 */

	mInitSTDIO( );  /* 為了讓計算機通過串口監控演示過程 */
	printf( "Start CH374 Host\n" );

	Init374Host( );  // 初始化USB主機
	while ( 1 ) {
		HostSetBusFree( );  // 設定USB主機空閑
		printf( "Wait Device In\n" );
		while ( 1 ) {
			if ( Query374Interrupt( ) ) HostDetectInterrupt( );  // 如果有USB主機中斷則處理
			if ( Query374DeviceIn( ) ) break;  // 有USB設備
		}
		mDelaymS( 200 );  // 由于USB設備剛插入尚未穩定,故等待USB設備數百毫秒,消除插拔抖動
		if ( Query374Interrupt( ) ) HostDetectInterrupt( );  // 如果有USB主機中斷則處理

		printf( "Reset Device\n" );
		HostSetBusReset( );  // USB總線復位
		for ( i = 0; i < 100; i ++ ) {  // 等待USB設備復位后重新連接
			if ( Query374DeviceIn( ) ) break;  // 有USB設備
			mDelaymS( 1 );
		}
		if ( Query374Interrupt( ) ) HostDetectInterrupt( );  // 如果有USB主機中斷則處理
		if ( Query374DeviceIn( ) ) {  // 有USB設備
			if ( Query374DevFullSpeed( ) ) {
				printf( "Start Full-Speed Device\n" );
				HostSetFullSpeed( );  // 檢測到全速USB設備
			}
			else {
				printf( "Start Low-Speed Device\n" );
				HostSetLowSpeed( );  // 檢測到低速USB設備
			}
		}
		else {
			printf( "Device gone !\n" );
			continue;  // 設備已經斷開,繼續等待
		}
		mDelaymS( 20 );

		printf( "GetDeviceDescr: " );
		s = GetDeviceDescr( buf );  // 獲取設備描述符
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}
		for ( i = 0; i < ( (PUSB_SETUP_REQ)SetupGetDevDescr ) -> wLengthL; i ++ ) printf( "%02X ", (UINT16)( buf[i] ) );
		printf( "\n" );

		printf( "SetUsbAddress: " );
		s = SetUsbAddress( 0x02 );  // 設置USB設備地址
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}
		printf( "\n" );

		printf( "GetConfigDescr: " );
		s = GetConfigDescr( buf );  // 獲取配置描述符
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}
		for ( i = 0; i < ( (PUSB_CFG_DESCR)buf ) -> wTotalLengthL; i ++ ) printf( "%02X ", (UINT16)( buf[i] ) );
		printf( "\n" );

/* 分析配置描述符,獲取端點數據/各端點地址/各端點大小等,更新變量endp_addr和endp_size等 */
		if ( ( (PUSB_CFG_DESCR_LONG)buf ) -> itf_descr.bInterfaceClass != 0x08 ) goto WaitDeviceOut;  /* 不是USB存儲類設備 */
		mDiskInterfNumber = ( (PUSB_CFG_DESCR_LONG)buf ) -> itf_descr.bInterfaceNumber;  /* 接口號 */
		mDiskBulkInEndp = 0;
		mDiskBulkOutEndp = 0;
		for ( i = 0; i < 2; i ++ ) {  /* 分析前兩個端點 */
			if ( ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].wMaxPacketSize == 64 && ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bmAttributes == 2 ) {  /* 64字節長度的批量端點 */
				if ( ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bEndpointAddress & 0x80 ) mDiskBulkInEndp = ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bEndpointAddress & 0x0F;  /* IN端點 */
				else mDiskBulkOutEndp = ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bEndpointAddress & 0x0F;  /* OUT端點 */
			}
		}
		if ( ( (PUSB_CFG_DESCR_LONG)buf ) -> itf_descr.bInterfaceClass != 0x08 || mDiskBulkInEndp == 0 || mDiskBulkOutEndp == 0 ) {  /* 不是USB存儲類設備,不支持 */
			printf( "Not USB Mass Storage Device\n" );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}

		printf( "SetUsbConfig: " );
		s = SetUsbConfig( ( (PUSB_CFG_DESCR)buf ) -> bConfigurationValue );  // 設置USB設備配置
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}
		printf( "\n" );
		mSaveDevEndpTog = 0x00;  // 清同步標志

		printf( "Disk Inquiry: " );
		s = mDiskInquiry( buf );  /* 獲取磁盤特性 */
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}
		for ( i = 0; i < 8; i ++ ) printf( "%02X ", (UINT16)( buf[i] ) );
		printf( ", " );
		for ( i = 8; i < 36; i ++ ) printf( "%c", buf[i] );
		printf( "\n" );

		for ( i = 0; i < 5; i ++ ) {
			mDelaymS( 100 );
			printf( "Disk Capacity: " );
			s = mDiskCapacity( buf );  /* 獲取磁盤容量 */
			if ( s != ERR_SUCCESS ) {
				printf( "ERROR = %02X\n", (UINT16)s );
				mRequestSense( );
			}
			else {
				for ( i = 0; i < 8; i ++ ) printf( "%02X ", (UINT16)( buf[i] ) );
				printf( ", %3d MB\n", (UINT16)( ( (UINT32)( buf[1] ) << 16 | (UINT16)( buf[2] ) << 8 | buf[3] ) >> 11 ) );
				break;
			}
		}

		printf( "Disk Ready: " );
		s = mDiskTestReady( );  /* 測試磁盤是否就緒 */
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
		}
		else printf( "\n" );

		printf( "Disk Read First Sector: " );
		s = mReadSector( 0x00000000, 1, DISK_BUF );  /* 以扇區為單位從磁盤讀取數據 */
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}
		for ( i = 0; i < 16; i ++ ) printf( "%02X ", (UINT16)( DISK_BUF[i] ) );
		printf( "\n" );

		DISK_BUF[0] ^= 0xFF;
		DISK_BUF[1] ^= 0xFF;
		DISK_BUF[510] ^= 0xFF;
		DISK_BUF[511] ^= 0xFF;
		printf( "Disk Write Second Sector: " );
		s = mWriteSector( 0x00000001, 1, DISK_BUF );  /* 以扇區為單位將數據寫入磁盤 */
		if ( s != ERR_SUCCESS ) {
			printf( "ERROR = %02X\n", (UINT16)s );
			goto WaitDeviceOut;  // 終止操作,等待USB設備拔出
		}
		for ( i = 0; i < 16; i ++ ) printf( "%02X ", (UINT16)( DISK_BUF[i] ) );
		printf( "\n" );

WaitDeviceOut:  // 等待USB設備拔出
		printf( "Wait Device Out\n" );
		while ( 1 ) {
			if ( Query374Interrupt( ) ) HostDetectInterrupt( );  // 如果有USB主機中斷則處理
			if ( Query374DeviceIn( ) == FALSE ) break;  // 沒有USB設備
		}
		mDelaymS( 100 );  // 等待設備完全斷開,消除插拔抖動
		if ( Query374DeviceIn( ) ) goto WaitDeviceOut;  // 沒有完全斷開
//		HostSetBusFree( );  // 設定USB主機空閑,主要目的是關閉SOF
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩在线| 久久精品亚洲乱码伦伦中文| 大尺度一区二区| 欧美一区二区三区免费在线看| 国产一区二区三区黄视频| 欧美岛国在线观看| 久久一区二区三区国产精品| 亚洲精品一区二区三区福利| 欧美巨大另类极品videosbest| 日本韩国一区二区| 91精品麻豆日日躁夜夜躁| 欧美一级夜夜爽| 日韩精品一区二区三区swag| 精品国产乱子伦一区| 欧美韩国日本一区| 一区二区三区视频在线看| 青青草国产精品亚洲专区无| 国产尤物一区二区| 色综合久久中文字幕综合网 | 国产一区二区美女诱惑| 蜜臀a∨国产成人精品| 在线电影一区二区三区| 国产欧美日韩不卡免费| 精品国产乱码久久久久久牛牛| 久久aⅴ国产欧美74aaa| 99久久精品国产观看| 26uuu精品一区二区在线观看| 色乱码一区二区三区88| 国产成人啪免费观看软件| 欧美不卡激情三级在线观看| 久久人人97超碰com| 国产精品久99| 亚洲国产电影在线观看| 一区二区视频免费在线观看| 视频一区二区国产| 国产剧情一区在线| 色8久久精品久久久久久蜜| 日韩三级.com| 亚洲欧美中日韩| 午夜久久久久久久久久一区二区| 久久电影国产免费久久电影| 一本一道久久a久久精品| 欧美v日韩v国产v| 一区二区在线免费| 国产丶欧美丶日本不卡视频| 欧美视频在线播放| 国产欧美日韩精品一区| 首页国产欧美日韩丝袜| 不卡电影免费在线播放一区| 欧美一区中文字幕| 一区二区在线观看免费视频播放| 精久久久久久久久久久| 欧美日韩一区 二区 三区 久久精品| 精品国产乱码91久久久久久网站| 一卡二卡欧美日韩| 国产成人鲁色资源国产91色综| 欧美日韩和欧美的一区二区| 国产精品视频一二三区| 国产主播一区二区| 3d成人h动漫网站入口| 亚洲乱码中文字幕综合| gogo大胆日本视频一区| 久久久精品一品道一区| 蜜乳av一区二区| 欧美精品一级二级三级| 亚洲午夜成aⅴ人片| 色偷偷久久人人79超碰人人澡| 国产视频一区在线播放| 国产一区高清在线| 欧美va天堂va视频va在线| 性久久久久久久久| 欧美美女喷水视频| 日韩—二三区免费观看av| 欧美性猛交一区二区三区精品 | 欧美午夜精品一区| 亚洲欧美日韩国产手机在线| 成人av片在线观看| 日本一区二区三区视频视频| 国产成人免费在线| 国产欧美日产一区| av亚洲精华国产精华| 国产精品高潮呻吟| 国产成人精品亚洲日本在线桃色| 久久久国产精品午夜一区ai换脸| 激情av综合网| 国产精品色一区二区三区| 风间由美一区二区av101| 国产精品毛片大码女人| 99久久精品免费精品国产| 亚洲精品日韩一| 欧美日韩国产一二三| 青草av.久久免费一区| 26uuu精品一区二区在线观看| 国产成人8x视频一区二区| 亚洲欧洲日本在线| 欧美三级日韩在线| 老司机精品视频导航| 国产欧美日韩精品在线| 欧美亚洲国产一区二区三区| 奇米影视在线99精品| 成人综合婷婷国产精品久久| av影院午夜一区| 欧洲精品在线观看| 日韩欧美中文一区| 亚洲欧美另类小说| 大胆欧美人体老妇| 久久伊99综合婷婷久久伊| 中文字幕一区在线观看视频| 日韩在线观看一区二区| 国产精品18久久久久久久久久久久| 国产传媒一区在线| 欧美日韩黄色一区二区| 国产精品久久久久久久岛一牛影视| 亚洲高清中文字幕| 91年精品国产| 国产精品毛片久久久久久久| 偷偷要91色婷婷| 色综合色狠狠天天综合色| 亚洲电影一级黄| 成人美女视频在线看| 亚洲综合视频在线| 另类中文字幕网| 欧美日韩在线免费视频| 亚洲美女精品一区| 日韩午夜在线影院| 久久综合九色欧美综合狠狠| 中文字幕在线观看一区| 蜜桃久久精品一区二区| 日韩伦理电影网| 亚洲精品一区二区三区香蕉| 色综合久久中文综合久久牛| 麻豆一区二区三区| 亚洲一区二区三区激情| **欧美大码日韩| 欧美国产禁国产网站cc| 精品国产乱码久久久久久图片| 欧美日韩国产首页在线观看| 91丨九色丨蝌蚪富婆spa| 国产成人在线网站| 精品一区精品二区高清| 秋霞午夜av一区二区三区| 亚洲国产一二三| 亚洲国产婷婷综合在线精品| 亚洲码国产岛国毛片在线| 国产精品视频yy9299一区| 久久久蜜桃精品| 精品久久久久久综合日本欧美| 337p亚洲精品色噜噜噜| 7777女厕盗摄久久久| 欧美亚洲动漫精品| 欧美日韩国产精品成人| 欧美日韩视频一区二区| 欧美日韩一卡二卡| 欧美久久高跟鞋激| 欧美一区二区精品久久911| 91精品婷婷国产综合久久 | 精品电影一区二区三区 | 国产精品亚洲第一区在线暖暖韩国| 另类小说欧美激情| 久久精品国产成人一区二区三区| 日韩电影在线观看网站| 免费精品视频最新在线| 久久超碰97人人做人人爱| 精品一区二区三区蜜桃| 国产麻豆成人精品| 狠狠色丁香九九婷婷综合五月| 理论电影国产精品| 国产精品一区二区无线| 国产精品99久久久久久似苏梦涵 | 欧美日韩国产大片| 日韩女优av电影在线观看| 3d成人动漫网站| 久久久久久久网| 亚洲另类中文字| 久久99久久99| 国产精品一区二区三区网站| 99riav一区二区三区| 欧美日韩激情在线| 精品久久久久久无| 亚洲欧美综合色| 免费日韩伦理电影| 高清不卡一区二区在线| 91麻豆国产精品久久| 91精品国产综合久久精品app| 久久久亚洲欧洲日产国码αv| 中文字幕在线观看一区| 奇米一区二区三区av| 成人99免费视频| 91麻豆精品国产91久久久资源速度 | 91视频一区二区| 欧美日韩不卡一区| 国产欧美精品一区二区色综合朱莉| 亚洲视频一二区| 另类小说一区二区三区| 在线精品视频免费播放| 久久午夜免费电影| 亚洲成在人线在线播放| 成人中文字幕合集| 欧美xxxxxxxx| 五月天国产精品|