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

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

?? testdlg.cpp

?? 實現USB芯片CY7C68013高速傳輸的測試程序
?? CPP
字號:
          // TestDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Test.h"
#include "TestDlg.h"

#include <process.h>
#include <winioctl.h>
#include "ezusbsys.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

char PIPE_TYPE_STRINGS[4][4] = 
{
"CTL",
"ISO",
"BLK",
"INT"
};

char PIPE_DIRECTION[2][4] = 
{
"OUT",
"IN"
};
BOOL gStopTest;

/*
purpose:
     打開設備函數
input:
     devname 設備名	 
output:
	phDeviceHandle 設備句柄
return value:
     BOOLEAN變量  成功或者失敗
*/
BOOL bOpenDriver (HANDLE * phDeviceHandle, PCHAR devname)
{
   char completeDeviceName[64] = "";
   char pcMsg[64] = "";
   
   strcat (completeDeviceName,
      "\\\\.\\"
      );
   
   strcat (completeDeviceName,
		    devname);
   
   *phDeviceHandle = CreateFile(  completeDeviceName,
      GENERIC_WRITE,
      FILE_SHARE_WRITE,
      NULL,
      OPEN_EXISTING,
      0,
      NULL);
   
   if (*phDeviceHandle == INVALID_HANDLE_VALUE) {
      return (FALSE);
   } else {
      return (TRUE);
   } 
}

UINT  TransferThread(
   void * pParam
)
{
    PTHREAD_CONTROL threadControl;
	threadControl=(PTHREAD_CONTROL)pParam;
	   

   // perform the ISO transfer
   threadControl->status = DeviceIoControl (threadControl->hDevice,
                                             threadControl->Ioctl,
                                             threadControl->InBuffer,
                                             threadControl->InBufferSize,
                                             threadControl->OutBuffer,
                                             threadControl->OutBufferSize,
                                             &threadControl->BytesReturned,
                                             NULL);

   // if an event exists, set it
   if (threadControl->completionEvent)
      SetEvent(threadControl->completionEvent);
   return 0;
}


