hatte ich dieses Problem auch - meine Lösung hier überprüfen:
Android USB host DeviceConnection.setInterface prior to API Level 21
ich die Methode mit einem controlTransfer zuerst wie oben vorgeschlagen versucht, aber es scheiterte auch für mich. Der SET_INTERFACE-Befehl war OK, und der GET_INTERFACE, den ich zurückgelesen habe, gab den erwarteten alternativen Wert zurück, so dass das Gerät den richtigen Schnittstellensatz erhalten hat. Trotzdem, Lese-und Schreibvorgänge auf den Endpunkten fehlgeschlagen: -/
Ich verfolgt die libusb_set_interface_alt_setting() über libusb, usbfs und den Kernel. Im Kernel gibt es mehr Code als einfach ein SET_INTERFACE an das USB-Gerät zu senden, zum Beispiel ein Kommentar über "9.1.1.5: Zurücksetzen schaltet für alle Endpunkte in der neuen Alteinstellung um". libusb der Dokumentation libusb_set_interface_alt_setting() auch sagt:
Sie diese Funktion immer eher Ihre eigene SET_INTERFACE Steueranforderung als Formulierung verwendet werden soll. Dies liegt daran, dass das zugrunde liegende Betriebssystem wissen muss, wann solche Änderungen auftreten.
Also dachte ich, dass ich das besser machen sollte. Lange Rede, kurzer Sinn: Schau dir den Code im obigen Link an.
Hallo Alexander, danke für die Antwort. Ich las das Dokument und versuchte mit 'controlTransfer' zu spielen. Leider sind alle Werte von alt. Einstellungen, die ich versuchte, funktionierten nicht. Ich erwähnte, dass "bulkTransfer" zurückgibt. 1. Stimmt etwas nicht in der Reihenfolge der Anrufe, die ich verwende? 'UsbDevice -> getInterface -> getEndpoint -> openDevice -> claimnterface -> controlTransfer -> bulkTransfer ...... -> close_connection' – aknopov
Was meinst du mit _didnot work_? Was gibt den vorgeschlagenen 'controlTransfer' zurück?Probieren Sie controlTransfer vor claimInterface aus, da der controlTransfer die zugehörigen Ressourcen der Schnittstelle irgendwie verändert und unser Hack libUSB nicht darüber informiert, dies steht jedoch im Widerspruch zu [der libusb recomandation] (http://libusb.sourceforge.net/api- 1.0/group__dev.html # ga3047fea29830a56524388fd423068b53). Hinweis: Ich habe das vorher noch nie gemacht und kann nicht sagen, was Android unter der Haube macht. Ich sage Ihnen nur, was sinnvoll ist, wenn Sie die USB-Spezifikationen lesen. – Alexander
By _didnot work_ Ich meine, dass Daten nicht ordnungsgemäß an das Gerät gesendet werden. Das Gerät empfängt entweder 0 oder 1 Byte vom gesendeten Paket, obwohl es eine Vermutung ist - ich habe keinen Sniffer ausgeführt. In Bezug auf "controlTransfer" - gibt es -1 für ungültige Interface-ID zurück und gibt 0 für jede alt.settings-Nummer mit gültiger Schnittstelle zurück. Bezüglich der Reihenfolge - wenn 'controlTransfer' vor' claimInterface' aufgerufen wird, gibt es -1 unabhängig von den Parametern zurück. – aknopov