Delen via


USB-eindpunten configureren in een stuurprogramma voor een USB-hostcontroller

UCX beheert het maken van eindpuntobjecten en informeert de hostcontroller om eindpunten in de USB-hostcontroller te programmeren of deprogrammeren.

Hoewel een eindpunt is geprogrammeerd, wordt het ook beheerd door UCX. De status van een eindpunt verandert wanneer apparaten verbonden zijn met de bus en de verbinding verbreken, energiegebeurtenissen meemaken, zoals onderbroken worden en opnieuw ingesteld worden, en het ondergaan van nieuwe eindpuntcreaties, zoals wijzigingen in alternatieve instellingen.

Eindpuntconfiguratie

UCX roept callback-functies aan die zijn geïmplementeerd door het stuurprogramma van de hostcontroller om het stuurprogramma op de hoogte te stellen wanneer eindpunten moeten worden geprogrammeerd in de USB-hostcontroller of moeten worden vrijgegeven. Wanneer EVT_UCX_USBDEVICE_ENABLE wordt aangeroepen, bereidt het stuurprogramma de controller voor op het uitvoeren van overdrachten naar het standaardeindpunt van het apparaat. Het voorbereiden van de controller omvat het programmeren van het standaardeindpunt. Wanneer EVT_UCX_USBDEVICE_DISABLE wordt aangeroepen, deprogrameert het stuurprogramma het standaardeindpunt en worden andere controllerbronnen die aan het apparaat zijn gekoppeld, vrijgemaakt. Wanneer EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE wordt aangeroepen, krijgt het stuurprogramma een lijst met niet-standaardeindpunten om te programmeren in de controller en krijgt een andere lijst met niet-standaardeindpunten die uit de controller moeten worden verwijderd. Het stuurprogramma van de hostcontroller programmat vervolgens de opgegeven niet-standaardeindpunten in de controller en verwijdert ook de niet-standaardeindpunten (opgegeven in de andere lijst) van de controller.

Statusbeheer van wachtrij

UCX roept callback-functies aan die zijn geïmplementeerd door het stuurprogramma van de hostcontroller om wijzigingen in de status van de eindpuntwachtrij uit te voeren. Het stuurprogramma neemt vervolgens de bijbehorende actie op de eindpuntwachtrij die aan UCX is gegeven en op eventuele wachtrijen op het tweede niveau die binnen het stuurprogramma worden onderhouden. Eindpuntwachtrijen worden afgebroken of verwijderd in deze scenario's:

  • Het clientstuurprogramma van het USB-apparaat verzendt een URB_FUNCTION_ABORT_PIPE-verzoek.
  • Tijdens onderbreking.
  • Wanneer de hub waaraan een apparaat is gekoppeld, een apparaatverbreking detecteert.
  • Tijdens een aanvraag voor het instellen van de select-interface.

Als u het stuurprogramma van de hostcontroller wilt informeren over het afbreken of opschonen van een wachtrij, roept UCX EVT_UCX_ENDPOINT_ABORT of EVT_UCX_ENDPOINT_PURGE aan. Als op een later moment de eindpuntwachtrij nodig is voor UCX, roept UCX de EVT_UCX_ENDPOINT_START callback aan om het stuurprogramma op de hoogte te stellen om de wachtrij te starten.

Annulering van overdracht

Voor elke controller waarvoor het stuurprogramma van de hostcontroller GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL declareert, moet het stuurprogramma UcxEndpointNeedToCancelTransfers aanroepen en EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS implementeren voor het annuleren van asynchrone (bulk- of controle) USB-overdrachten naar een USB-apparaat met volledige of lage snelheid dat zich achter een Transaction Translator (TT)-hub bevindt. In alle andere gevallen kan het stuurprogramma ucxEndpointNeedToCancelTransfers optioneel aanroepen om een EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS melding te krijgen die aangeeft dat annuleren van overdrachten is toegestaan op dit eindpunt en het stuurprogramma kan doorgaan met het annuleren van de overdrachten. Het stuurprogramma kan ook overdrachten rechtstreeks annuleren zonder ucxEndpointNeedToCancelTransfers aan te roepen.

Als het stuurprogramma van de hostcontroller altijd de aanvraag voor deze GUID afwijst, kunnen deze twee functieaanroepen volledig worden genegeerd.

Als het stuurprogramma ucxEndpointNeedToCancelTransfers nooit aanroept, wordt de EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS callback van het stuurprogramma niet aangeroepen en kan null zijn tijdens de callbackregistratie.

Als het stuurprogramma ucxEndpointNeedToCancelTransfers wil gebruiken, moet het stuurprogramma de methode aanroepen wanneer een overdracht is geprogrammeerd in de controller en vervolgens is geannuleerd en vervolgens wacht op EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS voordat het is voltooid.