主機控制器驅動程式所使用的UCX物件和句柄
UCX 會擴充 WDF 物件功能,以定義自己的 USB 特定 UCX 物件。 UCX 會使用這些物件將要求排入佇列至任何基礎主機控制器驅動程式。
摘要
- 主機控制器驅動程式會使用UCX對象來處理與控制器、其根中樞和所有端點相關的作業。
- UCX 物件是由主機控制器驅動程式所建立,而且每個物件的存留期都是由UCX管理。
重要 API
UCX 會擴充 WDF 物件功能,以定義自己的 USB 特定 UCX 物件。 UCX 會使用這些物件將要求排入佇列至任何基礎主機控制器驅動程式。
如需 WDF 對象的詳細資訊,請參閱 Framework 物件簡介。
UCXCONTROLLER:主機控制器物件
表示主機控制器驅動程式所建立的主控制器。 驅動程式每個主機控制器實例只能建立一個主機控制器物件。 通常藉由呼叫 UcxControllerCreate 方法,在 EvtDriverDeviceAdd 回呼內建立。
當主控制器驅動程式建立 物件時,驅動程式會註冊其由UCX叫用的回呼函式實作。 驅動程式應該另外識別主機控制器連接的總線類型,例如ACPI或PCI。 驅動程式也會使用傳遞至 UcxControllerCreate 呼叫的 UCX_CONTROLLER_CONFIG 結構來提供主機控制器裝置資訊。
若要處理 I/O 要求,主機控制器驅動程式必須註冊GUID_DEVINTERFACE_USB_HOST_CONTROLLER裝置介面。 此驅動程式不需要實作此介面中定義的 IOCTL。 相反地,UCX 用戶端會呼叫 UcxIoDeviceControl,將此介面上收到的 IOCTL 要求傳遞至 UCX。
以下是與UCX叫用之主控制器對象相關聯的回呼函式。 這些函式必須由主機控制器驅動程序實作。
*
EVT_UCX_CONTROLLER_USBDEVICE_ADD當中樞驅動程式決定時呼叫,透過與根中樞和/或外部中樞的互動,新的裝置會出現在總線上。
*
EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY由 UCX 呼叫,以收集 USB 主機控制器所支援的各種功能相關信息。
*
EVT_UCX_CONTROLLER_RESET由UCX呼叫以重設控制器硬體,以回應偵測到的錯誤。
*
EVT_UCX_CONTROLLER_GET_CURRENT_FRAMENUMBER 用來從主機控制器擷取目前的畫面編號,而中樞驅動程式會使用此號碼來排程不時分的傳輸。
UCXROOTHUB:根中樞物件
取得和控制主機控制器根埠的狀態。 主機控制器驅動程式通常會在 EvtDriverDeviceAdd 回呼內建立,方法是在建立主機控制器對象之後呼叫 UcxRootHubCreate 方法。 每個主機控制器實例應該只有一個根中樞物件。 在 UcxRootHubCreate 呼叫中,驅動程式會註冊其回呼實作。
EVT_UCX_ROOTHUB_GET_INFO傳回根中樞的USB 2.0和USB 3.0埠數目。
EVT_UCX_ROOTHUB_GET_20PORT_INFO傳回根中樞之 USB 2.0 或 USB 3.0 埠(*EVT_UCX_ROOTHUB_GET_30PORT_INFO)的相關信息。
建立並初始化根中樞對象之後,中樞驅動程式會藉由傳送中斷和控制傳輸來與根中樞埠互動。 UCX 藉由叫用主機控制器驅動程式所實作的這些回呼函式,協助進行這些傳輸。
EVT_UCX_ROOTHUB_CONTROL_URB USB 中樞處理功能控制要求。
EVT_UCX_ROOTHUB_INTERRUPT_TX處理變更埠相關信息的要求。
如需詳細資訊,請參閱 主機控制器驅動程式的根中樞回呼函式。
UCXUSBDEVICE:USB 裝置物件
表示連接到總線的實體USB裝置。 主機控制器驅動程式通常透過呼叫 UcxUsbDeviceCreate 方法,在EVT_UCX_CONTROLLER_USBDEVICE_ADD回呼內建立。
建立物件時,主控制器驅動程式會向 UcxUsbDeviceCreate 呼叫註冊其回呼函式的實作。
這些回呼函式旨在讓控制器和驅動程式知道 USB 裝置的目前狀態。
EVT_UCX_USBDEVICE_ENABLE準備控制器以執行傳送至裝置的預設端點。
EVT_UCX_USBDEVICE_DISABLE釋放與裝置及其預設端點相關聯的控制器資源。
EVT_UCX_USBDEVICE_ADDRESS將位址程式化到控制器,並將SET_ADDRESS傳輸傳送至裝置,使其進入尋址狀態。
EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE將非預設端點程式化為控制器,並/或釋放其他非預設端點。
EVT_UCX_USBDEVICE_RESET已重設裝置的控制器通知,在此情況下,驅動程式會採取任何必要的動作來同步處理控制器與 USB 裝置。
EVT_UCX_USBDEVICE_UPDATE通知控制器與裝置相關的各種資訊。
如果 UCXUSBDEVICE 句柄適用於中樞裝置,則EVT_UCX_USBDEVICE_HUB_INFO
中樞屬性的相關通知。
EVT_UCX_USBDEVICE_ENDPOINT_ADD通知驅動程式為裝置建立端點。 默認端點EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD 。
當暫停 USB 3.0 裝置上的介面發出喚醒訊號時,驅動程式應該呼叫 UcxUsbDeviceRemoteWakeNotification 來通知 UCX。
建立對象之後,物件的存留期是由UCX管理,而且驅動程式不得刪除物件。
UCXENDPOINT:Endpoint 物件
表示 USB 裝置物件上的端點。 端點物件是由主控制器在EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD或EVT_UCX_USBDEVICE_ENDPOINT_ADD回呼期間所建立。 建立端點物件時,驅動程式會註冊其回呼函式。
驅動程式也會為每個端點建立架構佇列物件,並藉由呼叫 UcxEndpointSetWdfIoQueue,將該佇列的 WDFQUEUE 傳遞給 UCX。 建立端點之後,物件及其相關聯佇列的存留期是由 UCX 管理,而且驅動程式不得刪除這些物件本身。
端點物件會實作數個回呼函式,可讓驅動程式協助UCX處理與端點相關的作業。
EVT_UCX_ENDPOINT_ABORT中止與端點相關聯的佇列。
EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS通知控制器驅動程式,它可以在端點上完成已取消的傳輸。
EVT_UCX_ENDPOINT_PURGE完成端點上所有未完成的 I/O 要求。
EVT_UCX_ENDPOINT_START啟動與端點相關聯的佇列。
EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD建立靜態數據流。
EVT_UCX_ENDPOINT_RESET通知驅動程式重設控制器的端點程序設計。
當主機控制器驅動程式在端點上收到 USB 3.0 無 Ping 回應錯誤時,驅動程式必須呼叫 UcxEndpointNoPingResponseError。 該呼叫會導致 USB 裝置物件接收 EVT_UCX_USBDEVICE_UPDATE。 如需詳細資訊,請參閱 在主機控制器驅動程式中設定USB端點。
UCXSTREAMS:Stream 物件
代表單一端點上裝置的一些管道。 主機控制器驅動程式會呼叫 UcxStaticStreamsCreate,在EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD回呼中建立數據流物件。
在 UcxStaticStreamsCreate 呼叫期間,主機控制器驅動程式會註冊其回呼函式。 針對特定端點對象,驅動程式可以判斷它是否已建立數據流物件,並藉由呼叫 UcxEndpointGetStaticStreamsReferenced 傳回 UCXSTREAMS 句柄。
建立對象之後,驅動程式會為每個數據流建立架構佇列物件,並藉由呼叫 UcxStaticStreamsSetStreamInfo 將 WDFQUEUE 句柄傳送至 UCX。
數據流物件會為主控制器提供數個回呼函式,以協助UCX管理靜態數據流。
EVT_UCX_ENDPOINT_STATIC_STREAMS_DISABLE發行端點所有數據流的控制器資源。
EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE啟用此端點所有數據流的控制器硬體。
對象和相關聯佇列的存留期是由 UCX 管理,而且驅動程式不得刪除物件。