Freigeben über


UCX-Objekte und Handles, die von einem Hostcontrollertreiber verwendet werden

UCX erweitert die WDF-Objektfunktionalität, um eigene USB-spezifische UCX-Objekte zu definieren. UCX verwendet diese Objekte für Warteschlangenanforderungen an einen zugrunde liegenden Hostcontrollertreiber.

Zusammenfassung

  • UCX-Objekte werden vom Hostcontrollertreiber verwendet, um Vorgänge im Zusammenhang mit dem Controller, dem Stammhub und allen Endpunkten zu verarbeiten.
  • UCX-Objekte werden vom Hostcontrollertreiber erstellt, und die Lebensdauer jedes Objekts wird von UCX verwaltet.

Wichtige APIs

UCX erweitert die WDF-Objektfunktionalität, um eigene USB-spezifische UCX-Objekte zu definieren. UCX verwendet diese Objekte für Warteschlangenanforderungen an einen zugrunde liegenden Hostcontrollertreiber.

Weitere Informationen zu WDF-Objekten finden Sie in der Einführung in Framework-Objekte.

UCXCONTROLLER: Hostcontrollerobjekt

Stellt den Hostcontroller dar, der vom Hostcontrollertreiber erstellt wird. Der Treiber muss pro Hostcontrollerinstanz nur ein Hostcontrollerobjekt erstellen. In der Regel innerhalb des EvtDriverDeviceAdd-Rückrufs durch Aufrufen der UcxControllerCreate-Methode erstellt.

Wenn der Hostcontrollertreiber das Objekt erstellt, registriert der Treiber seine Implementierung von Rückruffunktionen, die von UCX aufgerufen werden. Der Treiber sollte zusätzlich den Bustyp identifizieren, über den der Hostcontroller angeschlossen ist, z. B. ACPI oder PCI. Der Treiber stellt außerdem Hostcontrollergeräteinformationen mithilfe der UCX_CONTROLLER_CONFIG Struktur bereit, die an den UcxControllerCreate-Aufruf übergeben wird.

Um E/A-Anforderungen zu verarbeiten, muss der Hostcontrollertreiber eine GUID_DEVINTERFACE_USB_HOST_CONTROLLER Geräteschnittstelle registrieren. Der Treiber ist nicht erforderlich, um die in dieser Schnittstelle definierten IOCTLs zu implementieren. Stattdessen übergibt der UCX-Client die auf dieser Schnittstelle empfangenen IOCTL-Anforderungen durch Aufrufen von UcxIoDeviceControl an UCX.

Nachfolgend sind die Rückruffunktionen aufgeführt, die dem Hostcontrollerobjekt zugeordnet sind, das von UCX aufgerufen wird. Diese Funktionen müssen vom Hostcontrollertreiber implementiert werden.

*
EVT_UCX_CONTROLLER_USBDEVICE_ADD Wird aufgerufen, wenn der Hubtreiber über die Interaktion mit dem Stammhub und/oder externen Hub(n) bestimmt hat, dass ein neues Gerät auf dem Bus vorhanden ist.

*
EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY Wird von UCX aufgerufen, um Informationen zu verschiedenen Features zu sammeln, die von USB-Hostcontrollern unterstützt werden.

*
EVT_UCX_CONTROLLER_RESET Wird von UCX aufgerufen, um die Controllerhardware zurückzusetzen, möglicherweise als Reaktion auf einen erkannten Fehler.

*
EVT_UCX_CONTROLLER_GET_CURRENT_FRAMENUMBER Wird verwendet, um die aktuelle Framenummer vom Hostcontroller abzurufen, die vom Hubtreiber für die Planung isochroner Übertragungen verwendet wird.

UCXROOTHUB: Stammhubobjekt

