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

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

?? ch374_hid.c

?? MCS51和CH374做USB主機與HID設備通信
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* CH374芯片 應用層 V1.0 */
/* USB主機,初始化和枚舉當前連接的USB設備 */

#include	<stdio.h>
#include	<string.h>
#include	"HAL.H"			 // 以MCS51為例,其它單片機需修改HAL*硬件抽象層的幾個文件
#include	"HAL_BASE.C"	 // 基本子程序及中斷查詢子程序

/* 硬件接口層,以下連接方式任選一種 */
#include "PARA_HW.C"	    //硬件標準8位并口
//#include "..\PARA_SW.C"	// 軟件I/O模擬8位并口 
//#include "..\SPI_HW.C"	// 硬件標準4線SPI串口 
//#include "SPI_SW.C"   	// 軟件I/O模擬4線SPI串口 
//#include "SPI3_SW.C"	    // 軟件I/O模擬3線SPI串口,SDO和SDI合用一個引腳 

/* 獲取設備描述符 */
const	UINT8C	SetupGetDevDescr[] = { 0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00 };
/* 獲取配置描述符 */
const	UINT8C	SetupGetCfgDescr[] = { 0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00 };
/* 設置USB地址 */
const	UINT8C	SetupSetUsbAddr[] = { 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 };
/* 設置USB配置 */
const	UINT8C	SetupSetUsbConfig[] = { 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
/* SET IDLE */
unsigned char code SetupSetidle[]={0x21,0x0a,0x00,0x00,0x00,0x00,0x00,0x00};        
/* 獲取HID 報告描述符 */
unsigned char code SetupGetHidDes[]={0x81,0x06,0x00,0x22,0x00,0x00,0x81,0x00};    
/* SET REPORT */
unsigned char code SetupSetReport[]={0x21,0x09,0x00,0x02,0x00,0x00,0x01,0x00};     

/* 常\變量定義:*/
 
// BOOL     Set_Report_flag;   //Set_Report 發送標志,只要用來點亮、熄滅鍵盤上的燈 (Set_Report_flag=1時,代表亮)
BOOL     LOW_SPEED_BIT;
BOOL	 tog1;              //讀取數據時的同步標志
UINT8    endp_out_addr;	    // out端點地址,由于一般鼠標鍵盤不支持out端點,一般用不到 
UINT8    endp_in_addr;		// in 端點地址 
UINT8    hid_des_leng;      // HID類報告描述符的長度
UINT8    endp_num;          // 數據 hid 類鍵盤、鼠標的端點數目
UINT8 	 UsbDevEndpSize = DEFAULT_ENDP0_SIZE;	// USB設備的端點0的最大包尺寸 
UINT8	 FlagDeviceStatus;						// 當前USB設備狀態,通常用于中斷方式的全局變量,本程序中未使用 

/* CH374傳輸事務,輸入目的端點地址/PID令牌/同步標志,返回同CH375,NAK不重試,超時/出錯重試  */
UINT8	HostTransact374( UINT8 endp_addr, UINT8 pid, BOOL tog );

/* CH374傳輸事務,輸入目的端點地址/PID令牌/同步標志/以mS為單位的NAK重試總時間(0xFFFF無限重試),返回同CH375,NAK重試,超時出錯重試 */
UINT8	WaitHostTransact374( UINT8 endp_addr, UINT8 pid, BOOL tog, UINT16 timeout );

/* 執行控制傳輸,ReqBuf指向8字節請求碼,DatBuf為收發緩沖區 */
// 如果需要接收和發送數據,那么DatBuf需指向有效緩沖區用于存放后續數據,實際成功收發的總長度保存在ReqLen指向的字節變量中
UINT8	HostCtrlTransfer374( PUINT8 ReqBuf, PUINT8 DatBuf, PUINT8 RetLen );  

/* 查詢當前是否存在USB設備 */
//BOOL	Query374DeviceIn( void );
#define	Query374DeviceIn( )	( ( Read374Byte( REG_INTER_FLAG ) & BIT_IF_DEV_ATTACH ) ? TRUE : FALSE )

/* 查詢當前的USB設備是全速還是低速, 返回TRUE為全速 */
//BOOL	Query374DevFullSpeed( void );
#define	Query374DevFullSpeed( )	( ( Read374Byte( REG_SYS_INFO ) & BIT_INFO_USB_DP ) ? TRUE : FALSE )

void	HostDetectInterrupt( void );        // 處理USB設備插拔事件中斷

void	SetHostUsbAddr( UINT8 addr );       // 設置USB主機當前操作的USB設備地址

void	HostSetBusFree( void );             // USB總線空閑

void	HostSetBusReset( void );            // USB總線復位

void	HostSetFullSpeed( void );           // 設定全速USB設備運行環境

void	HostSetLowSpeed( void );            // 設定低速USB設備運行環境

void	Init374Host( void );                // 初始化USB主機

UINT8	GetDeviceDescr( PUINT8 buf );       // 獲取設備描述符

UINT8	GetConfigDescr( PUINT8 buf );       // 獲取配置描述符

UINT8	SetUsbAddress( UINT8 addr );        // 設置USB設備地址

UINT8	SetUsbConfig( UINT8 cfg );          // 設置USB設備配置

/* CH374傳輸事務,輸入目的端點地址/PID令牌/同步標志,返回同CH375,NAK不重試,超時/出錯重試 */
UINT8	HostTransact374( UINT8 endp_addr, UINT8 pid, BOOL tog )
{  // 本子程序著重于易理解,而在實際應用中,為了提供運行速度,應該對本子程序代碼進行優化
	UINT8	retry;
	UINT8	s, r, u;
	for ( retry = 0; retry < 3; retry ++ ) {
		Write374Byte( REG_USB_H_PID, M_MK_HOST_PID_ENDP( pid, endp_addr ) );  // 指定令牌PID和目的端點號
//		Write374Byte( REG_USB_H_CTRL, BIT_HOST_START | ( tog ? ( BIT_HOST_TRAN_TOG | BIT_HOST_RECV_TOG ) : 0x00 ) );  // 設置同步標志并啟動傳輸
		Write374Byte( REG_USB_H_CTRL, ( tog ? ( BIT_HOST_START | BIT_HOST_TRAN_TOG | BIT_HOST_RECV_TOG ) : BIT_HOST_START ) );  // 設置同步標志并啟動傳輸
//		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE );  // 取消暫停
//      mDelayuS( 200 );
		s = Wait374Interrupt( );
		if ( s == ERR_USB_UNKNOWN ) return( s );        // 中斷超時,可能是硬件異常
		s = Read374Byte( REG_INTER_FLAG );              // 獲取中斷狀態
		if ( s & BIT_IF_DEV_DETECT ) {                  // USB設備插拔事件
			mDelayuS( 250 );                            // 等待傳輸完成
			Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_DEV_DETECT | BIT_IF_TRANSFER );  // 清中斷標志
			if ( s & BIT_IF_DEV_ATTACH ) {              // USB設備連接事件
				mDelayuS( 200 );  // 等待傳輸完成
				u = Read374Byte( REG_USB_SETUP );
				if ( s & BIT_IF_USB_DX_IN ) {           // 速度匹配,不需要切換速度
					if ( u & BIT_SETP_USB_SPEED ) return( USB_INT_CONNECT_LS );  // 低速USB設備
					return( USB_INT_CONNECT );          // 全速USB設備
				}
				else {                                  // 速度失配,需要切換速度
					if ( u & BIT_SETP_USB_SPEED ) return( USB_INT_CONNECT );  // 全速USB設備
					return( USB_INT_CONNECT_LS );       // 低速USB設備
				}
			}
			else return( USB_INT_DISCONNECT );         // USB設備斷開事件
		}
		else if ( s & BIT_IF_TRANSFER ) {              // 傳輸完成
			Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER );  // 清中斷標志
			s = Read374Byte( REG_USB_STATUS );        // USB狀態
			r = s & BIT_STAT_DEV_RESP;                // USB設備應答狀態
			switch ( pid ) {
				case DEF_USB_PID_SETUP:
				case DEF_USB_PID_OUT:
					if ( r == DEF_USB_PID_ACK ) return( USB_INT_SUCCESS );
					else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK ) return( r | 0x20 );
					else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 );  // 不是超時/出錯,意外應答
					break;
				case DEF_USB_PID_IN:
					if ( M_IS_HOST_IN_DATA( s ) ) {  // DEF_USB_PID_DATA0 or DEF_USB_PID_DATA1
						if ( s & BIT_STAT_TOG_MATCH ) return( USB_INT_SUCCESS );  // 不同步則需丟棄后重試
					}
					else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK ) return( r | 0x20 );
					else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 );  // 不是超時/出錯,意外應答
					break;
				default:
					return( ERR_USB_UNKNOWN );       // 不可能的情況
					break;
			}
		}
		else {                                       // 其它中斷,不應該發生的情況
			mDelayuS( 200 );                         // 等待傳輸完成
			Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_INTER_FLAG );  /* 清中斷標志 */
			if ( retry ) return( ERR_USB_UNKNOWN );  // 不是第一次檢測到則返回錯誤
		}
	}
	return( 0x20 );                                  // 應答超時
}

