pw_rpc: Some initial server code

This change starts adding basic RPC server code and request processing.

Change-Id: Ia59a3e65aef4117fc593db46450a6b428bf136f5
diff --git a/pw_rpc/BUILD.gn b/pw_rpc/BUILD.gn
index de98060..192a9bc 100644
--- a/pw_rpc/BUILD.gn
+++ b/pw_rpc/BUILD.gn
@@ -13,6 +13,7 @@
 # the License.
 
 import("$dir_pw_docgen/docs.gni")
+import("$dir_pw_protobuf_compiler/proto.gni")
 import("$dir_pw_unit_test/test.gni")
 
 config("default_config") {
@@ -20,15 +21,33 @@
 }
 
 source_set("pw_rpc") {
+  deps = [ ":protos_pwpb" ]
   public_configs = [ ":default_config" ]
   public_deps = [
     dir_pw_assert,
+    dir_pw_log,
     dir_pw_span,
+    dir_pw_status,
   ]
   public = [
     "public/pw_rpc/channel.h",
     "public/pw_rpc/server.h",
   ]
+  sources = [
+    "channel.cc",
+    "packet.cc",
+    "public/pw_rpc/internal/packet.h",
+    "public/pw_rpc/internal/service.h",
+    "public/pw_rpc/internal/service_registry.h",
+    "server.cc",
+    "service.cc",
+    "service_registry.cc",
+  ]
+  friend = [ ":*" ]
+}
+
+pw_proto_library("protos") {
+  sources = [ "pw_rpc_protos/packet.proto" ]
 }
 
 pw_doc_group("docs") {
@@ -36,10 +55,21 @@
 }
 
 pw_test_group("tests") {
-  tests = [ ":server_test" ]
+  tests = [
+    ":packet_test",
+    ":server_test",
+  ]
 }
 
 pw_test("server_test") {
   deps = [ ":pw_rpc" ]
   sources = [ "server_test.cc" ]
 }
+
+pw_test("packet_test") {
+  deps = [
+    ":pw_rpc",
+    dir_pw_protobuf,
+  ]
+  sources = [ "packet_test.cc" ]
+}