Соединение сбрасывается при использовании set_configuration в PyUSB
Я недавно обновил свой андроид телефон до Зефира. К сожалению для меня, это сломало мой код Python.
используя PyUSB, я могу заставить устройство перейти в режим аксессуаров. К сожалению, я больше не могу читать / писать на устройство, так как сейчас использую set_configuration()
сбрасывает соединение, в результате чего устройство выходит из дополнительного режима и снова входит в режим MTP.
dev = list(usb.core.find(find_all=True))[0]
dev.ctrl_transfer(0xc0,51,data_or_wLength=2)
dev.ctrl_transfer(0x40,52,wIndex=0,data_or_wLength='SAMSUNG')
dev.ctrl_transfer(0x40,52,wIndex=1,data_or_wLength='SAMSUNG_Android')
dev.ctrl_transfer(0x40,52,wIndex=2,data_or_wLength='16DIGITSERIALNUM')
dev.ctrl_transfer(0x40,52,wIndex=3,data_or_wLength='AOA')
dev.ctrl_transfer(0x40,52,wIndex=4,data_or_wLength='Whatever')
dev.ctrl_transfer(0x40,52,wIndex=5,data_or_wLength='4')
dev.ctrl_transfer(0x40,53)
time.sleep(5)
dev = list(usb.core.find(find_all=True))[0]
dev.set_configuration() ## Aaaaaand we're back to MTP...
Я не могу найти способ обойти это; нет ссылок на эту проблему. Единственное решение, которое я могу найти, - это изучить C и использовать libusb
непосредственно, предполагая PyUSB
виноват модуль...
1 ответ
Ну, это не очень хорошее решение, но на тот случай, если кто-нибудь еще столкнется с этой проблемой и обнаружит это:
Проблема с конкретным бэкэндом (libusb0
), который отправляет сообщение для сброса конфигурации или чего-то подобного, если интерфейс уже заявлен. В некоторых устройствах (например, у меня) это вызывает программный сброс соединения.
Мой обходной путь включает использованиеlibusb1
бэкэнд при повторном получении устройства в режиме аксессуаров, так как это не вызывает перезагрузки. Но с тех пор libusb1
не позволят мне передавать управление, мне нужно переключаться между бэкэндами.
from usb.backend import libusb0, libusb1
, а потом be0,be1 = libusb0.get_backend(),libusb1.get_backend()
,
Затем просто укажите бэкэнд в качестве параметра usb.core.find