UINT TestThread(
  void * pParam  // thread data
)
{
 
    CThreadParam*  ThreadParam;
	CTestDlg* TestDlg;


    HANDLE  hInDevice = NULL;
    HANDLE  hOutDevice = NULL;
    PUCHAR inBuffer = NULL;
    PUCHAR outBuffer = NULL;
    ULONG MaxTransferSize, CurrentTransferSize;
    ULONG InPipeNum;
    ULONG OutPipeNum;
    ULONG TestPass;
    ULONG Errors;
    HANDLE ReadCompleteEvent;
    HANDLE WriteCompleteEvent;


    ULONG  i;
    BULK_TRANSFER_CONTROL   inBulkControl,outBulkControl;
    THREAD_CONTROL inThreadControl,outThreadControl;
    char tempbuff[256];
    FILE *dumpfile;//保存測試數據
    FILE *binfile;

	ThreadParam=(CThreadParam *)pParam;
	TestDlg=ThreadParam->testDlg;

    if (bOpenDriver (&hInDevice, TestDlg->m_strName.GetBuffer(TestDlg->m_strName.GetLength())) != TRUE)
    {
       TestDlg->m_strOutput+="打開設備失敗,測試線程結束\r\n";
	   ThreadParam->bUpdate=TRUE;
       return 0;
    }
    if (bOpenDriver (&hOutDevice, TestDlg->m_strName.GetBuffer(TestDlg->m_strName.GetLength())) != TRUE)
    {
       TestDlg->m_strOutput+="打開設備失敗\r\n";
	   ThreadParam->bUpdate=TRUE;
       return 0;
    }
 
    InPipeNum=2;
	OutPipeNum=0;
    sprintf(tempbuff,"IN PIPE = %d OUT PIPE = %d",InPipeNum,OutPipeNum);
	ThreadParam->bUpdate=TRUE;
	TestDlg->m_strOutput+=tempbuff;
  
    //
    // get the transfer size and allocate the transfer buffers
    //
    MaxTransferSize = TestDlg->m_nSize;
    CurrentTransferSize = MaxTransferSize;
    outBuffer = (unsigned char *)malloc(MaxTransferSize);
    inBuffer  = (unsigned char *)malloc(MaxTransferSize);
 
    //
    // seed the random number generator, and set our starting pattern
    //
    srand(TestDlg->m_nSize);
 
    //
    // initialize the pass and error counters
    //
    TestPass=0;
    Errors=0;

     //
    // Set up our event objects
    //
    ReadCompleteEvent = CreateEvent(0,FALSE,FALSE,NULL);
    WriteCompleteEvent = CreateEvent(0,FALSE,FALSE,NULL);
    //
    // main test loop
    //
    while (!gStopTest)//全局變量來決定是否退出測試線程
    {
 
		   // initialize the out buffer
		   for (i=0;i<CurrentTransferSize;i++)
			   outBuffer[i] = rand();
		   // initialize the in buffer
		   memset(inBuffer, 0, MaxTransferSize);
 
          // initialize data structures for the read thread
     
          inBulkControl.pipeNum = InPipeNum;
          inThreadControl.hDevice = hInDevice;
 
          inThreadControl.Ioctl = IOCTL_EZUSB_BULK_READ;
          inThreadControl.InBuffer = (PVOID)&inBulkControl;
          inThreadControl.InBufferSize = sizeof(BULK_TRANSFER_CONTROL);
          inThreadControl.OutBuffer = inBuffer;
          inThreadControl.OutBufferSize = CurrentTransferSize;
 
          inThreadControl.completionEvent = ReadCompleteEvent;
          inThreadControl.status = FALSE;
          inThreadControl.BytesReturned = 0;

          // initialize data structures for the write thread
 
          outBulkControl.pipeNum = OutPipeNum;
          outThreadControl.hDevice = hOutDevice;
 
          outThreadControl.Ioctl = IOCTL_EZUSB_BULK_WRITE;
          outThreadControl.InBuffer = (PVOID)&outBulkControl;
          outThreadControl.InBufferSize = sizeof(BULK_TRANSFER_CONTROL);
          outThreadControl.OutBuffer = outBuffer;
          outThreadControl.OutBufferSize = CurrentTransferSize;
 
          outThreadControl.completionEvent = WriteCompleteEvent;
          outThreadControl.status = FALSE;
          outThreadControl.BytesReturned = 0;
    
 
       // start and wait for transfer threads
		 
	      CWinThread * rd = AfxBeginThread( 
		  TransferThread, // thread function 
		  &inThreadControl); // argument to thread function 
	      inThreadControl.hThread = rd->m_hThread;

		  CWinThread * wt = AfxBeginThread( 
		  TransferThread, // thread function 
		  &outThreadControl); // argument to thread function 
	      outThreadControl.hThread = wt->m_hThread;


          WaitForSingleObject(ReadCompleteEvent,INFINITE);	   
          WaitForSingleObject(WriteCompleteEvent,INFINITE);
 
		   // if either the read or write failed, we want to stop the test
		   if (!inThreadControl.status)
		   {
			  TestDlg->m_strOutput+= "Error: Read failed\r\n";

			  TestDlg->m_strOutput+="Dumping OUT packet to file\r\n";
			  dumpfile = fopen("dumpfile.txt","w");
			  for (i=0;i<CurrentTransferSize;i++)
				 fprintf(dumpfile,"%X\n",outBuffer[i]);
			  fclose(dumpfile);

			  binfile = fopen("binfile.bix","wb");
			  fwrite(outBuffer,sizeof(BYTE),CurrentTransferSize,binfile);
			  fclose(binfile);
			  gStopTest = TRUE;
		   }
		   if( !outThreadControl.status)
		   {
			  TestDlg->m_strOutput+= "Error: Write failed\r\n";
			  gStopTest = TRUE;
		   }

		   // verify the data, unless the user has disabled verify data
		   // or this was a write only test.
		   // make sure the correct amount of data was returned
		  if (inThreadControl.BytesReturned != CurrentTransferSize)
		  {
			 sprintf(tempbuff,
					  "Error: Length expected = %d actual = %d\r\n",
					  CurrentTransferSize,
					  inThreadControl.BytesReturned);
			TestDlg->m_strOutput+=tempbuff;

			 Errors++;
		//      gStopTest = TRUE;
		  }
		  // copmpare the buffers
		  for (i=0;i<CurrentTransferSize;i++)
		  {
			 if (inBuffer[i] != outBuffer[i])
			 {
				sprintf(tempbuff,
						 "Error: Data offset 0x%x expected = 0x%x actual = 0x%x\r\n",
						 i,
						 outBuffer[i],
						 inBuffer[i]);
				 TestDlg->m_strOutput+=tempbuff;
				Errors++;
       
			//       gStopTest = TRUE;
			 }
		  }
		  //如果有錯誤發生
		  if (Errors && (gStopTest == TRUE))
		  {
			 TestDlg->m_strOutput+="Dumping Error packet to file\r\n";
			 dumpfile = fopen("dumpfile.txt","w");
			 for (i=0;i<CurrentTransferSize;i++)
				fprintf(dumpfile,"%X\n",outBuffer[i]);
			 fclose(dumpfile);

			 binfile = fopen("binfile.bix","wb");
			 fwrite(outBuffer,sizeof(BYTE),CurrentTransferSize,binfile);
			 fclose(binfile);
		  }

//		  dumpfile = fopen("dumpfile.txt","w");
//		  for (i=0;i<CurrentTransferSize;i++)
//             fprintf(dumpfile,"%X\n",outBuffer[i]);
//           fclose(dumpfile);
       // update pass counter
       TestPass++;
	   TestDlg->m_nError=Errors;
	   TestDlg->m_nTestPass=TestPass;
	   ThreadParam->bUpdate=TRUE;
	}//end while(gstoptest)


	TestDlg->m_nError=Errors;
	TestDlg->m_nTestPass=TestPass;
 
    free(inBuffer);
    free(outBuffer);
    CloseHandle(hInDevice);
    CloseHandle(hOutDevice);
    ThreadParam->bUpdate=TRUE;
	return 0;
}

