毕业论文代写,职称论文发表
当前位置: > 免费论文 > 计算机论文 > 计算机应用论文 > >>查看论文

基于Visual C#的USB接口通信程序设计

logo设计

分享到: 本站编辑:admin 日期: 2011-05-08 19:12 点击:

  摘 要:详细介绍了USB接口的特点以及接口通信流程,研究在Microsoft Visual Studio 2008环境下,运用Visual C #调用Windows API 函数方法进行USB接口通信程序设计的一般方法。
  关键字:C#USB通信接口
  中图分类号:TP311.1 文献标识码:A 文章编号:1007-9416(2010)08-0090-02
  
  1 HID、USB介绍
  HID(Human Interface Device)类设备即人机接口设备,是USB设备类型中的一种,是直接与人交互的设备,如键盘、鼠标等。HID类设备并不一定是标准的外设类型,只要交换的数据格式存储在报文的结构中,并且设备固件支持报文的格式,则任何工作在该限制之内的设备均可称为HID设备,如电压计、温度计、读卡器等。
  HID设备与主机交换数据使用“报表”结构,报表格式富有弹性,可以处理任何类型的数据;一个报表可以使用多个事务,每笔事务可以携带小量和中量的数据,高速设备每笔事务最大是1024 B;主机定时轮询设备,设备可以为预期的时间传送信息给主机,HID设备除了传送数据给主机外,也会从主机接收数据。
  USB协议定义和支持音频设备类、通信设备类、显示设备类、人机接口设备类(HID)和海量存储设备类等设备类型。HID是Windows完全支持的第一批USB设备类型,在运行Win 98以上版本的PC机上,应用程序可以与使用操作系统内置驱动的HID类设备通信。因此,基于HID类设计的USB设备易于设置和运行。
  
  2 USB人机通信开发方法
  HID运行在WINDOWS98以上版本操作系统的PC机中,系统除了提供通用的USB设备的底层驱动以外,还单独提供了一些hid设备的完整驱动,应用程序可以很容易的与操作系统内部的hid通讯。这样使得符合hid类的USB设备很容易开发与运行。也就是说,我们如果想实现一个USB的HID类设备,不需要在Windows下开发自己的驱动程序。
  USB设备通信开发是在程序中调用一系列Windows API函数(以下简称API函数),通过系统自带的HID驱动程序访问HID设备。Windows提供了API函数来启动应用程序与设备驱动程序之间的通信,可以使用任何能访问API函数的编程语言,如VB,C/C++,C#,Delphi等编写的应用程序,在设备驱动程序的支持下,调用ReadFile、WriteFile等API函数来对USB设备进行读写操作。Windows用来与HID设备通信的API函数,包含在hid.dll、setupapi.dll、kernel32.dll 3个dll文档中,分别起到与HID设备通信、寻找与识别设备、交换数据的作用。
  USB人机通信可以概括为查找HID设备接口、识别HID设备、取得设备接口路径、获取设备接口详细信息、打开设备、设备读写操作等部分。
  
  3 Visual C#实现USB接口通信程序设计实例
  本文的通信程序在Windows2003环境下使用Microsoft Visual Studio 2008进行开发,下面进行详细介绍。
  3.1 启动Microsoft Visual Studio 2008,新建一个项目类型为Visual C #的工程。
  3.2 调用HidD_GetHidGuidD函数获取设备的标识符(GUID)
  在计算机系统中可能存在多个HID设备,在实现通信前程序首先要做的是找到所需要的HID设备。在Windows系统中,所有的HID设备都属于HID类设备。HID类设备是通过GUID在系统中唯一标识的,它是一个128 位值,每一位唯一表示了一个对象。调用函数HidD_GetHidGuid可获得HID类设备的标识,通过这个API 函数就可以从系统中读取该值,下面程序代码是C#调用windows的AP的函数获得GUID
  [DllImport("hid.dll")]//使用DllImportAttribute特性来引入api函数
  public static extern void HidD_GetHidGuid(ref Guid HidGuid);
  Guid guidHID = Guid.Empty;
  GUID结构体声明如下:
  typedef struct GUID {
  long Data1;
  shart Data2;
  shart Data3;
  char Data4
  };
  3.3 获取已经连接的HID信息结构体数组
  HidD_GetHidGuid使得应用程序获得一个系统的HID信息GUID,然后调用setupDiGetclassDevs函数,将上一步获得到的GUID结构作为参数传入,将返回一个包含所有已连接并检测通过的HID,该值包含其信息的结构数组的地址,它在下一个将要调用的函数SetupDiEnumDevicelnterfaces中将使用到。下面是C#调用API函数获得HID信息
  [DllImport("setupapi.dll", SetLastError = true)]
  public static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid, uint Enumerator,IntPtr HwndParent, DIGCF Flags);
  IntPtr hDevInfo;
  3.4 识别每个HID接口
  利用setupDiGetclassDevs函数的返回值DevlnfoSet得到一个指向设备信息集的句柄,即所有已连接并检测过的HID。函数返回的设备信息集包含所有当前安装在系统上且匹配所给参数的设备。将这个指针作参数循环调用SetupDiEnumDeviceInterfaces函数,每一次调用可以获得设备信息集中一个设备接口的信息:
  SetupDiEnumDevicelnterfaces(
  DevlnfoSet, //设备信息集句柄
  NULL, //获得设备信息集中所有接口的信息
  &HIDGUID,//HID类设备GUID结构体的地址
  HIDlndex,//以0开始的接口索引号
  &DevlnterfaceData//设备接口数据结构体的地址
  );
  下面为C#调用API函数识别HID接口获取设备,当返回值为true时获取成功,
  [DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
  public static extern Boolean SetupDiEnumDeviceInterfaces(IntPtr hDevInfo, IntPtr devInfo, ref Guid interfaceClassGuid, UInt32 memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);
  public struct SP_DEVICE_INTERFACE_DATA
  {
  public int cbSize ;

  

本文出自:http://www.starlunwen.net/jisuanjiyingyong/98735.html

本文TAGS:通信 程序设计 接口 基于 设备 HID 函数 USB 信息

上一篇收获机行走速度控制研究 下一篇超声波测距系统设计