pw_protobuf: Make generated enum upper snake case

This change updates the naming convention of generated proto enums to be
consistent with other proto libraries.

Change-Id: I849b526bc1b60de8215c5d0c4a3c387c5e074ed6
diff --git a/pw_protobuf/codegen_test.cc b/pw_protobuf/codegen_test.cc
index cf8969b..273b170 100644
--- a/pw_protobuf/codegen_test.cc
+++ b/pw_protobuf/codegen_test.cc
@@ -40,23 +40,23 @@
   pigweed.WriteMagicNumber(73);
   pigweed.WriteZiggy(-111);
   pigweed.WriteErrorMessage("not a typewriter");
-  pigweed.WriteBin(Pigweed::Protobuf::Binary::kZero);
+  pigweed.WriteBin(Pigweed::Protobuf::Binary::ZERO);
 
   {
     Pigweed::Pigweed::Encoder pigweed_pigweed = pigweed.GetPigweedEncoder();
-    pigweed_pigweed.WriteStatus(Bool::kFileNotFound);
+    pigweed_pigweed.WriteStatus(Bool::FILE_NOT_FOUND);
   }
 
   {
     Proto::Encoder proto = pigweed.GetProtoEncoder();
-    proto.WriteBin(Proto::Binary::kOff);
-    proto.WritePigweedPigweedBin(Pigweed::Pigweed::Binary::kZero);
-    proto.WritePigweedProtobufBin(Pigweed::Protobuf::Binary::kZero);
+    proto.WriteBin(Proto::Binary::OFF);
+    proto.WritePigweedPigweedBin(Pigweed::Pigweed::Binary::ZERO);
+    proto.WritePigweedProtobufBin(Pigweed::Protobuf::Binary::ZERO);
 
     {
       Pigweed::Protobuf::Compiler::Encoder meta = proto.GetMetaEncoder();
       meta.WriteFileName("/etc/passwd");
-      meta.WriteStatus(Pigweed::Protobuf::Compiler::Status::kFubar);
+      meta.WriteStatus(Pigweed::Protobuf::Compiler::Status::FUBAR);
     }
 
     {
@@ -79,7 +79,7 @@
           attributes.WriteValue("left-soc");
         }
 
-        device_info.WriteStatus(DeviceInfo::DeviceStatus::kPanic);
+        device_info.WriteStatus(DeviceInfo::DeviceStatus::PANIC);
       }
     }
   }
diff --git a/pw_protobuf/py/pw_protobuf/proto_structures.py b/pw_protobuf/py/pw_protobuf/proto_structures.py
index cd65060..600e494 100644
--- a/pw_protobuf/py/pw_protobuf/proto_structures.py
+++ b/pw_protobuf/py/pw_protobuf/proto_structures.py
@@ -185,10 +185,6 @@
 
 class ProtoEnum(ProtoNode):
     """Representation of an enum in a .proto file."""
-
-    # Prefix for names of values in C++ enums.
-    ENUM_PREFIX: str = 'k'
-
     def __init__(self, name: str):
         super().__init__(name)
         self._values: List[Tuple[str, int]] = []
@@ -200,9 +196,7 @@
         return list(self._values)
 
     def add_value(self, name: str, value: int) -> None:
-        name = '{}{}'.format(ProtoEnum.ENUM_PREFIX,
-                             ProtoMessageField.canonicalize_name(name))
-        self._values.append((name, value))
+        self._values.append((ProtoMessageField.upper_snake_case(name), value))
 
     def _supports_child(self, child: ProtoNode) -> bool:
         # Enums cannot have nested children.
@@ -255,17 +249,17 @@
                  field_type: int,
                  type_node: Optional[ProtoNode] = None,
                  repeated: bool = False):
-        self._name: str = self.canonicalize_name(field_name)
+        self._field_name = field_name
         self._number: int = field_number
         self._type: int = field_type
         self._type_node: Optional[ProtoNode] = type_node
         self._repeated: bool = repeated
 
     def name(self) -> str:
-        return self._name
+        return self.upper_camel_case(self._field_name)
 
     def enum_name(self) -> str:
-        return '{}{}'.format(ProtoEnum.ENUM_PREFIX, self._name)
+        return self.upper_snake_case(self._field_name)
 
     def number(self) -> int:
         return self._number
@@ -280,9 +274,14 @@
         return self._repeated
 
     @staticmethod
-    def canonicalize_name(field_name: str) -> str:
+    def upper_camel_case(field_name: str) -> str:
         """Converts a field name to UpperCamelCase."""
         name_components = field_name.split('_')
         for i, _ in enumerate(name_components):
             name_components[i] = name_components[i].lower().capitalize()
         return ''.join(name_components)
