问题标签 [libusb-win32]

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 投票
0 回答
202 浏览

c++ - 如何使用 libusb--win32 读取我的 usbcamera?我需要一些关于 libusb-win32 的帮助

我想使用同步传输从我的 USB 相机读取,但是当我准备读取时,发生了一些问题。我无法从我的设备中读取数据。这是我的阅读数据(由 Qt 用 C++ 编写)代码:

这是我运行这个程序时来自总线猎犬的消息:

也许我使用了错误的方式,所以它不起作用。谁能告诉我怎么做

0 投票
2 回答
2353 浏览

raspberry-pi - pyusb - Linux 上的 [错误 5],但不是 Windows

我正在尝试与具有 Cypress FX-2 USB 控制器的 AD9913 评估板(模拟设备)通信。我编写了一个功能齐全的 Python 库,可以在 Windows 7 上完美运行(使用通过 libusb-win32-1.2.6.0 的 inf-wizard.exe 生成的驱动程序),但现在我尝试从 Raspberry Pi 3 运行相同的软件Raspbian Jessie,似乎不会写或读。

以下最小示例适用于 Windows 7:

这里的输出是:

但是,在 Raspberry 上会出现几个问题。首先,产品 ID 是 0xEE24(我通过 dmesg 查到的),其次,上面的代码示例给出了

我通过调用来执行脚本sudo python minimal_example.py,否则(如预期的那样)我得到usb.core.USBError: [Errno 13] Access denied (insufficient permissions). (对于上述测试,我删除了我添加的 udev 规则以允许访问我的常规用户帐户,然后重新启动并重新插入设备。)

我还注意到在 Windows 上Configuration 1(这是唯一的配置),如添加所示

对于上述示例脚本,只有一个Interface 0,而在​​ LinuxInterface 0上没有端点,但有额外的接口和Interface 0, 1,其中第一个与 Windows 显示的唯一接口相同。Interface 0, 2Interface 0,3

本文所述分离内核驱动程序- 鉴于我目前作为 USB 新手的理解在这里不应该是必要的 - 并不能解决问题。

我怀疑这个问题源于 USB 通信的 Windows/libusb 和 Linux 实现/后端之间的差异(已经暗示,显示的 productID 对于连接的同一块硬件是不同的),这可能需要一些更改我写入 USB 端点的方式。

如果需要,我很乐意提供更多信息,并欢迎所有提示和建议。

0 投票
1 回答
377 浏览

python - Python 代码在交互式提示中运行,但不作为脚本运行

我正在尝试使用 seabreeze ( seabreeze ) 和 pyseabreeze ( pyseabreeze ) 与海洋光学光谱仪连接。

如果我从 windows 中的命令提示符 (cmd) 输入 python 并逐行输入以下代码,它就可以工作。但是,如果我将它放在脚本 (spec_test.py) 中并尝试使用“python spec_test.py”从 cmd.exe 运行它,它将无法正常工作。

我已经搜索了很多类似的问题,但似乎没有一个涵盖我遇到的问题。我正在运行 Windows 7 64 位,使用 anaconda 安装的 python 3.5.2。我还必须安装 pyusb 和 libusb 才能使用 pyseabreeze。

编码:

以及我收到的错误消息:

谢谢你的帮助!

编辑:出于某种原因,我想出了这一点,认为它可能有助于描述问题。如果我从 cmd.exe 输入交互式 python 并粘贴代码而不是手动输入,我会得到同样的错误。这让我觉得(很可能我错了)它与进口速度有关。我尝试在第 3 行和第 5 行之间添加几秒钟的睡眠,以模拟在我输入提示时发生的情况,但这没有帮助。我希望这已经足够描述了。

0 投票
0 回答
498 浏览

c++ - 无法在 Windows QT 上运行 libusb

开发环境: Qt Creator 4.0.2 Основан на Qt 5.7.0 (MSVC 2013, 32 бита)

操作系统: Windows 7 x64

错误: :-1: ошибка: No rule to make target 'libusb-win32-bin-1.2.6.0/lib/gcc/libusb.a', needed by 'debug\TestUsb.exe'. Stop.

