xref: /aosp_15_r20/external/pigweed/pw_rpc/docs.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_rpc:
2*61c4878aSAndroid Build Coastguard Worker
3*61c4878aSAndroid Build Coastguard Worker======
4*61c4878aSAndroid Build Coastguard Workerpw_rpc
5*61c4878aSAndroid Build Coastguard Worker======
6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module::
7*61c4878aSAndroid Build Coastguard Worker   :name: pw_rpc
8*61c4878aSAndroid Build Coastguard Worker
9*61c4878aSAndroid Build Coastguard Worker.. tab-set::
10*61c4878aSAndroid Build Coastguard Worker
11*61c4878aSAndroid Build Coastguard Worker
12*61c4878aSAndroid Build Coastguard Worker   .. tab-item:: blinky.proto
13*61c4878aSAndroid Build Coastguard Worker
14*61c4878aSAndroid Build Coastguard Worker      .. code-block:: protobuf
15*61c4878aSAndroid Build Coastguard Worker
16*61c4878aSAndroid Build Coastguard Worker         /* //applications/blinky/blinky.proto */
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker         syntax = "proto3";
19*61c4878aSAndroid Build Coastguard Worker
20*61c4878aSAndroid Build Coastguard Worker         package blinky;
21*61c4878aSAndroid Build Coastguard Worker
22*61c4878aSAndroid Build Coastguard Worker         import "pw_protobuf_protos/common.proto";
23*61c4878aSAndroid Build Coastguard Worker
24*61c4878aSAndroid Build Coastguard Worker         service Blinky {
25*61c4878aSAndroid Build Coastguard Worker           // Toggles the LED on or off.
26*61c4878aSAndroid Build Coastguard Worker           rpc ToggleLed(pw.protobuf.Empty) returns (pw.protobuf.Empty);
27*61c4878aSAndroid Build Coastguard Worker           // Continuously blinks the board LED a specified number of times.
28*61c4878aSAndroid Build Coastguard Worker           rpc Blink(BlinkRequest) returns (pw.protobuf.Empty);
29*61c4878aSAndroid Build Coastguard Worker         }
30*61c4878aSAndroid Build Coastguard Worker
31*61c4878aSAndroid Build Coastguard Worker         message BlinkRequest {
32*61c4878aSAndroid Build Coastguard Worker           // The interval at which to blink the LED, in milliseconds.
33*61c4878aSAndroid Build Coastguard Worker           uint32 interval_ms = 1;
34*61c4878aSAndroid Build Coastguard Worker           // The number of times to blink the LED.
35*61c4878aSAndroid Build Coastguard Worker           optional uint32 blink_count = 2;
36*61c4878aSAndroid Build Coastguard Worker         } // BlinkRequest
37*61c4878aSAndroid Build Coastguard Worker
38*61c4878aSAndroid Build Coastguard Worker   .. tab-item:: main.cc
39*61c4878aSAndroid Build Coastguard Worker
40*61c4878aSAndroid Build Coastguard Worker      .. code-block:: cpp
41*61c4878aSAndroid Build Coastguard Worker
42*61c4878aSAndroid Build Coastguard Worker         /* //applications/blinky/main.cc */
43*61c4878aSAndroid Build Coastguard Worker
44*61c4878aSAndroid Build Coastguard Worker         // ...
45*61c4878aSAndroid Build Coastguard Worker         #include "applications/blinky/blinky.rpc.pb.h"
46*61c4878aSAndroid Build Coastguard Worker         #include "pw_system/rpc_server.h"
47*61c4878aSAndroid Build Coastguard Worker         // ...
48*61c4878aSAndroid Build Coastguard Worker
49*61c4878aSAndroid Build Coastguard Worker         class BlinkyService final
50*61c4878aSAndroid Build Coastguard Worker             : public blinky::pw_rpc::nanopb::Blinky::Service<BlinkyService> {
51*61c4878aSAndroid Build Coastguard Worker         public:
52*61c4878aSAndroid Build Coastguard Worker           pw::Status ToggleLed(const pw_protobuf_Empty &, pw_protobuf_Empty &) {
53*61c4878aSAndroid Build Coastguard Worker             // Turn the LED off if it's currently on and vice versa
54*61c4878aSAndroid Build Coastguard Worker           }
55*61c4878aSAndroid Build Coastguard Worker           pw::Status Blink(const blinky_BlinkRequest &request, pw_protobuf_Empty &) {
56*61c4878aSAndroid Build Coastguard Worker             if (request.blink_count == 0) {
57*61c4878aSAndroid Build Coastguard Worker               // Stop blinking
58*61c4878aSAndroid Build Coastguard Worker             }
59*61c4878aSAndroid Build Coastguard Worker             if (request.interval_ms > 0) {
60*61c4878aSAndroid Build Coastguard Worker               // Change the blink interval
61*61c4878aSAndroid Build Coastguard Worker             }
62*61c4878aSAndroid Build Coastguard Worker             if (request.has_blink_count) {  // Auto-generated property
63*61c4878aSAndroid Build Coastguard Worker               // Blink request.blink_count times
64*61c4878aSAndroid Build Coastguard Worker             }
65*61c4878aSAndroid Build Coastguard Worker           }
66*61c4878aSAndroid Build Coastguard Worker         };
67*61c4878aSAndroid Build Coastguard Worker
68*61c4878aSAndroid Build Coastguard Worker         BlinkyService blinky_service;
69*61c4878aSAndroid Build Coastguard Worker
70*61c4878aSAndroid Build Coastguard Worker         namespace pw::system {
71*61c4878aSAndroid Build Coastguard Worker
72*61c4878aSAndroid Build Coastguard Worker         void UserAppInit() {
73*61c4878aSAndroid Build Coastguard Worker           // ...
74*61c4878aSAndroid Build Coastguard Worker           pw::system::GetRpcServer().RegisterService(blinky_service);
75*61c4878aSAndroid Build Coastguard Worker         }
76*61c4878aSAndroid Build Coastguard Worker
77*61c4878aSAndroid Build Coastguard Worker         } // namespace pw::system
78*61c4878aSAndroid Build Coastguard Worker
79*61c4878aSAndroid Build Coastguard Worker   .. tab-item:: BUILD.bazel
80*61c4878aSAndroid Build Coastguard Worker
81*61c4878aSAndroid Build Coastguard Worker      .. code-block:: python
82*61c4878aSAndroid Build Coastguard Worker
83*61c4878aSAndroid Build Coastguard Worker         # //applications/blinky/BUILD.bazel
84*61c4878aSAndroid Build Coastguard Worker
85*61c4878aSAndroid Build Coastguard Worker         load(
86*61c4878aSAndroid Build Coastguard Worker             "@pigweed//pw_protobuf_compiler:pw_proto_library.bzl",
87*61c4878aSAndroid Build Coastguard Worker             "nanopb_proto_library",
88*61c4878aSAndroid Build Coastguard Worker             "nanopb_rpc_proto_library",
89*61c4878aSAndroid Build Coastguard Worker         )
90*61c4878aSAndroid Build Coastguard Worker
91*61c4878aSAndroid Build Coastguard Worker          cc_binary(
92*61c4878aSAndroid Build Coastguard Worker              name = "blinky",
93*61c4878aSAndroid Build Coastguard Worker              srcs = ["main.cc"],
94*61c4878aSAndroid Build Coastguard Worker              deps = [
95*61c4878aSAndroid Build Coastguard Worker                  ":nanopb_rpc",
96*61c4878aSAndroid Build Coastguard Worker                  # ...
97*61c4878aSAndroid Build Coastguard Worker                  "@pigweed//pw_system",
98*61c4878aSAndroid Build Coastguard Worker              ],
99*61c4878aSAndroid Build Coastguard Worker          )
100*61c4878aSAndroid Build Coastguard Worker
101*61c4878aSAndroid Build Coastguard Worker          proto_library(
102*61c4878aSAndroid Build Coastguard Worker              name = "proto",
103*61c4878aSAndroid Build Coastguard Worker              srcs = ["blinky.proto"],
104*61c4878aSAndroid Build Coastguard Worker              deps = [
105*61c4878aSAndroid Build Coastguard Worker                  "@pigweed//pw_protobuf:common_proto",
106*61c4878aSAndroid Build Coastguard Worker              ],
107*61c4878aSAndroid Build Coastguard Worker          )
108*61c4878aSAndroid Build Coastguard Worker
109*61c4878aSAndroid Build Coastguard Worker          nanopb_proto_library(
110*61c4878aSAndroid Build Coastguard Worker              name = "nanopb",
111*61c4878aSAndroid Build Coastguard Worker              deps = [":proto"],
112*61c4878aSAndroid Build Coastguard Worker          )
113*61c4878aSAndroid Build Coastguard Worker
114*61c4878aSAndroid Build Coastguard Worker          nanopb_rpc_proto_library(
115*61c4878aSAndroid Build Coastguard Worker              name = "nanopb_rpc",
116*61c4878aSAndroid Build Coastguard Worker              nanopb_proto_library_deps = [":nanopb"],
117*61c4878aSAndroid Build Coastguard Worker              deps = [":proto"],
118*61c4878aSAndroid Build Coastguard Worker          )
119*61c4878aSAndroid Build Coastguard Worker
120*61c4878aSAndroid Build Coastguard Worker.. grid:: 2
121*61c4878aSAndroid Build Coastguard Worker
122*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`rocket` Quickstart & guides
123*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc-guides
124*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
125*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-primary
126*61c4878aSAndroid Build Coastguard Worker
127*61c4878aSAndroid Build Coastguard Worker      Check out the ``pw_rpc`` quickstart for more explanation of the code above.
128*61c4878aSAndroid Build Coastguard Worker      The guides answer common questions such as whether
129*61c4878aSAndroid Build Coastguard Worker      to use ``proto2`` or ``proto3`` syntax.
130*61c4878aSAndroid Build Coastguard Worker
131*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`code-square` C++ server and client
132*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc-cpp
133*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
134*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
135*61c4878aSAndroid Build Coastguard Worker
136*61c4878aSAndroid Build Coastguard Worker      C++ server and client library API guides.
137*61c4878aSAndroid Build Coastguard Worker
138*61c4878aSAndroid Build Coastguard Worker.. grid:: 2
139*61c4878aSAndroid Build Coastguard Worker
140*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`info` Packet protocol
141*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc-protocol
142*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
143*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
144*61c4878aSAndroid Build Coastguard Worker
145*61c4878aSAndroid Build Coastguard Worker      A detailed description of the ``pw_rpc`` packet protocol.
146*61c4878aSAndroid Build Coastguard Worker
147*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`info` Design
148*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc-design
149*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
150*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
151*61c4878aSAndroid Build Coastguard Worker
152*61c4878aSAndroid Build Coastguard Worker      An overview of the RPC call lifecycle, naming conventions,
153*61c4878aSAndroid Build Coastguard Worker      and the ``pw_rpc`` roadmap.
154*61c4878aSAndroid Build Coastguard Worker
155*61c4878aSAndroid Build Coastguard Worker.. grid:: 2
156*61c4878aSAndroid Build Coastguard Worker
157*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`code-square` Python client
158*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc-py
159*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
160*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
161*61c4878aSAndroid Build Coastguard Worker
162*61c4878aSAndroid Build Coastguard Worker      Python client library API reference.
163*61c4878aSAndroid Build Coastguard Worker
164*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`code-square` TypeScript client
165*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc-ts
166*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
167*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
168*61c4878aSAndroid Build Coastguard Worker
169*61c4878aSAndroid Build Coastguard Worker      TypeScript client library API guide.
170*61c4878aSAndroid Build Coastguard Worker
171*61c4878aSAndroid Build Coastguard Worker.. grid:: 2
172*61c4878aSAndroid Build Coastguard Worker
173*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`code-square` Nanopb codegen
174*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc_nanopb
175*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
176*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
177*61c4878aSAndroid Build Coastguard Worker
178*61c4878aSAndroid Build Coastguard Worker      Nanopb codegen library API guide.
179*61c4878aSAndroid Build Coastguard Worker
180*61c4878aSAndroid Build Coastguard Worker   .. grid-item-card:: :octicon:`code-square` pw_protobuf codegen
181*61c4878aSAndroid Build Coastguard Worker      :link: module-pw_rpc_pw_protobuf
182*61c4878aSAndroid Build Coastguard Worker      :link-type: ref
183*61c4878aSAndroid Build Coastguard Worker      :class-item: sales-pitch-cta-secondary
184*61c4878aSAndroid Build Coastguard Worker
185*61c4878aSAndroid Build Coastguard Worker      ``pw_protobuf`` codegen library API guide.
186*61c4878aSAndroid Build Coastguard Worker
187*61c4878aSAndroid Build Coastguard Worker.. toctree::
188*61c4878aSAndroid Build Coastguard Worker   :maxdepth: 1
189*61c4878aSAndroid Build Coastguard Worker   :hidden:
190*61c4878aSAndroid Build Coastguard Worker
191*61c4878aSAndroid Build Coastguard Worker   guides
192*61c4878aSAndroid Build Coastguard Worker   libraries
193*61c4878aSAndroid Build Coastguard Worker   protocol
194*61c4878aSAndroid Build Coastguard Worker   design
195*61c4878aSAndroid Build Coastguard Worker   HDLC example <../pw_hdlc/rpc_example/docs>
196