WinUSB-Funktionen für Änderungen an Piperichtlinien
Um Anwendungen das Abrufen und Festlegen der Standardrichtlinienparameter einer Endpunktpipeline zu ermöglichen, macht Winusb.dll die WinUsb_GetPipePolicy-Funktion verfügbar, um die Standardrichtlinie der Pipe abzurufen. Mit der WinUsb_SetPipePolicy-Funktion kann eine Anwendung den Richtlinienparameter auf einen neuen Wert festlegen.
Mit WinUSB können Sie das Standardverhalten ändern, indem Sie Richtlinien auf die Pipeline eines Endpunkts anwenden. Mithilfe dieser Richtlinien können Sie WinUSB so konfigurieren, dass es Ihrem Gerät am besten mit seinen Funktionen übereinstimmt. Die folgende Tabelle enthält eine Liste der pipe-Richtlinien, die von WinUSB unterstützt werden.
Hinweis
Die in der Tabelle beschriebenen Richtlinien sind nur für die angegebenen Endpunkte gültig. Das Festlegen der Richtlinie auf anderen Endpunkten hat keine Auswirkungen auf das Verhalten von WinUSB für Lese- oder Schreibanforderungen.
Richtliniennummer | Richtlinienname | Beschreibung | Endpunkt (Richtung) | Standardwert |
---|---|---|---|---|
0x01 | SHORT_PACKET_TERMINATE | Sendet ein Paket der Länge Null für eine Schreibanforderung, in der der Puffer ein Vielfaches der maximalen Paketgröße ist, die vom Endpunkt unterstützt wird. | Massenvorgang (OUT) Interrupt (OUT) |
FALSE |
0x02 | AUTO_CLEAR_STALL | Löscht automatisch ein hängendes Rohr, ohne den Datenfluss zu stoppen. | Massenvorgang (IN) Interrupt (IN) |
FALSE |
0x03 | PIPE_TRANSFER_TIMEOUT | Wartet auf ein Timeoutintervall in Millisekunden, bevor die Anforderung abgebrochen wird. | Massenvorgang (IN) Massenvorgang (OUT) Interrupt (IN) Interrupt (OUT) |
5 Sekunden (5000 Millisekunden) für die Steuerung; 0 für andere |
0x04 | IGNORE_SHORT_PACKETS | Schließt eine Leseanforderung ab, wenn ein kurzes Paket empfangen wird oder eine bestimmte Anzahl von Bytes gelesen wird. Wenn die Dateigröße unbekannt ist, wird die Anforderung bei einem kurzen Paket beendet. | Massenvorgang (IN) Interrupt (IN) |
FALSE |
0x05 | ALLOW_PARTIAL_READS | Ermöglicht Leseanforderungen von einem Gerät, das mehr Daten zurückgibt als vom Aufrufer angefordert. | Massenvorgang (IN) Interrupt (IN) |
TRUE |
0x06 | AUTO_FLUSH | Speichert die überzähligen Daten aus der Leseanforderung und fügt sie der nächsten Leseanforderung hinzu oder verwirft die überschüssigen Daten. | Massenvorgang (IN) Interrupt (IN) |
FALSE |
0x07 | RAW_IO | Umgehen Sie die Warteschlangen- und Fehlerbehandlung, um die Leistung für mehrere Leseanforderungen zu steigern. | Massenvorgang (IN) Interrupt (IN) |
FALSE |
0x08 | MAXIMUM_TRANSFER_SIZE | Ruft die maximale Größe einer VON WinUSB unterstützten USB-Übertragung ab. Dies ist eine schreibgeschützte Richtlinie, die durch Aufrufen von WinUsb_GetPipePolicy abgerufen werden kann. | Massenvorgang (IN) Massenvorgang (OUT) Interrupt (IN) Interrupt (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Setzt die Pipe des Endpunkts nach dem Fortsetzen des Anhaltens zurück, bevor neue Anforderungen akzeptiert werden. | Massenvorgang (IN) Massenvorgang (OUT) Interrupt (IN) Interrupt (OUT) |
FALSE |
Die folgende Tabelle enthält bewährte Methoden für die Verwendung der einzelnen Piperichtlinien und beschreibt das resultierende Verhalten, wenn die Richtlinie aktiviert ist.
Policy | Aktivieren, wenn... | Behavior |
---|---|---|
SHORT_PACKET_TERMINATE(0x01) | Das Gerät erfordert, dass die OUT-Übertragungen mit einem Paket der Länge Null beendet werden. Die meisten Geräte haben diese Anforderung nicht. | Wenn aktiviert (Der Wert des Richtlinienparameters ist WAHR oder ungleich Null), wird auf jede Schreibanforderung, die ein Vielfaches der vom Endpunkt unterstützten maximalen Paketgröße ist, auf ein Paket mit der Länge Null folgt. Nach dem Senden von Daten an den Hostcontroller sendet WinUSB eine Schreibanforderung mit einem Paket mit null Länge und schließt dann die Anforderung ab, die von WinUsb_WritePipe erstellt wurde. |
AUTO_CLEAR_STALL | Sie möchten nicht, dass die fehlgeschlagenen Übertragungen den Endpunkt in einem verzögerten Zustand verlassen. Diese Richtlinie ist nur hilfreich, wenn mehrere ausstehende Leseanforderungen an den Endpunkt vorhanden sind, wenn RAW_IO deaktiviert ist. |
|
PIPE_TRANSFER_TIMEOUT | Sie erwarten, dass Übertragungen an einen Endpunkt innerhalb eines bestimmten Zeitraums abgeschlossen werden. |
|
IGNORE_SHORT_PACKETS | RAW_IO deaktiviert ist und Sie nicht möchten, dass kurze Pakete die Leseanforderungen ausführen. |
|
ALLOW_PARTIAL_READS | Das Gerät kann mehr Daten senden als angefordert, wenn die Größe des Anforderungspuffers ein Vielfaches der maximalen Endpunktpaketgröße ist. Verwenden Sie diese Eigenschaft, wenn Ihre Anwendung einige Bytes lesen möchte, um zu bestimmen, wie viele Bytes insgesamt gelesen werden sollen. |
|
AUTO_FLUSH | ALLOW_PARTIAL_READS Richtlinie ist aktiviert. Das Gerät kann mehr Daten senden als angefordert, und Ihre Anwendung erfordert keine anderen Daten. Dies ist möglich, wenn die Größe des Anforderungspuffers ein Vielfaches der maximalen Endpunktpaketgröße ist. |
AUTO_FLUSH definiert das Verhalten von WinUSB, wenn ALLOW_PARTIAL_READS aktiviert ist. Wenn ALLOW_PARTIAL_READS deaktiviert ist, wird der AUTO_FLUSH Wert von WinUSB ignoriert. WinUSB kann die verbleibenden Daten entweder verwerfen oder mit der nächsten Leseanforderung des Anrufers senden.
|
RAW_IO | Die Leistung ist eine Priorität, und die Anwendung sendet gleichzeitige Leseanforderungen an denselben Endpunkt. RAW_IO legt bestimmte Einschränkungen für den Puffer fest, der vom Aufrufer in WinUsb_ReadPipe übergeben wird:
|
Wenn diese Option aktiviert ist, umgehen Übertragungen das Warteschlangen- und Fehlerbehandlungsverhalten, um die Leistung für mehrere Leseanforderungen zu steigern. WinUSB verarbeitet Leseanforderungen wie folgt:
Durch aktivieren dieser Einstellung wird die Leistung mehrerer Leseanforderungen erheblich verbessert, indem die Verzögerung zwischen dem letzten Paket einer Übertragung und dem ersten Paket der nächsten Übertragung reduziert wird. |
RESET_PIPE_ON_RESUME | Das Gerät behält den Zustand der Daten beim Anhalten nicht bei. | Beim Fortsetzen vom Anhalten setzt WinUSB den Endpunkt zurück, bevor der Aufrufer neue Anforderungen an den Endpunkt senden kann. |
Zugehörige Themen
- WinUSB Power Management
- WinUSB-Architektur und -Module
- Auswahl eines Treibermodells für die Entwicklung eines USB-Client-Treibers
- WinUSB (Winusb.sys) Installation
- Zugriff auf ein USB-Gerät mit Hilfe der WinUSB-Funktionen
- WinUSB-Funktionen
- WinUsb_GetPipePolicy
- WinUsb_SetPipePolicy
- Einführung in WinUSB für Entwickler