毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

VC的HID人机接口设备设计+技术发展+需求分析 第6页

更新时间:2010-9-10:  来源:毕业论文
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.cn
HidD_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
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。