⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xugy03dlg.cpp

📁 phillips usb d12的应用程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			else
			{
				ulCount++;
				threadParam->ulCount += nBytes;
				if ((time1-time0-1) > 0)
				{
					threadParam->cur_rate = ((nBytes * 1000)
						/(time1 - time0 - 1));
					if (threadParam->cur_rate > threadParam->max_rate)
						threadParam->max_rate = threadParam->cur_rate;
					threadParam->total_time += time1-time0-1;
					threadParam->bUpdate = TRUE;
				}
				else
				{
					if(nBytes > 0)
					{
						threadParam->cur_rate = (nBytes * 1000) / 1;
						if (threadParam->cur_rate > threadParam->max_rate)
							threadParam->max_rate = threadParam->cur_rate;
						threadParam->total_time ++;
						threadParam->bUpdate = TRUE;
					}
				}
			}

		} while(threadParam->bInThread);
	
	}
	}
	CloseHandle(hDevice);
	CloseHandle(hFile);
	free(threadParam->pcIoBuffer);
	threadParam->pcIoBuffer = NULL;
	testDlg->m_OutStartBtn.EnableWindow(TRUE);
	testDlg->m_OutStopBtn.EnableWindow(FALSE);
	return 0;
}

UINT ReadWrite(void * pParam)
{
//	MessageBox(NULL, "这是ReadWrite", "Woo提示:", 0);
	char temp[80],cc[80];
	BOOLEAN bResult = FALSE;
	ULONG nBytes = 0, ulCount = 0, index;
	ULONG pass = 0, fail = 0, repeat, i, cnt, seq;
	struct CThreadParam *threadParam;
	CXugy03Dlg *testDlg;
	unsigned char rNum;
	HANDLE hRead, hWrite, hDevice;
	unsigned char *iobuf;
	IO_BLOCK ioBlock;
	IO_REQUEST ioRequest;

	threadParam =(struct CThreadParam *) pParam;
	threadParam->bInThread = FALSE;
	testDlg = threadParam->testDlg;
	threadParam->bUpdate = FALSE;

	hRead = open_file(threadParam->pipe_name);
	if(hRead == INVALID_HANDLE_VALUE)
	{
		strcpy(temp, "hRead = open_file 错误");
		strcat(temp, threadParam->pipe_name);
		testDlg->MessageBox((LPCSTR)temp, "ReadWrite");
		testDlg->m_LoopStartBtn.EnableWindow(TRUE);
		testDlg->m_LoopStopBtn.EnableWindow(FALSE);
		return   0;
	}
	
	threadParam->pipe_name[5] +=1;
	hWrite = open_file(threadParam->pipe_name);
	if(hWrite == INVALID_HANDLE_VALUE)
	{
		CloseHandle(hRead);
		strcpy(temp, "hWrite = open_file 错误");
		strcat(temp, threadParam->pipe_name);
		testDlg->MessageBox((LPCSTR)temp, "ReadWrite");
		testDlg->m_LoopStartBtn.EnableWindow(TRUE);
		testDlg->m_LoopStopBtn.EnableWindow(FALSE);
		return   0;
	}

	hDevice = open_dev();
	if(hDevice == INVALID_HANDLE_VALUE)
	{
		CloseHandle(hRead);
		CloseHandle(hWrite);
		strcpy(temp, "hDevice = open_dev 错误");
		strcat(temp, threadParam->pipe_name);
		testDlg->MessageBox((LPCSTR)temp, "ReadWrite");
		testDlg->m_LoopStartBtn.EnableWindow(TRUE);
		testDlg->m_LoopStopBtn.EnableWindow(FALSE);
		return   0;
	}

	threadParam->pcIoBuffer = (unsigned char *)
		malloc(threadParam->uiLength + 16);
	if(threadParam->pcIoBuffer == NULL)
	{
		CloseHandle(hRead);
		CloseHandle(hWrite);
		strcpy(temp, "内存分配错误");
		strcat(temp, "threadParam->pcIoBuffer");
		testDlg->MessageBox((LPCSTR)temp, "ReadWrite");
		testDlg->m_LoopStartBtn.EnableWindow(TRUE);
		testDlg->m_LoopStopBtn.EnableWindow(FALSE);
		return   0;
	}

	threadParam->ulCount = 0;
	threadParam->ulData[0] = 0;
	threadParam->ulData[1] = 0;

	iobuf = (unsigned char *) 
		malloc (threadParam->uiLength + 16);
	if(iobuf == NULL)
	{
		free(threadParam->pcIoBuffer);
		threadParam->pcIoBuffer = NULL;
		CloseHandle(hRead);
		CloseHandle(hWrite);
		strcpy(temp, "内存分配错误");
		strcat(temp, "iobuf");
		testDlg->MessageBox((LPCSTR)temp, "ReadWrite");
		testDlg->m_LoopStartBtn.EnableWindow(TRUE);
		testDlg->m_LoopStopBtn.EnableWindow(FALSE);
		return   0;
	}
	 
	if((hRead != INVALID_HANDLE_VALUE)
		&&(hWrite != INVALID_HANDLE_VALUE))
	{
		int buffLen;
		buffLen = threadParam->uiLength - sizeof(ulCount);
		threadParam->bInThread = TRUE;
		repeat = threadParam->ulData[2];
		for (i = 0; (i < repeat) && (threadParam->bInThread); i++)
		{
			if(buffLen > 0)
			{	
				rNum = 0;
				for(index = 0; index < threadParam->uiLength; index++)
					*(threadParam->pcIoBuffer + index) = rNum++;
				cnt = threadParam->uiLength / 64;
				for(index = 0; index < cnt; index++)
				{
					seq = ulCount * cnt + index;
					memcpy(threadParam->pcIoBuffer + index * 64, &seq,
						min(sizeof(ulCount), threadParam->uiLength));
				}
			}
			
			ioRequest.uAddressL = 0;
			ioRequest.bAddressH = 0;
			ioRequest.uSize = threadParam->uiLength;
			ioRequest.bCommand = 0x80;      //start, write
			ioBlock.uOffset = 0;
			ioBlock.uLength = sizeof(IO_REQUEST);
			ioBlock.pbyData = (PUCHAR)&ioRequest;
			ioBlock.uIndex = SETUP_DMA_REQUEST;

			bResult = DeviceIoControl(hDevice,
				IOCTL_WRITE_REGISTERS,
				(PVOID)&ioBlock,
				sizeof(IO_BLOCK),
				NULL,
				0,
				&nBytes,
				NULL);
			if(!bResult)
			{
				threadParam->bInThread = FALSE;
				strcpy(temp, "DeviceIoControl write 错误");
				strcat(temp, threadParam->pipe_name);
				testDlg->MessageBox((LPCSTR)temp, "ReadWrite");
				break;
			}

			bResult = WriteFile(hWrite,
				threadParam->pcIoBuffer,
				threadParam->uiLength,
				&nBytes,
				NULL);
			if(!bResult)
			{
				DeviceIoControl(hWrite,
					IOCTL_D12_RESET_PIPE,
					0, 0, 0, 0,
					&nBytes,
					NULL);
				wsprintf(cc, "DeviceIoControl写错误");
				strcat(cc, threadParam->pipe_name);
				testDlg->MessageBox((LPCSTR)cc, "ReadWrite");
			}

			if (1 == repeat)
				CloseHandle(hWrite);

			ioRequest.uAddressL = 0;
			ioRequest.bAddressH = 0;
			ioRequest.uSize = threadParam->uiLength;
			ioRequest.bCommand = 0x81;      //start, read
			ioBlock.uOffset = 0;
			ioBlock.uLength = sizeof(IO_REQUEST);
			ioBlock.pbyData = (PUCHAR)&ioRequest;
			ioBlock.uIndex = SETUP_DMA_REQUEST;

			bResult = DeviceIoControl(hDevice,
				IOCTL_WRITE_REGISTERS,
				(PVOID)&ioBlock,
				sizeof(IO_BLOCK),
				NULL,
				0,
				&nBytes,
				NULL);
			if(!bResult)
			{
				threadParam->bInThread = FALSE;
				strcpy(temp, "DeviceIoControl Read 错误");
				strcat(temp, threadParam->pipe_name);
				testDlg->MessageBox((LPCSTR)temp, "ReadWrite");
				break;
			}

			bResult = ReadFile(hRead,
				iobuf,
				threadParam->uiLength,
				&nBytes,
				NULL);
			if(!bResult)
			{
				DeviceIoControl(hRead,
					IOCTL_D12_RESET_PIPE,
					0, 0, 0, 0,
					&nBytes,
					NULL);
				wsprintf(cc, "DeviceIoControl读错误");
				strcat(cc, threadParam->pipe_name);
				testDlg->MessageBox((LPCSTR)cc, "ReadWrite");
			}

			if (1 == repeat)
				CloseHandle(hRead);

			if(!memcmp(threadParam->pcIoBuffer, iobuf, threadParam->uiLength))
				pass++;
			else
				fail++;

			threadParam->ulData[0] = pass;
			threadParam->ulData[1] = fail;

			ulCount++;
			threadParam ->ulCount += nBytes;
			threadParam ->bUpdate = TRUE;
		}
	}
	
	if (repeat != 1)
	{
		CloseHandle(hRead);
		CloseHandle(hWrite);
		CloseHandle(hDevice);
	}
	threadParam->bInThread = FALSE;
	free(threadParam->pcIoBuffer);
	threadParam->pcIoBuffer = NULL;
	free(iobuf);
	iobuf = NULL;
	testDlg->m_LoopStartBtn.EnableWindow(TRUE);
	testDlg->m_LoopStopBtn.EnableWindow(FALSE);
	return 0;

}


