Give names to generated structures to allow forward declaration.
[apps/agl-service-can-low-level.git] / generator / nanopb_generator.py
index 1925167..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 '#warning 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 = ''
@@ -438,9 +439,6 @@ def generate_header(dependencies, headername, enums, messages):
 
     if worst > 255 or checks:
         yield '\n/* Check that field information fits in pb_field_t */\n'
-        yield '/* (Largest message has %d fields' % worst
-        if checks: yield ' and submessages have to be checked at compile-time.'
-        yield ') */\n'
         
         if worst < 65536:
             yield '#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)\n'