다음을 통해 공유


선택적 및 필수 GPIO 콜백 함수

GPIO(범용 I/O) 컨트롤러 드라이버는 GPIO_CLX_RegisterClient 메서드를 호출하여 GPIO 프레임워크 확장(GpioClx)의 클라이언트로 등록합니다. 이 호출 중에 드라이버는 드라이버에서 구현하는 이벤트 콜백 함수 목록을 지정하는 등록 패킷을 GpioClx에 전달합니다. GpioClx는 이러한 콜백 함수를 호출하여 GPIO 컨트롤러 하드웨어를 구성하고, I/O 작업을 수행하고, 인터럽트를 관리합니다. GpioClx는 특정 콜백 함수를 구현하기 위해 GPIO 컨트롤러 드라이버가 필요하지만 다른 콜백 함수에 대한 지원은 선택 사항입니다.

등록 패킷은 GPIO_CLIENT_REGISTRATION_PACKET 구조체입니다. GPIO 컨트롤러 드라이버가 특정 콜백 함수를 구현하는 경우 해당 콜백 함수에 대한 함수 포인터를 이 구조의 해당 멤버에 씁니다. 또는 특정 콜백 함수가 지원되지 않음을 나타내기 위해 드라이버는 해당 멤버에 NULL을 씁니다.

다음 콜백 함수는 등록 패킷에 포함되어야 합니다.

CLIENT_PrepareControllerCLIENT_QueryControllerBasicInformationCLIENT_StartControllerCLIENT_StopControllerCLIENT_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_INFORMATIONFlags 멤버에 대한 설명을 참조하세요.

GPIO 인터럽트 지원을 위해 GPIO 컨트롤러 드라이버가 필요하지 않습니다. 그러나 등록 패킷에 다음 인터럽트 관련 콜백 함수가 포함된 경우 패킷에는 다음 콜백 함수가 모두 포함되어야 합니다.

CLIENT_EnableInterruptCLIENT_DisableInterruptCLIENT_MaskInterruptsCLIENT_QueryActiveInterruptsCLIENT_UnmaskInterrupt 인터럽트 마스킹을 지원하는 드라이버는 CLIENT_MaskInterrupts 콜백 함수를 구현해야 합니다. 활성 인터럽트 쿼리를 지원하는 드라이버는 CLIENT_QueryActiveInterrupts 콜백 함수를 구현해야 합니다.

CLIENT_ClearActiveInterrupts 콜백 함수는 특별한 경우입니다. GPIO 컨트롤러 하드웨어가 읽을 때 활성 인터럽트는 자동으로 지워지면 CLIENT_ClearActiveInterrupts 함수가 필요하지 않으며 등록 패킷의 해당 함수 포인터를 NULL로 설정해야 합니다. 그러나 활성 인터럽트는 읽을 때 자동으로 지워지지 않고 이전 목록의 인터럽트 관련 콜백 함수가 등록 패킷에 제공된 경우 CLIENT_ClearActiveInterrupts 함수를 패킷에 포함해야 합니다. 하드웨어가 읽을 때 활성 인터럽트를 자동으로 지우는 것을 나타내기 위해 드라이버는 CLIENT_QueryControllerBasicInformation 콜백 함수에서 제공하는 디바이스 정보에 ActiveInterruptsAutoClearOnRead 플래그 비트를 설정합니다. 자세한 내용은 CLIENT_CONTROLLER_BASIC_INFORMATIONFlags 멤버에 대한 설명을 참조하세요.

GPIO 컨트롤러 드라이버가 GPIO 인터럽트를 지원하는 경우 등록 패킷은 옵션으로 다음 콜백 함수를 포함할 수 있습니다.

CLIENT_QueryEnabledInterrupts GpioClx는 Windows 8.1 시작하는 CLIENT_QueryEnabledInterrupts 함수를 지원합니다.

구성 요소 수준 전원 관리를 지원하는 드라이버는 다음 콜백 함수를 모두 구현해야 합니다.

CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext 하드웨어가 구성 요소 수준 전원 관리를 지원함을 나타내기 위해 드라이버는 CLIENT_QueryControllerBasicInformation 콜백 함수에서 제공하는 디바이스 정보에 BankIdlePowerMgmtSupported 플래그 비트를 설정합니다. 자세한 내용은 CLIENT_CONTROLLER_BASIC_INFORMATIONFlags 멤버에 대한 설명을 참조하세요.

CLIENT_PreProcessControllerInterrupt, CLIENT_ReconfigureInterruptCLIENT_ControllerSpecificFunction 콜백 함수는 선택 사항이며 일부 GPIO 컨트롤러 구현에서 하드웨어 관련 문제를 해결하기 위해 GpioClx에서 지원됩니다. 특별한 요구 사항이 있는 GPIO 컨트롤러 드라이버만 이러한 기능을 구현합니다.