pw_rpc: Split public and internal interfaces

- Make an internal version of Server, which will expose functions for
  working with Reader/Writer objects
- Make an internal version of Channel, which provides an interface for
  sending packets.
- Define the Channel::OutputBuffer class for handling buffers acquired
  from a ChannelOutput.

Change-Id: Ieea29c1392726cd2eb15008e19004cde05c7f43b
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12160
Commit-Queue: Wyatt Hepler <hepler@google.com>
Reviewed-by: Alexei Frolov <frolv@google.com>
diff --git a/pw_rpc/BUILD.gn b/pw_rpc/BUILD.gn
index 1d3bcde..2cc9a8f 100644
--- a/pw_rpc/BUILD.gn
+++ b/pw_rpc/BUILD.gn
@@ -55,6 +55,7 @@
     sources = [
       "base_server_writer.cc",
       "public/pw_rpc/internal/base_server_writer.h",
+      "public/pw_rpc/internal/server.h",
       "public/pw_rpc/internal/service.h",
       "server.cc",
       "service.cc",
@@ -94,6 +95,7 @@
   public_deps = [
     ":protos_pwpb",
     dir_pw_assert,
+    dir_pw_log,
     dir_pw_span,
     dir_pw_status,
   ]
@@ -103,6 +105,7 @@
     "packet.cc",
     "public/pw_rpc/internal/base_method.h",
     "public/pw_rpc/internal/call.h",
+    "public/pw_rpc/internal/channel.h",
     "public/pw_rpc/internal/packet.h",
   ]
   friend = [ "./*" ]
@@ -131,9 +134,10 @@
 pw_test_group("tests") {
   tests = [
     ":base_server_writer_test",
-    "nanopb:method_test",
+    ":channel_test",
     ":packet_test",
     ":server_test",
+    "nanopb:method_test",
   ]
 }
 
@@ -156,6 +160,14 @@
   sources = [ "base_server_writer_test.cc" ]
 }
 
+pw_test("channel_test") {
+  deps = [
+    ":common",
+    ":test_utils_test_server",
+  ]
+  sources = [ "channel_test.cc" ]
+}
+
 pw_test("packet_test") {
   deps = [
     ":common",