pyusb: не могу установить конфигурацию - PullRequest
6 голосов
/ 22 ноября 2011

Я пытаюсь создать скрипт (на linux), который может включать или выключать свет в моей мыши.

Это код, который у меня есть:

import usb.core
import usb.util
import sys
interface = 0
dev = usb.core.find(idVendor=0x1532, idProduct=0x0017)

def main():

        if dev is None:
            print "device not found"

        else:
        print "device found"
        if dev.is_kernel_driver_active(interface) is True:
            print "but we need to detach kernel driver"
            dev.detach_kernel_driver(interface)
            print "claiming device"
            usb.util.claim_interface(dev, interface)


            print "release claimed interface"
            usb.util.release_interface(dev, interface)
            print "now attaching the kernel driver again"
            dev.attach_kernel_driver(interface)
            print "all done"
return 0

if __name__ == '__main__':
    main()

Это работает нормально, но если я попытаюсь сделать: dev.set_configuration ()

после Claim_interface (dev, interface)

сценарийвозвращает ошибку: usb.core.USBError: Ресурс занят

Почему он все еще занят после того, как я отключил его драйвер ядра?

Ответы [ 2 ]

6 голосов
/ 22 ноября 2011

Не уверен, что это решит проблему, но правильно ли настроены правила udev для вашей мыши? У меня была похожая проблема с пользовательским устройством, которое сделал для меня мой друг, и я решил добавить правило вроде:

SUBSYSTEM !="usb_device", ACTION !="add", GOTO="device_rules_end"
SYSFS{idVendor} =="1532", SYSFS{idProduct} =="0017", SYMLINK+="mydevice"
MODE="0666", OWNER="<your-username-here>", GROUP="root"
LABEL="device_rules_end"

в моей папке /etc/udev/rules.d.

НТН!

РЕДАКТИРОВАТЬ: перед добавлением правила, попробуйте запустить скрипт с sudo. Если это будет работать таким образом, это почти наверняка настройка разрешения, которая будет исправлена ​​вышеупомянутым правилом.

4 голосов
/ 21 декабря 2011

У меня тоже была эта проблема. Ваш код работает хорошо, если вы сначала «set_configuration» и только потом запрашиваете интерфейс. Это также порядок, предложенный здесь: http://libusb.sourceforge.net/api-1.0/caveats.html

...