@############################################### @# @# ROS message to IDL converter @# @# EmPy template for generating .idl files @# @################################################################################ @# @# Copyright 2017 Proyectos y Sistemas de Mantenimiento SL (eProsima). @# @# Redistribution and use in source and binary forms, with or without @# modification, are permitted provided that the following conditions are met: @# @# 1. Redistributions of source code must retain the above copyright notice, this @# list of conditions and the following disclaimer. @# @# 2. Redistributions in binary form must reproduce the above copyright notice, @# this list of conditions and the following disclaimer in the documentation @# and/or other materials provided with the distribution. @# @# 3. Neither the name of the copyright holder nor the names of its contributors @# may be used to endorse or promote products derived from this software without @# specific prior written permission. @# @# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" @# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE @# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR @# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF @# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS @# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN @# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) @# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE @# POSSIBILITY OF SUCH DAMAGE. @# @################################################################################ @{ import genmsg.msgs import gencpp from px_generate_uorb_topic_helper import * # this is in Tools/ uorb_struct = '%s_s'%spec.short_name topic_name = spec.short_name sorted_fields = sorted(spec.parsed_fields(), key=sizeof_field_type, reverse=True) struct_size, padding_end_size = add_padding_bytes(sorted_fields, search_path) }@ @################################################# @# Searching for serialize function per each field @################################################# @{ def get_idl_type_name(field_type): if field_type in type_idl_map: return type_idl_map[field_type] else: (package, name) = genmsg.names.package_resource_name(field_type) return name def add_msg_field(field): if (not field.is_header): if (not field.is_array): print('\t' + str(get_idl_type_name(field.type)) + ' ' + field.name + ';') else: print('\t' + str(get_idl_type_name(field.base_type)) + ' ' + field.name + '[' +str(field.array_len)+ '];') def add_msg_fields(): # sort fields (using a stable sort) as in the declaration of the type sorted_fields = sorted(spec.parsed_fields(), key=sizeof_field_type, reverse=True) for field in sorted_fields: add_msg_field(field) }@ @ struct @(spec.short_name)_ { @add_msg_fields() }; // struct @(spec.short_name)_