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_LINE_EVENT_READ 接收事件。

必须使用 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 错误代码 中描述。