Partilhar via


IOCTL_GPIO_READ_PINS IOCTL (gpio.h)

O código de controle de E/S de IOCTL_GPIO_READ_PINS permite que um cliente do controlador de E/S de uso geral (GPIO) leia a partir 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 para 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 inteiro por 8.)

Se essa solicitação falhar, o membro status do será definido como um código de erro e nenhum dado será lido dos pinos do GPIO. A operação solicitada pode falhar por vários motivos, que podem incluir entrada inválida do cliente, recursos baixos 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 do será definido como STATUS_BUFFER_TOO_SMALL. Se os pinos gpio na conexão de destino forem configurados como saídas, o membro status do será definido como STATUS_GPIO_OPERATION_DENIED.

Observações

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 lido 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 os pinos GPIO 7, 8 e 23 no hardware do controlador GPIO. Nesse caso, o pino 7 do GPIO é salvo no bit 0 (o bit menos significativo) do buffer, o pino 8 do GPIO é salvo no bit 1 do buffer e o pin 23 do GPIO é 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 do dispositivo de destino. O objeto de arquivo é uma estrutura FILE_OBJECT que representa uma conexão lógica com o destino. drivers KMDF ( de estrutura de driver no modo Kernel) chamam o método WdfIoTargetCreate para abrir essa conexão. drivers de de estrutura de driver do modo de usuário (UMDF) 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:

conectar um driver KMDF a pinos de E/S gpio

Requisitos

Requisito Valor
de cliente com suporte mínimo Com suporte a partir do Windows 8.
cabeçalho gpio.h

Consulte também

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate