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