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

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

?? testdlg.cpp

?? 采用EZ-USB GPD開發的USB FIFO測試程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
 #include "stdafx.h"
#include "Test.h"
#include "TestDlg.h"

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

#include <math.h>

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


double m_ntime;//時間
double m_nRt,nT1; 
ULONG mTmp;

UINT m_nSize;
BYTE tempBuf[6144000];//100*60KB 用來保存讀取過來的數據
CString strDevname;//設備名,在initDialog函數中初始化
BOOL gStopRead;//讀數據和顯示線程啟動和結束全局標志
BOOL gStopBulk;//批量循環讀寫測試啟動和結束全局標志 TRUE結束   FALSE啟動
WORD InUserRegion[1024*1024];
HANDLE ReadEvent ;
HANDLE hEvent;

/*
打開設備 
*/
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);
   } 
}
BOOL Reset_Device()
{
	BOOL bResult=FALSE;
	BOOL bDir=DIR_OUT;
	UCHAR VendNo=0xb3;
	UCHAR pBuffer[10];
	HANDLE hDevice;
	ULONG ncnt;
	ncnt=10;
	if (!bOpenDriver (&hDevice, strDevname.GetBuffer(strDevname.GetLength())))
	{
		return FALSE;
	}
	for(ULONG i=0;i<ncnt;i++);//復位設備參數
		pBuffer[i]=0xff;
	bResult=Vend_request(hDevice,VendNo,bDir,pBuffer,ncnt);
	CloseHandle(hDevice);

	return bResult;
}
/*
讀寫線程函數,改變因為讀寫堵塞而使程序死機
*/
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;
}