/*  CH374傳輸事務,輸入目的端點地址/PID令牌/同步標志/以mS為單位的NAK重試總時間(0xFFFF無限重試),返回同CH375,NAK重試,超時出錯重試 */
UINT8	WaitHostTransact374( UINT8 endp_addr, UINT8 pid, BOOL tog, UINT16 timeout )
{
	UINT8	i, s;
	while ( 1 ) {
		for ( i = 0; i < 1; i ++ ) {
			s = HostTransact374( endp_addr, pid, tog );
			if ( s != ( DEF_USB_PID_NAK | 0x20 ) || timeout == 0 ) return( s );
			mDelayuS( 20 );
		}
		if ( timeout < 0xFFFF ) timeout --;
	}
}

/* 執行控制傳輸,ReqBuf指向8字節請求碼,DatBuf為收發緩沖區 */
UINT8	HostCtrlTransfer374( PUINT8 ReqBuf, PUINT8 DatBuf, PUINT8 RetLen )  
// 如果需要接收和發送數據,那么DatBuf需指向有效緩沖區用于存放后續數據,實際成功收發的總長度保存在ReqLen指向的字節變量中
{
	UINT8	s, len, count, total;
	BOOL	tog;
	Write374Block( RAM_HOST_TRAN, 8, ReqBuf );
	Write374Byte( REG_USB_LENGTH, 8 );
	mDelayuS( 100 );
	s = WaitHostTransact374( 0, DEF_USB_PID_SETUP, FALSE, 200 );  // SETUP階段,200mS超時
	if ( s == USB_INT_SUCCESS )              // SETUP成功
    {
		tog = TRUE;                          // 默認DATA1,默認無數據故狀態階段為IN
		if((*(ReqBuf+3))==0x22)
        {
			total=*( ReqBuf + 6 )-0x40;
	    }
		else 
			total = *( ReqBuf + 6 );
		if ( total && DatBuf )               // 需要收數據
        {
			len = total;
			if ( *ReqBuf & 0x80 )           // 收
            {
				while ( len ) 
                {
					mDelayuS( 100 );
					s = WaitHostTransact374( 0, DEF_USB_PID_IN, tog, 200 );  // IN數據
					if ( s != USB_INT_SUCCESS ) break;
					count = Read374Byte( REG_USB_LENGTH );
					Read374Block( RAM_HOST_RECV, count, DatBuf );
					DatBuf += count;
					if ( count <= len ) len -= count;
					else len = 0;
					if ( count & ( UsbDevEndpSize - 1 ) ) break;  // 短包
					tog = tog ? FALSE : TRUE;
				}
				tog = FALSE;                // 狀態階段為OUT
			}
			else {                          // 發
				while ( len ) 
                {
					mDelayuS( 100 );
					count = len >= UsbDevEndpSize ? UsbDevEndpSize : len;
					Write374Block( RAM_HOST_TRAN, count, DatBuf );
					Write374Byte( REG_USB_LENGTH, count );
					s = WaitHostTransact374( 0, DEF_USB_PID_OUT, tog, 200 );  // OUT數據
					if ( s != USB_INT_SUCCESS ) break;
					DatBuf += count;
					len -= count;
					tog = tog ? FALSE : TRUE;
				}
				tog = TRUE;                // 狀態階段為IN
			}
			total -= len;                  // 減去剩余長度得實際傳輸長度
		}
		if ( s == USB_INT_SUCCESS )        // 數據階段成功
        {
			Write374Byte( REG_USB_LENGTH, 0 );
			mDelayuS( 100 );
			s = WaitHostTransact374( 0, ( tog ? DEF_USB_PID_IN : DEF_USB_PID_OUT ), TRUE, 200 );  // STATUS階段
			if ( tog && s == USB_INT_SUCCESS )    // 檢查IN狀態返回數據長度
            {
				if ( Read374Byte( REG_USB_LENGTH ) ) s = USB_INT_BUF_OVER;  // 狀態階段錯誤
			}
		}
	}
	if ( RetLen ) *RetLen = total;        // 實際成功收發的總長度
	return( s );
}

