IOCTL_GPIO_WRITE_PINS IOCTL(gpio.h)
IOCTL_GPIO_WRITE_PINS I/O 제어 코드를 사용하면 GPIO(범용 I/O) 컨트롤러의 클라이언트가 출력으로 구성된 GPIO 핀 집합에 쓸 수 있습니다. 일반적으로 GPIO 컨트롤러의 클라이언트는 GPIO 핀에 연결하는 주변 장치용 드라이버입니다.
주 코드
입력 버퍼
입력 버퍼입니다.
입력 버퍼 길이
입력 버퍼는 클라이언트가 요청을 보내는 대상 연결의 일부인 모든 GPIO 핀에 대한 데이터를 포함할 수 있을 만큼 커야 합니다. 예를 들어 GPIO 컨트롤러 하드웨어가 64개의 GPIO 핀을 구현하고 클라이언트가 이러한 GPIO 핀 3개에 대한 연결을 여는 경우 1-바이트 버퍼는 연결의 세 핀에 쓸 1비트 값 3개를 포함하기에 충분히 큽니다.
출력 버퍼
출력 버퍼에는 입력 버퍼와 동일한 데이터가 포함됩니다(이 IOCTL에 대한 TransferType METHOD_BUFFERED).
출력 버퍼 길이
입력 버퍼와 동일합니다.
상태 블록
작업이 성공하면 컨트롤러 드라이버는 Status 멤버를 STATUS_SUCCESS 설정하고 Information 멤버를 요청된 작업 중에 전송된 총 바이트 수로 설정합니다. 작업이 N 비트를 전송하는 경우 전송되는 바이트 수는 (N + 7) / 8입니다. 즉, 정수 나누기 전에 다음 바이트 경계로 반올림하기 위해 N에 7이 추가됩니다.
이 요청이 실패하면 상태 멤버가 오류 코드로 설정되고 GPIO 핀에서 데이터를 읽지 않습니다. 잘못된 클라이언트 입력, 낮은 리소스 및 디바이스 오작동을 포함할 수 있는 다양한 이유로 요청된 작업이 실패할 수 있습니다.
입력 버퍼가 대상 연결의 각 GPIO 핀에 대해 한 비트의 데이터를 포함할 만큼 충분히 크지 않으면 상태 멤버가 STATUS_BUFFER_TOO_SMALL 설정됩니다. 대상 연결의 GPIO 핀이 입력으로 구성된 경우 상태 멤버는 STATUS_GPIO_OPERATION_DENIED 설정됩니다.
발언
이 요청은 클라이언트가 요청을 보내는 대상 연결의 일부인 모든 GPIO 핀에 씁니다. 예를 들어 연결에 3개의 핀이 있는 경우 입력 버퍼의 비트 0, 1 및 2는 이 세 개의 핀에 기록됩니다. 이 예제 연결의 세 핀은 GPIO 컨트롤러 하드웨어의 GPIO 핀 7, 8 및 23에 매핑될 수 있습니다. 이 경우 버퍼의 비트 0(최소 비트)은 GPIO 핀 7에 기록되고, 버퍼의 비트 1은 GPIO 핀 8에 기록되고, 버퍼의 비트 2는 GPIO 핀 23에 기록됩니다.
클라이언트가 대상 GPIO 디바이스에 대한 연결을 열면 이 연결의 모든 GPIO 핀이 입력 또는 출력으로 구성됩니다. IOCTL_GPIO_WRITE_PINS 요청은 대상 핀이 출력되는 경우에만 성공할 수 있습니다.
클라이언트는 이 I/O 컨트롤 요청을 대상 디바이스의 파일 개체로 보냅니다. 파일 개체는 대상에 대한 논리적 연결을 나타내는 FILE_OBJECT 구조체입니다. KMDF(커널 모드 드라이버 프레임워크) 드라이버는 WdfIoTargetCreate 메서드를 호출하여 이 연결을 엽니다. UMDF(사용자 모드 드라이버 프레임워크) 드라이버는 IWDFRemoteTarget::OpenFileByName 메서드를 호출하여 연결을 엽니다.
IOCTL_GPIO_WRITE_PINS 요청을 사용하여 GPIO I/O 핀 집합에 쓰는 방법을 보여 주는 코드 예제는 다음 항목을 참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8부터 지원됩니다. |
헤더 | gpio.h |