2017-03-23 94 views
0

我最近更新了我的android手機到棉花糖。不幸的是,對我來說,這打破了我的Python代碼。連接在PyUSB中使用set_configuration時重置

使用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模塊是怪的......

回答

0

好吧,這不是一個好的解決方案,但只是爲了防止其他人碰巧來通過這個問題,並找到這個:

問題是與具體的後端(libusb0),它發送消息重置配置或類似的東西,如果一個接口已被要求。在某些設備(例如我的)中,這會導致連接的編程重置。

我的解決方法涉及在配件模式下重新獲取設備時使用libusb1後端,因爲它不會導致重置。但由於libusb1不會讓我做控制轉移,我需要在後端之間切換。

from usb.backend import libusb0, libusb1,然後be0,be1 = libusb0.get_backend(),libusb1.get_backend()

然後只需指定後端作爲參數usb.core.find