Отправка данных через USB с помощью PyUSB

Мне нужно отправить данные через USB с помощью Python, я использую PyUSB (http://sourceforge.net/apps/trac/pyusb/). Я ищу любой доступный USB-порт и пытаюсь отправить сообщение:

devList = usb.core.find(find_all=True)
for dev in devList:
    for cfg in dev:
        for intf in cfg:
            sys.stdout.write('\t' + str(intf.bInterfaceNumber) + ',' + str(intf.bAlternateSetting) + '\n')
            for ep in intf:
                sys.stdout.write('\t\t' + str(ep.bEndpointAddress) + '\n')
                if ep.bEndpointAddress:
                    try:
                        dev.write(ep.bEndpointAddress, 'test', intf.bInterfaceNumber)
                    except Exception:
                        print "\t\terror : dev.write("+str(ep.bEndpointAddress)+", 'test', "+str(intf.bInterfaceNumber)+")"

Результат:

    0,0
            129
            error : dev.write(129, 'test', 0)
    0,1
            129
            error : dev.write(129, 'test', 0)
    0,0
            136
            error : dev.write(136, 'test', 0)
            10
            error : dev.write(10, 'test', 0)
    1,0
            139
            error : dev.write(139, 'test', 1)
            13
            error : dev.write(13, 'test', 1)

без попытки поймать это дает:

usb.core.USBError: [Errno None] usb_claim_interface: could not claim interface 0, invalid configuration 0

Что случилось? Есть ли лучший способ общаться через usb с python? потому что я только что нашел эту библиотеку


person Bibix    schedule 03.07.2012    source источник
comment
Что было бы, если бы это сработало?   -  person Gabe    schedule 03.07.2012
comment
Я предполагаю, что по крайней мере один интерфейс действителен... и одно из моих устройств напечатает "тестовое" сообщение, отправленное через usb...   -  person Bibix    schedule 03.07.2012


Ответы (2)


Как указано в руководстве:

[...] устройство не работает без настройки конфигурации, даже если она всего одна! [...]

По-видимому, в большинстве случаев существует только одна конфигурация. Предполагая, что все эти конфигурации с разных устройств, вы можете сделать что-то вроде:

for dev in devList:
    for cfg in dev:

        cfg.set()

        for intf in cfg:

Если вы не можете установить конфигурацию из-за «занятости ресурсов», вам необходимо выгрузить драйвер ядра интерфейса:

dev.detatch_kernel_driver(interface)
person Paulo Santos    schedule 23.11.2012

У меня была эта проблема. Исправлено с помощью

dev.set_configuration()

Руководство по pyUSB

person KiranCP    schedule 09.06.2015
comment
Привет. Рекомендуется включать в ответ некоторые важные фрагменты кода из внешнего источника, если это возможно. Дать ссылку недостаточно - попробуйте извлечь самое важное из учебника и показать его ОП. - person Yeldar Kurmangaliyev; 09.06.2015