问题标签 [winusb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
389 浏览

windows - 在 DLL 中使用 WinUSB?

我正在开发一个可以与单个应用程序对话的 USB 设备。看起来我们可能想要一个 Windows 驱动程序,为应用程序提供更好的软件界面。(与让应用程序本身通过 WinUSB 向设备发送较低级别的命令相反。)

是否可以从 DLL 中使用 WinUSB?选择用于开发 USB 客户端驱动程序的驱动程序模型并没有专门解决这个问题。

在这种情况下,我是否应该考虑编写基于 UMDF 或 KMDF 的驱动程序,或者调用 WDM 例程的混合驱动程序?

0 投票
2 回答
504 浏览

usb - 有没有办法在 WinUSB 下更改设备配置?

我有一个多功能 USB 设备。没有司机(还)。我想编写一个只与其中一个接口对话的应用程序。WinUSB 似乎非常适合这项工作,但有一个障碍:我需要先更改设备配置,然后才能访问接口。

有没有办法让 WinUSB(或系统的任何其他部分)在开始时设置设备配置?我不需要更改它,我只是希望它不是配置零。

0 投票
1 回答
418 浏览

camera - 在 Windows 7/8 上,如何从 USB 摄像头读取 USB 设备描述符,同时使用网络摄像头读取图片流

  1. 我使用网络摄像头捕获(java api)从 USB 摄像头获取视频流,它工作正常。

  2. 我想读取一个 USB 设备描述符(存储一些私人信息),我发现应该安装 WinUSB 或 libusbk 作为 USB 设备的驱动程序。它测试正常,读取描述符成功(通过 libusb_control_transfer api)


  1. 问题是:
  2. 在我安装 WinUSB 之前,usb 摄像头是 windows 设备管理列表中的摄像头设备。LibUSB工作失败,无法打开USB设备,错误号为-5,表示找不到入口点
  3. 安装 WinUSB 后,libUSB api 工作正常,但网络摄像头程序无法打开 USB 设备,它是 Windows 设备管理列表中的通用 USB 设备。

网络摄像头是否可以正常工作,同时,我可以使用 libusb 读取 USB 设备描述符或使用其他东西?

我在 windows 7 和 windows 8 上测试过,有同样的问题。

谢谢。

0 投票
5 回答
11745 浏览

windows - Windows 10 - 清除 USB 枚举/驱动程序垃圾

概括

我正在使用STM32F072 Discovery board为自定义 USB 设备开发固件和 PC 测试应用程序。该设备包括 Microsoft Windows 兼容 ID (WCID),可在 PC 上自动安装 WinUSB 驱动程序。

该设备在其他 Windows 10 主机上被正确枚举,但在我的 Windows 10 开发 PC 上却没有。我的开发 PC 之前曾尝试枚举具有相同 VID/PID 组合但具有不同描述符/元数据的设备。如果我将 PID 更改为其他数字(对我的开发 PC 来说是新的),它确实可以正确枚举。

问题

  1. 我怎样才能让它在我的开发 PC 上与我想要的 VID/PID 组合一起工作?
  2. Windows 缓存 USB 元数据是否是这台 PC 上枚举失败的原因?
  3. 在设备描述符和元数据不断变化的阶段,(Windows)PC 端测试/开发 USB 设备固件的最佳实践是什么?是否可以避免仅仅为了避免 Windows 缓存而咀嚼 PID?

细节

由于 Windows 从以前的枚举中缓存 USB 描述符等的方式,在固件开发期间,每次我进行其他更改后,我都会在固件中增加设备产品 ID (PID),以确保 Windows 不会缓存来自描述符的先前迭代,并弄乱了本来可以工作的东西。

现在我已经让设备在 Windows 7、8 和 10 PC 上作为 WinUSB 设备成功枚举,并且我已经建立了通信。但是当我将固件改回使用我开始使用的 VID/PID,然后将设备连接到我的开发 PC时,它会显示在设备管理器中的“其他设备”下,并带有一个错误图标。我认为这是因为我的(Windows 10)开发 PC 之前已经看到这个 VID/PID 组合具有不同的描述符,所以它被一些糟糕的缓存内容弄糊涂了。

我尝试使用regedit删除设备的注册表项HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_yyyy,但问题仍然存在。(另外,我收到一个错误,因为它无法删除VID_xxxx&PID_yyyy\zzzzzzzzzzzzz\Properties子文件夹。)我还尝试使用USBDeview卸载设备的旧版本,但这也没有任何区别。

另外值得注意的是,我无法再将设备传递给 Virtual Box 虚拟机。我不确定那里发生了什么。

设备管理器中显示的错误枚举

设备管理器代码 28 - 没有兼容的驱动程序

设备驱动程序属性

0 投票
0 回答
213 浏览

windows - 将 USB 供应商特定命令发送到 USB HUB?

我有可以编程的 USB 2.0 HUB,当我将 HUB 连接到我的 PC 时,WINDOWS 将其识别为标准 USB 2.0 HUB,我在设备管理器中看到“iusb3hub.sys”是驱动程序。

是否有任何简单的方法可以将“供应商特定”命令发送到 HUB?

我考虑过编写 WINUSB 应用程序,但据我了解,我必须更换驱动程序,然后 Windows 将无法将其识别为 USB 2.0 HUB

0 投票
0 回答
98 浏览

android - 我可以使用什么 Android USB 驱动程序与实现 WinUSB.sys 的设备进行通信

我即将编写一个将通过 USB 与设备通信的 Android 应用程序。设备已实现 WinUSB.sys。是否有任何现成的 USB 库可供我使用,以避免为 Android 编写自己的 USB 驱动程序?

我还没有拿到实际的设备,所以我可能能够通过内置的 Android USB 库进行通信。如果是这样的话,我会告诉你的。

0 投票
2 回答
4242 浏览

windows - USB 设备何时应在大容量管道上发送 ZLP?

我正在为与 WinUSB 主机通信的 USB 2.0 全速设备编写固件,每个方向都有一个 Bulk Pipe。设备何时应发送零长度数据包 (ZLP) 以终止 IN 传输,它如何知道它应该发送?

USB 2.0 规范的第 5.8.3 节说:

当端点执行以下操作之一时,批量传输完成:

  • 已准确传输预期的数据量
  • 传输有效载荷大小小于 wMaxPacketSize 的数据包或传输零长度数据包 [ZLP]

我将其解释为,当传输大小是最大数据包大小的整数倍时,应该发送 ZLP,并且传输的“预期”大小大于实际大小(即可以发送的大小)。但是接收者如何知道预期的结果?

例如,我在 C# 中使用WinUSBNet包装器。当我像这样从管道中读取

该库像这样调用WinUsb_ReadPipe()

假设设备正好有 128 个字节要发送,最大数据包大小为 64 个字节。设备如何确定主机“期望”什么,因此它是否应该发送 ZLP 来终止传输?

(类似于这个问题,但那个问题是关于控制管道的。我问的是散装管道。)

0 投票
2 回答
2904 浏览

c# - C# - 使用 LIBUSB 与 WinUSB 设备通信

我正在尝试使用 LIBUSING 和 C# 通过 USB 与诺基亚 Lumia 手机(RM-917)进行通信。LIBUSB 能够查看设备的信息(pid、vid 等)。但是,我无法成功写入任何端点,甚至无法将确切的命令作为 Windows 设备恢复工具发送。

根据 WinUSB,写入端点是 EP07,然而,这个端点只是超时。我已经尝试了所有其他端点,但所有这些都失败了。

0 投票
1 回答
793 浏览

usb - 如何在批量模式下为 PIC24FJGB410 中的 USB 通信使用多个端点(IN 和 OUT)

在我的项目中,我正在为主机的输入和输出配置 USB 端点(批量模式)。我正在使用 PIC24FJ256GB410 和配置了 PIC24FSTARTER KIT 的 Microchip 示例代码“供应商吞吐量”。

如果我将端点 1、2,3 用于 OUT 并将端点 1 用于 IN,则一切正常。

我将端点 1、2、3 配置为 OUT,将端点 81 配置为 IN。数据输出工作正常,但数据输入根本不起作用。

我使用 VC++ 作为前端,WINUSB 写入管道将端点 1 用于 OUT,将端点 81 用于 IN。

我完全糊涂了。一般来说,主机端和设备端的端点编号应该匹配,但在我的情况下,当我尝试匹配它时它不起作用。

附上完整的代码以供调试和您的宝贵建议。

代码链接如下


USB 描述符和 USB 配置


USB 数据输入和输出代码

0 投票
1 回答
269 浏览

usb - USB (WinUsb) 同步带宽管理

我一直在尝试使用 WinUsb 进行同步 USB 传输,结果发现 WinUsb 总是尽可能快地发送数据:

WinUsb_WriteIsochPipe将传输缓冲区打包,以便在每个间隔中,主机可以发送每个间隔允许的最大字节数。

但是对于内核驱动程序,您显然可以发送较短的数据包:

MaximumPacketSize 值指示等时数据包的最大允许大小。客户端驱动程序可以将每个同步数据包的大小设置为小于 MaximumPacketSize 值的任何值。

我想知道 USB 音频如何处理这个问题。据我在规范中看到的,它们只是接口的两种替代配置——一种是零带宽,另一种是非零带宽。有一个标志表明端点是否需要全尺寸数据包。

所以我的问题是:

a) 处理发送低于全速数据的最佳方法是什么。我是否应该拥有一整套具有不同最大数据包大小的备用配置?

b) 我是否应该期望能够发送短于最大值的数据包?如果是这样,为什么 WinUsb 不允许这样做?