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

📄 testdevice.cpp

📁 PC与AVR通过D12进行USB通讯全套资料
💻 CPP
字号:
// testdevice.cpp: implementation of the Ctestdevice class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "testpro.h"
#include "testdevice.h"
#include "TestDeviceInterface.h"
#include "testioctl.h"
#include <winioctl.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
HANDLE OpenByInterface(GUID* pClassGuid, DWORD instance, PDWORD pError);
GUID ClassGuid = TestDevice_CLASS_GUID;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Ctestdevice::Ctestdevice()
{

}

Ctestdevice::~Ctestdevice()
{

}

DWORD Ctestdevice::Endpoint1ReadPipes(UINT Length, void *pBuffer)
{
	ULONG	nOutput;			// Count written to bufOutput

	// Call device IO Control interface (THERMOMETER_READ_DATA) in driver
	if (!DeviceIoControl(hDevice,
						 D12_DRIVER_READ,
						 pBuffer,
						 Length,
						 pBuffer,
						 Length,
						 &nOutput,
						 NULL)
	   )
	{
		DWORD dError=GetLastError();
		CString error;
		error.Format("ERROR:DeviceIoControl read returns %d",dError);
		AfxMessageBox(error);
		return dError;
	}
/*	CString readnum;
	readnum.Format("读到的数据大小为%d", nOutput);
	AfxMessageBox(readnum);*/
	
	return ERROR_SUCCESS;
}

DWORD Ctestdevice::Endpoint1WritePipes(UINT Length, void *pBuffer)
{
	ULONG	nOutput;			// Count written to bufOutput

		// Call device IO Control interface (THERMOMETER_READ_DATA) in driver
	if (!DeviceIoControl(hDevice,
						 D12_DRIVER_WRITE,
						 pBuffer,
						 Length,
						 pBuffer,
						 Length,
						 &nOutput,
						 NULL)
	   )
	{
		DWORD dError=GetLastError();
		CString error;
		error.Format("ERROR:DeviceIoControl write returns %d",dError);
		AfxMessageBox(error);
		return dError;
	}

/*	CString writenum;
	writenum.Format("发送的数据大小为%d", nOutput);
	AfxMessageBox(writenum);*/

	return ERROR_SUCCESS;
}

DWORD Ctestdevice::IniDevice()
{
	DWORD	dError = 0;
	hDevice = OpenByInterface( &ClassGuid, 0, &dError);
	if (hDevice == INVALID_HANDLE_VALUE)
	{
		CString error;
		error.Format("设备不可用,错误号(%d),请重新连接!", dError);
		AfxMessageBox(error);
		return dError;
	}
	else
	{
		AfxMessageBox("设备可使用!");
	}

	return ERROR_SUCCESS;
}

DWORD Ctestdevice::ReadBulkPipes(UINT Length,void* pBuffer,DWORD* dwBytesTransferred)
{
	if (!DeviceIoControl(hDevice,
						 D12_DRIVER_BULK_IN,
						 pBuffer,
						 Length,
						 pBuffer,
						 Length,
						 dwBytesTransferred,
						 NULL)
	   )
	{
		DWORD dError=GetLastError();
		CString error;
		error.Format("块读取错误%d",dError);
		AfxMessageBox(error);
		return dError;
	}
/*	CString num;
	num.Format("块传读取数据个数是%d!",*dwBytesTransferred);
	AfxMessageBox(num);*/
	return ERROR_SUCCESS;
}

DWORD Ctestdevice::WriteBulkPipes(UINT Length,void* pBuffer,DWORD* dwBytesTransferred)
{
	if (!DeviceIoControl(hDevice,
						 D12_DRIVER_BULK_OUT,
						 pBuffer,
						 Length,
						 pBuffer,
						 Length,
						 dwBytesTransferred,
						 NULL)
	   )
	{
		DWORD dError=GetLastError();
		CString error;
		error.Format("块写入错误%d",dError);
		AfxMessageBox(error);
		return dError;
	}
/*	CString num;
	num.Format("块写入数据个数是%d!",*dwBytesTransferred);
	AfxMessageBox(num);*/
	return ERROR_SUCCESS;
}

⌨️ 快捷键说明

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