Мне нужно отправить данные через 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? потому что я только что нашел эту библиотеку
Как указано в учебнике:
[...] устройство не работает без настройки конфигурации, даже если оно имеет только один! [...]
По-видимому, в большинстве случаев существует только одна конфигурация. Предполагая, что все эти конфигурации выполнены с разных устройств, вы можете сделать что-то вроде:
for dev in devList:
for cfg in dev:
cfg.set()
for intf in cfg:
Если вы не можете установить конфигурацию из-за "занятого ресурсом", вам нужно будет выгрузить свой драйвер ядра интерфейса:
dev.detatch_kernel_driver(interface)