Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
UCX gère la création d’objets de point de terminaison et avertit le contrôleur hôte de programmer ou de déprogramer des points de terminaison dans le contrôleur hôte USB.
Alors qu’un point de terminaison est programmé, il est également géré par UCX. L’état d’un point de terminaison change à mesure que les appareils sont connectés au bus et se déconnectent du bus, qu'ils subissent des événements d’alimentation tels que la suspension et la réinitialisation, et sous vont des créations de nouveaux points de terminaison, comme des changements de paramètres alternatifs.
Configuration du point de terminaison
UCX appelle les fonctions de rappel implémentées par le pilote du contrôleur hôte pour notifier le pilote lorsque les points de terminaison doivent être programmés dans le contrôleur hôte USB ou libérés. Lorsque EVT_UCX_USBDEVICE_ENABLE est appelée, le pilote prépare le contrôleur pour effectuer des transferts vers le point de terminaison par défaut de l’appareil. La préparation du contrôleur inclut la programmation du point de terminaison par défaut. Lorsque EVT_UCX_USBDEVICE_DISABLE est appelée, le pilote déprogramme le point de terminaison par défaut et libère d’autres ressources de contrôleur associées à l’appareil. Lorsque EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE est appelée, le pilote reçoit une liste de points de terminaison non par défaut à programmer dans le contrôleur et une autre liste de points de terminaison non par défaut à supprimer du contrôleur. Le pilote du contrôleur hôte programme ensuite les points de terminaison non par défaut spécifiés dans le contrôleur, et supprime également les points de terminaison non par défaut (spécifiés dans l’autre liste) du contrôleur.
Gestion de l’état de la file d’attente
UCX appelle les fonctions de rappel implémentées par le pilote du contrôleur hôte pour effectuer des modifications apportées à l’état de file d’attente du point de terminaison. Le pilote effectue ensuite l’action correspondante sur la file d’attente de point de terminaison donnée à UCX, et sur toutes les files d’attente de deuxième niveau conservées dans le pilote. Les files d’attente de points de terminaison sont abandonnées ou purgées dans les scénarios suivants :
- Le pilote client de périphérique USB envoie une demande URB_FUNCTION_ABORT_PIPE.
- Pendant la suspension.
- Quand le hub auquel un appareil est attaché, détecte une déconnexion d’appareil.
- Lors d'une configuration de l'interface de sélection.
Pour avertir le pilote du contrôleur hôte d’un abandon ou d’une purge de file d’attente, UCX appelle EVT_UCX_ENDPOINT_ABORT ou EVT_UCX_ENDPOINT_PURGE. Si ultérieurement, la file d’attente du point de terminaison est nécessitée par UCX, alors UCX appelle le rappel EVT_UCX_ENDPOINT_START pour indiquer au pilote de démarrer la file d’attente.
Annulation du transfert
Pour tout contrôleur pour lequel le pilote du contrôleur hôte déclare GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL, le pilote doit appeler UcxEndpointNeedToCancelTransfers et implémenter EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS pour annuler des transferts USB asynchrones (en bloc ou contrôle) vers un périphérique USB complet ou à faible vitesse qui se trouve derrière un hub Transaction Translator (TT). Dans tous les autres cas, le pilote peut éventuellement appeler UcxEndpointNeedToCancelTransfers pour obtenir une notification EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS qui indique que l’annulation des transferts est autorisée sur ce point de terminaison et que le pilote peut continuer à annuler les transferts. Le pilote peut également annuler les transferts directement sans appeler UcxEndpointNeedToCancelTransfers.
Si le pilote du contrôleur hôte échoue toujours la demande de ce GUID, il peut ignorer entièrement ces deux appels de fonction.
Si le pilote n’appelle jamais UcxEndpointNeedToCancelTransfers, le rappel EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS du pilote n’est pas appelé et peut être NULL pendant l’inscription de rappel.
Si le pilote a l’intention d’utiliser UcxEndpointNeedToCancelTransfers, le pilote doit appeler la méthode lorsqu’un transfert a été programmé dans le contrôleur, puis annulé, puis attend EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS avant de le terminer.