Compartilhar via


IOCTL_GPIO_READ_PINS IOCTL (gpio.h)

O código de controle de E/ S IOCTL_GPIO_READ_PINS permite que um cliente do controlador de E/S de uso geral (GPIO) leia de um conjunto de pinos GPIO configurados como entradas. 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

Nenhum buffer de entrada.

Comprimento do buffer de entrada

Nenhum.

Buffer de saída

O buffer de saída.

Comprimento do buffer de saída

O buffer de saída deve ser grande o suficiente para conter leituras de 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 lidos dos três pinos na conexão.

Bloco de status

Se a operação for bem-sucedida, o driver do controlador GPIO definirá o membro Status como STATUS_SUCCESS e definirá o membro Information 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 saída não for grande o suficiente para conter os dados lidos de todos os pinos 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 saídas, o membro Status será definido como STATUS_GPIO_OPERATION_DENIED.

Comentários

Essa solicitação lê 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 valores de 1 bit lidos desses pinos serão salvos nos bits 0, 1 e 2 no buffer de saída. 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 pino GPIO 7 é salvo no bit 0 (o bit menos significativo) do buffer, o pino GPIO 8 é salvo no bit 1 do buffer e o pino GPIO 23 é salvo no bit 2 do buffer.

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_READ_PINS só poderá ser bem-sucedida se os pinos de destino forem entradas.

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_READ_PINS para ler 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