我想在我的项目中使用 libusb。libusb-win32-bin-1.2.6.0我在项目文件夹中下载并解压缩。然后我修改项目文件:

这是我的main.c文件:

我不知道怎么了。我在互联网上找不到任何解决方案。

0 投票
1 回答
772 浏览

c++ - 使用 Libusb-win32-1.2.6.0 获取设备数量时出错

我正在尝试在 VS2010 上运行一个用 libusb-win32 编写的简单代码,以获取有关连接的 USB 设备的信息。我无法让它成功运行。

项目配置是 Win32,调试,我使用的是 x86 dll 和 lib 文件。我能够编译代码。usb_find_busses()返回 1 &usb_find_devices()返回 0。我不明白为什么我没有得到正确的数字。打印 bus->root_dev 打印以下输出。

我运行了 inf-wizard.exe,在那里我可以看到所有带有供应商和设备 ID 的设备。我不明白我错过了什么。

0 投票
1 回答
26 浏览

wdk - Libusb-win32,DDK,"make.cmd all" 错误:“无效的 WinDDK 目录 C:\WinDDK\7600.16385.1\”

非常感谢我的问题,当我编译 libusb-win32 时,我构建了 ddk 环境,我遇到了“Invalid WinDDK Directory C:\WinDDK\7600.16385.1\”但是这个文件存在, 在这里输入图像描述

帮助

0 投票
0 回答
94 浏览

python - 连接到 USB 设备 python libusb 时出错

我在通过 python 与 Siglent SDG1032 函数生成器通信时遇到了很多麻烦。

这是我使用的代码:

但我得到一个错误代码,它是:

“Falscher Parameter”是德语错误参数;)

任何人都可以帮忙吗?

提前致谢!

编辑:也许您想查看整个错误代码

0 投票
2 回答
548 浏览

windows - 使用 WinUSB 或 HID 驱动程序的 USB 设备原型超时,适用于 libusb

我正在尝试使用 Arudino 板和 CH376 模块为 USB (1.1) HID 设备创建原型。我设法编写了将 CH376 设置为设备模式并处理所有 USB 事务的 Arduino 代码。

只要我将设备声明为属于“供应商特定”类,Windows 10 就会将该设备识别为“未知设备”,并在我在控制面板中询问设备详细信息时正确显示其 VID 和 PID(设备属性 - 详细信息- 硬件 ID)。到目前为止,一切都很好。然后我可以使用Zadig为设备分配一个 libusb 驱动程序,然后它将显示在控制面板的“libusb 设备”类别下;一切都很好,我可以使用 libusb 功能与设备进行通信。

现在问题来了。如果我尝试使用 WinUSB 而不是 libusb 来管理设备,则在插入或重置设备时会发生以下情况:

  1. Windows 执行通常的设备初始化序列:它请求设备描述符(64 字节),然后为设备分配地址,然后再次请求设备描述符(这次只有 18 字节),然后请求配置描述符。

  2. 五秒钟后,Windows 再次请求设备描述符。这就是设备出现在设备管理器中的位置,状态为“此设备工作正常”。

  3. 再过五秒钟后,Windows 再次请求配置描述符,但在仅检索前 8 个字节(即控制端点的大小)之后,它会断开设备连接并在设备管理器中显示一个感叹号。

如果我转到设备属性,“常规”选项卡,它会显示:

如果我转到“事件”选项卡,最后一个是“设备未启动(WinUSB)”,其中包含以下详细信息:

现在,如果不是将设备声明为属于“供应商特定”类,而是将其声明为 HID 设备并让 Windows 选择正确的驱动程序,则行为是相同的,但“常规”选项卡中的错误消息是:

...最后一个事件:

我怀疑原型对于 Windows 内置 USB 设备管理库来说可能太慢了,而 libusb 更宽松,但我觉得这很奇怪(Arduino 板中的代码只是检查来自 CH376 的事件并立即处理它们一个循环),我想知道我是否做错了什么。

这是 Arduino 代码生成的跟踪的转储。SETUP/IN/OUT 事件意味着令牌处理已经完成;对于 IN 令牌,我之前写入的任何数据(“写入 X 字节”日志)都已发送。通过使用 libusb,我可以确认记录的数据确实是我发送的数据。

