xref: /aosp_15_r20/external/pigweed/pw_uart/docs.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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