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 器件的动态连接/断开

与传统的 COM 端口不同,USB 应用必须注意,用户可以随时断开(或连接)器件。这是 USB 的动态“即插即用”方面。Windows 通过在 MFC 库中实现的通知来处理此功能。这发生在 API 之外,因为通知直接发送到应用程序的窗口对象;但是,当接收到这些通知时,应用程序可以调用专为此目的提供的 API 处理程序。演示应用程序展示了如何做到这一点。

以下是应用程序处理这些通知所需的步骤:

  1. 在开始时,应用程序应寄存其窗口,以使用 HID_RegisterForDeviceNotification() 接收器件更改通知。
  2. 将 ON_WM_DEVICECHANGE 置于窗口的消息映射中。(确保这不在 AFX_MSG_MAP 注释部分中。)
  3. 写入函数 OnDeviceChange() 作为窗口的公共函数。MFC 框架将调用此消息处理程序以响应 ON_WM_DEVICECHANGE 通知。

函数的定义应如下所示:

afx_msg BOOL OnDeviceChange( 
   UINT nEventType, 
   DWORD_PTR dwData  
);

此函数需要确定是否从系统中移除了此应用程序使用的任何“HID 器件”。 为此,它可以为每个打开的 HID 器件调用 HID_IsDeviceAffected(),以确定它们是否已被移除。

退出应用程序时,应用程序应确保使用 HID_UnregisterForDeviceNotification() 取消寄存。