GPIO_LINEINFO_CHANGED_READ¶
警告
此ioctl是GPIO字符设备用户空间API (v1)的一部分,已被GPIO_V2_LINEINFO_CHANGED_READ取代。
名称¶
GPIO_LINEINFO_CHANGED_READ - 从芯片读取被监视线路的线路信息更改事件。
概要¶
int read(int chip_fd, void *buf, size_t count)
参数¶
chip_fd
由open()返回的GPIO字符设备的文件描述符。
buf
包含
事件
的缓冲区。count
buf
中可用的字节数,必须至少为gpioline_info_changed
事件的大小。
描述¶
从芯片读取被监视线路的线路信息更改事件。
必须使用GPIO_GET_LINEINFO_WATCH_IOCTL监视线路以生成信息更改事件。随后,线路的请求、释放或重新配置将生成信息更改事件。
内核会在事件发生时对其进行时间戳标记,并将其存储在缓冲区中,用户空间可以使用read()随时从中读取。
内核事件缓冲区的大小固定为每个chip_fd
32个事件。
如果事件爆发的速度快于用户空间读取的速度,则缓冲区可能会溢出。如果发生溢出,则会丢弃最近的事件。无法从用户空间检测到溢出。
从缓冲区读取的事件始终按照内核检测到的顺序排列,包括当多个线路被同一个chip_fd
监视时。
为了最大限度地减少将事件从内核复制到用户空间所需的调用次数,read()支持复制多个事件。复制的事件数是内核缓冲区中可用的事件数和用户空间缓冲区(buf
)中可以容纳的事件数之间的较小值。
如果当前没有事件可用且chip_fd
未设置为**O_NONBLOCK**,则read()将阻塞。
可以使用poll()或等效方法检查chip_fd
是否可读来测试事件的存在。
首次添加于5.7。
返回值¶
成功时,读取的字节数将是gpioline_info_changed
事件大小的倍数。
失败时返回 -1,并相应地设置errno
变量。常见的错误代码在GPIO错误代码中描述。