pw_rpc: Rework C++ client; implement raw client

- Rework the Client class to share code with the Server class.
- Replace BaseClientCall with a call object also derived from the
  internal::Call used for server calls.
- Implement a system for testing RPC client invocations.
- Implement the raw RPC client API and codegen.
- Reimplement the Nanopb RPC client API and codegen to share code.
- Implement Nanopb client & bidirectional streaming.
- Add an integration test that calls RPCs on a C++ server from a C++
  client.

Requires: pigweed-internal:16720
Change-Id: Id3a0fd31bb3b3259fb9386dae617e68b9bfe6985
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/65745
Reviewed-by: Ewout van Bekkum <ewout@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
83 files changed
tree: 937b7f571ce894e81d8acc6830629753761f84f8
  1. build_overrides/
  2. docker/
  3. docs/
  4. pw_allocator/
  5. pw_analog/
  6. pw_android_toolchain/
  7. pw_arduino_build/
  8. pw_assert/
  9. pw_assert_basic/
  10. pw_assert_log/
  11. pw_base64/
  12. pw_bloat/
  13. pw_blob_store/
  14. pw_bluetooth_hci/
  15. pw_boot/
  16. pw_boot_cortex_m/
  17. pw_build/
  18. pw_build_info/
  19. pw_build_mcuxpresso/
  20. pw_bytes/
  21. pw_checksum/
  22. pw_chrono/
  23. pw_chrono_embos/
  24. pw_chrono_freertos/
  25. pw_chrono_stl/
  26. pw_chrono_threadx/
  27. pw_cli/
  28. pw_console/
  29. pw_containers/
  30. pw_cpu_exception/
  31. pw_cpu_exception_cortex_m/
  32. pw_crypto/
  33. pw_docgen/
  34. pw_doctor/
  35. pw_env_setup/
  36. pw_file/
  37. pw_function/
  38. pw_fuzzer/
  39. pw_hdlc/
  40. pw_hex_dump/
  41. pw_i2c/
  42. pw_interrupt/
  43. pw_interrupt_cortex_m/
  44. pw_kvs/
  45. pw_libc/
  46. pw_log/
  47. pw_log_basic/
  48. pw_log_null/
  49. pw_log_rpc/
  50. pw_log_tokenized/
  51. pw_malloc/
  52. pw_malloc_freelist/
  53. pw_metric/
  54. pw_minimal_cpp_stdlib/
  55. pw_module/
  56. pw_multisink/
  57. pw_package/
  58. pw_persistent_ram/
  59. pw_polyfill/
  60. pw_preprocessor/
  61. pw_presubmit/
  62. pw_protobuf/
  63. pw_protobuf_compiler/
  64. pw_random/
  65. pw_result/
  66. pw_ring_buffer/
  67. pw_router/
  68. pw_rpc/
  69. pw_snapshot/
  70. pw_software_update/
  71. pw_span/
  72. pw_status/
  73. pw_stm32cube_build/
  74. pw_stream/
  75. pw_string/
  76. pw_symbolizer/
  77. pw_sync/
  78. pw_sync_baremetal/
  79. pw_sync_embos/
  80. pw_sync_freertos/
  81. pw_sync_stl/
  82. pw_sync_threadx/
  83. pw_sys_io/
  84. pw_sys_io_arduino/
  85. pw_sys_io_baremetal_lm3s6965evb/
  86. pw_sys_io_baremetal_stm32f429/
  87. pw_sys_io_stdio/
  88. pw_target_runner/
  89. pw_thread/
  90. pw_thread_embos/
  91. pw_thread_freertos/
  92. pw_thread_stl/
  93. pw_thread_threadx/
  94. pw_tls_client/
  95. pw_tls_client_boringssl/
  96. pw_tls_client_mbedtls/
  97. pw_tokenizer/
  98. pw_tool/
  99. pw_toolchain/
  100. pw_trace/
  101. pw_trace_tokenized/
  102. pw_transfer/
  103. pw_unit_test/
  104. pw_varint/
  105. pw_watch/
  106. pw_web_ui/
  107. pw_work_queue/
  108. targets/
  109. third_party/
  110. .bazelignore
  111. .bazelrc
  112. .clang-format
  113. .clang-tidy
  114. .eslintrc.json
  115. .gitattributes
  116. .gitignore
  117. .gn
  118. .prettierrc.js
  119. .pylintrc
  120. activate.bat
  121. AUTHORS
  122. bootstrap.bat
  123. bootstrap.sh
  124. BUILD.bazel
  125. BUILD.gn
  126. BUILDCONFIG.gn
  127. CMakeLists.txt
  128. LICENSE
  129. modules.gni
  130. OWNERS
  131. package.json
  132. PW_PLUGINS
  133. README.md
  134. tsconfig.json
  135. WORKSPACE
  136. yarn.lock
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/

Links