共用方式為


在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_ABORTEVT_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發出信號後才能完成該動作。