📄 testdevice.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 + -