VC的HID人机接口设备设计+技术发展+需求分析 第6页
图4-2 USB驱动程序的WDM结构4.2.2 与HID设备通信的主要API函数
Windows系列操作系统都内置了USB HID类别驱动程序,因此不用额外开发相应的USB类驱动和总线驱动。
Windows这个多作业系统除了协调应用程序的执行、分配内存、管理系统资源之外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为 Application Programming Interface,简称API函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。凡是在 Windows工作环境底下执行的应用程式,都可以调用Windows API。
应用软件和HID设备交换数据的过程如下:在交换数据前,应用软件必须先识别该设备,并且读取它的报表信息;这些动作需要调用一堆Windows API函数。应用软件首先需要寻找连接到系统上的是哪些HID设备,然后检验每个信息,直到找到所需的属性。如果是客户化的设备,应用软件可以找到特定的厂商ID和产品ID。表3-1是Windows用来与HID通信并交换数据的主要API函数。
表4-1 Windows与HID通信的主要API函数
API函数 DLL文档 用途毕业论文
http://www.751com.cnHidD_GetHidGuid Hid.dll 取得HID类别的GUID
SetupDiGetClassDevs Setupapi.dll 传回一个设备信息群
SetupDiEnumDeviceInterfaces Setupapi.dll 传回设备信息群的一个设备信息
SetupDiGetDeviceInterfaceDetail Setupapi.dll 传回设备的路径
SetupDiDestroyDeviceInfoList Setupapi.dll 西方类设备所使用的资源
CreatFile Kernel32.dll 开启设备的通信本文来自辣'文*论-文.网
HidD_GetAttributes Hid.dll 传回厂商的ID和产品ID
HidD_GetPreparsedData Hid.dll 传回设备能力信息的缓冲区代号
HidD_GetCaps Hid.dll 传回描述设备能力的结构
HidD_FreePreparsedData Hid.dll 释放GetPreparseData占用的资源
WriteData Kernel32.dll 发送一个输出报表给设备
ReadFile Kernel32.dll 从设备读取一个输入报表
HidD_SetFeature Hid.dll 发送一个特征报表给设备
HidD_GetFeature Hid.dll 从设备读取一个特征报表
CloseHandle Kernel32.dll 释放CreateFile所使用的资源
4.3基于VC的应用程序开发4.3.1 开发流程
本项目的上位机程序是基于Microsoft Visual C++ 6.0集成开发环境完成的。其中,MFC(Microsoft Foundation Classes)是微软提供的类库,以C++类的形式封装了Windows的API,并且包含了一个应用程序框架。MFC是Win API与C++的结合,是面向对象程序设计与Application Framework的完美结合,他将传统的API进行了分类封装,并且创建了程序的一般框架,大大减少了应用程序开发的工作量。
用户界面的工作流程如下:应用程序初始化,显示初始界面;点击打开设备按钮,即开始查找设备;若找到目标HID设备,则加载人机接口设备,并启动USB通信;若启动LCD显示数据功能,则向人机接口设备发送数据并显示在LCD上;若启动开发板键盘功能,则可获取人机接口设备上被按下的键值并返还给主机。如图4-3所示。 图4-3 界面开发主程序流程图4.3.2 打开设备功能模块
HID类驱动程序及HID.DLL提供了两类读写USB 设备的函数。一类是以HidP 为前缀,适用于内核模式的客户驱动程序。另外一类是以HidD为前缀,适用于用户模式的客户程序。利用这些函数编制读写人机接口设备的步骤如下:
(1) 取得HID类的GUID。
在应用软件和HID设备通信前,它必须先取得HID类别的GUID。GUID是一个128位的数值,每个对象都有唯一的GUID。
HidD_GetHidGuid (
OUT LPGUID HidGuid
);毕业论文
http://www.751com.cn(2) 获得指向HID设备集合句柄。
SetupDiGetClassDevs函数查询所有已安装的HID 设备,得到一个指向该HID 设备集合的句柄。
SetupDiGetClassDevs(
IN LPGUID ClassGuid, OPTIONAL
IN PCSTR Enumerator, OPTIONAL
IN HWND hwndParent, OPTIONAL
IN DWORD Flags
);
(3) 识别HID接口。
SetupDiEnumDeviceInterfaces函数用来读取识别一个接口的结构的指针,每一次调用必须传递一个数组索引来指定一个接口。
SetupDiEnumDeviceInterfaces(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
IN LPGUID InterfaceClassGuid,
IN DWORD MemberIndex,
OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
);本文来自辣'文*论-文.网
(4) 获取目标设备详细信息。
对每一个接口,调用SetupDiGetDeviceInterfaceDetail函数获取其详细的信息,包括设备名称(头四个字节),CreateFile用此设备名打开设备。
SetupDiGetDeviceInterfaceDetail(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_A
DeviceInterfaceDetailData, OPTIONAL
IN DWORD DeviceInterfaceDetailDataSize,
OUT PDWORD RequiredSize, OPTIONAL
OUT PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
);
(5) 打开设备。
调用CreatFile 函数打开设备。
CreateFile(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
VC的HID人机接口设备设计+技术发展+需求分析 第6页下载如图片无法显示或论文不完整,请联系qq752018766