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

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