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
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 |