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_SUCCESS,并将 信息 成员设置为请求的作期间传输的总字节数。 如果作传输 N 位,则传输的字节数为 (N + 7) / 8。 (也就是说,将 7 添加到 N,以在整数除以 8 之前向上舍入到下一个字节边界。

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

如果输出缓冲区不够大,无法包含从目标连接中的所有 GPIO 引脚读取的数据,则 状态 成员设置为STATUS_BUFFER_TOO_SMALL。 如果目标连接中的 GPIO 引脚配置为输出,则 状态 成员设置为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