| .. SPDX-License-Identifier: GPL-2.0 | |
| .. _GPIO_LINEINFO_CHANGED_READ: | |
| ************************** | |
| GPIO_LINEINFO_CHANGED_READ | |
| ************************** | |
| .. warning:: | |
| This ioctl is part of chardev_v1.rst and is obsoleted by | |
| gpio-v2-lineinfo-changed-read.rst. | |
| Name | |
| ==== | |
| GPIO_LINEINFO_CHANGED_READ - Read line info change events for watched lines | |
| from the chip. | |
| Synopsis | |
| ======== | |
| ``int read(int chip_fd, void *buf, size_t count)`` | |
| Arguments | |
| ========= | |
| ``chip_fd`` | |
| The file descriptor of the GPIO character device returned by `open()`. | |
| ``buf`` | |
| The buffer to contain the :c:type:`events<gpioline_info_changed>`. | |
| ``count`` | |
| The number of bytes available in ``buf``, which must be at least the size | |
| of a :c:type:`gpioline_info_changed` event. | |
| Description | |
| =========== | |
| Read line info change events for watched lines from the chip. | |
| .. note:: | |
| Monitoring line info changes is not generally required, and would typically | |
| only be performed by a system monitoring component. | |
| These events relate to changes in a line's request state or configuration, | |
| not its value. Use gpio-lineevent-data-read.rst to receive events when a | |
| line changes value. | |
| A line must be watched using gpio-get-lineinfo-watch-ioctl.rst to generate | |
| info changed events. Subsequently, a request, release, or reconfiguration | |
| of the line will generate an info changed event. | |
| The kernel timestamps events when they occur and stores them in a buffer | |
| from where they can be read by userspace at its convenience using `read()`. | |
| The size of the kernel event buffer is fixed at 32 events per ``chip_fd``. | |
| The buffer may overflow if bursts of events occur quicker than they are read | |
| by userspace. If an overflow occurs then the most recent event is discarded. | |
| Overflow cannot be detected from userspace. | |
| Events read from the buffer are always in the same order that they were | |
| detected by the kernel, including when multiple lines are being monitored by | |
| the one ``chip_fd``. | |
| To minimize the number of calls required to copy events from the kernel to | |
| userspace, `read()` supports copying multiple events. The number of events | |
| copied is the lower of the number available in the kernel buffer and the | |
| number that will fit in the userspace buffer (``buf``). | |
| A `read()` will block if no event is available and the ``chip_fd`` has not | |
| been set **O_NONBLOCK**. | |
| The presence of an event can be tested for by checking that the ``chip_fd`` is | |
| readable using `poll()` or an equivalent. | |
| First added in 5.7. | |
| Return Value | |
| ============ | |
| On success the number of bytes read, which will be a multiple of the size of | |
| a :c:type:`gpioline_info_changed` event. | |
| On error -1 and the ``errno`` variable is set appropriately. | |
| Common error codes are described in error-codes.rst. |