IOCTL_GPIO_READ_PINS IOCTL (gpio.h)
IOCTL_GPIO_READ_PINS I/O 控制代码使常规用途 I/O (GPIO) 控制器的客户端可以从配置为输入的一组 GPIO 引脚中读取数据。 通常情况下,GPIO 控制器的客户端是连接到 GPIO 引脚的外围设备的驱动程序。
主要代码
输入缓冲区
无输入缓冲区。
输入缓冲区长度
无。
输出缓冲区
输出缓冲区。
输出缓冲区长度
输出缓冲区应足够大,以包含来自客户端发送请求的目标连接的所有 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 引脚的代码示例,请参阅以下主题:
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 支持从Windows 8开始。 |
标头 | gpio.h |