/*
固件廠商請求
發出請求初始化參數
*/
BOOL Vend_request(HANDLE hDevice,UCHAR VendNo,BOOL bDir,UCHAR*pdat,ULONG ncnt)
{
	if (hDevice==NULL) {
		return FALSE;
	}
	THREAD_CONTROL VendthreadControl;
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;  
	HANDLE VendCompleteEvent=NULL;
	VendCompleteEvent = CreateEvent(0,FALSE,FALSE,NULL);
	myRequest.requestType=0x02; // request type (1=class, 2=vendor)
	myRequest.recepient=0x00; // recipient (0=device,1=interface,2=endpoint,3=other)
	myRequest.request = VendNo;//0xb3;//請求號
	myRequest.value = 0x00;
	myRequest.index = 0x00;
	myRequest.direction =bDir;//0x01;//IN transfer direction (0=host to device, 1=device to host)
	VendthreadControl.hDevice=hDevice;
	VendthreadControl.Ioctl=IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST;
	VendthreadControl.InBuffer=(PVOID)&myRequest;
	VendthreadControl.InBufferSize=sizeof(myRequest);
	VendthreadControl.OutBuffer=pdat;
	VendthreadControl.OutBufferSize=ncnt;
	VendthreadControl.status=FALSE;
	VendthreadControl.completionEvent=VendCompleteEvent;
	VendthreadControl.BytesReturned = 0;
	// start and wait for transfer threads
	CWinThread * TestVend = AfxBeginThread( 
		TransferThread, // thread function 
		&VendthreadControl); // argument to thread function 
		VendthreadControl.hThread = TestVend->m_hThread;
    //等待請求回應
	WaitForSingleObject(VendCompleteEvent,INFINITE);	
	return VendthreadControl.status;
}
/*
批量循環測試
先EP2OUT發送1K數據,
再EP6IN接收1K數據,
同時將發送和接收進行數據比較
*/
UINT BulkThread(
  void * pParam  // thread data
)
{
    CThreadParam*  ThreadParam;
	CTestDlg* TestDlg;

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

	LARGE_INTEGER lTime;
	LONGLONG lT1,lT2;
	double dfFreq,dfMinus;



    ULONG  i;
    BULK_TRANSFER_CONTROL   inBulkControl,outBulkControl;
    THREAD_CONTROL inThreadControl,outThreadControl;
    char tempbuff[256];


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

    if (bOpenDriver (&hInDevice, strDevname.GetBuffer(strDevname.GetLength())) != TRUE)
    {
       TestDlg->m_strOutput+="打開設備失敗,測試線程結束\r\n";
	   ThreadParam->bUpdate=TRUE;
       return 0;
    }
    if (bOpenDriver (&hOutDevice, strDevname.GetBuffer(strDevname.GetLength())) != TRUE)
    {
       TestDlg->m_strOutput+="打開設備失敗\r\n";
	   ThreadParam->bUpdate=TRUE;
       return 0;
    }
 
    InPipeNum=1;//輸入批量端點號
	OutPipeNum=0;//輸出批量端點號

    sprintf(tempbuff,"IN PIPE = %d OUT PIPE = %d\r\n",InPipeNum,OutPipeNum);
	ThreadParam->bUpdate=TRUE;
	TestDlg->m_strOutput+=tempbuff;
  
    CurrentTransferSize = m_nSize;
    outBuffer = (unsigned char *)malloc(CurrentTransferSize);
    inBuffer  = (unsigned char *)malloc(CurrentTransferSize);

    TestPass=0;
    Errors=0;

    ReadCompleteEvent  = CreateEvent(0,FALSE,FALSE,NULL);
    WriteCompleteEvent = CreateEvent(0,FALSE,FALSE,NULL);

    while (!gStopBulk)//全局變量來決定是否退出測試線程
    {
 
		   // initialize the out buffer
		   for (i=0;i<CurrentTransferSize;i++)
			   outBuffer[i] = (UCHAR)i;
		   // initialize the in buffer
		   memset(inBuffer, 0, CurrentTransferSize);
          // 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;
    
		  QueryPerformanceFrequency(&lTime);
		  dfFreq=(double)lTime.QuadPart;
		  //nTime=GetTickCount(); //起始時間
		  QueryPerformanceCounter(&lTime);
		  lT1=lTime.QuadPart;


       // start and wait for transfer threads
		  CWinThread * wt = AfxBeginThread( 
		  TransferThread, // thread function 
		  &outThreadControl); // argument to thread function 
	      outThreadControl.hThread = wt->m_hThread;	
		  
	      CWinThread * rd = AfxBeginThread( 
		  TransferThread, // thread function 
		  &inThreadControl); // argument to thread function 
	      inThreadControl.hThread = rd->m_hThread;
		  
		  WaitForSingleObject(WriteCompleteEvent,INFINITE);

          WaitForSingleObject(ReadCompleteEvent,INFINITE);	

		  //m_ntime=GetTickCount()-ntime; //起始時間
		  QueryPerformanceCounter(&lTime);
		  lT2=lTime.QuadPart;
		  dfMinus=(double)(lT2-lT1);
		  m_ntime=(dfMinus/dfFreq)*1000.0;

          
 
		   // if either the read or write failed, we want to stop the test
		   if (!inThreadControl.status)
		   {
			  TestDlg->m_strOutput+= "循環讀寫測試錯誤:讀失敗\r\n";
			  gStopBulk = TRUE;
		   }
		   if( !outThreadControl.status)
		   {
			  TestDlg->m_strOutput+= "循環讀寫測試錯誤:寫失敗\r\n";
			  gStopBulk = 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,
					  "循環讀寫測試錯誤: 期望返回數據長度 = %d 實際數據長度 = %d\r\n",
					  CurrentTransferSize,
					  inThreadControl.BytesReturned);
			 TestDlg->m_strOutput+=tempbuff;

			 Errors++;
			 gStopBulk = TRUE;
		  }
		  // copmpare the buffers
		  for (i=0;i<CurrentTransferSize;i++)
		  {
			 if (inBuffer[i] != outBuffer[i])
			 {
				sprintf(tempbuff,
						 "循環讀寫測試錯誤: 數據偏移 0x%x 寫出數據 = 0x%x 讀入數據 = 0x%x\r\n",
						 i,
						 outBuffer[i],
						 inBuffer[i]);
				 TestDlg->m_strOutput+=tempbuff;
				 Errors++;
			     gStopBulk = TRUE;
			 }
		  }
       // update pass counter
       TestPass++;
	   TestDlg->m_nError=Errors;
	   TestDlg->m_nTestPass=TestPass;
	   ThreadParam->bUpdate=TRUE;
	}//end while(gStopBulk)


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