/*通過中斷端點獲取鼠標、鍵盤上傳的數據 */
unsigned char Interrupt_Data_Trans(unsigned char *p)
{
	UINT8  s,count;
	s = WaitHostTransact374( endp_in_addr, DEF_USB_PID_IN, tog1, 1000 );  // IN數據
//    printf("s:%x \n",(unsigned short)s);
	if ( s != USB_INT_SUCCESS ){	mDelaymS(5); return s;}
	else
    {	
			count = Read374Byte( REG_USB_LENGTH );
			Read374Block( RAM_HOST_RECV, count, p );
			tog1 = tog1 ? FALSE : TRUE;
	}
	return s;
}

/* 查詢當前是否存在USB設備 */
//BOOL	Query374DeviceIn( void )
//#define	Query374DeviceIn( )	( ( Read374Byte( REG_INTER_FLAG ) & BIT_IF_DEV_ATTACH ) ? TRUE : FALSE )

/* 查詢當前的USB設備是全速還是低速, 返回TRUE為全速 */
//BOOL	Query374DevFullSpeed( void )
//#define	Query374DevFullSpeed( )	( ( Read374Byte( REG_SYS_INFO ) & BIT_INFO_USB_DP ) ? TRUE : FALSE )

/* 處理USB設備插拔事件中斷 */
void	HostDetectInterrupt( void )      
{
	UINT8	s, u;
	s = Read374Byte( REG_INTER_FLAG );         // 獲取中斷狀態
	if ( s & BIT_IF_DEV_DETECT )               // USB設備插拔事件
    {
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_DEV_DETECT );  // 清中斷標志
		if ( s & BIT_IF_DEV_ATTACH )           // USB設備連接事件
        {
			u = Read374Byte( REG_USB_SETUP );
			if ( s & BIT_IF_USB_DX_IN )        // 速度匹配,不需要切換速度
            {
				if ( u & BIT_SETP_USB_SPEED ) FlagDeviceStatus = USB_INT_CONNECT_LS;  // 低速USB設備
				else FlagDeviceStatus = USB_INT_CONNECT;  // 全速USB設備
			}
			else                              // 速度失配,需要切換速度
            {
				if ( u & BIT_SETP_USB_SPEED ) FlagDeviceStatus = USB_INT_CONNECT;  // 全速USB設備
				else FlagDeviceStatus = USB_INT_CONNECT_LS;  // 低速USB設備
			}
		}
		else FlagDeviceStatus = USB_INT_DISCONNECT;          // USB設備斷開事件
	}
	else                                                     // 意外的中斷
     { 
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER | BIT_IF_USB_SUSPEND | BIT_IF_WAKE_UP );  // 清中斷標志
	}
}

