Give names to generated structures to allow forward declaration.
[apps/agl-service-can-low-level.git] / generator / nanopb_generator.py
index 1923cc1..1c21422 100644 (file)
@@ -75,7 +75,7 @@ class Enum:
         self.values = [(self.names + x.name, x.number) for x in desc.value]
     
     def __str__(self):
-        result = 'typedef enum {\n'
+        result = 'typedef enum _%s {\n' % self.names
         result += ',\n'.join(["    %s = %d" % x for x in self.values])
         result += '\n} %s;' % self.names
         return result
@@ -276,7 +276,7 @@ class Message:
         return [str(field.ctype) for field in self.fields]
     
     def __str__(self):
-        result = 'typedef struct {\n'
+        result = 'typedef struct _%s {\n' % self.name
         result += '\n'.join([str(f) for f in self.ordered_fields])
         result += '\n} %s;' % self.name
         return result
@@ -414,15 +414,16 @@ def generate_header(dependencies, headername, enums, messages):
     for msg in messages:
         yield msg.fields_declaration() + '\n'
     
-    count_required_fields = lambda m: len([f for f in msg.fields if f.htype == 'PB_HTYPE_REQUIRED'])
-    largest_msg = max(messages, key = count_required_fields)
-    largest_count = count_required_fields(largest_msg)
-    if largest_count > 64:
-        yield '\n/* Check that missing required fields will be properly detected */\n'
-        yield '#if PB_MAX_REQUIRED_FIELDS < %d\n' % largest_count
-        yield '#error Properly detecting missing required fields in %s requires \\\n' % largest_msg.name
-        yield '       setting PB_MAX_REQUIRED_FIELDS to %d or more.\n' % largest_count
-        yield '#endif\n'
+    if messages:
+        count_required_fields = lambda m: len([f for f in msg.fields if f.htype == 'PB_HTYPE_REQUIRED'])
+        largest_msg = max(messages, key = count_required_fields)
+        largest_count = count_required_fields(largest_msg)
+        if largest_count > 64:
+            yield '\n/* Check that missing required fields will be properly detected */\n'
+            yield '#if PB_MAX_REQUIRED_FIELDS < %d\n' % largest_count
+            yield '#error Properly detecting missing required fields in %s requires \\\n' % largest_msg.name
+            yield '       setting PB_MAX_REQUIRED_FIELDS to %d or more.\n' % largest_count
+            yield '#endif\n'
     
     worst = 0
     worst_field = ''