UINT KillDialog(void * pParam)
{
//	MessageBox(NULL, "这是KillDialog", "Woo提示:", 0);
	struct CKillDialogParam *killParam;
	struct CThreadParam *threadParam;
	CXugy03Dlg *testDlg;
	int i;

	killParam = (struct CKillDialogParam *)pParam;
	for(i=0; i<3; i++)
	{
		threadParam = (struct CThreadParam *)(killParam->tp[i]);
		if(threadParam->bInThread !=FALSE)
		{
			threadParam->bInThread = FALSE;
			WaitForSingleObject(threadParam->hThread,INFINITE);
		}
	}

	testDlg = killParam->testDlg;
	testDlg->EndDialog(0);
	
	return 0;
}







/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA
	
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXugy03Dlg dialog

CXugy03Dlg::CXugy03Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CXugy03Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CXugy03Dlg)
		// NOTE: the ClassWizard will add member initialization 
	m_OutBufferSize		= _T("64");
	m_InBufferSize		= _T("32");
	m_OutTotalBytes		= _T("");
	m_OutCurSpeed		= _T("");
	m_OutAverageSpeed	= _T("");
	m_OutMaxSpeed		= _T("");
	m_InTotalBytes		= _T("");
	m_InCurSpeed		= _T("");
	m_InAverageSpeed	= _T("");
	m_InMaxSpeed		= _T("");
	m_KeyStatus			= _T("");
	m_PassCount			= _T("");
	m_FailCount			= _T("");
	m_LoopBufSize		= _T("32");
	m_LoopTotalBytes	= _T("");
	m_LoopRepeatTimes	= _T("2560");
	m_LED1				= FALSE;
	m_LED2				= FALSE;
	m_LED3				= FALSE;
	m_LED4				= FALSE;

	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);

}