/* 設置USB主機當前操作的USB設備地址 */
void	SetHostUsbAddr( UINT8 addr )  
{
	Write374Byte( REG_USB_ADDR, addr );
}

 /* USB總線空閑 */
void	HostSetBusFree( void ) 
{
//	Write374Byte( REG_USB_SETUP, M_SET_USB_BUS_FREE( Read374Byte( REG_USB_SETUP ) ) );    // USB總線空閑
	Write374Byte( REG_USB_SETUP, BIT_SETP_HOST_MODE| BIT_SETP_AUTO_SOF );                 // USB總線復位
}

/* USB總線復位 */
void	HostSetBusReset( void )  
{
	UsbDevEndpSize = DEFAULT_ENDP0_SIZE;                                                // USB設備的端點0的最大包尺寸 
	SetHostUsbAddr( 0x00 );
	Write374Byte( REG_USB_H_CTRL, 0x00 );
//	Write374Byte( REG_USB_SETUP, M_SET_USB_BUS_RESET( Read374Byte( REG_USB_SETUP ) & ~ BIT_SETP_AUTO_SOF ) );  // USB總線復位
	Write374Byte( REG_USB_SETUP, M_SET_USB_BUS_RESET( BIT_SETP_HOST_MODE ) );           // USB總線復位
	mDelaymS( 20 );                                                                     // USB總線復位期間
//	Write374Byte( REG_USB_SETUP, M_SET_USB_BUS_FREE( Read374Byte( REG_USB_SETUP ) ) );  // USB總線空閑
	HostSetBusFree( );                                                                  // USB總線空閑
	mDelaymS( 1 );
	Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_DEV_DETECT | BIT_IF_USB_SUSPEND );  // 清中斷標志
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区国产麻豆| 美女mm1313爽爽久久久蜜臀| 日韩一区二区高清| 91精品国产福利| 欧美日韩国产不卡| 91精品国产全国免费观看| 欧美视频一区在线观看| 欧美日韩免费观看一区二区三区 | 午夜精品123| 亚洲综合无码一区二区| 亚洲一区二区三区不卡国产欧美| 亚洲影院久久精品| 蜜臀va亚洲va欧美va天堂| 蜜桃视频在线一区| 国产suv一区二区三区88区| aa级大片欧美| 欧美影片第一页| 日韩欧美中文字幕一区| 国产片一区二区| 怡红院av一区二区三区| 免费人成黄页网站在线一区二区| 激情图区综合网| 成人app软件下载大全免费| 色综合天天在线| 日韩欧美123| 国产精品高清亚洲| 五月婷婷综合网| 国产精品小仙女| 欧美中文字幕亚洲一区二区va在线| 欧美一区二区三区免费大片| 国产日韩欧美精品电影三级在线 | 日韩欧美在线观看一区二区三区| 26uuu精品一区二区三区四区在线| 欧美国产成人在线| 午夜精品在线视频一区| 国产一区二区三区观看| 欧美丝袜自拍制服另类| 久久久精品天堂| 肉肉av福利一精品导航| 成年人国产精品| 日韩精品中文字幕一区 | 99精品欧美一区二区蜜桃免费 | 一区二区欧美视频| 九色综合狠狠综合久久| 91久久免费观看| 国产性做久久久久久| 午夜国产精品一区| www.亚洲精品| 精品国产凹凸成av人网站| 一区二区三区四区国产精品| 国产乱人伦偷精品视频免下载| 欧美色国产精品| 国产精品免费久久久久| 狂野欧美性猛交blacked| 在线欧美一区二区| 中文字幕av一区 二区| 激情五月婷婷综合| 欧美一区二区女人| 亚洲国产视频网站| 日本乱码高清不卡字幕| 国产精品久久久久久久裸模| 国产精品资源站在线| 日韩一区二区三区免费看| 亚洲成人综合在线| 欧美视频中文字幕| 亚洲韩国一区二区三区| 一本色道久久综合亚洲精品按摩| 中文字幕第一区第二区| 国产主播一区二区三区| 日韩欧美第一区| 欧美日韩在线一区二区| 亚洲免费av在线| av激情综合网| 夜夜爽夜夜爽精品视频| 欧美在线视频日韩| 亚洲成人动漫精品| 欧美顶级少妇做爰| 久久国产综合精品| 精品国产一区a| 国产不卡视频一区二区三区| 国产欧美精品一区aⅴ影院| 成人影视亚洲图片在线| 国产精品女同一区二区三区| 91在线视频免费91| 一区二区三区精密机械公司| 欧美日韩三级视频| 久久99精品久久久久久动态图| 精品久久久久av影院| 国产精品一区二区无线| ㊣最新国产の精品bt伙计久久| 成人午夜精品一区二区三区| 国产精品美女久久久久久| 成人高清免费在线播放| 亚洲人精品午夜| 欧美伊人久久久久久久久影院| 日本伊人午夜精品| 国产日产欧美一区二区三区| 波多野结衣的一区二区三区| 亚洲高清久久久| 精品国产91九色蝌蚪| 99久久久精品| 视频一区二区国产| 国产女同互慰高潮91漫画| 色素色在线综合| 精东粉嫩av免费一区二区三区| 日本一区二区免费在线| 欧日韩精品视频| 国产精品亚洲午夜一区二区三区| 中文字幕综合网| 日韩精品专区在线影院观看| 99精品欧美一区二区蜜桃免费 | 日韩区在线观看| 99精品视频在线观看免费| 免费成人在线网站| 综合色天天鬼久久鬼色| 日韩免费高清电影| 色综合久久88色综合天天免费| 美国三级日本三级久久99| 亚洲色图.com| 久久精品人人做人人爽人人| 91成人免费在线| 国产黄色精品网站| 天天操天天色综合| 国产精品久久看| 欧美成人精品二区三区99精品| 色综合天天综合给合国产| 国产一区二区三区免费在线观看| 亚洲福中文字幕伊人影院| 久久精品亚洲麻豆av一区二区| 欧美体内she精高潮| 91网站最新网址| 国产真实乱子伦精品视频| 午夜在线成人av| 亚洲蜜臀av乱码久久精品蜜桃| 日韩视频免费观看高清完整版| 91丝袜美女网| 成人激情小说网站| 国产高清亚洲一区| 久久综合综合久久综合| 午夜激情综合网| 一区二区三区在线免费观看| 国产精品福利一区| 国产日韩精品一区二区三区| 精品国产不卡一区二区三区| 日韩三级电影网址| 欧美一级片在线| 3d成人h动漫网站入口| 欧美视频你懂的| 欧美日韩一区二区电影| 欧洲国内综合视频| 欧美日韩国产免费一区二区| 欧美日韩在线播放三区四区| 色综合 综合色| 欧美性猛交一区二区三区精品| 欧美图区在线视频| 777奇米四色成人影色区| 欧美色视频在线| 日韩色视频在线观看| 欧美精品一区二区久久久| 26uuuu精品一区二区| 久久精品在这里| 国产精品丝袜一区| 夜夜嗨av一区二区三区| 天天色图综合网| 国产尤物一区二区| 成人性生交大片免费| 欧美做爰猛烈大尺度电影无法无天| 欧美自拍偷拍午夜视频| 91精品欧美福利在线观看| 日韩一级黄色大片| 久久综合久久鬼色中文字| 国产日韩欧美综合在线| 亚洲欧洲www| 天堂一区二区在线| 国产在线不卡一区| 色哟哟一区二区| 91精品欧美一区二区三区综合在| 久久尤物电影视频在线观看| 国产精品国产三级国产三级人妇 | 日韩黄色免费网站| 国产在线不卡一区| 色综合久久中文综合久久97| 91精品国产综合久久蜜臀| 亚洲国产精品精华液ab| 亚洲精品视频在线观看网站| 蜜臀久久99精品久久久久宅男| 成人免费黄色在线| 91精选在线观看| 亚洲天堂精品在线观看| 日本91福利区| 91视频国产观看| 精品国产在天天线2019| 亚洲精品国久久99热| 久久99久久99| 在线一区二区观看| 国产午夜精品一区二区三区嫩草| 一区二区欧美视频| 懂色一区二区三区免费观看| 91精品国产综合久久久久久久久久| 国产精品久久久久久户外露出|