如何脱离系统USB驱动的HID?

问题描述 投票:0回答:1

我需要通过USB与一个自制的控制器进行通信。我想使用Python。该控制器 "会说 "HID,并且可以工作(插入时被Linux检测到)。

问题是,当控制器插入时,Linux会帮助连接HID驱动。当 "打开 "设备时,我得到了以下错误信息。OSError: open failed我猜测是来自 Linux 的自动附件。

Libusb的功能是:a)检查系统驱动是否被附加,b)分离驱动。但是,正如前面提到的,控制器需要在系统驱动中加入 HID 协议,并修改不同的Python HID 实现,他们似乎并不在意分离系统驱动。

我不放心同时加载一个 libusb (只是为了分离?)和一个 hid(api) 模块。难道没有更优雅的方法吗?

用来打开的代码是。

import hid

VID = 0x04d8
PID = 0xf83f

def init(VID, PID):
    dev = hid.device(VID, PID)
    handle = dev.open()

init(VID, PID)

这就是:

OSError: open failed

编辑:

防止usbhid宣称新奇的usb设备。 给出了两个带有udev规则的答案,这些规则试图分离驱动。第一个答案给出了一个错误信息,在 dmesg. 第二种,显然,什么都不做。

EDIT: 依然没有收获。也许一些提示可以帮助你。

开机时 USB设备显示在 lsusb -t 为(最后一行)。

/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
    |__ Port 2: Dev 93, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 95, If 0, Class=Hub, Driver=hub/4p, 12M
            |__ Port 2: Dev 96, If 0, Class=Printer, Driver=, 12M
        |__ Port 3: Dev 94, If 0, Class=Human Interface Device, Driver=usbhid, 12M

它也出现在 dmesg,具有正确的信息。如图所示,操作系统将设备连接到了 usbhid 驱动程序。

这段代码成功地将它从驱动中分离出来。

import libusb as usb
class Module():
    def __init__(self, VID, PID):
        self.usb = usb.init(None)
        dev = usb.open_device_with_vid_pid(None, VID, PID)
        if usb.kernel_driver_active(dev, 0):
            print("Kernel has device, detaching...")
            usb.detach_kernel_driver(dev, 0)
        usb.close(dev)

现在它显示在 lsusb -t 为未连接。

Port 3: Dev 94, If 0, Class=Human Interface Device, Driver=, 12M

但下面的代码仍然无法打开设备(也试过其他方法)。它也没有在 enumerate 呼叫。

import hid
class Motor():
    def __init__(self, vid, pid):
        self.vid, self.vid = vid, vid

        print(len(hid.enumerate()))
        for rec in print(hid.enumerate()):
            print(rec)

        dev = hid.Device(vid, vid)
        handle = dev.open()
python-3.x usb linux-device-driver hid hidapi
1个回答
0
投票

嗯,它在工作。虽然我不是100%确定原因,而且我真的已经失去了太多的时间来做实验,但在发现以下问题后,事情开始工作了 libusbmuxd 正在运行,可能会影响到正常的使用。usbhidhidapi.

在删除了我能找到的所有痕迹后(正常的Slackware removepkg 命令并没有删除这些库,而且 libusbmuxd 继续目前--我不得不用手去掉.so's)同样的。hidapi 测试程序完美运行。

© www.soinside.com 2019 - 2024. All rights reserved.