IOCTL_GPIO_READ_PINS IOCTL (gpio.h)
El IOCTL_GPIO_READ_PINS código de control de E/S permite que un cliente del controlador de E/S de uso general (GPIO) lea desde un conjunto de patillas GPIO configuradas como entradas. Normalmente, los clientes de un controlador GPIO son controladores para dispositivos periféricos que se conectan a patillas GPIO.
Código principal
Búfer de entrada
Sin búfer de entrada.
Longitud del búfer de entrada
Ninguno.
Búfer de salida
Búfer de salida.
Longitud del búfer de salida
El búfer de salida debe ser lo suficientemente grande como para contener lecturas de 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 patillas GPIO y el cliente abre una conexión a tres de estos patillas GPIO, un búfer de un byte es lo suficientemente grande para contener los tres valores de 1 bits que se leen de las tres patillas de la conexión.
Bloque de estado
Si la operación se realiza correctamente, el controlador del controlador GPIO 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 en 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 las patillas GPIO. Es posible que se produzca un error en la operación solicitada por diversos motivos, lo que puede incluir una entrada de cliente no válida, recursos bajos y un funcionamiento incorrecto del dispositivo.
Si el búfer de salida no es lo suficientemente grande como para contener los datos que se leen de todas las patillas 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 salidas, el miembro Status se establece en STATUS_GPIO_OPERATION_DENIED.
Comentarios
Esta solicitud lee 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 valores de 1 bits que se leen de estas patillas se guardan en bits 0, 1 y 2 en el búfer de salida. 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 pin GPIO 7 se guarda en el bit 0 (el bit menos significativo) del búfer, el pin GPIO 8 se guarda en el bit 1 del búfer y el pin GPIO 23 se guarda en el bit 2 del búfer.
Cuando el cliente abre una conexión a un dispositivo GPIO de destino, todas las patillas GPIO de esta conexión se configuran como entradas o como salidas. Una solicitud de IOCTL_GPIO_READ_PINS solo puede realizarse correctamente si las patillas de destino son entradas.
El cliente envía esta solicitud de control de E/S al objeto de archivo del 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 en modo kernel (KMDF) llaman al método WdfIoTargetCreate para abrir esta conexión. Los controladores del marco de controladores en 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_READ_PINS para leer un conjunto de patillas de E/S de GPIO, consulte los temas siguientes:
Conexión de un controlador KMDF a patillas de E/S de GPIO
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite a partir de Windows 8. |
Encabezado | gpio.h |