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 le mieux à votre appareil à ses fonctionnalités. Le tableau suivant fournit la liste des stratégies de canal prises en charge par WinUSB.
Remarque
Les stratégies décrites dans la table 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 la 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 maximale du paquet pris en charge par le point de terminaison. | En bloc (OUT) Interruption (OUT) |
FAUX |
0x02 | AUTO_CLEAR_STALL | Efface automatiquement un canal bloqué sans arrêter le flux de données. | En bloc (IN) Interruption (IN) |
FAUX |
0x03 | PIPE_TRANSFER_TIMEOUT | Attend un intervalle de délai d’attente, en millisecondes, avant d’annuler la demande. | En bloc (IN) En bloc (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 sont lus. Si la taille du fichier est inconnue, la demande est arrêtée à un paquet court. | En bloc (IN) Interruption (IN) |
FAUX |
0x05 | ALLOW_PARTIAL_READS | Autorise les demandes de lecture d’un appareil qui retourne plus de données que demandées par l’appelant. | En bloc (IN) Interruption (IN) |
VRAI |
0x06 | AUTO_FLUSH | Enregistre les données excédentaires de la demande de lecture et l’ajoute à la demande de lecture suivante ou ignore les données excédentaires. | En bloc (IN) Interruption (IN) |
FAUX |
0x07 | RAW_IO | Ignore la mise en file d’attente et la gestion des erreurs pour améliorer les performances pour plusieurs demandes de lecture. | En bloc (IN) Interruption (IN) |
FAUX |
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. | En bloc (IN) En bloc (OUT) Interruption (IN) Interruption (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Réinitialise le canal du point de terminaison après avoir repris sa suspension avant d’accepter de nouvelles demandes. | En bloc (IN) En bloc (OUT) Interruption (IN) Interruption (OUT) |
FAUX |
Le tableau suivant identifie les meilleures pratiques pour utiliser 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 soient arrêtés avec un paquet de longueur nulle. La plupart des appareils n’ont pas cette exigence. | Si cette valeur 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 maximale du paquet pris 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 créée par WinUsb_WritePipe. |
AUTO_CLEAR_STALL | Vous ne souhaitez pas que les transferts ayant échoué quittent le point de terminaison dans un état bloqué. Cette stratégie est utile uniquement lorsque vous avez plusieurs demandes de lecture en attente sur le point de terminaison lorsque RAW_IO est désactivée. |
|
PIPE_TRANSFER_TIMEOUT | Vous prévoyez 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 des paquets de point de terminaison. |
AUTO_FLUSH définit le comportement de WinUSB quand 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 l’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 à 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 entre les interruptions. | 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
- Choisir un modèle de pilote pour développer 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
- Présentation de WinUSB pour les développeurs