IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)

El código de control de E/S de IOCTL_GPIO_WRITE_PINS permite que un cliente del controlador de E/S de uso general (GPIO) escriba en un conjunto de patillas GPIO configuradas como salidas. Normalmente, los clientes de un controlador GPIO son controladores para dispositivos periféricos que se conectan a patillas GPIO.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada

Búfer de entrada.

Longitud del búfer de entrada

El búfer de entrada debe ser lo suficientemente grande como para contener datos para todas las patillas GPIO que forman parte de la conexión de destino a la que el cliente envía la solicitud. Por ejemplo, si el hardware del controlador GPIO implementa 64 pines GPIO y el cliente abre una conexión a tres de estos pines GPIO, un búfer de un byte es lo suficientemente grande para contener los tres valores de 1 bits para escribir en los tres pines de la conexión.

Búfer de salida

El búfer de salida contiene los mismos datos que el búfer de entrada (porque transferType para este IOCTL es METHOD_BUFFERED).

Longitud del búfer de salida

Igual que el búfer de entrada.

Bloque de estado

Si la operación se realiza correctamente, el controlador del controlador establece el miembro Status en STATUS_SUCCESS y establece el miembro Information en el número total de bytes transferidos durante la operación solicitada. Si la operación transfiere N bits, el número de bytes transferidos es (N + 7) / 8. (Es decir, 7 se agrega a N para redondear hasta el siguiente límite de bytes antes de la división de enteros por 8).

Si se produce un error en esta solicitud, el miembro Status se establece en un código de error y no se lee ningún dato de los patillas GPIO. Es posible que se produzca un error en la operación solicitada por varios motivos, lo que puede incluir entradas de cliente no válidas, recursos bajos y un error en el dispositivo.

Si el búfer de entrada no es lo suficientemente grande como para contener un bit de datos para cada patilla GPIO en la conexión de destino, el miembro Status se establece en STATUS_BUFFER_TOO_SMALL. Si las patillas GPIO de la conexión de destino se configuran como entradas, el miembro Status se establece en STATUS_GPIO_OPERATION_DENIED.

Comentarios

Esta solicitud escribe en todas las patillas GPIO que forman parte de la conexión de destino a la que el cliente envía la solicitud. Por ejemplo, si la conexión tiene tres patillas, los bits 0, 1 y 2 del búfer de entrada se escriben en estos tres pines. Los tres pines de esta conexión de ejemplo podrían asignarse a patillas GPIO 7, 8 y 23 en el hardware del controlador GPIO. Si es así, el bit 0 (el bit menos significativo) del búfer se escribe en el pin GPIO 7, el bit 1 del búfer se escribe en el pin GPIO 8 y el bit 2 en el búfer se escribe en el pin GPIO 23.

Cuando el cliente abre una conexión a un dispositivo GPIO de destino, todos los patillas GPIO de esta conexión se configuran como entradas o como salidas. Una solicitud de IOCTL_GPIO_WRITE_PINS solo puede realizarse correctamente si las patillas de destino son salidas.

El cliente envía esta solicitud de control de E/S al objeto de archivo para el dispositivo de destino. El objeto de archivo es una estructura FILE_OBJECT que representa una conexión lógica con el destino. Los controladores del marco de controladores del modo kernel (KMDF) llaman al método WdfIoTargetCreate para abrir esta conexión. Los controladores del marco de controladores del modo de usuario (UMDF) llaman al método IWDFRemoteTarget::OpenFileByName para abrir la conexión.

Para obtener ejemplos de código que muestran cómo usar la solicitud de IOCTL_GPIO_WRITE_PINS para escribir en un conjunto de patillas de E/S de GPIO, consulte los temas siguientes:

Conexión de un controlador KMDF a patillas de E/S gpIO

Requisitos

Requisito Value
Cliente mínimo compatible Se admite a partir de Windows 8.
Encabezado gpio.h

Consulte también

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate