IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)

IOCTL_GPIO_WRITE_PINS I/O 控制代码使常规用途 I/O (GPIO) 控制器的客户端能够写入配置为输出的一组 GPIO 引脚。 通常情况下,GPIO 控制器的客户端是连接到 GPIO 引脚的外围设备的驱动程序。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

输入缓冲区。

输入缓冲区长度

输入缓冲区应足够大,以包含所有 GPIO 引脚的数据,这些引脚是客户端向其发送请求的目标连接的一部分。 例如,如果 GPIO 控制器硬件实现 64 个 GPIO 引脚,并且客户端打开与其中三个 GPIO 引脚的连接,则一字节缓冲区足够大,足以包含三个 1 位值,以写入连接中的三个引脚。

输出缓冲区

输出缓冲区包含与输入缓冲区 (相同的数据,因为此 IOCTL 的 TransferType 是METHOD_BUFFERED) 。

输出缓冲区长度

与输入缓冲区相同。

状态块

如果操作成功,控制器驱动程序会将 Status 成员设置为 STATUS_SUCCESS,并将 Information 成员设置为在请求的操作期间传输的总字节数。 如果操作传输 N 位,则传输的字节数 (N + 7) / 8。 (也就是说,将 7 添加到 N,以在整数除以 8.)

如果此请求失败, 则 Status 成员将设置为错误代码,并且不会从 GPIO 引脚读取任何数据。 请求的操作可能由于各种原因而失败,原因可能包括客户端输入无效、资源不足和设备故障。

如果输入缓冲区不够大,无法包含目标连接中每个 GPIO 引脚的一位数据, 则 Status 成员设置为STATUS_BUFFER_TOO_SMALL。 如果目标连接中的 GPIO 引脚配置为输入, 则状态 成员设置为STATUS_GPIO_OPERATION_DENIED。

注解

此请求写入客户端向其发送请求的目标连接中的所有 GPIO 引脚。 例如,如果连接有三个引脚,则输入缓冲区中的位 0、1 和 2 将写入这三个引脚。 此示例连接中的三个引脚可能映射到 GPIO 控制器硬件中的 GPIO 引脚 7、8 和 23。 如果是,位 0 (缓冲区中最小有效位) 写入 GPIO 引脚 7,缓冲区中的位 1 写入 GPIO 引脚 8,缓冲区中的位 2 写入 GPIO 引脚 23。

当客户端打开与目标 GPIO 设备的连接时,此连接中的所有 GPIO 引脚都配置为输入或输出。 仅当目标引脚为输出时, IOCTL_GPIO_WRITE_PINS 请求才能成功。

客户端将此 I/O 控制请求发送到目标设备的文件对象。 文件对象是表示与目标的逻辑连接的 FILE_OBJECT 结构。 内核模式驱动程序框架 (KMDF) 驱动程序调用 WdfIoTargetCreate 方法来打开此连接。 用户模式驱动程序框架 (UMDF) 驱动程序调用 IWDFRemoteTarget::OpenFileByName 方法来打开连接。

有关演示如何使用 IOCTL_GPIO_WRITE_PINS 请求写入一组 GPIO I/O 引脚的代码示例,请参阅以下主题:

将 KMDF 驱动程序连接到 GPIO I/O 管脚

要求

要求
最低受支持的客户端 支持从Windows 8开始。
标头 gpio.h

另请参阅

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate