HID设备(USB)的详细说明

时间:2010-09-21 09:14:37

标签: c++ windows usb barcode-scanner

我将条形码扫描仪连接到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源代码来学习如何做到这一点。

你能帮助我吗?

3 个答案:

答案 0 :(得分:2)

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


我最近一直在研究确切的事情,但我还没有时间去尝试其中任何一件事。所以下面的内容有点推测。

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

我遇到了一个名为USBView的程序,显然是用USB设备进行这种通信(以及其他事情)。我找到了它的编译版本here。但是,该源应该包含在Windows驱动程序开发工具包中。这可能是C或C ++的来源,但我还没有时间从微软下载DDK并确认实际上是什么。


编辑:

我有时间深入挖掘这个问题。你发现的关于HidD_GetProductString的内容也很有帮助。我还发现了英特尔的this page个例子。那里的“显示HID”程序显示了一种使用该功能的方法。

基于该功能的文档和该示例,我得到的印象是它从设备读取相同的iProduct,显然是从HID级别而不是USB级别这样做。或类似的东西。我所知道的是,它到目前为止在我自己的测试程序中工作。

答案 1 :(得分:2)

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

  

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

答案 2 :(得分:0)

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

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