亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一区二区视频在线看| 欧美日韩一区二区在线观看 | 男人的天堂亚洲一区| 亚洲福中文字幕伊人影院| 午夜久久久久久久久| 免费看欧美女人艹b| 国产成人午夜精品5599| 成人在线视频一区| 91久久久免费一区二区| 在线播放亚洲一区| 久久久精品影视| 一区二区三区国产精品| 蜜臀91精品一区二区三区| 丰满少妇在线播放bd日韩电影| 亚洲不卡一区二区三区| 美女免费视频一区二区| 免费看欧美女人艹b| 成人做爰69片免费看网站| 欧美日韩一区二区不卡| 国产午夜精品久久| 日精品一区二区| av综合在线播放| 精品久久久久av影院| 亚洲女厕所小便bbb| 国产精品1区二区.| 精品国产a毛片| 亚洲bt欧美bt精品| 欧美三级韩国三级日本三斤| 国产欧美一区二区精品性色超碰 | 国产成人自拍网| 日韩免费一区二区| 麻豆精品在线视频| 99久久国产综合精品色伊| 欧美一区二区三区免费在线看| 一区二区三区日本| 欧洲一区在线观看| 午夜精品视频一区| 欧美精品久久一区| 午夜电影一区二区三区| 欧美高清视频在线高清观看mv色露露十八| 中文字幕亚洲欧美在线不卡| 久久99国产精品久久| 精品免费国产一区二区三区四区| 青草国产精品久久久久久| 欧美日韩一区不卡| 日韩av电影免费观看高清完整版 | 色哟哟精品一区| 亚洲日本在线看| 欧美日韩精品一二三区| 美女网站在线免费欧美精品| 精品999久久久| 99精品久久久久久| 亚洲国产cao| 国产免费观看久久| 色综合视频在线观看| 免费xxxx性欧美18vr| 中文字幕第一区综合| 99久久精品国产观看| 日韩欧美的一区| 色婷婷亚洲婷婷| 精久久久久久久久久久| 欧美日本一区二区三区四区| 久久精品二区亚洲w码| 一区在线观看视频| 欧美tickle裸体挠脚心vk| 伦理电影国产精品| 国产精品理伦片| 精品精品国产高清a毛片牛牛| 99视频一区二区三区| 激情综合网激情| 日韩中文字幕1| 亚洲成人av福利| 亚洲伦理在线免费看| 国产精品午夜在线| 亚洲国产高清aⅴ视频| 欧美视频三区在线播放| 99在线视频精品| www.亚洲精品| av电影天堂一区二区在线 | 在线欧美一区二区| 一本久久a久久免费精品不卡| 成人av免费网站| 成人黄色小视频| 国产在线视频一区二区三区| 亚洲另类色综合网站| 亚洲精品成人悠悠色影视| 国产精品日韩精品欧美在线| 制服丝袜国产精品| 国产在线国偷精品产拍免费yy| 日韩1区2区3区| 一区二区在线观看不卡| 亚洲成av人片| 奇米亚洲午夜久久精品| 国产乱子伦一区二区三区国色天香 | 精品99一区二区| 国产精品国产三级国产| 夜夜嗨av一区二区三区中文字幕| 亚洲一区免费观看| 精品一区二区综合| 色婷婷综合久色| 亚洲国产一区二区在线播放| 久久青草欧美一区二区三区| 久久精品一区二区三区四区| 国产精品美女久久久久av爽李琼| 椎名由奈av一区二区三区| 国产精品福利电影一区二区三区四区| 中文字幕日本不卡| 婷婷夜色潮精品综合在线| 蜜桃一区二区三区四区| a级精品国产片在线观看| 欧美精选一区二区| 国产精品欧美一区二区三区| 一区二区三区精品在线| 国产精品中文有码| 日本三级亚洲精品| 韩国精品久久久| 成人av手机在线观看| 欧美色中文字幕| 国产欧美日本一区视频| 日本麻豆一区二区三区视频| 99麻豆久久久国产精品免费| 精品国产青草久久久久福利| 午夜精品在线看| 欧美午夜片在线观看| 亚洲免费电影在线| av不卡在线播放| 最好看的中文字幕久久| 国产乱码一区二区三区| 欧美偷拍一区二区| 亚洲精品国产一区二区三区四区在线| 丁香婷婷综合色啪| 国产精品欧美一区二区三区| 99精品欧美一区| 一区二区三区精品久久久| 在线亚洲高清视频| 五月婷婷另类国产| 日韩免费在线观看| 国产丶欧美丶日本不卡视频| 国产欧美精品一区二区色综合朱莉 | 99re这里都是精品| 亚洲免费视频成人| 色偷偷成人一区二区三区91 | 琪琪一区二区三区| 精品国产一区二区三区四区四 | 亚洲欧美福利一区二区| 高清av一区二区| 久久精品国产精品亚洲精品| av在线这里只有精品| 国产日韩v精品一区二区| 日本aⅴ精品一区二区三区 | 国产精品狼人久久影院观看方式| 久久国产生活片100| 欧美日韩一区久久| 五月天中文字幕一区二区| 日本不卡一区二区三区| 97超碰欧美中文字幕| 亚洲精品在线观看网站| 精品一区二区三区影院在线午夜| 欧美日韩美少妇| 视频一区二区欧美| 欧美人妇做爰xxxⅹ性高电影| 亚洲一级在线观看| 欧美视频在线一区二区三区 | 亚洲精品第一国产综合野| 色婷婷综合久色| 亚洲高清免费在线| 精品国产成人在线影院| 国产成人在线视频网址| 亚洲精品免费在线| 911精品产国品一二三产区| 美女视频网站黄色亚洲| 日韩一区二区三区精品视频| 日本女人一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 在线亚洲精品福利网址导航| 蜜臀va亚洲va欧美va天堂| 国产欧美视频一区二区| 欧美电影影音先锋| 国产成人精品一区二区三区网站观看| 一区二区三区四区视频精品免费| 成人免费视频免费观看| 日产国产欧美视频一区精品| 国产欧美一区二区精品忘忧草| 日本乱人伦aⅴ精品| 国产一区高清在线| 久久国内精品视频| 亚洲香蕉伊在人在线观| 国产精品成人免费| 国产欧美日韩久久| 日韩亚洲欧美高清| 欧美一激情一区二区三区| 欧美亚洲图片小说| 欧美性大战久久久| 91丝袜美腿高跟国产极品老师 | 成a人片亚洲日本久久| 激情综合网天天干| 国产大片一区二区| 国产成人8x视频一区二区 | 国产成人免费视频一区| 国产一区欧美二区|