在 C# 中使用 LibUsbDotNet 与 HID 设备交互

本文关键字:HID 交互 LibUsbDotNet | 更新日期: 2023-09-27 17:57:25

简单地说:我想知道是否有可能使用LibUsbDotNet读取和写入HID功能报告。

首先,我尝试使用以下示例代码使用 vid/pid 查找我的设备

class Program
    {
        public static UsbDevice MyUsbDevice;
        public static UsbDeviceFinder uFind = new UsbDeviceFinder(1234,4321);
        static void Main(string[] args)
        {
            ErrorCode ec = ErrorCode.None;
            try
            {
                // Find and open the usb device.
                MyUsbDevice = UsbDevice.OpenUsbDevice(uFind);
                // If the device is open and ready
                if (MyUsbDevice == null) throw new Exception("Device Not Found.");

但我总是会得到"找不到设备"。

我已经在"设备管理器>人机接口设备"下检查了我的设备确实存在。

如果有人可以建议在 c# 中实现相同目标的正确方法,那将很有帮助。

以前我试图在python(使用PyUsb)中实现相同的目标,但是缺乏示例和文档使我绝望。

在 C# 中使用 LibUsbDotNet 与 HID 设备交互

在libUsbDotNet的安装

文件夹中,有一个名为"inf-wizard.exe"的文件,运行该应用程序并安装libUsbDotNet用来查找驱动程序的"假驱动程序"。

如果您找不到"inf-wizard.exe",请尝试从这里下载libUsbDotNet:http://sourceforge.net/projects/libusbdotnet/

您可能需要使用设备管理器查找特定驱动程序的 Pid 和 Vid(即使找不到驱动程序,也应显示 Vid 和 Pid)

安装后将 Pid 和 Vid 转换为整数,此站点可能会有所帮助 http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html

在代码中使用转换后的整数,例如:

//Hex Values: Pid = 4D9; Vid = 1605; 
public static UsbDeviceFinder uFind = new UsbDeviceFinder(1241, 5637);

Windows需要一个驱动程序来与任何类型的硬件交换,这个过程在Linux中要简单得多,请参阅链接(连接黑客)以很好地简化USB通信的工作原理。(这是基于linux的,但核心保持不变)