다음을 통해 공유


IOCTL_GPIO_READ_PINS IOCTL(gpio.h)

IOCTL_GPIO_READ_PINS I/O 제어 코드를 사용하면 GPIO(범용 I/O) 컨트롤러의 클라이언트가 입력으로 구성된 GPIO 핀 집합에서 읽을 수 있습니다. 일반적으로 GPIO 컨트롤러의 클라이언트는 GPIO 핀에 연결하는 주변 장치용 드라이버입니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

입력 버퍼가 없습니다.

입력 버퍼 길이

없음

출력 버퍼

출력 버퍼입니다.

출력 버퍼 길이

출력 버퍼는 클라이언트가 요청을 보내는 대상 연결의 일부인 모든 GPIO 핀의 판독값을 포함할 수 있을 만큼 커야 합니다. 예를 들어 GPIO 컨트롤러 하드웨어가 64개의 GPIO 핀을 구현하고 클라이언트가 이러한 GPIO 핀 3개에 대한 연결을 여는 경우, 1비트 버퍼는 연결의 세 핀에서 읽은 3개의 1비트 값을 포함할 정도로 충분히 큽니다.

상태 블록

작업이 성공하면 GPIO 컨트롤러 드라이버는 상태 멤버를 STATUS_SUCCESS 설정하고 요청된 작업 중에 전송된 총 바이트 수로 정보 멤버를 설정합니다. 작업이 N비트를 전송하는 경우 전송되는 바이트 수는 (N + 7) / 8입니다. 즉, 정수 나누기 전에 다음 바이트 경계로 반올림하기 위해 7이 N에 추가됩니다.

이 요청이 실패하면 상태 멤버가 오류 코드로 설정되고 GPIO 핀에서 데이터를 읽지 않습니다. 잘못된 클라이언트 입력, 낮은 리소스 및 디바이스 오작동을 포함할 수 있는 다양한 이유로 요청된 작업이 실패할 수 있습니다.

출력 버퍼가 대상 연결의 모든 GPIO 핀에서 읽은 데이터를 포함할 만큼 충분히 크지 않으면 Status 멤버가 STATUS_BUFFER_TOO_SMALL 설정됩니다. 대상 연결의 GPIO 핀이 출력으로 구성된 경우 Status 멤버는 STATUS_GPIO_OPERATION_DENIED 설정됩니다.

설명

이 요청은 클라이언트가 요청을 보내는 대상 연결의 일부인 모든 GPIO 핀을 읽습니다. 예를 들어 연결에 3개의 핀이 있는 경우 이러한 핀에서 읽은 1비트 값은 출력 버퍼의 비트 0, 1 및 2에 저장됩니다. 이 예제 연결의 세 핀은 GPIO 컨트롤러 하드웨어의 GPIO 핀 7, 8 및 23에 매핑될 수 있습니다. 이 경우 GPIO 핀 7은 버퍼의 비트 0(가장 중요한 비트)에 저장되고, GPIO 핀 8은 버퍼의 비트 1에 저장되고, GPIO 핀 23은 버퍼의 비트 2에 저장됩니다.

클라이언트가 대상 GPIO 디바이스에 대한 연결을 열면 이 연결의 모든 GPIO 핀이 입력 또는 출력으로 구성됩니다. IOCTL_GPIO_READ_PINS 요청은 대상 핀이 입력인 경우에만 성공할 수 있습니다.

클라이언트는 대상 디바이스의 파일 개체에 이 I/O 컨트롤 요청을 보냅니다. 파일 개체는 대상에 대한 논리적 연결을 나타내는 FILE_OBJECT 구조체입니다. KMDF(커널 모드 드라이버 프레임워크) 드라이버는 WdfIoTargetCreate 메서드를 호출하여 이 연결을 엽니다. UMDF(사용자 모드 드라이버 프레임워크) 드라이버는 IWDFRemoteTarget::OpenFileByName 메서드를 호출하여 연결을 엽니다.

IOCTL_GPIO_READ_PINS 요청을 사용하여 GPIO I/O 핀 집합을 읽는 방법을 보여 주는 코드 예제는 다음 topics 참조하세요.

KMDF 드라이버를 GPIO I/O 핀에 연결

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 부터 지원합니다.
머리글 gpio.h

추가 정보

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTarget만들기