1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_uart: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker======= 4*61c4878aSAndroid Build Coastguard Workerpw_uart 5*61c4878aSAndroid Build Coastguard Worker======= 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_uart 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard WorkerPigweed's ``pw_uart`` module provides a set of interfaces for communicating via 10*61c4878aSAndroid Build Coastguard WorkerUART. 11*61c4878aSAndroid Build Coastguard Worker 12*61c4878aSAndroid Build Coastguard Worker-------- 13*61c4878aSAndroid Build Coastguard WorkerOverview 14*61c4878aSAndroid Build Coastguard Worker-------- 15*61c4878aSAndroid Build Coastguard Worker``pw_uart`` defines core methods for UART communication. This serves 16*61c4878aSAndroid Build Coastguard Workeras a blueprint for concrete UART implementations. You will need to write the 17*61c4878aSAndroid Build Coastguard Workerbackend code tailored to your specific hardware device to interact with the 18*61c4878aSAndroid Build Coastguard WorkerUART peripheral. 19*61c4878aSAndroid Build Coastguard Worker 20*61c4878aSAndroid Build Coastguard WorkerThe interface consists of these main classes: 21*61c4878aSAndroid Build Coastguard Worker 22*61c4878aSAndroid Build Coastguard Worker- `UartBase`_ - Base class which provides basic enable/disable and 23*61c4878aSAndroid Build Coastguard Worker configuration control, but no communication. 24*61c4878aSAndroid Build Coastguard Worker- `Uart`_ - Extends ``pw::uart::UartBase`` to provide blocking Read and Write 25*61c4878aSAndroid Build Coastguard Worker APIs. 26*61c4878aSAndroid Build Coastguard Worker- `UartNonBlocking`_ - Extends ``pw::uart::UartBase`` to provide non-blocking 27*61c4878aSAndroid Build Coastguard Worker (callback-based) Read and Write APIs. 28*61c4878aSAndroid Build Coastguard Worker- `UartBlockingAdapter`_ - Provides the blocking `Uart`_ interface on top of a 29*61c4878aSAndroid Build Coastguard Worker `UartNonBlocking`_ device. 30*61c4878aSAndroid Build Coastguard Worker- `UartStream`_ - Provides the ``pw::stream::NonSeekableReaderWriter`` 31*61c4878aSAndroid Build Coastguard Worker (:ref:`module-pw_stream`) interface on top of a `Uart`_ device. 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Worker.. mermaid:: 34*61c4878aSAndroid Build Coastguard Worker 35*61c4878aSAndroid Build Coastguard Worker classDiagram 36*61c4878aSAndroid Build Coastguard Worker namespace uart { 37*61c4878aSAndroid Build Coastguard Worker class UartBase 38*61c4878aSAndroid Build Coastguard Worker class Uart 39*61c4878aSAndroid Build Coastguard Worker class UartNonBlocking 40*61c4878aSAndroid Build Coastguard Worker class UartBlockingAdapter 41*61c4878aSAndroid Build Coastguard Worker class UartStream 42*61c4878aSAndroid Build Coastguard Worker } 43*61c4878aSAndroid Build Coastguard Worker 44*61c4878aSAndroid Build Coastguard Worker namespace stream { 45*61c4878aSAndroid Build Coastguard Worker class NonSeekableReaderWriter 46*61c4878aSAndroid Build Coastguard Worker } 47*61c4878aSAndroid Build Coastguard Worker 48*61c4878aSAndroid Build Coastguard Worker UartBase <|-- Uart : extends 49*61c4878aSAndroid Build Coastguard Worker UartBase <|-- UartNonBlocking : extends 50*61c4878aSAndroid Build Coastguard Worker 51*61c4878aSAndroid Build Coastguard Worker Uart <|-- UartBlockingAdapter : implements 52*61c4878aSAndroid Build Coastguard Worker UartNonBlocking --> UartBlockingAdapter 53*61c4878aSAndroid Build Coastguard Worker 54*61c4878aSAndroid Build Coastguard Worker NonSeekableReaderWriter <|-- UartStream : implements 55*61c4878aSAndroid Build Coastguard Worker Uart --> UartStream 56*61c4878aSAndroid Build Coastguard Worker 57*61c4878aSAndroid Build Coastguard Worker----------- 58*61c4878aSAndroid Build Coastguard WorkerGet started 59*61c4878aSAndroid Build Coastguard Worker----------- 60*61c4878aSAndroid Build Coastguard Worker.. repository: https://bazel.build/concepts/build-ref#repositories 61*61c4878aSAndroid Build Coastguard Worker 62*61c4878aSAndroid Build Coastguard Worker.. tab-set:: 63*61c4878aSAndroid Build Coastguard Worker 64*61c4878aSAndroid Build Coastguard Worker .. tab-item:: Bazel 65*61c4878aSAndroid Build Coastguard Worker 66*61c4878aSAndroid Build Coastguard Worker Add ``@pigweed//pw_uart`` to the ``deps`` list in your Bazel target: 67*61c4878aSAndroid Build Coastguard Worker 68*61c4878aSAndroid Build Coastguard Worker .. code-block:: 69*61c4878aSAndroid Build Coastguard Worker 70*61c4878aSAndroid Build Coastguard Worker cc_library("...") { 71*61c4878aSAndroid Build Coastguard Worker # ... 72*61c4878aSAndroid Build Coastguard Worker deps = [ 73*61c4878aSAndroid Build Coastguard Worker # ... 74*61c4878aSAndroid Build Coastguard Worker "@pigweed//pw_uart", 75*61c4878aSAndroid Build Coastguard Worker # ... 76*61c4878aSAndroid Build Coastguard Worker ] 77*61c4878aSAndroid Build Coastguard Worker } 78*61c4878aSAndroid Build Coastguard Worker 79*61c4878aSAndroid Build Coastguard Worker This assumes that your Bazel ``WORKSPACE`` has a `repository 80*61c4878aSAndroid Build Coastguard Worker <https://bazel.build/concepts/build-ref#repositories>`_ named ``@pigweed`` 81*61c4878aSAndroid Build Coastguard Worker that points to the upstream Pigweed repository. 82*61c4878aSAndroid Build Coastguard Worker 83*61c4878aSAndroid Build Coastguard Worker .. tab-item:: GN 84*61c4878aSAndroid Build Coastguard Worker 85*61c4878aSAndroid Build Coastguard Worker Add ``$dir_pw_uart`` to the ``deps`` list in your ``pw_executable()`` 86*61c4878aSAndroid Build Coastguard Worker build target: 87*61c4878aSAndroid Build Coastguard Worker 88*61c4878aSAndroid Build Coastguard Worker .. code-block:: 89*61c4878aSAndroid Build Coastguard Worker 90*61c4878aSAndroid Build Coastguard Worker pw_executable("...") { 91*61c4878aSAndroid Build Coastguard Worker # ... 92*61c4878aSAndroid Build Coastguard Worker deps = [ 93*61c4878aSAndroid Build Coastguard Worker # ... 94*61c4878aSAndroid Build Coastguard Worker "$dir_pw_uart", 95*61c4878aSAndroid Build Coastguard Worker # ... 96*61c4878aSAndroid Build Coastguard Worker ] 97*61c4878aSAndroid Build Coastguard Worker } 98*61c4878aSAndroid Build Coastguard Worker 99*61c4878aSAndroid Build Coastguard Worker .. tab-item:: CMake 100*61c4878aSAndroid Build Coastguard Worker 101*61c4878aSAndroid Build Coastguard Worker Add ``pw_uart`` to your ``pw_add_library`` or similar CMake target: 102*61c4878aSAndroid Build Coastguard Worker 103*61c4878aSAndroid Build Coastguard Worker .. code-block:: 104*61c4878aSAndroid Build Coastguard Worker 105*61c4878aSAndroid Build Coastguard Worker pw_add_library(my_library STATIC 106*61c4878aSAndroid Build Coastguard Worker HEADERS 107*61c4878aSAndroid Build Coastguard Worker ... 108*61c4878aSAndroid Build Coastguard Worker PRIVATE_DEPS 109*61c4878aSAndroid Build Coastguard Worker # ... 110*61c4878aSAndroid Build Coastguard Worker pw_uart 111*61c4878aSAndroid Build Coastguard Worker # ... 112*61c4878aSAndroid Build Coastguard Worker ) 113*61c4878aSAndroid Build Coastguard Worker 114*61c4878aSAndroid Build Coastguard Worker.. _module-pw_uart-reference: 115*61c4878aSAndroid Build Coastguard Worker 116*61c4878aSAndroid Build Coastguard Worker------------- 117*61c4878aSAndroid Build Coastguard WorkerAPI reference 118*61c4878aSAndroid Build Coastguard Worker------------- 119*61c4878aSAndroid Build Coastguard Worker 120*61c4878aSAndroid Build Coastguard Worker.. warning:: 121*61c4878aSAndroid Build Coastguard Worker 122*61c4878aSAndroid Build Coastguard Worker Drivers should not implement both ``Uart`` and ``UartNonBlocking`` 123*61c4878aSAndroid Build Coastguard Worker interfaces. 124*61c4878aSAndroid Build Coastguard Worker 125*61c4878aSAndroid Build Coastguard Worker Drivers which support non-blocking (callback) behavior should implement 126*61c4878aSAndroid Build Coastguard Worker ``UartNonBlocking``. Applications that require the blocking ``Uart`` 127*61c4878aSAndroid Build Coastguard Worker interface can use the ``UartBlockingAdapter``. 128*61c4878aSAndroid Build Coastguard Worker 129*61c4878aSAndroid Build Coastguard WorkerUartBase 130*61c4878aSAndroid Build Coastguard Worker======== 131*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::uart::UartBase 132*61c4878aSAndroid Build Coastguard Worker :members: 133*61c4878aSAndroid Build Coastguard Worker 134*61c4878aSAndroid Build Coastguard WorkerUart 135*61c4878aSAndroid Build Coastguard Worker==== 136*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::uart::Uart 137*61c4878aSAndroid Build Coastguard Worker :members: 138*61c4878aSAndroid Build Coastguard Worker 139*61c4878aSAndroid Build Coastguard WorkerUartNonBlocking 140*61c4878aSAndroid Build Coastguard Worker=============== 141*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::uart::UartNonBlocking 142*61c4878aSAndroid Build Coastguard Worker :members: 143*61c4878aSAndroid Build Coastguard Worker 144*61c4878aSAndroid Build Coastguard WorkerUartBlockingAdapter 145*61c4878aSAndroid Build Coastguard Worker=================== 146*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::uart::UartBlockingAdapter 147*61c4878aSAndroid Build Coastguard Worker :members: 148*61c4878aSAndroid Build Coastguard Worker 149*61c4878aSAndroid Build Coastguard WorkerUartStream 150*61c4878aSAndroid Build Coastguard Worker========== 151*61c4878aSAndroid Build Coastguard Worker.. doxygenclass:: pw::uart::UartStream 152*61c4878aSAndroid Build Coastguard Worker :members: 153*61c4878aSAndroid Build Coastguard Worker 154*61c4878aSAndroid Build Coastguard Worker 155*61c4878aSAndroid Build Coastguard Worker.. toctree:: 156*61c4878aSAndroid Build Coastguard Worker :hidden: 157*61c4878aSAndroid Build Coastguard Worker :maxdepth: 1 158*61c4878aSAndroid Build Coastguard Worker 159*61c4878aSAndroid Build Coastguard Worker Backends <backends> 160