/////////////////////////////////////////////////////////////////////////////
// CTestDlg dialog




CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestDlg)
	m_strName = _T("");
	m_strOutput = _T("");
	m_nSize = 0;
	m_nTestPass = 0;
	m_nError = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestDlg)
	DDX_Text(pDX, IDC_EDTNAME, m_strName);
	DDX_Text(pDX, IDC_EDTOUTPUT, m_strOutput);
	DDX_Text(pDX, IDC_EDTSIZE, m_nSize);
	DDX_Text(pDX, IDC_EDTPASS, m_nTestPass);
	DDX_Text(pDX, IDC_EDTERROR, m_nError);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
	//{{AFX_MSG_MAP(CTestDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTNLIST, OnBtnlist)
	ON_BN_CLICKED(IDC_BTNCLEAR, OnBtnclear)

	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BTNSPEED, OnBtnspeed)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDlg message handlers

BOOL CTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	m_strName = _T("EZUSB-0");
	m_strOutput = _T("");
	m_nSize =60000;

	HANDLE hDevice;//設備句柄
	UpdateData(FALSE);

	if(!bOpenDriver(&hDevice,m_strName.GetBuffer(m_strName.GetLength())))
	{
		m_strOutput+="打開設備失敗,請檢查設備名是正確\r\n";
	}
	else
	{
		m_strOutput+="打開設備成功\r\n";
	}
	CloseHandle(hDevice);
	
	

	gStopTest=FALSE;

	SetTimer(1, 1000, 0);





    UpdateData(FALSE);	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CTestDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CTestDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


void CTestDlg::OnBtnlist() 
{
   HANDLE  hDevice = NULL;
   ULONG   nBytes;
   char tempbuff[256];
   PUSBD_INTERFACE_INFORMATION pInterfaceInfo;
   PUSBD_PIPE_INFORMATION pPipeInfo;
   ULONG i;
	UCHAR gInterfaceInfo [1024];
	UpdateData(FALSE);

	if(!bOpenDriver(&hDevice,m_strName.GetBuffer(m_strName.GetLength())))
	{
		m_strOutput+="打開設備失敗,請檢查設備名是正確\r\n";
	}

   DeviceIoControl (hDevice,
		IOCTL_Ezusb_GET_PIPE_INFO,
		NULL,
		0,
		&gInterfaceInfo,
		sizeof(gInterfaceInfo),
		&nBytes,
		NULL);

   CloseHandle(hDevice);
	  
   pInterfaceInfo = (PUSBD_INTERFACE_INFORMATION) &gInterfaceInfo;


   m_strOutput+="Pipe  Endpoint  Direction  Type  Size\r\n";
   
   for (i=0;i<pInterfaceInfo->NumberOfPipes;i++)
   {
      pPipeInfo = &pInterfaceInfo->Pipes[i];
      sprintf(tempbuff,"%2d     %2d          %s     %s  %4d",
               i,
               pPipeInfo->EndpointAddress & 0x0F,
               pPipeInfo->EndpointAddress & 0x80 ? "IN " : "OUT",
               PIPE_TYPE_STRINGS[pPipeInfo->PipeType],
               pPipeInfo->MaximumPacketSize);
      m_strOutput+=tempbuff;
	  m_strOutput+="\r\n";

   }
   UpdateData(FALSE);
		
}

void CTestDlg::OnBtnclear() 
{
	m_strOutput="";
	UpdateData(FALSE);
	
}




void CTestDlg::OnTimer(UINT nIDEvent) 
{
	if(m_BulkTest.bUpdate)
	{
		m_BulkTest.bUpdate=FALSE;
		UpdateData(FALSE);   
	}
 	
	CDialog::OnTimer(nIDEvent);
}

