IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)

O código de controle de E/S IOCTL_GPIO_WRITE_PINS permite que um cliente do controlador de E/S de uso geral (GPIO) escreva em um conjunto de pinos GPIO configurados como saídas. Normalmente, os clientes de um controlador GPIO são drivers para dispositivos periféricos que se conectam a pinos GPIO.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada

O buffer de entrada.

Comprimento do buffer de entrada

O buffer de entrada deve ser grande o suficiente para conter dados para todos os pinos gpio que fazem parte da conexão de destino para a qual o cliente envia a solicitação. Por exemplo, se o hardware do controlador GPIO implementar 64 pinos GPIO e o cliente abrir uma conexão com três desses pinos GPIO, um buffer de um byte será suficientemente grande para conter os três valores de 1 bit a serem gravados nos três pinos na conexão.

Buffer de saída

O buffer de saída contém os mesmos dados que o buffer de entrada (porque o TransferType para esse IOCTL é METHOD_BUFFERED).

Comprimento do buffer de saída

O mesmo que o buffer de entrada.

Bloco de status

Se a operação for bem-sucedida, o driver do controlador definirá o membro Status como STATUS_SUCCESS e definirá o membro Informações como o número total de bytes transferidos durante a operação solicitada. Se a operação transferir N bits, o número de bytes transferidos será (N + 7) / 8. (Ou seja, 7 é adicionado a N para arredondar até o próximo limite de bytes antes da divisão de inteiros por 8.)

Se essa solicitação falhar, o membro Status será definido como um código de erro e nenhum dado será lido dos pinos gpio. A operação solicitada pode falhar por vários motivos, o que pode incluir entrada inválida do cliente, poucos recursos e mau funcionamento do dispositivo.

Se o buffer de entrada não for grande o suficiente para conter um bit de dados para cada pino GPIO na conexão de destino, o membro Status será definido como STATUS_BUFFER_TOO_SMALL. Se os pinos GPIO na conexão de destino forem configurados como entradas, o membro Status será definido como STATUS_GPIO_OPERATION_DENIED.

Comentários

Essa solicitação grava em todos os pinos gpio que fazem parte da conexão de destino à qual o cliente envia a solicitação. Por exemplo, se a conexão tiver três pinos, os bits 0, 1 e 2 do buffer de entrada serão gravados nesses três pinos. Os três pinos nesta conexão de exemplo podem ser mapeados para pinos GPIO 7, 8 e 23 no hardware do controlador GPIO. Nesse caso, o bit 0 (o bit menos significativo) no buffer é gravado no pino GPIO 7, o bit 1 no buffer é gravado no pino GPIO 8 e o bit 2 no buffer é gravado no pino GPIO 23.

Quando o cliente abre uma conexão com um dispositivo GPIO de destino, todos os pinos gpio nessa conexão são configurados como entradas ou como saídas. Uma solicitação IOCTL_GPIO_WRITE_PINS só poderá ser bem-sucedida se os pinos de destino forem saídas.

O cliente envia essa solicitação de controle de E/S para o objeto de arquivo para o dispositivo de destino. O objeto de arquivo é uma estrutura FILE_OBJECT que representa uma conexão lógica com o destino. Os drivers KMDF (estrutura de driver do modo kernel) chamam o método WdfIoTargetCreate para abrir essa conexão. Os drivers umDF (estrutura de driver do modo de usuário) chamam o método IWDFRemoteTarget::OpenFileByName para abrir a conexão.

Para obter exemplos de código que mostram como usar a solicitação IOCTL_GPIO_WRITE_PINS para gravar em um conjunto de pinos de E/S gpio, consulte os seguintes tópicos:

Conectando um driver KMDF a pinos de E/S gpio

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte a partir do Windows 8.
Cabeçalho gpio.h

Confira também

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate