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 错误代码中进行了描述。