请保留-> 【原文: https://blog.csdn.net/luobing4365 和 http://yiiyee.cn/blog/author/luobing/】
在上篇学习了访问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设备流程图
继续阅读“UEFI开发探索74- YIE002USB开发板(03 Windows编程)”
1,287 total views, no views today