问题标签 [libusbdotnet]

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 回答
157 浏览

windows - 部署与 USB 外围设备交互的软件

我对驱动程序开发非常陌生,最近阅读了有关使用LibUsbDotNet与 USB 外围设备通信的信息。

目前我正在开发一个小型库,用于与车辆内置的 OBD 接口进行交互。串行连接效果很好,但是因为我见过很多 USB 连接器,所以我想让人们在这个库中使用他们的 USB 连接器。

LibUsbDotNet的介绍页面说:

在 LibUsbDotNet 可以访问 Windows 操作系统上的 USB 设备之前,该设备必须安装有 WinUSB 或 libusb-win32 USB 驱动程序。可选地,libusb-win32 具有作为过滤器服务运行的独特能力。启用过滤服务模式后,libusb-win32 将允许访问系统上的每个 USB 设备,而无需驱动程序设置/安装包。

这是否意味着我需要为每个USB 到 OBD 连接器创建自己的驱动程序包并将其与库一起部署?真的需要司机吗?我只想从 USB 端口读取数据并将数据传输到它。这样另一端的接口就可以接收到我的消息并回复我——就像 COM 端口一样。

0 投票
2 回答
6703 浏览

c# - LibUsbDotNet 调用 UsbDevice.AllDevices 时未找到设备

我正在执行 LibUsbDotNet 的示例代码,它将返回所有连接的 USB 设备的信息。您可以在下面找到此代码。

我的问题是代码中执行的第二行:

根本不返回任何设备,而我确实有我想要连接的设备,我的键盘和鼠标。

有没有人遇到过这个问题?和/或有人知道如何解决吗?

提前致谢!米兰范迪克

0 投票
1 回答
1668 浏览

c# - 如何从通过 USB 连接的扫描仪获取信号

我有一台通过 SX Virtual Link 连接到网络的柯达 i2600 扫描仪,该网络中的每台 pc 上都模拟到扫描仪的 USB 连接。我可以像这样轻松找到模拟的usbs pid和vid: 设备管理器检测扫描仪就好像它通过 USB 连接一样

或这个:注册表编辑器还显示通过 USB 连接的信息

我尝试使用 LibUsbDotNet 检测信号,但在他们的示例中它不起作用。我试过这个例子:

在此示例中,当我尝试打开 USB 设备时,结果为null. 因此,我尝试使用此示例检测来自任何 USB 设备的任何信号:

在这个例子中,我只能检测connectdisconnect发出信号。所以我尝试使用 LibUsbDotNet 连接到 USB 键盘/鼠标端口,但这也不起作用。

看来我severely不明白这里需要做什么。

接下来,我什至尝试通过 SO: USB Device Connected的示例检查是否连接了某个 USB 设备 ,即使这样也没有用。

总结一下,我需要这样做:

  1. 连接到扫描仪所连接的 USB 端口(并监听它通过该端口发送的信号)。
  2. 检测来自扫描按钮的信号:用于扫描纸张的按钮
  3. 当检测到来自 2. 的信号时,我会向扫描仪发送一个信号,以使用我自己的配置使用 TWAIN 或 ISIS lib 进行扫描。
0 投票
1 回答
555 浏览

c# - Linux/Mono 中通过 USB 控制传输的错误数据

我们这里有一个 USB 设备,上面有一个 EZ-USB FX 芯片,我们通过libusb-1.0使用LibUsbDotNet. 使用 Windows 一切正常,但Mono 3.12.1Ubuntu 14.04它下使用不起作用。我做了一些调查和测试,发现它无法初始化设备,我们使用以下逻辑(这是来自我的测试程序,但“真正的逻辑”是等价的):

然后我使用 USB 分析器来分析通过 USB 端口发送的命令。
使用 Windows 我得到以下信息: 视窗
这是正确的,正如您所看到的设备重置可以使用,但是当使用 Linux 时,我得到以下信息: Linux 现在而不是01命令00发送68A8因此设备什么也不做。

有谁知道这可能是什么原因?为什么在Linux下发送错误的数据包?

0 投票
1 回答
356 浏览

c# - Reading a range of output from USB device with LibUSB

I am working on a program that communicates with a device connected through USB. When my program reads in data sent from the device (button presses, for example), it is sent as a byte array. I have key value pairs stored as a dictionary for the button press byte array and a string for the name of the button, which I display whenever it is pressed. This device also has sliders which sends byte arrays, but it has a full range, each slider is a different digit in the array

The range goes from 00 to FF in hex which I convert to decimal.

I need to know what slider is being used, so every value between 0-255 comes through as "slider1" or whatever the name might be. Is there any way to store a whole range of values for one object, as opposed to making 256 entries per slider?

