📄 slusb.cpp
字号:
#include "stdafx.h"
#pragma hdrstop
#include <windows.h>
#include "slusb.h"
static HANDLE hUsbDev=0, hUsbPipe=0;
/********************************************************************************
* UsbVendorCmdRead
* Description : UsbVendorCmdRead
* Parameters : hUsbDev
* bCmd Command Opcode
* wValue User 1st Parameter
* wIndex User 2nd Parameter
* wLen Length for pData
* pData User's data buffer pointer
* Return : BOOL TRUE means successful, else FAIL
********************************************************************************/
BOOL UsbVendorCmdRead(BYTE bCmd, WORD wValue, WORD wIndex, WORD wLen, PVOID pData)
{ DWORD cbRet;
DevReq devreq;
devreq.ioBuff = (PBYTE)pData;
devreq.bmRequest=0xc0; //host read
devreq.bRequest = bCmd;
devreq.wValue = wValue;
devreq.wIndex = wIndex;
devreq.wLength = wLen;
return DeviceIoControl(hUsbDev,
(DWORD)IOCTL_VENDOR_CONTROL,
(PVOID)&devreq,
(DWORD)sizeof(DevReq),
NULL,
(DWORD)0,
&cbRet,
NULL);
}
/*********************************************************************************
* UsbVendorCmdWrite
* Description : Write cmd block to Scanner
* Parameters : hUsbDev
* bCmd Command Opcode
* wValue User 1st Parameter
* wIndex User 2nd Parameter
* wLen Length for pData
* pData User's data buffer pointer
* Return : BOOL TRUE means successful, else FAIL
**********************************************************************************/
BOOL UsbVendorCmdWrite(BYTE bCmd, WORD wValue, WORD wIndex, WORD wLen, PVOID pData)
{ DWORD cbRet;
DevReq devreq;
devreq.ioBuff = (PBYTE)pData;
devreq.bmRequest= 0x40; //host write
devreq.bRequest = bCmd;
devreq.wValue = wValue;
devreq.wIndex = wIndex;
devreq.wLength = wLen;
return DeviceIoControl(hUsbDev,
(DWORD)IOCTL_VENDOR_CONTROL,
(PVOID)&devreq,
(DWORD)sizeof(DevReq),
NULL,
(DWORD)0,
&cbRet,
NULL);
}
/***************************************************************************/
BOOL FAR PASCAL FindUsbDev(WORD UsbProd)
{ int i;
DWORD cbRet;
USB_DEVICE_DESCRIPTOR dev_desc;
char cFileName[30],usbName[30];
if(!hUsbDev)
{ for(i=0;i<MAX_USB_DEVICES;i++)
{ wsprintf(cFileName,SYSFILE,i);
if ((hUsbDev=CreateFile(cFileName,GENERIC_WRITE|GENERIC_READ,0,NULL,
OPEN_EXISTING,0,NULL )) != INVALID_HANDLE_VALUE)
{ if((DeviceIoControl(hUsbDev,(DWORD)IOCTL_GET_VERSION,NULL,0,(PVOID)&dev_desc,
sizeof(USB_DEVICE_DESCRIPTOR),&cbRet,NULL)))
{ if (dev_desc.idProduct == UsbProd)
wsprintf(usbName,"%s\\0\\0\\0\\2",cFileName); // Extra read pipe
hUsbPipe = CreateFile(usbName,GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
return TRUE;
}
CloseHandle(hUsbDev);
}
} // for
hUsbDev=0;
return FALSE;
}
return TRUE;
}
/***************************************************************************/
BOOL FAR PASCAL CloseUsbDev(VOID)
{ if(hUsbDev)
{ CloseHandle(hUsbDev);
hUsbDev=hUsbPipe = 0;
return TRUE;
}
return FALSE;
}
/***************************************************************************/
BOOL UsbDataRead(DWORD cData,PVOID pData)
{ DWORD dwRet;
if (!ReadFile(hUsbDev, pData, cData, &dwRet, NULL)) return FALSE;
if (dwRet<cData) return FALSE;
return TRUE;
}
/***************************************************************************/
BOOL UsbDataReadPipe(DWORD cData,PVOID pData)
{ DWORD dwRet;
if (!ReadFile(hUsbPipe, pData, cData, &dwRet, NULL)) return FALSE;
if (dwRet<cData) return FALSE;
return TRUE;
}
/***************************************************************************/
BOOL UsbDataWrite(DWORD cData,PVOID pData)
{ DWORD dwRet;
if (!WriteFile(hUsbDev, pData, cData, &dwRet, NULL)) return FALSE;
if (dwRet<cData) return FALSE;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -