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