+
+    @staticmethod
+    def upper_snake_case(field_name: str) -> str:
+        """Converts a field name to UPPER_SNAKE_CASE."""
+        return field_name.upper()
diff --git a/pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py b/pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py
index b73a599..96c8179 100644
--- a/pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py
+++ b/pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py
@@ -101,7 +101,7 @@
     include_paths = [f'-I{path}' for path in args.include_paths]
     include_paths += [f'-I{line.strip()}' for line in args.include_file]
 
-    return pw_cli.process.run(
+    process = pw_cli.process.run(
         'protoc',
         '-I',
         args.module_path,
@@ -110,7 +110,12 @@
         *include_paths,
         *lang_args,
         *args.protos,
-    ).returncode
+    )
+
+    if process.returncode != 0:
+        print(process.output.decode(), file=sys.stderr)
+
+    return process.returncode
 
 
 if __name__ == '__main__':
diff --git a/pw_rpc/packet.cc b/pw_rpc/packet.cc
index e332c5e..dc631be 100644
--- a/pw_rpc/packet.cc
+++ b/pw_rpc/packet.cc
@@ -19,7 +19,7 @@
 namespace pw::rpc::internal {
 
 Packet Packet::FromBuffer(span<const std::byte> data) {
-  PacketType type = PacketType::kRpc;
+  PacketType type = PacketType::RPC;
   uint32_t channel_id = 0;
   uint32_t service_id = 0;
   uint32_t method_id = 0;
@@ -33,24 +33,24 @@
     uint32_t proto_value = 0;
 
     switch (field) {
-      case RpcPacket::Fields::kType:
+      case RpcPacket::Fields::TYPE:
         decoder.ReadUint32(&proto_value);
         type = static_cast<PacketType>(proto_value);
         break;
 
-      case RpcPacket::Fields::kChannelId:
+      case RpcPacket::Fields::CHANNEL_ID:
         decoder.ReadUint32(&channel_id);
         break;
 
-      case RpcPacket::Fields::kServiceId:
+      case RpcPacket::Fields::SERVICE_ID:
         decoder.ReadUint32(&service_id);
         break;
 
-      case RpcPacket::Fields::kMethodId:
+      case RpcPacket::Fields::METHOD_ID:
         decoder.ReadUint32(&method_id);
         break;
 
-      case RpcPacket::Fields::kPayload:
+      case RpcPacket::Fields::PAYLOAD:
         decoder.ReadBytes(&payload);
         break;
     }
diff --git a/pw_rpc/packet_test.cc b/pw_rpc/packet_test.cc
index 744b7e1..9dfe333 100644
--- a/pw_rpc/packet_test.cc
+++ b/pw_rpc/packet_test.cc
@@ -25,7 +25,7 @@
   constexpr byte payload[]{byte(0x00), byte(0x01), byte(0x02), byte(0x03)};
 
   Packet packet = Packet::Empty();
-  packet.set_type(PacketType::kRpc);
+  packet.set_type(PacketType::RPC);
   packet.set_channel_id(12);
   packet.set_service_id(0xdeadbeef);
   packet.set_method_id(0x03a82921);
diff --git a/pw_rpc/public/pw_rpc/internal/packet.h b/pw_rpc/public/pw_rpc/internal/packet.h
index 2733f2e..c38798a 100644
--- a/pw_rpc/public/pw_rpc/internal/packet.h
+++ b/pw_rpc/public/pw_rpc/internal/packet.h
@@ -30,14 +30,14 @@
 
   // Returns an empty packet with default values set.
   static constexpr Packet Empty() {
-    return Packet(PacketType::kRpc, 0, 0, 0, {});
+    return Packet(PacketType::RPC, 0, 0, 0, {});
   }
 
   // Encodes the packet into its wire format. Returns the encoded size.
   StatusWithSize Encode(span<std::byte> buffer) const;
 
   bool is_control() const { return !is_rpc(); }
-  bool is_rpc() const { return type_ == PacketType::kRpc; }
+  bool is_rpc() const { return type_ == PacketType::RPC; }
 
   PacketType type() const { return type_; }
   uint32_t channel_id() const { return channel_id_; }
diff --git a/pw_rpc/service.cc b/pw_rpc/service.cc
index af82d19..996043c 100644
--- a/pw_rpc/service.cc
+++ b/pw_rpc/service.cc
@@ -19,7 +19,7 @@
 namespace pw::rpc::internal {
 
 void Service::ProcessPacket(const Packet& request, Packet& response) {
-  response.set_type(PacketType::kRpc);
+  response.set_type(PacketType::RPC);
   response.set_service_id(id_);
 
   for (const Method& method : methods_) {