VC环境下 USB HID类说明

  • 格式:pdf
  • 大小:192.83 KB
  • 文档页数:6

__out_opt PDWORD RequiredSize, //DeviceInterfaceDetailData 的实际长度
__out_opt PSP_DEVINFO_DATA DeviceInfoData //PSP_DEVINFO_DATA 类型的指针,存放支持的设备接口
信息,DeviceInfoData.cbSize =sizeof(SP_DEVINFO_DATA)
__in DWORD MemberIndex, //设备信息中接口列表的索引值(初始值为 0)
__out
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData // 指 向 调 用 者 分 配 的
SP_DEVICE_INTERFACE_DATA 类 型 的 内 存 区 域 的 指 针 , 调 用 前 必 须 先 配 置 DeviceInterfaceData.cbSize =
PreparsedData;
HIDP_CAPS
Capabilities;
ULONG
Length;
int
Index;
BOOL
ok;
HANDLE DevHandle;
int DevCount = 0;
/* Get GUID for all System HIDs */
HidD_GetHidGuid(&HidGuid);
Setupapi.dll 获取设备路径
HidD与产品,版本号
HidP_GetValueCaps
Hid.dll
获取描述设备能力的结构
CreateFile
Kernel32.dll 开启设备通信
ReadFile
Kernel32.dl 从设备读取一个报文
WriteFile
Hid.dll
获取保存设备能力信息的缓冲器的句柄
HidD_SetFeature
Hid.dll
发送一个特征报文给设备
HidD_GetFeature
Hid.dll
从设备获取特征报文
2.1 HidD_GetHidGuid
void __stdcall HidD_GetHidGuid(
__out LPGUID HidGuid //指针指向调用者分配的 GUID 的内存区域,通常返回 HID 设备的 GUID );
__out_opt LPDWORD lpNumberOfBytesRead, //读取数据的实际长度
__inout_opt LPOVERLAPPED lpOverlapped //OVERLAPPED 类型指针,若设备或文件被重复打开,需此参数
); 如成功,返回 TRUE,否则返回 FALSE,并可以调用 GetLastError(void)获取错误信息
__in
DWORD Flags
// 建 立 设 备 信 息 表 的 控 制 选 项 , DIGCF_PRESENT( 当 前 存 在 的 设
备)DIGCF_ALLCLASSES(所有设备)DIGCF_PROFILE(当前硬件概况);
) 如成功,返回包含所有与指定参数匹配的已经安装设备信息句柄,否则返回 INVALID_HANDLE_VALUE
); 如成功,则返回一个文件或设备的句柄
2.7 ReadFile
BOOL WINAPI ReadFile(
__in HANDLE hFile, //文件或设备的句柄
__out LPVOID lpBuffer, //存放读取数据的指针
__in DWORD nNumberOfBytesToRead, //读取数据长度的最大值
的内存区域的指针,SetupDiEnumDeviceInterfaces 的返回
__out_opt
PSP_DEVICE_INTERFACE_DETAIL_DATA
DeviceInterfaceDetailData,//SP_DEVICE_INTERFACE_DETAIL_DATA 类型指针,用于获取路径,调用前必须先
2.8 WriteFile
BOOL WINAPI WriteFile(
__in HANDLE hFile, //文件或设备的句柄
__in LPCVOID lpBuffer, //存放写入数据的指针
__in DWORD nNumberOfBytesToWrite, //写入数据长度的最大值
__out_opt LPDWORD lpNumberOfBytesWritten, //写入数据的实际长度
__in
HDEVINFO DeviceInfoSet, // 一 个 指 向 设 备 信 息 集 合 的 句 柄 , 包 含 设 备 接 口 返 回 信 息 , 通 常 是
SetupDiGetClassDevs 的返回
__in PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, //指向 SP_DEVICE_INTERFACE_DATA 类型
__in DWORD dwCreationDisposition, //打开方式,对于设备来说经常设为 OPEN_EXISTING
__in DWORD dwFlagsAndAttributes, //设备属性和标识,经常设为 FILE_ATTRIBUTE_NORMAL
__in_opt HANDLE hTemplateFile //模板文件句柄
#include "hidsdi.h" // Must link in hid.lib
};然后在 setting—>Link—>object/libary modules 中添加 setupapi.lib hid.lib 两个库文件。
2、Windows 操作 HID 设备的 API
API 函数
DLL
DevDetail = NULL;
Index = -1;
*FIFO_Length = 0;
/* Scan all Devices */
do {
Index++;
/* Device Interface Element of a Device Information set */
__in
DWORD dwShareMode, // 共 享 模 式 , 0( 禁 止 访 问 ) , FILE_SHARE_DELETE( 删 除 ) ,
FILE_SHARE_READ(读),FILE_SHARE_WRITE(写)
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, //SECURITY_ATTRIBUTES 类型指针
SetupDiGetClassDevs 的返回值
__in_opt PSP_DEVINFO_DATA DeviceInfoData, //指向特定设备的 SP_DEVINFO_DATA 类型的指针,
__in const GUID *InterfaceClassGuid, //指向制定设备接口类的 GUID 指针
__inout_opt LPOVERLAPPED lpOverlapped //OVERLAPPED 类型指针,若设备/文件被重复打开,需此参数
); 如成功,返回 TRUE,否则返回 FALSE,并可以调用 GetLastError(void)获取错误信息
2.9 SetupDiDestroyDeviceInfoList
sizeof(SP_DEVICE_INTERFACE_DATA)
); 如成功,返回 TRUE,否则返回 FALSE,并可以调用 GetLastError(void)获取错误信息
-1-
2.4 SetupDiGetDeviceInterfaceDetail
BOOL SetupDiGetDeviceInterfaceDetail(
__out PHIDD_ATTRIBUTES Attributes //HIDD_ATTRIBUTES 类型指针 );
2.6 CreateFile
HANDLE WINAPI CreateFile(
__in LPCTSTR lpFileName, //已打开的设备名称
__in DWORD dwDesiredAccess, //操作权限,GENERIC_READ, GENERIC_WRITE(写模式), 或者 both
BOOL SetupDiDestroyDeviceInfoList( __in HDEVINFO DeviceInfoSet); //释放 SetupDiGetClassDevs 使用的资源
-2-
3、代码示例
3.1 打开一个指定 VendorID 和 ProductID 的 HID 设备
PSP_DEVICE_INTERFACE_DETAIL_DATA HID_FindDevices(USHORT V_ID, USHORT P_ID, unsigned short
*FIFO_Length)
{
GUID
HidGuid;
HDEVINFO
DevInfo;
HIDD_ATTRIBUTES
DevAttributes;
SP_DEVICE_INTERFACE_DATA
DevData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetail;
PHIDP_PREPARSED_DATA
2.2 SetupDiGetClassDevs
HDEVINFO SetupDiGetClassDevs(
__in_opt const GUID *ClassGuid,// 一个特定类别 GUID 的指针
__in_opt PCTSTR Enumerator, //过滤梅举的内容
__in_opt HWND hwndParent, //用于关联到集合成员中的用户接口的顶层窗口句柄