選擇性和必要的 GPIO 回呼函式
一般用途 I/O (GPIO) 控制器驅動程式會呼叫 GPIO_CLX_RegisterClient 方法,以註冊為 GPIO 架構延伸模組的用戶端, (GpioClx) 。 在此呼叫期間,驅動程式會將註冊封包傳遞至 GpioClx,以指定驅動程式所實作的事件回呼函式清單。 GpioClx 會呼叫這些回呼函式來設定 GPIO 控制器硬體、執行 I/O 作業,以及管理中斷。 GpioClx 需要 GPIO 控制器驅動程式來實作特定的回呼函式,但支援其他回呼函式是選擇性的。
註冊封包是 GPIO_CLIENT_REGISTRATION_PACKET 結構。 如果 GPIO 控制器驅動程式實作特定的回呼函式,它會將該回呼函式的函式指標寫入這個結構的對應成員。 或者,若要指出不支援特定的回呼函式,驅動程式會將 Null 寫入對應的成員。
註冊封包中必須包含下列回呼函式:
CLIENT_PrepareController CLIENT_QueryControllerBasicInformation CLIENT_StartController CLIENT_StopController CLIENT_ReleaseController 如果上述清單中有任何回呼函式遺失 (,也就是如果註冊封包中的對應函式指標為 Null) ,GPIO_CLX_RegisterClient方法就會失敗。
GPIO 控制器驅動程式不需要支援讀取或寫入 GPIO I/O 針腳,也就是設定為資料輸入或資料輸出的針腳。 (沒有 I/O 針腳的 GPIO 控制器仍然可以轉送來自周邊裝置的中斷要求。) 不過,如果註冊封包包含下列其中一個 I/O 相關回呼函式,封包必須包含下列兩個回呼函式:
CLIENT_ConnectIoPinsCLIENT_DisconnectIoPins 此外,如果註冊封包包含上述清單中的兩個回呼函式,驅動程式必須另外支援從 GPIO I/O 針腳讀取、寫入 GPIO I/O 針腳或兩者。 具體而言,註冊封包必須在下列清單中至少包含一個回呼函式:
CLIENT_ReadGpioPins或CLIENT_ReadGpioPinsUsingMask CLIENT_WriteGpioPins或CLIENT_WriteGpioPinsUsingMask支援讀取的驅動程式必須實作上述清單中的兩個CLIENT_ReadGpioPinsXxx 回呼函式之一。 支援寫入的驅動程式必須實作上述清單中的兩個 CLIENT_WriteGpioPinsXxx 回呼函式之一。
實作CLIENT_ReadGpioPinsUsingMask、CLIENT_WriteGpioPinsUsingMask或兩者的驅動程式,必須在CLIENT_QueryControllerBasicInformation回呼函式所提供的裝置資訊中設定FormatIoRequestsAsMasks旗標位。 實 作CLIENT_ReadGpioPins、 CLIENT_WriteGpioPins或兩者的驅動程式不得設定此旗標位。 如需詳細資訊,請參閱CLIENT_CONTROLLER_BASIC_INFORMATION中的Flags成員描述。
不支援 GPIO 中斷時,不需要 GPIO 控制器驅動程式。 不過,如果註冊封包包含下列任何中斷相關回呼函式,封包必須包含下列所有回呼函式:
CLIENT_EnableInterruptCLIENT_DisableInterruptCLIENT_MaskInterrupts CLIENT_QueryActiveInterrupts CLIENT_UnmaskInterrupt支援中斷遮罩的驅動程式必須實作CLIENT_MaskInterrupts回呼函式。 支援查詢使用中中斷的驅動程式必須實作 CLIENT_QueryActiveInterrupts 回呼函式。
CLIENT_ClearActiveInterrupts回呼函式是特殊案例。 如果 GPIO 控制器硬體在讀取時自動清除作用中中斷, 則不需要CLIENT_ClearActiveInterrupts 函式,且註冊封包中的對應函式指標應設定為 Null。 不過,如果在讀取時不會自動清除作用中中斷,而且如果上述清單中的中斷相關回呼函式是在註冊封包中提供,則必須在封包中包含 CLIENT_ClearActiveInterrupts 函式。 為了指出硬體在讀取時會自動清除作用中的中斷,驅動程式會在CLIENT_QueryControllerBasicInformation回呼函式提供的裝置資訊中設定ActiveInterruptsAutoClearOnRead旗標位。 如需詳細資訊,請參閱CLIENT_CONTROLLER_BASIC_INFORMATION中的Flags成員描述。
如果 GPIO 控制器驅動程式支援 GPIO 中斷,註冊封包可以做為選項,包括下列回呼函式:
CLIENT_QueryEnabledInterruptsGpioClx 支援從Windows 8.1 開始的 CLIENT_QueryEnabledInterrupts函式。
支援 元件層級電源管理的 驅動程式必須實作下列兩個回呼函式:
CLIENT_RestoreBankHardwareCoNtextCLIENT_SaveBankHardwareCoNtext若要指出硬體支援元件層級電源管理,驅動程式會在CLIENT_QueryControllerBasicInformation回呼函式提供的裝置資訊中設定BankIdlePowerMgmtSupported旗標位。 如需詳細資訊,請參閱CLIENT_CONTROLLER_BASIC_INFORMATION中的Flags成員描述。
CLIENT_PreProcessControllerInterrupt、CLIENT_ReconfigureInterrupt和CLIENT_ControllerSpecificFunction回呼函式是選擇性的,而且 GpioClx 可解決某些 GPIO 控制器實作中的硬體特定問題。 只有具有特殊需求的 GPIO 控制器驅動程式會實作這些函式。