Fonctions WinUSB pour la modification de la stratégie de canal
Pour permettre aux applications d’obtenir et de définir les paramètres de stratégie par défaut d’un canal de point de terminaison, Winusb.dll expose la fonction WinUsb_GetPipePolicy pour récupérer la stratégie par défaut du canal. La fonction WinUsb_SetPipePolicy permet à une application de définir le paramètre de stratégie sur une nouvelle valeur.
WinUSB vous permet de modifier son comportement par défaut en appliquant des stratégies au canal d’un point de terminaison. En utilisant ces stratégies, vous pouvez configurer WinUSB pour qu’il corresponde au mieux à votre appareil à ses fonctionnalités. Le tableau suivant fournit la liste des stratégies de canal prises en charge par WinUSB.
Notes
Les stratégies décrites dans le tableau sont valides uniquement pour les points de terminaison spécifiés. La définition de la stratégie sur d’autres points de terminaison n’a aucun effet sur le comportement de WinUSB pour les demandes de lecture ou d’écriture.
Numéro de stratégie | Nom de stratégie | Description | Point de terminaison (direction) | Valeur par défaut |
---|---|---|---|---|
0x01 | SHORT_PACKET_TERMINATE | Envoie un paquet de longueur nulle pour une demande d’écriture dans laquelle la mémoire tampon est un multiple de la taille de paquet maximale prise en charge par le point de terminaison. | Bulk (OUT) Interruption (OUT) |
FALSE |
0x02 | AUTO_CLEAR_STALL | Efface automatiquement un canal bloqué sans arrêter le flux de données. | Bulk (IN) Interruption (IN) |
FALSE |
0x03 | PIPE_TRANSFER_TIMEOUT | Attend un intervalle de délai d’attente, en millisecondes, avant d’annuler la demande. | Bulk (IN) Bulk (OUT) Interruption (IN) Interruption (OUT) |
5 secondes (5 000 millisecondes) pour le contrôle ; 0 pour les autres |
0x04 | IGNORE_SHORT_PACKETS | Termine une demande de lecture lorsqu’un paquet court est reçu ou qu’un certain nombre d’octets est lu. Si la taille du fichier est inconnue, la demande se termine à un paquet court. | Bulk (IN) Interruption (IN) |
FALSE |
0x05 | ALLOW_PARTIAL_READS | Autorise les demandes de lecture à partir d’un appareil qui retourne plus de données que demandé par l’appelant. | Bulk (IN) Interruption (IN) |
TRUE |
0x06 | AUTO_FLUSH | Enregistre les données excédentaires de la demande de lecture et les ajoute à la demande de lecture suivante ou ignore les données excédentaires. | Bulk (IN) Interruption (IN) |
FALSE |
0x07 | RAW_IO | Contourne la mise en file d’attente et la gestion des erreurs pour améliorer les performances de plusieurs demandes de lecture. | Bulk (IN) Interruption (IN) |
FALSE |
0x08 | MAXIMUM_TRANSFER_SIZE | Obtient la taille maximale d’un transfert USB pris en charge par WinUSB. Il s’agit d’une stratégie en lecture seule qui peut être récupérée en appelant WinUsb_GetPipePolicy. | Bulk (IN) Bulk (OUT) Interruption (IN) Interruption (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Réinitialise le canal du point de terminaison après la reprise de la suspension avant d’accepter de nouvelles demandes. | Bulk (IN) Bulk (OUT) Interruption (IN) Interruption (OUT) |
FALSE |
Le tableau suivant identifie les meilleures pratiques d’utilisation de chacune des stratégies de canal et décrit le comportement résultant lorsque la stratégie est activée.
Stratégie | Activer si... | Comportement |
---|---|---|
SHORT_PACKET_TERMINATE(0x01) | L’appareil nécessite que les transferts OUT se terminent par un paquet de longueur nulle. La plupart des appareils n’ont pas cette exigence. | Si cette option est activée (la valeur du paramètre de stratégie est TRUE ou différente de zéro), chaque demande d’écriture qui est un multiple de la taille de paquet maximale prise en charge par le point de terminaison est suivie d’un paquet de longueur nulle. Après avoir envoyé des données au contrôleur hôte, WinUSB envoie une demande d’écriture avec un paquet de longueur nulle, puis termine la requête qui a été créée par WinUsb_WritePipe. |
AUTO_CLEAR_STALL | Vous ne souhaitez pas que les transferts ayant échoué laissent le point de terminaison dans un état bloqué. Cette stratégie est utile uniquement lorsque vous avez plusieurs demandes de lecture en attente au point de terminaison lorsque RAW_IO est désactivé. |
|
PIPE_TRANSFER_TIMEOUT | Vous vous attendez à ce que les transferts vers un point de terminaison se terminent dans un délai spécifique. |
|
IGNORE_SHORT_PACKETS | RAW_IO est désactivé et vous ne souhaitez pas que les paquets courts terminent les demandes de lecture. |
|
ALLOW_PARTIAL_READS | L’appareil peut envoyer plus de données que demandé si la taille de votre mémoire tampon de requête est un multiple de la taille maximale des paquets de point de terminaison. Utilisez si votre application souhaite lire quelques octets pour déterminer le nombre total d’octets à lire. |
|
AUTO_FLUSH | ALLOW_PARTIAL_READS stratégie est activée. L’appareil peut envoyer plus de données que demandé, et votre application ne nécessite aucune autre donnée. Cela est possible si la taille de votre mémoire tampon de requête est un multiple de la taille maximale du paquet de point de terminaison. |
AUTO_FLUSH définit le comportement de WinUSB lorsque ALLOW_PARTIAL_READS est activé. Si ALLOW_PARTIAL_READS est désactivé, la valeur AUTO_FLUSH est ignorée par WinUSB. WinUSB peut ignorer les données restantes ou les envoyer avec la demande de lecture suivante de l’appelant.
|
RAW_IO | Les performances sont une priorité et l’application envoie des demandes de lecture simultanées au même point de terminaison. RAW_IO impose certaines restrictions sur la mémoire tampon passée par l’appelant dans WinUsb_ReadPipe :
|
Si cette option est activée, les transferts contournent la mise en file d’attente et la gestion des erreurs pour améliorer les performances de plusieurs demandes de lecture. WinUSB gère les demandes de lecture comme suit :
L’activation de ce paramètre améliore considérablement les performances de plusieurs demandes de lecture en réduisant le délai entre le dernier paquet d’un transfert et le premier paquet du transfert suivant. |
RESET_PIPE_ON_RESUME | L’appareil ne conserve pas son état bascule de données sur la suspension. | Lors de la reprise de la suspension, WinUSB réinitialise le point de terminaison avant de permettre à l’appelant d’envoyer de nouvelles demandes au point de terminaison. |
Rubriques connexes
- Gestion de l’alimentation WinUSB
- Architecture et modules WinUSB
- Choix d’un modèle de pilote pour le développement d’un pilote client USB
- WinUSB (Winusb.sys) Installation
- Comment accéder à un périphérique USB à l’aide de fonctions WinUSB
- Fonctions WinUSB
- WinUsb_GetPipePolicy
- WinUsb_SetPipePolicy
- WinUSB
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour