(请保留-> 作者: 罗冰 https://blog.youkuaiyun.com/luobing4365)
YIE002USB开发板之Windows编程
在上篇学习了访问HID设备的Windows API之后,本篇开始着手进行Windows上位机的编程。所编写的程序名为UsbHID,其主要功能在上一篇中已经介绍过,下面介绍其编写过程。
1 添加库文件
我是使用MFC编写的上位机程序,开发工具为VS2015。建立基于Dialog的工程,并在对话框的CPP文件中,添加如下语句:
#include <hidsdi.h>
#include <setupapi.h>
#pragma comment(lib, "setupapi.lib")
#pragma comment(lib, "hid.lib")
所添加的头文件和库文件,包含UsbHID编程时需要用到的SetupDi系列函数,以及HID设备获取信息的函数和数据通信函数。早期的VS中,需要将库文件拷贝到工程的目录下,并手动添加库文件到工程中。
2 枚举HID设备
枚举HID设备包括获取HID类的GUID、查找所有HID设备、获取设备的信息等步骤。枚举过程中,用到了上篇博客所说的获取设备属性的若干函数。另外,也使用了几个SetupAPI函数,这几个函数的原型列举如下。
2.1 SetupAPI函数
返回一个设备信息集的句柄,包含本地计算机所请求的设备信息元素。
WINSETUPAPI HDEVINFO SetupDiGetClassDevsW(
const GUID *ClassGuid, //指向设备安装类或接口类的GUID指针,可以为空
PCWSTR Enumerator, //指向空字符结尾的字符串
HWND hwndParent, //与设备实例相关的用户界面的顶级窗口句柄,可为空
DWORD Flags //过滤设备用的标识
);
请求获得设备信息集内某个设备的信息
WINSETUPAPI BOOL SetupDiEnumDeviceInterfaces(
HDEVINFO DeviceInfoSet, //指向设备信息集
PSP_DEVINFO_DATA DeviceInfoData, //指向设备信息参数指针,可为空
const GUID *InterfaceClassGuid, //指向设备安装类或接口类的GUID指针
DWORD MemberIndex, //位于设备信息集中的序号,以0起始
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData //回传的设备接口数据
);
请求获得设备的路径
WINSETUPAPI BOOL SetupDiGetDeviceInterfaceDetailW(
HDEVINFO DeviceInfoSet, //指向设备信息集
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, //设备接口数据
PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData,
DWORD DeviceInterfaceDetailDataSize,
PDWORD RequiredSize,
PSP_DEVINFO_DATA DeviceInfoData
);
2.2 枚举HID设备的流程图
枚举HID设备时,将调用上述的函数,其流程如下图所示:

图1 枚举HID设备流程图
2.3 枚举HID设备的代码
实现代码如下:
CString sterr;
GUID HidGuid;
HANDLE hDeviceHandle;
HDEVINFO hDevInfo = NULL;
static LV_ITEM pLvi_item;
// 1 查找本系统中HID类的GUID标识
HidD_GetHidGuid(&HidGuid);
// 2 准备查找符合HID规范的USB设备
hDevInfo = SetupDiGetClassDevs(&HidGuid,
NULL,

本文介绍在Windows上使用MFC进行HID设备的枚举及通信编程,包括添加库文件、枚举HID设备的过程及代码示例,以及通过不同方式与HID设备进行数据交互的方法。
最低0.47元/天 解锁文章
1124

被折叠的 条评论
为什么被折叠?



