在USB主機控制器驅動程式中設定USB端點
UCX 會管理端點物件的建立,並通知主機控制器將端點程序設計或解壓縮至USB主機控制器。
當端點經過程序設計時,也會由UCX管理。 當裝置連線到總線並中斷連線時,端點的狀態會變更、體驗電源事件,例如暫停和重設,以及進行新的端點建立,例如替代設定變更。
端點組態
UCX 會叫用主機控制器驅動程式所實作的回呼函式,以在端點必須程式設計到 USB 主機控制器或釋放時通知驅動程式。 呼叫 EVT_UCX_USBDEVICE_ENABLE 時,驅動程式會準備控制器來執行裝置的預設端點傳輸。 準備控制器包含預設端點的程序設計。 呼叫 EVT_UCX_USBDEVICE_DISABLE 時,驅動程式會解譯預設端點,並釋放與裝置相關聯的其他控制器資源。 呼叫 EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE 時,驅動程式會提供將非預設端點清單提供給控制器,並指定要從控制器中移除的另一個非預設端點清單。 主機控制器驅動程式接著會將指定的非預設端點程式化為控制器,同時從控制器移除其他清單中指定之非預設端點) (。
佇列狀態管理
UCX 會叫用主機控制器驅動程式所實作的回呼函式,以執行端點佇列狀態的變更。 然後,驅動程式會在提供給UCX的端點佇列上,以及在驅動程式內維護的任何第二層佇列上採取對應的動作。 在下列案例中,端點佇列已中止或清除:
- USB 裝置用戶端驅動程式會傳送URB_FUNCTION_ABORT_PIPE要求。
- 暫停期間。
- 當裝置連接的中樞時,偵測到裝置中斷連線。
- 在選取介面設定要求期間。
若要通知主機控制器驅動程式佇列中止或清除,UCX 呼叫 EVT_UCX_ENDPOINT_ABORT 或 EVT_UCX_ENDPOINT_PURGE。 如果稍後 UCX 需要端點佇列,UCX 會叫用 EVT_UCX_ENDPOINT_START 回呼,以通知驅動程序啟動佇列。
傳輸取消
對於主控制器驅動程式宣告GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL的任何控制器,驅動程式必須呼叫 UcxEndpointNeedToCancelTransfers ,並實作 EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 來取消異步 (大量或控制) USB 傳輸至交易翻譯工具 (TT) 中樞背後的 USB 完整或低速裝置。 在所有其他情況下,驅動程式可以選擇性地呼叫 UcxEndpointNeedToCancelTransfers 以取得 EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 通知,指出此端點允許取消傳輸,而驅動程式可以繼續取消傳輸。 或者,驅動程式可以直接取消傳輸,而不需呼叫 UcxEndpointNeedToCancelTransfers。
如果主機控制器驅動程式一律會失敗此 GUID 的要求,它可以完全忽略這兩個函式呼叫。
如果驅動程式從未呼叫 UcxEndpointNeedToCancelTransfers,則不會呼叫驅動程式 的EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 回呼,而且在回呼註冊期間可以是 NULL。
如果驅動程式想要使用 UcxEndpointNeedToCancelTransfers,則驅動程式必須在將傳輸程式設計到控制器後取消時呼叫 方法,然後在完成之前等候 EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS 。