📄 usb_lib.cpp
字号:
//////////////////////////////////////////////////////////////////////
// File - usb_lib.c
//
// Library for accessing the USB device.
// Code was generated by DriverWizard.
// It accesses the hardware via WinDriver functions.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "usb_lib.h"
#ifndef __KERNEL__
#include <stdio.h>
#endif
#include "usb_diag_lib.h"
// this string is set to an error message, if one occurs
CHAR USB_ErrorString[1024];
typedef struct USB_STRUCT
{
HANDLE hWD;
WD_USB_DEVICE_INFO deviceInfo;
DWORD hDevice;
} USB_STRUCT;
void USB_RegisterWinDriver()
{
HANDLE hWD;
WD_LICENSE lic;
hWD = WD_Open();
if (hWD!=INVALID_HANDLE_VALUE)
{
strcpy(lic.cLicense, "68C9BECCEDE89D50638A21ECD7B87900.Warlock//SSG");
WD_License(hWD, &lic);
WD_Close(hWD);
}
}
DWORD USB_CountDevices (DWORD dwVendorID, DWORD dwProductID)
{
WD_VERSION ver;
WD_USB_SCAN_DEVICES usbScan;
HANDLE hWD;
USB_RegisterWinDriver();
hWD = WD_Open();
// check whether the handle is valid & the version is OK
if (hWD==INVALID_HANDLE_VALUE)
{
sprintf (USB_ErrorString, "Failed opening WinDriver device\n");
return 0;
}
BZERO(ver);
WD_Version(hWD, &ver);
if (ver.dwVer<WD_VER)
{
sprintf (USB_ErrorString, "Incorrect WinDriver version\n");
WD_Close (hWD);
return 0;
}
BZERO(usbScan);
usbScan.searchId.dwVendorId = dwVendorID;
usbScan.searchId.dwProductId = dwProductID;
WD_UsbScanDevice(hWD,&usbScan);
WD_Close (hWD);
if (usbScan.dwDevices==0)
sprintf (USB_ErrorString, "No devices found\n");
return usbScan.dwDevices;
}
USB_HANDLE USB_Open(DWORD uniqueId, DWORD configIndex, DWORD dwInterface, DWORD dwAlternate)
{
USB_HANDLE hUSB = (USB_HANDLE) malloc (sizeof (USB_STRUCT));
WD_VERSION ver;
WD_USB_DEVICE_REGISTER devReg;
BZERO(*hUSB);
USB_RegisterWinDriver();
hUSB->hDevice = 0;
hUSB->hWD = WD_Open();
// check whether the handle is valid & the version is OK
if (hUSB->hWD==INVALID_HANDLE_VALUE)
{
sprintf (USB_ErrorString, "Failed opening WinDriver device\n");
free(hUSB);
return NULL;
}
BZERO(ver);
WD_Version(hUSB->hWD, &ver);
if (ver.dwVer<WD_VER)
{
sprintf (USB_ErrorString, "Incorrect WinDriver version\n");
WD_Close(hUSB->hWD);
free(hUSB);
return NULL;
}
BZERO(devReg);
devReg.uniqueId = uniqueId;
devReg.dwConfigurationIndex = configIndex;
devReg.dwInterfaceNum = dwInterface;
devReg.dwInterfaceAlternate = dwAlternate;
WD_UsbDeviceRegister(hUSB->hWD, &devReg);
if (!devReg.hDevice)
{
sprintf (USB_ErrorString, "Could not open device\n");
WD_Close(hUSB->hWD);
free(hUSB);
return NULL;
}
hUSB->hDevice = devReg.hDevice;
hUSB->deviceInfo = devReg.Device;
// Open finished OK
return hUSB;
}
void USB_Close(USB_HANDLE hUSB)
{
WD_USB_DEVICE_REGISTER devReg;
BZERO(devReg);
devReg.hDevice = hUSB->hDevice;
WD_UsbDeviceUnregister(hUSB->hWD, &devReg);
// close WinDriver
WD_Close(hUSB->hWD);
free (hUSB);
}
void USB_GetDeviceInfo(USB_HANDLE hUSB, WD_USB_DEVICE_INFO *pDevInfo)
{
*pDevInfo = hUSB->deviceInfo;
}
BOOL USB_ResetPipe(USB_HANDLE hUSB, DWORD pipeNum)
{
WD_USB_RESET_PIPE resetPipe;
BZERO(resetPipe);
resetPipe.hDevice = hUSB->hDevice;
resetPipe.dwPipe = pipeNum;
WD_UsbResetPipe(hUSB->hWD, &resetPipe);
return TRUE;
}
void USB_ResetDevice(USB_HANDLE hUSB)
{
WD_UsbResetDevice(hUSB->hWD, hUSB->hDevice);
}
DWORD USB_ReadPipe00(USB_HANDLE hUSB, PVOID pBuffer, DWORD dwSize, BYTE setupPacket[8])
{
WD_USB_TRANSFER transfer;
DWORD i;
BZERO(transfer);
transfer.dwPipe = 0x00;
transfer.dwBytes = dwSize;
transfer.fRead = TRUE;
for (i=0; i<8; i++)
transfer.SetupPacket[i] = setupPacket[i];
transfer.pBuffer = pBuffer;
transfer.hDevice = hUSB->hDevice;
transfer.dwTimeout = 300000;
WD_UsbTransfer(hUSB->hWD, &transfer);
if (transfer.fOK)
return transfer.dwBytesTransfered;
return 0xffffffff;
}
DWORD USB_WritePipe00(USB_HANDLE hUSB, PVOID pBuffer, DWORD dwSize, BYTE setupPacket[8])
{
WD_USB_TRANSFER transfer;
DWORD i;
BZERO(transfer);
transfer.dwPipe = 0x00;
transfer.dwBytes = dwSize;
for (i=0; i<8; i++)
transfer.SetupPacket[i] = setupPacket[i];
transfer.pBuffer = pBuffer;
transfer.hDevice = hUSB->hDevice;
transfer.dwTimeout = 10000;
WD_UsbTransfer(hUSB->hWD, &transfer);
if (transfer.fOK)
return transfer.dwBytesTransfered;
return 0xffffffff;
}
void USB_StopTransferPipe00(USB_HANDLE hUSB)
{
WD_USB_TRANSFER transfer;
BZERO(transfer);
transfer.dwPipe = 0x00;
transfer.dwOptions = USB_TRANSFER_HALT;
transfer.hDevice = hUSB->hDevice;
WD_UsbTransfer(hUSB->hWD, &transfer);
}
DWORD USB_ReadPipe81(USB_HANDLE hUSB, PVOID pBuffer, DWORD dwSize)
{
WD_USB_TRANSFER transfer;
BZERO(transfer);
transfer.dwPipe = 0x81;
transfer.dwBytes = dwSize;
transfer.fRead = TRUE;
transfer.pBuffer = pBuffer;
transfer.hDevice = hUSB->hDevice;
transfer.dwTimeout = 300000;
WD_UsbTransfer(hUSB->hWD, &transfer);
if (transfer.fOK)
return transfer.dwBytesTransfered;
return 0xffffffff;
}
void USB_StopTransferPipe81(USB_HANDLE hUSB)
{
WD_USB_TRANSFER transfer;
BZERO(transfer);
transfer.dwPipe = 0x81;
transfer.dwOptions = USB_TRANSFER_HALT;
transfer.hDevice = hUSB->hDevice;
WD_UsbTransfer(hUSB->hWD, &transfer);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -