用户中心

资讯 > 人机界面

用人机接口类型开发USB设备

2007.01.07阅读 10346

1  引言

  USB是目前发展应用非常广泛的一项技术。它是一种计算机系统连接外围设备的标准输入/输出接口。根据外围设备的不同的类型USB协议将其分类,每个设备类型都定义了类似功能设备的共同行为和协议。相同类型的设备都由一组标准定义的功能模块组成。这样主机与USB设备之间的通信就可以通过一些标准格式的数据包来完成。USB开发者论坛发布了一系列USB设备的类型定义,并配以相应的使用说明。下面表格显示出 USB的设备类型(DEVEICE CLASS):

用人机接口类型开发USB设备如图

  表1 USB的设备类型

  虽然Windows已经提供了底层总线操作的驱动程序,但与此类底层驱动程序接口的是i/o请求包的IRPs的结构,而Windows为应用程序提供的接口是API函数。因此必须在其间建立一个驱动程序,在USB底层驱动与Windows应用程序之间传递消息。VB、 C/C++、Delphi等通用编程语言编写的应用程序都可以在设备驱动程序的支持下,调用Readfile、WriteFile、DeviceIoControl等API函数。而编写底层总线的驱动程序是非常复杂的一项工程。为了消除编写设备驱动程

序的问题,可对于一些具有相似功能的设备可以组成一类,分享共有的特性,便于使用Windows提供共同的类驱动程序。

  2  HID类型概述

     第一个被windows支持的usb外围设备类是人机接口设备。hid是human interface device人机接口设备的英文缩写。是指直接和人进行互动的设备。如鼠标、键盘等。运行在WINDOWS98或其他更高的版本的操作系统的PC机,系统除了提供通用的USB设备的底层驱动以外,还单独提供了一些HID设备的完整驱动,应用程序可以很容易的与操作系统内部的hid通讯。这样使得符合hid类的USB设备很容易开发与运行。也就是说CONTROL ENGINEERING China版权所有,我们如果想实现一个USB的HID类设备,是不需要在Windows下开发自己的驱动程序。HID不一定要是标准的外设类型CONTROL ENGINEERING China版权所有,唯一的要求是交换的数据存储在报文的结构内,设备固件必须支持报文的格式。任何工作在该限制之内的设备都可以成为一个hid,例如温度计,电压计,读卡机等。

  hid类设备只能使用控制传输与中断传输两种方式。HID的交换的数据格式称为报文。报文形式灵活,能处理任何类型的数据。HID特有的请求,Set_Report和Get_Report为主机和设备之间的任何类型数据块传输提供了一种方法。主机发出Get_Report请求,设备响应向主机传送数据块;主机发出Set_Report请求www.cechina.cn,设备响应准备接收主机发出的数据块。对于一个全速设备,中断传输方式下每笔事务能够传送的最大数据量是64字节,全速设备每毫秒不能有超过一笔事务控制工程网版权所有,所以每秒最多传送64000字节。高速设备,每笔事务能够传送的最大数据量是1024字节。对于不能一次传输完毕的数据,接收和发送报文可以采用多笔事务。

     表2列举出了与HID类设备通信过程中使用到的大量函数,这些函数的用法在DDK的帮助文档中均有详细地解释。这些函数包含在Hid.dll、Setupapi.dll、Kernel32.dll三个动态链接库中,分别起到与HID设备通讯,寻找与识别设备,交换数据的作用。

表2HID设备通信相关API函数
表2 HID设备通信相关API函数

  Visual Basic编程语言控制工程网版权所有,语法简单用法灵活易于掌握。用它来开发通信程序是一种非常快捷的途径。但是需要指出的是,API函数的声明格式在DDK的文档内全部是采用C语言的格式声明,而VB与C语言的在变量的声明、存储格式上都有很大的区别。所以首先需要进行类型转换,例如CHAR转换为Byte类型,  USHORT、ULONG、BOOLEAN、LP_(长指针前缀)、P_(指针前缀)转换为Long 类型,PCTSTR转换为String类型。其次,C语言的结构体可以转换为VB中的自定义数据类型,并且特别值得注意,在涉及到自定义数据类型中子类存储位置必须注意到VB与C语言对应转换类型所占内存空间不同的问题。最后C语言中有指针的概念,而VB中没有,所以需用Byref按地址传递,VarPtr取变量地址等方法进行相应的操作。

 

  3  VB中调用API函数详述 

  第一步需要获得GUID(global unique identifier),需要调用函数 HidD_GetHidGuid ,他在可以如下定义:

Public Declare Function HidD_GetHidGuid Lib_

 "hid.dll" _

(ByRef HidGuid As GUID)

 As


版权声明:版权归控制工程网所有,转载请注明出处!

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688