Ruft den Status der Stammports des Hostcontrollers ab und kontrolliert ihn. Erstellt vom Hostcontrollertreiber in der Regel innerhalb des EvtDriverDeviceAdd-Rückrufs durch Aufrufen der UcxRootHubCreate-Methode , nachdem das Hostcontrollerobjekt erstellt wurde. Pro Hostcontrollerinstanz sollte nur ein Stammhubobjekt vorhanden sein. Im UcxRootHubCreate-Aufruf registriert der Treiber seine Rückrufimplementierungen.


EVT_UCX_ROOTHUB_GET_INFO Gibt die Anzahl der USB 2.0- und USB 3.0-Anschlüsse des Stammhubs zurück.

EVT_UCX_ROOTHUB_GET_20PORT_INFO
Gibt Informationen über die USB 2.0- oder USB 3.0-Ports (EVT_UCX_ROOTHUB_GET_30PORT_INFO) des Stammhubs zurück.

Nachdem das Stammhubobjekt erstellt und initialisiert wurde, interagiert der Hubtreiber mit den Stammhubports, indem Unterbrechungs- und Steuerungsübertragungen gesendet werden. UCX unterstützt diese Übertragungen durch Aufrufen dieser Rückruffunktionen, die vom Hostcontrollertreiber implementiert werden.

EVT_UCX_ROOTHUB_CONTROL_URB behandelt Featuresteuerungsanforderungen vom USB-Hub.

EVT_UCX_ROOTHUB_INTERRUPT_TX bearbeitet Anfragen zu Informationen über geänderte Ports.

Weitere Informationen finden Sie unter Root Hub-Rückruffunktionen eines Hostcontrollertreibers.

UCXUSBDEVICE: USB-Geräteobjekt

Stellt ein physisches USB-Gerät dar, das mit dem Bus verbunden ist. Erstellt vom Hostcontrollertreiber in der Regel innerhalb des EVT_UCX_CONTROLLER_USBDEVICE_ADD Rückrufs durch Aufrufen der UcxUsbDeviceCreate-Methode .

Wenn das Objekt erstellt wird, registriert der Hostcontrollertreiber seine Implementierung der Rückruffunktionen beim UcxUsbDeviceCreate-Aufruf .

Diese Rückruffunktionen dienen dazu, den Controller und Treiber über den aktuellen Status von USB-Geräten zu informieren.

EVT_UCX_USBDEVICE_ENABLE
Bereitet den Controller auf die Durchführung von Übertragungen an den Standardendpunkt des Geräts vor.

EVT_UCX_USBDEVICE_DISABLE
Gibt Controllerressourcen frei, die dem Gerät und seinem Standardendpunkt zugeordnet sind.


EVT_UCX_USBDEVICE_ADDRESS programmiert eine Adresse in den Controller und sendet eine SET_ADDRESS-Übertragung an das Gerät, um es in den adressierten Zustand zu bringen.


EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE Programmiert nicht standardmäßige Endpunkte in den Controller und/oder gibt andere nicht standardmäßige Endpunkte frei.


EVT_UCX_USBDEVICE_RESET Eine Controllerbenachrichtigung, dass ein Gerät zurückgesetzt wurde. In diesem Fall führt der Treiber alle erforderlichen Aktionen aus, um den Controller mit dem USB-Gerät zu synchronisieren.

EVT_UCX_USBDEVICE_UPDATE Benachrichtigt den Controller über verschiedene Informationen, die das Gerät betreffen.

EVT_UCX_USBDEVICE_HUB_INFO Eine Benachrichtigung über die Eigenschaften eines Hubs, wenn der UCXUSBDEVICE-Griff für ein Hubgerät ist.

EVT_UCX_USBDEVICE_ENDPOINT_ADD benachrichtigt den Treiber, damit er einen Endpunkt für das Gerät erstellt. EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD für den Standardendpunkt.

Wenn eine Schnittstelle auf einem angehaltenen USB 3.0-Gerät ein Aufwecken signalisiert hat, wird erwartet, dass der Treiber UcxUsbDeviceRemoteWakeNotification aufruft, um UCX zu benachrichtigen.

