IOCTL_GPIO_READ_PINS IOCTL (gpio.h)

IOCTL_GPIO_READ_PINS I/O 控制代码使常规用途 I/O (GPIO) 控制器的客户端可以从配置为输入的一组 GPIO 引脚中读取数据。 通常情况下,GPIO 控制器的客户端是连接到 GPIO 引脚的外围设备的驱动程序。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

无输入缓冲区。

输入缓冲区长度

无。

输出缓冲区

输出缓冲区。

输出缓冲区长度

输出缓冲区应足够大,以包含来自客户端发送请求的目标连接的所有 GPIO 引脚的读数。 例如,如果 GPIO 控制器硬件实现 64 个 GPIO 引脚,并且客户端打开与其中三个 GPIO 引脚的连接,则一字节缓冲区足够大,足以包含从连接中的三个引脚读取的三个 1 位值。

状态块

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

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

如果输出缓冲区不够大,无法包含从目标连接中的所有 GPIO 引脚读取的数据, 则状态 成员将设置为STATUS_BUFFER_TOO_SMALL。 如果目标连接中的 GPIO 引脚配置为输出, 则 Status 成员设置为 STATUS_GPIO_OPERATION_DENIED。

注解

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

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

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

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

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

要求

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

另请参阅

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate