【问题标题】:Detailed description of HID device (USB)HID 设备 (USB) 详细说明
【发布时间】:2010-09-21 09:14:36
【问题描述】:

我将条形码扫描仪连接到 USB 端口。我需要将模式从 HID 键盘更改为串行端口仿真(系统知道阅读器将其视为常规 HID 设备,而不是 HID 系统键盘)以将数据从扫描仪直接获取到我的应用程序中。到目前为止,一切都很好。

问题是我需要知道 VID 和 PID 号码才能找到我的设备。我知道这些值,但我想按名称查找我的设备。

我找到了一个名为 SimpleHIDWrite 的程序:

http://www.lvr.com/hidpage.htm

当我启动该程序时,我的设备有一个很好的描述“符号条码扫描仪”。

我试图自己获得这个名字 - 我使用了结构:

HIDD_ATTRIBUTES HIDP_CAPS SP_DEVICE_INTERFACE_DATA SP_DEVICE_INTERFACE_DETAIL_DATA SP_DEVINFO_DATA

但是我在结构中找不到可以访问此描述的字段。

很遗憾,我找不到 SimpleHIDWrite 源代码来学习如何做到这一点。

你能帮帮我吗?

【问题讨论】:

  • 您是如何将 HID 设备重新识别为常规隐藏设备的模式?

标签: c++ windows usb barcode-scanner


【解决方案1】:

在该页面的同一部分,有一个带有源代码的 HidTest 程序。该程序显然使用了通过名为“Delphi 的 HID 控制器组件套件”的链接找到的 HID 控制器代码。也许这可以给你你正在寻找的东西? (至少如果你能从所有 Delphi 代码中挑选出相关的部分的话。)


我最近一直在研究确切的东西,但我还没有时间实际尝试任何一种。所以下面的内容有点推测。

我相信您需要做的是打开与设备的连接作为 USB 设备。 HID 级别的函数似乎没有给出您想要的描述。 Here 是关于从 USB 设备获取 VendorID 和 ProductID 的不同 SO 问题。我认为您可以使用非常相似的技术来读取USB_DEVICE_DESCRIPTOR,从而访问iProduct 字段,我认为这应该是您想要的描述。

我遇到了一个名为 USBView 的程序,它显然与 USB 设备进行这种通信(除其他外)。我找到了它的编译版本here。但是,该源据称包含在 Windows 驱动程序开发工具包中。那可能是 C 或 C++ 源代码,但我还没有时间从 Microsoft 下载 DDK 并确认实际存在什么。


编辑:

我有时间对此进行更深入的研究。您对HidD_GetProductString 的发现也很有帮助。我还找到了来自英特尔的 this page 示例。那里的“Display HID”程序显示了一种使用该功能的方法。

根据该函数的文档和该示例,我得到的印象是它正在从设备读取相同的iProduct,显然是从 HID 级别而不是 USB 级别这样做的。或类似的东西。我所知道的只是到目前为止它在我自己的测试程序中运行。

【讨论】:

  • Thx...我将尝试使用 USB_DEVICE_DESCRIPTOR 结构。
  • HidTest 程序没有给我设备名称:/
  • HMM...我会看看这个例子。但据我所知,iProduct 与 HidD_GetProductString 不同。我尝试使用 iProduct 进行锻炼。我总是有空字符串。但 HidD_GetProductString 工作正常。
  • 还有SPDRP_FRIENDLYNAME但不知道是什么名字?我也每次都摔倒。
  • 到目前为止,我尝试过的所有设备都没有显示该友好名称字段的任何内容。看来 Product String 是迄今为止最好的选择。
【解决方案2】:

我在lvr.com 论坛上找到了我的问题的答案:

Detailed description of HID device (USB) (lvr.com/forums)

【讨论】:

  • 太棒了。这对我也有帮助。我已经更新了我自己的答案,并附上了我发现的一个示例的链接,该示例展示了如何使用该功能。
【解决方案3】:

嗯...iProduct 的问题是首先我必须向设备发送描述设备的字符串的请求,然后接收数据。条形码扫描仪是只读的,因此我无法将数据(请求)发送到设备。

我发现在 SimpleHID 中有我的扫描仪“符号栏 ocde 扫描仪”的描述,它与我在控制面板(设备和打印机)中看到的名称完全相同。所以我的问题是如何获得这个设备名称?

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 2011-11-02
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多