2012-07-03 2 views
1

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

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? потому что я только что нашел этот LIB

+1

Что случилось бы, если бы он работать? – Gabe

+0

Я предполагаю, что хотя бы один интерфейс действителен ... и одно из моих устройств напечатает сообщение 'test' send via usb ... – Bibix

ответ

5

Как указано в tutorial:

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

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

for dev in devList: 
    for cfg in dev: 

     cfg.set() 

     for intf in cfg: 

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

dev.detatch_kernel_driver(interface) 
0

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

dev.set_configuration() 

pyUSB Tutuorial

+2

Здравствуйте. Хорошей практикой является включение некоторых важных фрагментов кода из внешнего источника в ответ, если это возможно. Давать ссылку недостаточно - попробуйте извлечь из учебника наиболее важные вещи и показать их OP. –