(暂停 5 秒,设备管理器中还没有条目)

(再次暂停5秒,设备在设备管理器中显示为正常工作)

(设备现在显示感叹号)

顺便说一句,我通过写入串行端口来获得这些跟踪,然后由计算机读取。考虑到这可能会减慢整个处理速度,我尝试禁用任何串行端口通信,结果是一样的。

所以我的问题是:

  1. 难道我做错了什么?还是Windows有问题?
  2. 如果是后者,Windows 10 是否提供任何方法来增加 WinUSB/HID 设备处理的超时时间(如果这确实是问题)?

编辑

如果我使用Microsoft 的 USB 硬件验证器,我会得到以下输出:

...这很奇怪,因为设备似乎根本没有收到任何对字符串描述符的请求!

编辑 2

根据评论中的建议,我将 Wireshark 与 USBPcap 一起使用,我看到的是:

  • 对 wLength = 18 的设备描述符的一次请求
  • 对 wLength = 9 的配置描述符的一次请求

这与我在自己的跟踪中看到的最后两个请求一致。

编辑 3

为了不使问题文本增长太多,我创建了一个要点,其中包含:

  • 我正在使用的 Arduino 代码。
  • 详细的 Wireshark 捕获。

这是我正在使用的 CH376 模块的示意图(这是我找到的关于该模块的所有技术信息):

在此处输入图像描述

编辑 4

正如评论中所建议的,我已经修改了我的代码,以便设备现在将自己报告为 USB 2.0 设备并提供序列号字符串。现在从设备的角度来看,事件的顺序是:

  • 获取设备描述符请求(wLength = 64)
  • 设置地址请求
  • 获取设备描述符请求(wLength = 18)
  • 获取配置描述符请求(wLength = 255)
  • 5 秒暂停
  • 获取可用语言请求(字符串描述符 0)
  • 5 秒暂停
  • 获取 Microsoft 特定的描述符请求 (bRequest = 6, wValue = 0x0600) - 不支持,所以我停止它
  • 获取设备描述符请求(wLength = 18)
  • 5 秒暂停
  • 获取配置描述符请求 (wLength = 9) - 在 Wireshark 中显示为 USBD_STATUS_CANCELED 的响应

有趣的是,Wireshark 跟踪是完全相同的:语言请求和 Microsoft 特定的描述符请求不显示!

模式似乎是 5 秒暂停后的请求对 Wireshark 不可见,因此我的代码可能没有正确处理它们,并且主机没有认为它们已完成,但我不明白为什么(因为我'正在执行与第二个获取设备描述符请求相同的处理,该请求成功)。

另外值得注意的是,当第一个设备描述符请求完成时,我得到的不是一个而是六个 OUT 令牌中断。这可能是时间问题的症状吗?

编辑 5

绝对看起来像一个时间问题。

我使用 Zadig 将设备的驱动程序设置为 libusb,然后我尝试在循环中发送一些描述符请求;结果是有二分之一的请求始终失败。但是,如果我在请求之间放置 1 毫秒的延迟,那么它们都可以正常工作!就好像芯片在请求成功后需要一个“冷却期”。失败的请求不会出现在 Wireshark 或我自己的日志中,因此 SETUP 令牌本身似乎丢失了。

有什么方法可以指示 Windows 在对给定设备的请求之间稍等片刻?

0 投票
0 回答
59 浏览

usb - 是否可以在应用程序之间共享 LibUSB-Win32 句柄?

我正在使用 LibUSB-Win32 与 USB 设备通信。首先,搜索设备,然后将其打开并使用控制消息传输设备的一些设置。这是使用用 c++ 编写的小应用程序完成的,该应用程序通过 cmd.exe 从主应用程序(用另一种语言编写)调用。

另一个小应用程序用于通过批量端点传输数据,该端点可能在启动后在后台运行,如果需要,第三个小应用程序将用于进一步的控制消息。

是否可以存储在第一个应用程序中获得的设备句柄并与其他应用程序共享?就像让第一个应用程序将句柄提供给调用主应用程序,然后它与其他应用程序共享句柄,这样他们就可以访问 USB 设备,而不必每次调用时自己搜索和打开设备。

谢谢!