.. _module-pw_digital_io_linux: .. cpp:namespace-push:: pw::digital_io =================== pw_digital_io_linux =================== .. pigweed-module:: :name: pw_digital_io_linux ``pw_digital_io_linux`` implements the :ref:`module-pw_digital_io` interface using the `Linux userspace gpio-cdev interface `_. .. note:: Currently only the v1 userspace ABI is supported (https://pwbug.dev/328268007). ------------- API reference ------------- The following classes make up the public API: ``LinuxDigitalIoChip`` ====================== Represents an open handle to a GPIO *chip* (e.g. ``/dev/gpiochip0``). This can be created using an existing file descriptor (``LinuxDigitalIoChip(fd)``) or by opening a given path (``LinuxDigitalIoChip::Open(path)``). ``LinuxDigitalIn`` ================== Represents a single input line and implements :cpp:class:`DigitalIn`. This is acquired by calling ``chip.GetInputLine()`` with an appropriate ``LinuxInputConfig``. ``LinuxDigitalInInterrupt`` =========================== Represents a single input line configured for interrupts and implements :cpp:class:`DigitalInInterrupt`. This is acquired by calling ``chip.GetInterruptLine()`` with an appropriate ``LinuxInputConfig``. ``LinuxDigitalOut`` =================== Represents a single input line and implements :cpp:class:`DigitalOut`. This is acquired by calling ``chip.GetOutputLine()`` with an appropriate ``LinuxOutputConfig``. .. warning:: The ``Disable()`` implementation only closes the GPIO handle file descriptor, relying on the underlying GPIO driver / pinctrl to restore the state of the line. This may or may not be implemented depending on the GPIO driver. ------ Guides ------ Example code to use GPIO pins: Configure an input pin and get its state ======================================== .. literalinclude:: examples/input.cc :language: cpp :linenos: :lines: 15- Configure an output pin and set its state ========================================= .. literalinclude:: examples/output.cc :language: cpp :linenos: :lines: 15- Configure an interrupt pin and handle events ============================================ .. literalinclude:: examples/interrupt.cc :language: cpp :linenos: :lines: 15- .. _module-pw_digital_io_linux-cli: ---------------------- Command-Line Interface ---------------------- This module also provides a tool also named ``pw_digital_io_linux`` which provides a basic command-line interface to the library. It provides the following sub-commands: ``get`` ======= Configure a GPIO line as an input and get its value. Usage: .. code-block:: none get [-i] CHIP LINE Options: * ``-i``: Invert; configure as active-low. Arguments: * ``CHIP``: gpiochip path (e.g. ``/dev/gpiochip0``) * ``LINE``: GPIO line number (e.g. ``1``) ``set`` ======= Configure a GPIO line as an output and set its value. .. warning:: After this process exits, the GPIO line could immediately return to its hardware-controlled default state (depending on the GPIO driver). Usage: .. code-block:: none set [-i] CHIP LINE VALUE Options: * ``-i``: Invert; configure as active-low. Arguments: * ``CHIP``: gpiochip path (e.g. ``/dev/gpiochip0``) * ``LINE``: GPIO line number (e.g. ``1``) * ``VALUE``: the value to set (``0`` = inactive or ``1`` = active) .. _module-pw_digital_io_linux-cli-watch: ``watch`` ========= Configure a GPIO line as an input and watch for interrupt events. By default, both rising and falling edges will trigger an event. This can be changed via the ``-t`` option. Usage: .. code-block:: none watch [-i] [{-ta,-tb,-td}] CHIP LINE Options: * ``-i``: Invert; configure as active-low. * ``-t``: Trigger for an interrupt: * ``-ta`` - activating edge * ``-tb`` - both edges (default) * ``-td`` - deactivating edge Arguments: * ``CHIP``: gpiochip path (e.g. ``/dev/gpiochip0``) * ``LINE``: GPIO line number (e.g. ``1``) .. cpp:namespace-pop::