//讀數據線程
UINT ReadThread(
  void * pParam  // thread data
)
{
    CThreadParam*  ThreadParam;
	CTestDlg* TestDlg;
    HANDLE  hInDevice = NULL;
    PUCHAR inBuffer = NULL;
    ULONG CurrentTransferSize;
    ULONG InPipeNum;
    ULONG TestPass=0;
    ULONG Errors=0;
    //ULONG  i;
	ULONG  nCount=0; 
    BULK_TRANSFER_CONTROL   inBulkControl;
    THREAD_CONTROL inThreadControl;
    // WORD nData[61440];//最大數據大小

	
    //得到線程參數
	ThreadParam=(CThreadParam *)pParam;
	TestDlg=ThreadParam->testDlg;
    //打開設備
    if (bOpenDriver (&hInDevice, strDevname.GetBuffer(strDevname.GetLength())) != TRUE)
    {
       TestDlg->m_strOutput+="打開設備失敗,測試線程結束\r\n";
	   ThreadParam->bUpdate=TRUE;
       return 0;
    }
    //進行數據傳輸
    InPipeNum=1;//端點6,EP6IN
    CurrentTransferSize = m_nSize;
	//CurrentTransferSize=1024000;
    inBuffer  = (unsigned char *)malloc(CurrentTransferSize);
    // initialize the pass and error counters
    TestPass=0;
    Errors=0;

	BOOL bFirst = TRUE;
	WORD wLast = 0;

	nT1=GetTickCount();//程序啟動初始化時間

    while (!gStopRead)//全局變量來決定是否退出測試線程
    {
		  // initialize the in buffer
		  //memset(inBuffer, 0, CurrentTransferSize);
          // 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.status = FALSE;
          inThreadControl.BytesReturned = 0;

		  
		  inThreadControl.status = DeviceIoControl (inThreadControl.hDevice,
			  inThreadControl.Ioctl,
			  inThreadControl.InBuffer,
			  inThreadControl.InBufferSize,
			  inThreadControl.OutBuffer,
			  inThreadControl.OutBufferSize,
			  &inThreadControl.BytesReturned,
			  NULL);
	   
		   // 如果發生錯誤,停止數據傳輸
		   if ((!inThreadControl.status)||(inThreadControl.BytesReturned != CurrentTransferSize))
		   {
			  TestDlg->m_strOutput+= "Error: Read failed\r\n";
			  Errors++;
			  gStopRead = TRUE;
		   }
	
			CopyMemory(InUserRegion, inBuffer, m_nSize);
			//拷貝數據緩沖,拷貝數據將花費一段時間,可注釋該語句,測試傳輸速度
			SetEvent(hEvent);	 
			
			// update pass counter
			TestPass++;
			TestDlg->m_nError=Errors;
			TestDlg->m_nTestPass=TestPass;
			ThreadParam->bUpdate=TRUE;
       
	}//end while(gStopRead)

	TestDlg->m_nError=Errors;
	TestDlg->m_nTestPass=TestPass;

    free(inBuffer);
    CloseHandle(hInDevice);
    ThreadParam->bUpdate=TRUE;
	return 0;
}

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

CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDlg::IDD, pParent)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产免费成人在线视频| 成人精品视频一区二区三区尤物| 国产在线精品视频| 91福利在线导航| 国产婷婷精品av在线| 亚洲 欧美综合在线网络| 成人av电影在线| 久久久久久免费毛片精品| 日韩精品亚洲一区| 欧美影片第一页| 综合亚洲深深色噜噜狠狠网站| 精品一区二区三区久久久| 正在播放一区二区| 亚洲与欧洲av电影| 91免费国产在线观看| 国产精品久久久久久久久免费丝袜| 久久国产视频网| 91精品国产91久久久久久最新毛片| 亚洲欧美日韩国产另类专区| 国产91丝袜在线播放0| 久久综合色播五月| 狠狠色综合日日| 91精品欧美一区二区三区综合在| 香蕉av福利精品导航| 欧美性xxxxx极品少妇| 亚洲图片欧美综合| 欧美日韩国产综合视频在线观看 | 日本精品视频一区二区三区| 国产精品乱码一区二区三区软件 | 人人超碰91尤物精品国产| 欧美系列一区二区| 三级久久三级久久| 欧美福利电影网| 视频精品一区二区| 日韩三级精品电影久久久| 久久激五月天综合精品| 久久网站热最新地址| 国产乱一区二区| 国产精品美女久久久久久久久| av不卡一区二区三区| 亚洲色图清纯唯美| 欧洲精品一区二区三区在线观看| 亚洲午夜久久久久中文字幕久| 欧美精品久久天天躁| 青青草原综合久久大伊人精品 | 国产精品影视在线观看| 国产精品婷婷午夜在线观看| 99精品视频在线播放观看| 一区二区三区在线观看网站| 欧美日韩高清在线| 国内精品伊人久久久久影院对白| 中文字幕免费观看一区| 91福利社在线观看| 免费在线看成人av| 国产欧美一区二区在线观看| 91丨九色丨国产丨porny| 午夜a成v人精品| 国产亚洲精品7777| 欧美三级在线视频| 国产精品正在播放| 一区av在线播放| 337p日本欧洲亚洲大胆精品| 色综合久久中文字幕| 久久激情综合网| 亚洲免费成人av| 2023国产精品自拍| 日本丶国产丶欧美色综合| 裸体一区二区三区| 亚洲欧美综合色| 欧美tk丨vk视频| 欧美视频完全免费看| 国产精品911| 日韩电影免费在线观看网站| 中文字幕在线观看不卡视频| 欧美一区二区美女| 色婷婷av一区二区三区大白胸 | 美女任你摸久久| 亚洲欧美激情一区二区| 精品欧美久久久| 欧美日韩一区三区四区| jlzzjlzz欧美大全| 美女一区二区在线观看| 一区二区三区四区精品在线视频| 精品国产一区二区三区忘忧草| 欧美在线观看18| 国产91对白在线观看九色| 青青草97国产精品免费观看| 亚洲色图制服诱惑 | 日韩成人午夜电影| 亚洲欧美日韩国产手机在线| 国产欧美中文在线| 久久婷婷久久一区二区三区| 9191成人精品久久| 91黄色激情网站| 成人国产电影网| 国产精品123| 国产一区二区0| 奇米色一区二区三区四区| 亚洲国产va精品久久久不卡综合| 亚洲欧美另类小说| 亚洲天堂av一区| 国产精品三级av在线播放| 久久久精品综合| 国产亚洲污的网站| 国产欧美一区二区三区网站| 久久精品网站免费观看| 久久精品亚洲精品国产欧美| 久久这里只有精品视频网| 亚洲精品在线三区| 久久亚洲综合色一区二区三区 | 夜夜嗨av一区二区三区中文字幕| 亚洲国产精品高清| 国产精品久久夜| 亚洲天堂成人在线观看| 18成人在线视频| 一区二区三区美女| 天天爽夜夜爽夜夜爽精品视频| 偷窥少妇高潮呻吟av久久免费| 视频在线观看91| 久久成人久久爱| 国产夫妻精品视频| 91视频在线看| 91黄视频在线| 日韩西西人体444www| 精品日韩在线观看| 国产日韩影视精品| 一区二区在线观看视频| 同产精品九九九| 国产精品一二三四| 91色.com| 欧美丰满高潮xxxx喷水动漫| 欧美大胆一级视频| 欧美国产成人在线| 一区二区三区欧美激情| 丝袜诱惑制服诱惑色一区在线观看 | 久久综合av免费| **欧美大码日韩| 水蜜桃久久夜色精品一区的特点 | 久久爱www久久做| www.视频一区| 欧美日韩在线三区| 久久精品人人爽人人爽| 亚洲精品水蜜桃| 六月丁香婷婷色狠狠久久| 成人97人人超碰人人99| 欧美精选在线播放| 欧美激情一区三区| 亚洲成av人影院| 国产99久久精品| 欧美日韩久久久一区| 久久久亚洲高清| 午夜欧美在线一二页| 丰满少妇在线播放bd日韩电影| 欧美亚洲综合一区| 欧美极品少妇xxxxⅹ高跟鞋| 日韩av一区二区在线影视| 9人人澡人人爽人人精品| 日韩欧美亚洲一区二区| 一区二区三区四区蜜桃| 国产精品99久久久久久有的能看 | 欧美日韩中文另类| 久久精品视频一区二区| 亚洲成人免费看| 不卡欧美aaaaa| 久久亚洲精品小早川怜子| 天天亚洲美女在线视频| 92国产精品观看| 欧美精品一区二区在线观看| 天堂一区二区在线免费观看| 91在线观看一区二区| 久久综合狠狠综合久久综合88| 亚洲成人黄色小说| 色综合欧美在线| 国产精品久久一卡二卡| 狠狠色2019综合网| 5858s免费视频成人| 亚洲欧美在线aaa| 国产69精品久久久久毛片 | 亚洲成人精品影院| 91看片淫黄大片一级在线观看| 久久这里只有精品6| 美国十次了思思久久精品导航| 欧美人伦禁忌dvd放荡欲情| 日韩伦理免费电影| 成人av网站在线观看免费| 国产视频亚洲色图| 国产一区91精品张津瑜| 欧美成人一级视频| 伦理电影国产精品| 欧美sm美女调教| 狠狠色丁香久久婷婷综合_中| 日韩一级欧美一级| 无码av中文一区二区三区桃花岛| 欧美熟乱第一页| 午夜精品久久久久久久久| 777午夜精品视频在线播放| 香蕉久久夜色精品国产使用方法| 欧美乱妇15p| 免费在线视频一区| 精品精品国产高清a毛片牛牛|