【发布时间】:2016-08-02 04:24:05
【问题描述】:
我有一个可以在两种不同模式下工作的 USB HID 设备。模式的选择基于发送给它的 USB 枚举/初始化数据包的顺序。
我使用的是运行 Raspbian 的 Raspberry Pi 3,但是如果我为我的桌面 Ubuntu 发行版编译我的代码,我也会看到同样的问题。
我遇到的问题是 linux 将 USB 设备识别为 HID 设备,然后发送它认为启动设备所需的命令序列,这可以正常工作并以“模式 1”启动设备。
但是我需要以“模式 2”启动设备,为此我需要发送一组略有不同的枚举/初始化命令。
我是 linux 新手,但对 windows 下的 LibUSB 和 LibUSBDotNet 非常有经验,并且可以在 windows 下获得我想要的行为。
Windows 具有与 linux 类似的行为,它会枚举、识别设备为 USB HID 设备,然后在它认为合适的时候对其进行初始化,从而导致设备进入“模式 1”。为了防止 windows 这样做,我可以为设备创建一个 LibUSB 过滤器驱动程序,然后替换默认驱动程序,因此 windows 现在将进行初始枚举,意识到设备的 VID 和 PID 由 LibUSB 过滤器驱动程序管理(而不是比 Windows HID 驱动程序),然后停止枚举/初始化 - 这允许我的代码接管并完成初始化到“模式 2”。
如何阻止 Linux 完全枚举/初始化该设备(就像我对 Windows 所做的那样)。也许我需要对 udev 规则或其他东西做一些事情,但我不知道我是 linux 新手。
非常感谢任何帮助
【问题讨论】:
-
是否要从内核中分离出来并自己施展魔法才能更改到模式 2?
标签: linux raspberry-pi usb hid libusb