void CXugy03Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CXugy03Dlg)
	DDX_Control(pDX, IDC_CHECK4, m_ctrlLED4);
	DDX_Control(pDX, IDC_CHECK3, m_ctrlLED3);

	DDX_Control(pDX, IDC_BUTTON6, m_LoopStopBtn);
	DDX_Control(pDX, IDC_BUTTON5, m_LoopStartBtn);
	DDX_Control(pDX, IDC_BUTTON4, m_InStopBtn);
	DDX_Control(pDX, IDC_BUTTON3, m_InStartBtn);
	DDX_Control(pDX, IDC_BUTTON2, m_OutStopBtn);
	DDX_Control(pDX, IDC_BUTTON1, m_OutStartBtn);

	DDX_Text(pDX, IDC_EDIT1,	m_OutBufferSize);
	DDX_Text(pDX, IDC_EDIT2,	m_InBufferSize);
	DDX_Text(pDX, IDC_EDIT4,	m_LoopBufSize);
	DDX_Text(pDX, IDC_EDIT5,	m_LoopRepeatTimes);

	DDX_Text(pDX, IDC_STATIC1,	m_OutTotalBytes);
	DDX_Text(pDX, IDC_STATIC2,	m_OutCurSpeed);
	DDX_Text(pDX, IDC_STATIC3,	m_OutAverageSpeed);
	DDX_Text(pDX, IDC_STATIC4,	m_OutMaxSpeed);

	DDX_Text(pDX, IDC_STATIC5,	m_InTotalBytes);
	DDX_Text(pDX, IDC_STATIC6,	m_InCurSpeed);
	DDX_Text(pDX, IDC_STATIC7,	m_InAverageSpeed);
	DDX_Text(pDX, IDC_STATIC8,	m_InMaxSpeed);

	DDX_Text(pDX, IDC_STATIC9,	m_KeyStatus);
	DDX_Text(pDX, IDC_STATIC10,	m_PassCount);
	DDX_Text(pDX, IDC_STATIC11,	m_FailCount);
	DDX_Text(pDX, IDC_STATIC12,	m_LoopTotalBytes);
	                                  
	DDX_Check(pDX, IDC_CHECK1, m_LED1);
	DDX_Check(pDX, IDC_CHECK2, m_LED2);
	DDX_Check(pDX, IDC_CHECK3, m_LED3);
	DDX_Check(pDX, IDC_CHECK4, m_LED4);

	


		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CXugy03Dlg, CDialog)
	//{{AFX_MSG_MAP(CXugy03Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, OnOutStart)
	ON_BN_CLICKED(IDC_BUTTON2, OnOutStop)
	ON_BN_CLICKED(IDC_BUTTON3, OnInStart)
	ON_BN_CLICKED(IDC_BUTTON4, OnInStop)
	ON_BN_CLICKED(IDC_BUTTON5, OnLoopStart)
	ON_BN_CLICKED(IDC_BUTTON6, OnLoopStop)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_CHECK1, OnLED1)
	ON_BN_CLICKED(IDC_CHECK2, OnLED2)
	ON_BN_CLICKED(IDC_CHECK3, OnLED3)
	ON_BN_CLICKED(IDC_CHECK4, OnLED4)
	ON_EN_KILLFOCUS(IDC_EDIT1, OnOutBufferSize) 
	ON_EN_KILLFOCUS(IDC_EDIT2, OnInBufferSize) 
	ON_EN_KILLFOCUS(IDC_EDIT4, OnLoopBufSize) 
	ON_EN_KILLFOCUS(IDC_EDIT5, OnLoopRepeatTimes) 


	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CXugy03Dlg message handlers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -