| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- .. SPDX-License-Identifier: GPL-2.0
- .. _GPIO_LINEEVENT_DATA_READ:
- ************************
- GPIO_LINEEVENT_DATA_READ
- ************************
- .. warning::
- This ioctl is part of chardev_v1.rst and is obsoleted by
- gpio-v2-line-event-read.rst.
- Name
- ====
- GPIO_LINEEVENT_DATA_READ - Read edge detection events from a line event.
- Synopsis
- ========
- ``int read(int event_fd, void *buf, size_t count)``
- Arguments
- =========
- ``event_fd``
- The file descriptor of the GPIO character device, as returned in the
- :c:type:`request.fd<gpioevent_request>` by gpio-get-lineevent-ioctl.rst.
- ``buf``
- The buffer to contain the :c:type:`events<gpioevent_data>`.
- ``count``
- The number of bytes available in ``buf``, which must be at
- least the size of a :c:type:`gpioevent_data`.
- Description
- ===========
- Read edge detection events for a line from a line event.
- Edge detection must be enabled for the input line using either
- ``GPIOEVENT_REQUEST_RISING_EDGE`` or ``GPIOEVENT_REQUEST_FALLING_EDGE``, or
- both. Edge events are then generated whenever edge interrupts are detected on
- the input line.
- Edges are defined in terms of changes to the logical line value, so an inactive
- to active transition is a rising edge. If ``GPIOHANDLE_REQUEST_ACTIVE_LOW`` is
- set then logical polarity is the opposite of physical polarity, and
- ``GPIOEVENT_REQUEST_RISING_EDGE`` then corresponds to a falling physical edge.
- The kernel captures and timestamps edge events as close as possible to their
- occurrence and stores them in a buffer from where they can be read by
- userspace at its convenience using `read()`.
- The source of the clock for :c:type:`event.timestamp<gpioevent_data>` is
- ``CLOCK_MONOTONIC``, except for kernels earlier than Linux 5.7 when it was
- ``CLOCK_REALTIME``. There is no indication in the :c:type:`gpioevent_data`
- as to which clock source is used, it must be determined from either the kernel
- version or sanity checks on the timestamp itself.
- Events read from the buffer are always in the same order that they were
- detected by the kernel.
- The size of the kernel event buffer is fixed at 16 events.
- 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.
- 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``).
- The `read()` will block if no event is available and the ``event_fd`` has not
- been set **O_NONBLOCK**.
- The presence of an event can be tested for by checking that the ``event_fd`` is
- readable using `poll()` or an equivalent.
- Return Value
- ============
- On success the number of bytes read, which will be a multiple of the size of
- a :c:type:`gpio_lineevent_data` event.
- On error -1 and the ``errno`` variable is set appropriately.
- Common error codes are described in error-codes.rst.
|