void CTestDlg::OnBtnspeed() 
{
	  UpdateData(TRUE);
	  PUCHAR outBuffer = NULL;
	  unsigned long mstep,mlength;
	  double speed;	
      BULK_TRANSFER_CONTROL   outBulkControl;//inBulkControl,
 
      HANDLE hOutDevice=NULL,hInDevice=NULL;
	 
	  char output[256];
	  double mTotal;
	  if (bOpenDriver (&hOutDevice, m_strName.GetBuffer(m_strName.GetLength())) != TRUE)
	  {
		   m_strOutput+="打開設備失敗\r\n";
		   UpdateData(FALSE);
		   return ;
	  }
	  outBuffer=(PUCHAR) malloc(m_nSize);
	  srand(m_nSize);
	  for(ULONG i=0;i<m_nSize;i++)
		  outBuffer[i]=rand();
      BOOLEAN status=FALSE;
	  ULONG BytesReturned=0;
      ULONG nTestCount=100;//共循環測試100次
	  outBulkControl.pipeNum=0;//端點選擇EP2
	  mstep=GetTickCount(); //起始時間
	  for( i=0;i<nTestCount;i++)//多次循環測試
	  {
            status =  DeviceIoControl (hOutDevice,
                                             IOCTL_EZUSB_BULK_WRITE,
                                             (PVOID)&outBulkControl,
                                             sizeof(BULK_TRANSFER_CONTROL),
                                             outBuffer,//輸出緩沖區
                                             m_nSize,//字節數,在對話框中可以設置,60000為較佳值
                                             &BytesReturned,//返回字節數據
											 //這里為了測試速度,沒有測試返回字節數
                                             NULL);	  
	  }
      mlength=GetTickCount();//結束時間

	  if(status==TRUE)
	  {
		mTotal=m_nSize*nTestCount;  
		m_strOutput+="測試成功\r\n";
		mlength-=mstep;
		if ( mlength !=0 ) speed=mTotal/mlength;
		else speed=9999999;
		sprintf( output,"***speed = %10.2f KBytes/Sec, total=%10.2f bytes, time=%ld mS\r\n", speed, mTotal, mlength);
		m_strOutput+=output;

	  }
	  else
	  {
		  m_strOutput+="測試失敗\r\n";
	  }

	  //關閉設備
	  free(outBuffer);
	  CloseHandle(hOutDevice);
	  UpdateData(FALSE);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美不卡123| 国产一区二区三区免费看| 国产一区二区伦理| 视频一区二区欧美| 国产午夜精品在线观看| 天天影视色香欲综合网老头| 亚洲图片欧美一区| 日韩一区二区三区视频在线| 精品一区二区在线播放| 欧美日韩精品免费观看视频| 亚洲国产激情av| 日日夜夜精品视频天天综合网| 日本不卡一区二区三区| av中文字幕在线不卡| 精品国产一区二区三区四区四| 久久一区二区视频| 丝袜美腿成人在线| 亚洲国产精品一区二区久久 | 亚洲欧美一区二区视频| 国产自产高清不卡| 国产亚洲欧美中文| 国产农村妇女精品| 亚洲黄色免费网站| 亚洲一区二区三区国产| 国产主播一区二区三区| 91亚洲国产成人精品一区二三| 亚洲免费在线播放| 日韩午夜电影在线观看| 亚洲成人1区2区| 欧美日韩国产综合一区二区三区| 高清在线观看日韩| 成人性生交大合| 欧美日韩久久久一区| 国产蜜臀97一区二区三区| 理论片日本一区| 蜜乳av一区二区三区| www.在线欧美| 欧美日韩精品是欧美日韩精品| 久久久国产午夜精品| 黄一区二区三区| 日韩成人免费电影| 99精品一区二区三区| 波多野结衣中文字幕一区 | 国产成人啪免费观看软件| 一区二区三区在线免费视频| 欧美日韩一二区| 国产欧美一区二区精品仙草咪| 一区视频在线播放| 久久精品国产成人一区二区三区| 国产精品系列在线播放| 91精品国产综合久久精品麻豆 | 91精品国产综合久久精品性色| 91精品综合久久久久久| 精品一区二区免费看| 欧美高清你懂得| 99久久精品免费看国产| 久久九九久久九九| 蜜桃一区二区三区在线| 精品精品国产高清a毛片牛牛 | 成人动漫视频在线| 精品国内二区三区| 奇米色777欧美一区二区| 亚洲va韩国va欧美va| 欧美一区二区私人影院日本| 一区二区三区中文在线观看| 欧美久久一二区| 国产激情一区二区三区| 性久久久久久久久久久久| 中文字幕不卡三区| 日韩一区日韩二区| 亚洲另类在线制服丝袜| 波多野结衣的一区二区三区| 日韩精品亚洲一区| 午夜精品福利久久久| 中文字幕亚洲一区二区va在线| 国产午夜亚洲精品不卡 | 91丨porny丨蝌蚪视频| 国产成人精品aa毛片| 亚洲欧美国产77777| 欧美一区二区三区视频| 精品理论电影在线观看| 久久不见久久见中文字幕免费| 日本欧美大码aⅴ在线播放| 国产精品亲子伦对白| 日韩免费观看2025年上映的电影| 国产精品一区一区| 三级不卡在线观看| 一区二区三区精品视频在线| 亚洲欧洲成人自拍| 亚洲成人777| 日本不卡一二三| 亚洲一区国产视频| 日韩专区中文字幕一区二区| 国内外成人在线视频| 另类欧美日韩国产在线| 国产91对白在线观看九色| 色综合久久久网| 91一区二区三区在线观看| 久久精品国产澳门| 亚洲日本在线a| 亚洲欧洲制服丝袜| 亚洲成国产人片在线观看| 一区二区国产视频| 国产寡妇亲子伦一区二区| 本田岬高潮一区二区三区| av一区二区三区| 中文字幕一区三区| 琪琪一区二区三区| 777xxx欧美| 日韩中文字幕91| 一本色道久久综合亚洲aⅴ蜜桃| 欧美一级淫片007| 国产美女视频一区| 欧美一级欧美三级在线观看| 日韩免费在线观看| 日韩欧美国产一二三区| 欧美视频中文字幕| 久久av资源站| www.欧美精品一二区| 欧美视频一区二区三区在线观看| 一区二区三区四区蜜桃| 欧美日韩一区二区三区在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 粉嫩av一区二区三区| 91精品国产91热久久久做人人| 亚洲三级电影网站| 成人精品视频一区二区三区| 久久中文娱乐网| 国产二区国产一区在线观看| 日本一区二区三区dvd视频在线| 国产精品午夜电影| 亚洲欧美日韩久久精品| 日韩精品一区第一页| 欧美人伦禁忌dvd放荡欲情| 亚洲va国产va欧美va观看| 欧美日韩在线精品一区二区三区激情 | 在线看国产一区二区| 日韩不卡一二三区| 亚洲精品你懂的| 国产日产精品1区| 成人动漫一区二区在线| 极品尤物av久久免费看| 亚洲一二三四区不卡| 国产一区啦啦啦在线观看| 日韩精品一区二区三区在线| 欧美剧情片在线观看| 久久99精品久久久久| 一区二区三区在线观看国产| 99久久精品99国产精品| 亚洲女同ⅹxx女同tv| 久久亚洲综合色| 91麻豆精品91久久久久同性| 欧美视频在线一区二区三区| 久久99精品国产麻豆婷婷洗澡| 天堂成人免费av电影一区| **性色生活片久久毛片| 日韩三区在线观看| 久久精品视频在线免费观看| 韩国三级在线一区| 精品一区二区三区在线视频| 亚洲自拍偷拍九九九| 樱桃国产成人精品视频| 免费不卡在线视频| 国产一区美女在线| caoporn国产一区二区| 国产精品美日韩| 洋洋av久久久久久久一区| 国产丝袜美腿一区二区三区| 亚洲激情图片小说视频| 亚洲123区在线观看| 精品一区二区三区影院在线午夜| 美女视频黄a大片欧美| 国产精品一区久久久久| 91在线你懂得| 久久久国产精品麻豆| 亚洲一区二区三区四区在线免费观看 | 国内一区二区在线| 在线欧美日韩国产| 91视频免费观看| 欧美国产激情二区三区| 免费看精品久久片| 欧美日韩激情一区| 亚洲欧美日韩久久| 极品少妇xxxx偷拍精品少妇| 在线观看日韩电影| 亚洲视频香蕉人妖| 国产成a人亚洲| 欧美一区二区三区人| 亚洲va欧美va国产va天堂影院| 97精品久久久久中文字幕| 精品国产一区二区三区av性色| 国产精品国模大尺度视频| 日日摸夜夜添夜夜添国产精品 | 国产成人av一区二区三区在线 | 91精品免费观看| 中文字幕一区二区三区四区不卡| 日日夜夜精品免费视频| 91性感美女视频| 亚洲乱码一区二区三区在线观看| 亚洲黄色在线视频|