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

包含events的缓冲区。

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