How to use the nanopb.nanopb.generator.nanopb_generator.FieldMaxSize function in nanopb

To help you get started, we’ve selected a few nanopb examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github particle-iot / device-os / nanopb / nanopb / generator / nanopb_generator.py View on Github external
for enum in self.enums:
            yield enum.enum_to_string_definition() + '\n'

        # Add checks for numeric limits
        if self.messages:
            largest_msg = max(self.messages, key = lambda m: m.count_required_fields())
            largest_count = largest_msg.count_required_fields()
            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'

        max_field = FieldMaxSize()
        checks_msgnames = []
        for msg in self.messages:
            checks_msgnames.append(msg.name)
            for field in msg.fields:
                max_field.extend(field.largest_field_value())

        worst = max_field.worst
        worst_field = max_field.worst_field
        checks = max_field.checks

        if worst > 255 or checks:
            yield '\n/* Check that field information fits in pb_field_t */\n'

            if worst > 65535 or checks:
                yield '#if !defined(PB_FIELD_32BIT)\n'
                if worst > 65535:
github particle-iot / device-os / nanopb / nanopb / generator / nanopb_generator.py View on Github external
check = []
        if self.pbtype == 'MESSAGE' and self.allocation == 'STATIC':
            if self.rules == 'REPEATED':
                check.append('pb_membersize(%s, %s[0])' % (self.struct_name, self.name))
            elif self.rules == 'ONEOF':
                if self.anonymous:
                    check.append('pb_membersize(%s, %s)' % (self.struct_name, self.name))
                else:
                    check.append('pb_membersize(%s, %s.%s)' % (self.struct_name, self.union_name, self.name))
            else:
                check.append('pb_membersize(%s, %s)' % (self.struct_name, self.name))
        elif self.pbtype == 'BYTES' and self.allocation == 'STATIC':
            if self.max_size > 251:
                check.append('pb_membersize(%s, %s)' % (self.struct_name, self.name))

        return FieldMaxSize([self.tag, self.max_size, self.max_count],
                            check,
                            ('%s.%s' % (self.struct_name, self.name)))
github particle-iot / device-os / nanopb / nanopb / generator / nanopb_generator.py View on Github external
def largest_field_value(self):
        largest = FieldMaxSize()
        for f in self.fields:
            largest.extend(f.largest_field_value())
        return largest