0 投票
0 回答
174 浏览

c# - 测试 LibUsbDotNet 时出现异常

我不习惯要求社区解决我的问题,但我是 C#/.NET 的新手,目前陷入困境。

我想制作一个 XAML 应用LibUsbDotNet程序,用于通过 USB 使用 Android 附件协议与 Android 手机上的程序进行通信。

经过大量研究,我认为我已经成功安装LibUsbDotNet(最后,它只是安装 .exe 并添加引用libusbdotnet.dll不是吗?),现在我正在努力让它工作。

因此,我实现了一个简短的程序,如下所示:

但是当我执行它时,它不起作用。然后当我使用调试器时,会发生异常:System.TypeLoadException.

更多细节 :

无法从程序集“mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e”加载类型“Microsoft.Win32.RegistryValueKind”。

我在 Windows 10 Professional 64 位计算机上使用 Visual Studio Enterprise 2015。

有人可以通过说出我做错了什么并指出我正确的方向来帮助我吗?我有点失落。

非常感谢你的帮助。

PS请不要介意我的英语不好,我不是以英语为母语的人。

0 投票
2 回答
931 浏览

c - c/libusb-0.1:为什么 usb_release_interface() 失败?

我正在开发一个使用 libusb 0.1 的旧程序。在某些情况下,我们希望重置与 USB 设备的连接。所以我们做这样的事情:

后来我们打开它等等。

在日志中,我看到 usb_release_interface 总是返回 -9。我找不到此功能的任何文档。有人知道这个值是什么意思吗?这个功能应该做什么?

谢谢。

0 投票
1 回答
151 浏览

serial-port - 虚拟 Com 端口下的底层硬件

我有一个设备通过 USB 电缆连接到我的 PC 的 USB 端口,并且在设备管理器中显示 - >“XYZ corp Virtual COM 端口(COM A)”

这与串行 Com 端口相同吗?设备端和主机端的底层硬件是什么 - 分别是 Uart 或 USB 或两者都在两端?

0 投票
0 回答
1031 浏览

c# - LibUsbDotNet Win32Error:错误代码 87

我的 USB 设备有问题。我正在用 C# 开发一个与该设备通信的应用程序。为了进行这种交流,我使用了 LibUsbDotNet 库。问题如下,我的通信在我公司的许多计算机上都能正常工作。但是还有其他一些(直到现在有两台计算机)它就是行不通的。在这些中,当我尝试写入设备时,它给了我一个 Win32Error:错误代码 87(无效参数)。奇怪的是,我使用的驱动程序与我在其他计算机中使用的驱动程序相同。他们甚至使用相同的操作系统(Windows 8)。我使用随 UsbK 开发工具包提供的“驱动程序安装创建者向导”创建的这个驱动程序。我使用 UsbK 创建驱动程序,因为他们使用更新版本的 libusb 驱动程序。我有其他设备也做过同样的事情,它们都工作正常,只是这个让我很头疼。研究这个问题,我找到了 Usblyzer 软件。运行它并分析我的设备插入PC时的信息,我看到有问题的计算机中打开的管道数为0。在一切正常的情况下,是 3。这与问题有关吗?知道如何解决吗?

下面是我用来重现问题的小代码。原始应用程序非常大。

0 投票
0 回答
477 浏览

c# - 如何获取 Arduino 的串口名称

我试图找出哪个串行端口属于Arduino.
由于该SerialPort课程没有透露有关
底层硬件的任何信息,因此我尝试改用LibUsbDotNet

使用以下代码获取所有设备的列表:

然后我可以遍历所有这些或搜索Arduino具体:

这实际上有效,我得到了一个实例UsbRegistry
但我无法打开设备或确定它是通过哪个串行端口暴露的。

由于这不起作用arduinoUsbDevice仍然存在null

然后,我尝试使用在 系统中添加或删除设备DeviceNotifier时引发事件的类:

现在,每当我连接Arduino到计算机时,都会引发两次事件。
好像正在连接两个单独的设备,
但其中只有一个被返回UsbDevice.AllDevices

第一次为我们之前可以找到的设备引发事件。
第二次用e.Deviceset tonull
e.Portset to 提出COM5,这是我所追求的信息。

所以问题是我只能在软件启动后连接时才能获得此信息Arduino
即使连接这两个事件也是
一种猜谜游戏。

有什么方法可以在不依赖班级
引发的事件的情况下获取信息DeviceNotifier

我知道我可以使用System.ManagementWMI查询,但这些在 Linux 和 MacOS 上不可用,这就是我 LibUsbDotNet改用的原因。

我使用的本机库是libusb-1.0