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