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