ZHCACO6A january   2011  – may 2023

 

  1.   1
  2. 1MSP430™ USB HID Windows API 编程人员指南
  3. 2引言
  4. 3实现
    1. 3.1 概述
    2. 3.2 文件组织
    3. 3.3 系统要求
    4. 3.4 MSP430 USB API 堆栈
    5. 3.5 Windows 如何将物理 USB HID 器件映射到主机应用程序
    6. 3.6 在系统上查找特定 HID 器件/接口并将其打开
    7. 3.7 发送/接收数据
    8. 3.8 检测 HID 器件的动态连接/断开
  5. 4函数调用参考
    1. 4.1 器件连接管理和初始化调用
      1. 4.1.1 VOID HID_Init(struct strHidDevice* pstrHidDevice)
      2. 4.1.2 DWORD HID_GetSerNums(WORD vid, WORD pid, struct strTrackSerialNumbers *serialNumList)
      3. 4.1.3 DWORD HID_GetNumOfInterfaces(WORD vid, WORD pid, DWORD numSerNums)
      4. 4.1.4 BYTE HID_Open(struct strHidDevice* pstrHidDevice, WORD vid, WORD pid, DWORD deviceIndex, char serialNumber[SERNUM_LEN], DWORD totalDevNum, DWORD totalSerNum)
      5. 4.1.5 BYTE HID_Close(struct strHidDevice* pstrHidDevice)
      6. 4.1.6 BYTE HID_GetVersionNumber(struct strHidDevice* pstrHidDevice, USHORT * VersionNumber)
    2. 4.2 发送/接收数据
      1. 4.2.1 BYTE HID_WriteFile(struct strHidDevice* pstrHidDevice, BYTE* buffer, DWORD bufferSize, DWORD* bytesSent)
      2. 4.2.2 BYTE HID_ReadFile(struct strHidDevice* pStrHidDevice, BYTE* buffer, DWORD bufferSize, DWORD* bytesReturned)
    3. 4.3 即插即用管理
      1. 4.3.1 BYTE HID_RegisterForDeviceNotification(HWND hWnd, HDEVNOTIFY* diNotifyHandle)
      2. 4.3.2 BYTE HID_UnregisterForDeviceNotification(HDEVNOTIFY* diNotifyHandle)
      3. 4.3.3 BOOL IsDeviceAffected(struct strHidDevice* pstrHidDevice)
  6. 5演示应用程序
  7. 6MSP430 USB 工具套件
  8.   HID 接口数据结构:strHidDevice
  9.   HID 数据管道器件上的报告格式
  10.   C 参考文献
  11.   C 修订历史记录

在系统上查找特定 HID 器件/接口并将其打开

本文档的其余部分使用了以下术语:

  • HID 器件:Windows HID 器件列表中的器件
  • 物理 USB 器件:一个实际的 USB 硬件,在 USB 总线上具有自己的唯一地址
  • HID 接口:在物理 USB 器件的 USB 描述符中声明的接口。它可能是器件上唯一的接口,也可能是复合 USB 器件中的多个接口之一。HID 接口与 Windows 中的 HID 器件相关联。

主机应用程序开发人员在设置访问 USB 器件时,通常知道与其关联的器件的 VID/PID 对,因为两者通常由同一方设计。因此,该过程从调用 HID_GetSerNums() 开始。此函数接收 VID/PID 作为参数并返回一个序列号列表,其中每个序列号均代表总线上与 VID/PID 关联的一个物理 USB 器件。应用程序可以选择仅与其中一个物理器件交互,也可以为其提供与多个器件交互的功能。

应用程序开发人员通常还知道这些物理器件每个具有多少个接口。如果不知道这一点,可以调用函数 HID_GetNumOfInterfaces()。当调用 HID_Open() 来打开器件时,必须知道物理器件上的 HID 接口总数。

当使用 VID、PID 和序列号来筛选 HID 器件列表时,该列表中剩下的就是由这些参数描述的物理 USB 器件中的所有 HID 接口。此列表通常有一个或两个,但也可能像 MSP430 一样有多达 8 个。此列表的顺序与 HID 接口在物理器件的 USB 描述符中列出的顺序相同。这样,使用 API 堆栈的主机应用程序和 MSP430 应用程序可以相互“查找”,形成完整的数据链路。

知道 USB 器件内所需 HID 接口的 VID/PID、序列号和索引后,应用程序可以调用 HID_Open() 以打开与物理 USB 器件上 HID 接口的连接。

当应用程序使用完器件时(例如退出程序时),应用程序应使用 HID_Close() 关闭所有打开的 HID 器件。