Nachdem das Objekt erstellt wurde, wird die Lebensdauer des Objekts von UCX verwaltet, und der Treiber darf das Objekt nicht löschen.

UCXENDPOINT: Endpoint-Objekt

Stellt einen Endpunkt auf einem USB-Geräteobjekt dar. Endpunktobjekte werden vom Hostcontroller während eines EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD oder eines EVT_UCX_USBDEVICE_ENDPOINT_ADD Rückrufs erstellt. Wenn ein Endpunktobjekt erstellt wird, registriert der Treiber seine Rückruffunktionen.

Der Treiber erstellt außerdem ein Framework-Warteschlangenobjekt für jeden Endpunkt und übergibt die WDFQUEUE für diese Warteschlange an UCX, indem UcxEndpointSetWdfIoQueue aufgerufen wird. Nachdem der Endpunkt erstellt wurde, wird die Lebensdauer des Objekts und der zugehörigen Warteschlangen von UCX verwaltet, und der Treiber darf diese Objekte nicht selbst löschen.

Das Endpunktobjekt implementiert mehrere Rückruffunktionen, mit denen der Treiber UCX mit Vorgängen im Zusammenhang mit dem Endpunkt unterstützen kann.

EVT_UCX_ENDPOINT_ABORT
Abbruch der Warteschlange, die dem Endpunkt zugeordnet ist.

EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS
Benachrichtigen Sie den Controllertreiber, dass er abgebrochene Übertragungen auf dem Endpunkt abschließen kann.

EVT_UCX_ENDPOINT_PURGE
Schließen Sie alle ausstehenden E/A-Anforderungen am Endpunkt ab.

EVT_UCX_ENDPOINT_START
Starten Sie die Warteschlange, die dem Endpunkt zugeordnet ist.

EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD
Erstellen Sie statische Datenströme.


EVT_UCX_ENDPOINT_RESET Benachrichtigen Sie den Treiber, um die Programmierung des Controllers für den Endpunkt zurückzusetzen.

Wenn der Hostcontrollertreiber einen USB 3.0 No Ping Response Error auf einem Endpunkt empfängt, muss der Treiber UcxEndpointNoPingResponseError aufrufen. Dieser Aufruf führt dazu, dass das USB-Geräteobjekt EVT_UCX_USBDEVICE_UPDATE empfängt. Weitere Informationen finden Sie unter Konfigurieren von USB-Endpunkten in einem Hostcontrollertreiber.

UCXSTREAMS: Stream-Objekt

Stellt eine Reihe von Rohren an das Gerät über einen einzelnen Endpunkt dar. Der Hostcontrollertreiber erstellt die Streamobjekte im EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD-Callback, indem UcxStaticStreamsCreate aufgerufen wird.

Während des UcxStaticStreamsCreate-Aufrufs registriert der Hostcontrollertreiber seine Rückruffunktionen. Für ein bestimmtes Endpunktobjekt kann der Treiber bestimmen, ob es ein Datenstromobjekt erstellt hat, und das UCXSTREAMS-Handle zurückgeben, indem ucxEndpointGetStaticStreamsReferenced aufgerufen wird.

Nachdem das Objekt erstellt wurde, erstellt der Treiber ein Framework-Warteschlangenobjekt für jeden Datenstrom und sendet das WDFQUEUE-Handle an UCX durch Aufrufen von UcxStaticStreamsSetStreamInfo.

Das Streamobjekt stellt mehrere Rückruffunktionen für den Hostcontroller bereit, um UCX bei der Verwaltung der statischen Datenströme zu unterstützen.

EVT_UCX_ENDPOINT_STATIC_STREAMS_DISABLE
Gibt die Controller-Ressourcen für alle Datenströme eines Endpunkts frei.

EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE
Aktivieren Sie die Controller-Hardware aller Datenströme für diesen Endpunkt.

Die Lebensdauer des Objekts und der zugehörigen Warteschlangen werden von UCX verwaltet, und der Treiber darf die Objekte nicht löschen.