RTPS and micro-CDR build system cleanup (#8084)

This commit is contained in:
Daniel Agar 2017-10-11 13:05:44 -04:00 committed by GitHub
parent bb9f8c3b44
commit 651df03f76
57 changed files with 405 additions and 188 deletions

View File

@ -199,7 +199,6 @@ px4_add_git_submodule(TARGET git_mavlink PATH "mavlink/include/mavlink/v1.0")
px4_add_git_submodule(TARGET git_mavlink2 PATH "mavlink/include/mavlink/v2.0")
px4_add_git_submodule(TARGET git_nuttx PATH "platforms/nuttx/NuttX/nuttx")
px4_add_git_submodule(TARGET git_uavcan PATH "src/modules/uavcan/libuavcan")
px4_add_git_submodule(TARGET git_micro_cdr PATH "src/lib/micro-CDR")
#=============================================================================
@ -356,6 +355,22 @@ include_directories(${include_dirs})
link_directories(${link_dirs})
add_definitions(${definitions})
#=============================================================================
# RTPS and micro-cdr
#
find_program(FASTRTPSGEN fastrtpsgen PATHS $ENV{FASTRTPSGEN_DIR})
if (FASTRTPSGEN AND (config_rtps_send_topics OR config_rtps_receive_topics))
option(GENERATE_RTPS_BRIDGE "enable RTPS and microCDR" ON)
endif()
if (GENERATE_RTPS_BRIDGE)
# add micro-CDR
message(STATUS "RTPS bridge enabled, send: ${config_rtps_send_topics} receive: ${config_rtps_receive_topics}")
px4_add_git_submodule(TARGET git_micro_cdr PATH src/lib/micro-CDR)
add_subdirectory(src/lib/micro-CDR EXCLUDE_FROM_ALL)
endif()
#=============================================================================
# message, and airframe generation
#

View File

@ -545,7 +545,9 @@ endfunction()
#
function(px4_add_library target)
add_library(${target} ${ARGN})
add_dependencies(${target} prebuild_targets)
px4_add_optimization_flags_for_target(${target})
# Pass variable to the parent px4_add_module.
set(_no_optimization_for_target ${_no_optimization_for_target} PARENT_SCOPE)

View File

@ -129,7 +129,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -89,7 +89,6 @@ set(config_module_list
lib/DriverFramework/framework
lib/rc
platforms/nuttx
lib/micro-CDR
platforms/common
platforms/nuttx/px4_layer
)

View File

@ -149,7 +149,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -96,7 +96,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -66,7 +66,6 @@ set(config_module_list
#
# Library modules
#
lib/micro-CDR
lib/version
modules/systemlib
modules/systemlib/param

View File

@ -157,7 +157,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -166,7 +166,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# Platform

View File

@ -135,7 +135,6 @@ set(config_module_list
# had to add for cmake, not sure why wasn't in original config
platforms/common
platforms/nuttx/px4_layer
lib/micro-CDR
#
# OBC challenge

View File

@ -46,7 +46,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -58,7 +58,6 @@ set(config_module_list
#
# Library modules
#
lib/micro-CDR
lib/version
modules/systemlib
modules/systemlib/param

View File

@ -67,7 +67,6 @@ set(config_module_list
#
# Library modules
#
lib/micro-CDR
lib/version
modules/systemlib
modules/systemlib/param

View File

@ -149,7 +149,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -145,7 +145,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -159,7 +159,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/terrain_estimation
lib/version
lib/micro-CDR
#
# Platform

View File

@ -161,7 +161,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# Platform

View File

@ -160,7 +160,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/terrain_estimation
lib/version
lib/micro-CDR
#
# Platform

View File

@ -161,7 +161,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/terrain_estimation
lib/version
lib/micro-CDR
#
# Platform

View File

@ -10,5 +10,4 @@ set(config_module_list
modules/systemlib/mixer
platforms/common
lib/micro-CDR
)

View File

@ -137,7 +137,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -60,7 +60,6 @@ set(config_module_list
modules/systemlib/param
modules/systemlib
lib/version
lib/micro-CDR
#
# Libraries

View File

@ -104,7 +104,6 @@ set(config_module_list
lib/version
lib/DriverFramework/framework
platforms/nuttx
lib/micro-CDR
# had to add for cmake, not sure why wasn't in original config
platforms/common

View File

@ -87,7 +87,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# POSIX

View File

@ -48,7 +48,6 @@ set(config_module_list
lib/conversion
lib/version
lib/DriverFramework/framework
lib/micro-CDR
platforms/common
platforms/posix/px4_layer

View File

@ -19,7 +19,6 @@ set(config_module_list
modules/uORB
lib/DriverFramework/framework
lib/micro-CDR
platforms/posix/px4_layer
platforms/posix/work_queue

View File

@ -94,7 +94,6 @@ set(config_module_list
lib/DriverFramework/framework
lib/rc
lib/led
lib/micro-CDR
#
# POSIX

View File

@ -93,7 +93,6 @@ set(config_module_list
lib/DriverFramework/framework
lib/rc
lib/led
lib/micro-CDR
#
# POSIX

View File

@ -108,7 +108,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# POSIX

View File

@ -82,7 +82,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/version
lib/DriverFramework/framework
lib/micro-CDR
platforms/common
platforms/posix/px4_layer

View File

@ -74,7 +74,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/version
lib/DriverFramework/framework
lib/micro-CDR
platforms/common
platforms/posix/px4_layer

View File

@ -191,7 +191,6 @@ set(config_module_list
examples/ekf_att_pos_estimator
# micro-RTPS
lib/micro-CDR
)
set(config_rtps_send_topics

View File

@ -34,11 +34,6 @@ set(config_module_list
modules/systemlib/param
modules/systemlib
modules/uORB
#
# Libraries
#
lib/micro-CDR
#
# QuRT port

View File

@ -73,7 +73,6 @@ set(config_module_list
lib/controllib
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# QuRT port

View File

@ -45,7 +45,6 @@ set(config_module_list
lib/conversion
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# QuRT port

View File

@ -43,7 +43,6 @@ set(config_module_list
lib/mathlib/math/filter
lib/conversion
lib/DriverFramework/framework
lib/micro-CDR
#
# QuRT port

View File

@ -79,7 +79,6 @@ set(config_module_list
lib/tailsitter_recovery
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# QuRT port

View File

@ -94,7 +94,6 @@ set(config_module_list
lib/rc
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# QuRT port

View File

@ -94,7 +94,6 @@ set(config_module_list
lib/rc
lib/version
lib/DriverFramework/framework
lib/micro-CDR
#
# QuRT port

View File

@ -236,7 +236,7 @@ function(px4_os_prebuild_targets)
REQUIRED OUT BOARD
ARGN ${ARGN})
add_custom_target(${OUT} DEPENDS nuttx_context)
add_custom_target(${OUT} DEPENDS nuttx_context uorb_headers)
# parse nuttx config options for cmake
file(STRINGS ${PX4_SOURCE_DIR}/nuttx-configs/${BOARD}/nsh/defconfig ConfigContents)

View File

@ -330,5 +330,6 @@ function(px4_os_prebuild_targets)
ONE_VALUE OUT BOARD THREADS
REQUIRED OUT BOARD
ARGN ${ARGN})
add_custom_target(${OUT})
add_custom_target(${OUT} DEPENDS uorb_headers)
endfunction()

View File

@ -80,6 +80,7 @@ function(px4_qurt_generate_builtin_commands)
MULTI_VALUE MODULE_LIST
REQUIRED MODULE_LIST OUT
ARGN ${ARGN})
set(builtin_apps_string)
set(builtin_apps_decl_string)
set(command_count 0)
@ -235,7 +236,8 @@ function(px4_os_prebuild_targets)
ONE_VALUE OUT BOARD THREADS
REQUIRED OUT BOARD
ARGN ${ARGN})
add_custom_target(${OUT} DEPENDS git_driverframework)
add_custom_target(${OUT} DEPENDS git_driverframework uorb_headers)
endfunction()

View File

@ -127,20 +127,17 @@ set(msg_files
wind_estimate.msg
)
px4_add_git_submodule(TARGET git_gencpp PATH "Tools/gencpp")
px4_add_git_submodule(TARGET git_genmsg PATH "Tools/genmsg")
px4_add_git_submodule(TARGET git_gencpp PATH tools/gencpp)
px4_add_git_submodule(TARGET git_genmsg PATH tools/genmsg)
# headers
set(msg_out_path ${PX4_BINARY_DIR}/uORB/topics)
set(msg_source_out_path ${CMAKE_CURRENT_BINARY_DIR}/topics_sources)
#set(msg_source_files_out ${CMAKE_CURRENT_BINARY_DIR}/uORBTopics.cpp)
set(msg_list)
set(uorb_headers)
set(uorb_sources ${msg_source_out_path}/uORBTopics.cpp)
foreach(msg_file ${msg_files})
get_filename_component(msg ${msg_file} NAME_WE)
list(APPEND msg_list ${msg})
list(APPEND uorb_headers ${msg_out_path}/${msg}.h)
list(APPEND uorb_sources ${msg_source_out_path}/${msg}.cpp)
endforeach()
@ -178,12 +175,78 @@ add_custom_command(OUTPUT ${uorb_sources}
VERBATIM
)
add_library(uorb_msgs STATIC EXCLUDE_FROM_ALL ${uorb_sources})
add_dependencies(uorb_msgs uorb_headers prebuild_targets)
px4_add_library(uorb_msgs ${uorb_sources})
add_dependencies(uorb_msgs uorb_headers)
# microCDR now part of uORB
target_include_directories(uorb_msgs
PRIVATE ${PX4_SOURCE_DIR}/src/lib/micro-CDR/include
PRIVATE ${PX4_BINARY_DIR}/src/lib/micro-CDR/include/microcdr
###############################################################################
# micro-cdr serialization
###############################################################################
# if RTPS is enabled generate serialization code for each uORB message
if (GENERATE_RTPS_BRIDGE)
set(msg_out_path_microcdr ${PX4_BINARY_DIR}/uORB_microcdr/topics)
set(msg_source_out_path_microcdr ${CMAKE_CURRENT_BINARY_DIR}/topics_microcdr_sources)
set(uorb_headers_microcdr)
set(uorb_sources_microcdr)
# send topic files
set(send_topic_files)
foreach(topic ${config_rtps_send_topics})
list(APPEND send_topic_files ${PX4_SOURCE_DIR}/msg/${topic}.msg)
list(APPEND uorb_headers_microcdr ${msg_out_path_microcdr}/${topic}.h)
list(APPEND uorb_sources_microcdr ${msg_source_out_path_microcdr}/${topic}.cpp)
endforeach()
# receive topic files
set(receive_topic_files)
foreach(topic ${config_rtps_receive_topics})
list(APPEND receive_topic_files ${PX4_SOURCE_DIR}/msg/${topic}.msg)
list(APPEND uorb_headers_microcdr ${msg_out_path_microcdr}/${topic}.h)
list(APPEND uorb_sources_microcdr ${msg_source_out_path_microcdr}/${topic}.cpp)
endforeach()
list(REMOVE_DUPLICATES uorb_headers_microcdr)
list(REMOVE_DUPLICATES uorb_sources_microcdr)
# Generate uORB serialization headers
add_custom_command(OUTPUT ${uorb_headers_microcdr}
COMMAND ${PYTHON_EXECUTABLE} tools/px_generate_uorb_topic_files.py
--headers
-f ${send_topic_files} ${receive_topic_files}
-i ${CMAKE_CURRENT_SOURCE_DIR}
-o ${msg_out_path_microcdr}
-e templates/uorb_microcdr
-t ${CMAKE_CURRENT_BINARY_DIR}/tmp/headers_microcdr
-q
DEPENDS ${msg_files}
COMMENT "Generating uORB microcdr topic headers"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM
)
add_custom_target(uorb_headers_microcdr DEPENDS ${uorb_headers_microcdr})
# Generate uORB serialization sources
add_custom_command(OUTPUT ${uorb_sources_microcdr}
COMMAND ${PYTHON_EXECUTABLE} tools/px_generate_uorb_topic_files.py
--sources
-f ${send_topic_files} ${receive_topic_files}
-i ${CMAKE_CURRENT_SOURCE_DIR}
-o ${msg_source_out_path_microcdr}
-e templates/uorb_microcdr
-t ${CMAKE_CURRENT_BINARY_DIR}/tmp/sources_microcdr
-q
DEPENDS ${msg_files}
COMMENT "Generating uORB microcdr topic sources"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM
)
px4_add_library(uorb_msgs_microcdr ${uorb_sources_microcdr})
add_dependencies(uorb_msgs_microcdr uorb_headers_microcdr uorb_headers)
# microCDR
target_include_directories(uorb_msgs_microcdr
PRIVATE ${PX4_SOURCE_DIR}/src/lib/micro-CDR/include
PRIVATE ${PX4_BINARY_DIR}/src/lib/micro-CDR/include/microcdr
)
target_link_libraries(uorb_msgs PRIVATE lib__micro-CDR)
endif()

View File

@ -64,9 +64,6 @@ struct_size, padding_end_size = add_padding_bytes(sorted_fields, search_path)
topic_fields = ["uint64_t timestamp"]+["%s %s" % (convert_type(field.type), field.name) for field in sorted_fields]
}@
#include <px4_config.h>
#include <drivers/drv_orb_dev.h>
#include <microcdr/microCdr.h>
#include <uORB/topics/@(topic_name).h>
@# join all msg files in one line e.g: "float[3] position;float[3] velocity;bool armed"
@ -76,99 +73,3 @@ constexpr char __orb_@(topic_name)_fields[] = "@( ";".join(topic_fields) );";
@[for multi_topic in topics]@
ORB_DEFINE(@multi_topic, struct @uorb_struct, @(struct_size-padding_end_size), __orb_@(topic_name)_fields);
@[end for]
@#################################################
@# Searching for serialize function per each field
@#################################################
@{
def print_info(field):
print("type: ", field.type, "name: ", field.name, "base_type: ", \
field.base_type, "field.is_array:", ('0', '1')[field.is_array], " array_len: ", field.array_len, \
"is_builtin:", ('0', '1')[field.is_builtin], "is_header:", ('0', '1')[field.is_header])
def print_level_info(fields):
for field in fields:
print_info(field)
if (not field.is_builtin):
print("\n")
children_fields = get_children_fields(field.base_type, search_path)
print_level_info(children_fields)
print("\n")
def walk_through_parsed_fields():
print_level_info(spec.parsed_fields())
def get_serialization_type_name(type_name):
if type_name in type_serialize_map:
return type_serialize_map[type_name]
else:
raise Exception("Type {0} not supported, add to type_serialize_map!".format(type_name))
def add_serialize_functions(fields, scope_name):
for field in fields:
if (not field.is_header):
if (field.is_builtin):
if (not field.is_array):
print("\tserialize"+str(get_serialization_type_name(field.type))+"(input->"+scope_name+str(field.name)+", microCDRWriter);")
else:
print("\tserialize"+str(get_serialization_type_name(field.base_type))+"Array(input->"+scope_name+str(field.name)+", "+str(field.array_len)+", microCDRWriter);")
else:
name = field.name
children_fields = get_children_fields(field.base_type, search_path)
if (scope_name): name = scope_name + name
if (not field.is_array):
add_serialize_functions(children_fields, name + '.')
else:
for i in range(field.array_len):
add_serialize_functions(children_fields, name + ('[%d].' %i))
def add_deserialize_functions(fields, scope_name):
for field in fields:
if (not field.is_header):
if (field.is_builtin):
if (not field.is_array):
print("\tdeserialize"+str(get_serialization_type_name(field.type))+"(&output->"+scope_name+str(field.name)+", microCDRReader);")
else:
for i in range(field.array_len):
print("\tdeserialize"+str(get_serialization_type_name(field.base_type))+"(&output->"+scope_name+str(field.name)+ str('[%d]' %i) +", microCDRReader);")
else:
name = field.name
children_fields = get_children_fields(field.base_type, search_path)
if (scope_name): name = scope_name + name
if (not field.is_array):
add_deserialize_functions(children_fields, name + '.')
else:
for i in range(field.array_len):
add_deserialize_functions(children_fields, name + ('[%d].' %i))
def add_code_to_serialize():
# 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)
add_serialize_functions(sorted_fields, "")
def add_code_to_deserialize():
# 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)
add_deserialize_functions(sorted_fields, "")
}@
void serialize_@(topic_name)(const struct @(uorb_struct) *input, char *output, uint32_t *length, struct microCDR *microCDRWriter)
{
if (nullptr == input || nullptr == output || nullptr == length || nullptr == microCDRWriter) return;
resetStaticMicroCDRForSerialize(microCDRWriter);
@add_code_to_serialize()
(*length) = microCDRWriter->m_microBuffer->m_serializedBuffer;
}
void deserialize_@(topic_name)(struct @(uorb_struct) *output, char *input, struct microCDR *microCDRReader)
{
if (nullptr == output || nullptr == input || nullptr == microCDRReader) return;
resetStaticMicroCDRForDeserialize(microCDRReader);
@add_code_to_deserialize()
}

View File

@ -65,12 +65,6 @@ topic_name = spec.short_name
@##############################
@# Generic Includes
@##############################
#include <stdint.h>
#ifdef __cplusplus
#include <cstring>
#else
#include <string.h>
#endif
#include <uORB/uORB.h>
@ -108,8 +102,6 @@ def print_parsed_fields():
print_field_def(field)
}@
struct microCDR;
#ifdef __cplusplus
@#class @(uorb_struct) {
struct __EXPORT @(uorb_struct) {
@ -137,10 +129,6 @@ for constant in spec.constants:
#endif
};
void serialize_@(topic_name)(const struct @(uorb_struct) *input, char *output, uint32_t *length, struct microCDR *microCDRWriter);
void deserialize_@(topic_name)(struct @(uorb_struct) *output, char *input, struct microCDR *microCDRReader);
/* register this as object request broker structure */
@[for multi_topic in topics]@
ORB_DECLARE(@multi_topic);

View File

@ -67,6 +67,7 @@ recv_topics = [s.short_name for idx, s in enumerate(spec) if scope[idx] == MsgSc
@[for topic in list(set(topic_names))]@
#include <uORB/topics/@(topic).h>
#include <uORB_microcdr/topics/@(topic).h>
@[end for]@
void* send(void *data);

View File

@ -0,0 +1,166 @@
@###############################################
@#
@# PX4 ROS compatible message source code
@# generation for C++
@#
@# EmPy template for generating <msg>.h files
@# Based on the original template for ROS
@#
@###############################################
@# Start of Template
@#
@# Context:
@# - file_name_in (String) Source file
@# - spec (msggen.MsgSpec) Parsed specification of the .msg file
@# - md5sum (String) MD5Sum of the .msg specification
@# - search_path (dict) search paths for genmsg
@# - topics (List of String) multi-topic names
@###############################################
/****************************************************************************
*
* Copyright (C) 2013-2016 PX4 Development Team. All rights reserved.
*
* 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 PX4 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 OWNER 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.
*
****************************************************************************/
/* Auto-generated by genmsg_cpp from file @file_name_in */
@{
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)
topic_fields = ["uint64_t timestamp"]+["%s %s" % (convert_type(field.type), field.name) for field in sorted_fields]
}@
#include <px4_config.h>
#include <microcdr/microCdr.h>
#include <uORB/topics/@(topic_name).h>
#include <uORB_microcdr/topics/@(topic_name).h>
@#################################################
@# Searching for serialize function per each field
@#################################################
@{
def print_info(field):
print("type: ", field.type, "name: ", field.name, "base_type: ", \
field.base_type, "field.is_array:", ('0', '1')[field.is_array], " array_len: ", field.array_len, \
"is_builtin:", ('0', '1')[field.is_builtin], "is_header:", ('0', '1')[field.is_header])
def print_level_info(fields):
for field in fields:
print_info(field)
if (not field.is_builtin):
print("\n")
children_fields = get_children_fields(field.base_type, search_path)
print_level_info(children_fields)
print("\n")
def walk_through_parsed_fields():
print_level_info(spec.parsed_fields())
def get_serialization_type_name(type_name):
if type_name in type_serialize_map:
return type_serialize_map[type_name]
else:
raise Exception("Type {0} not supported, add to type_serialize_map!".format(type_name))
def add_serialize_functions(fields, scope_name):
for field in fields:
if (not field.is_header):
if (field.is_builtin):
if (not field.is_array):
print("\tserialize"+str(get_serialization_type_name(field.type))+"(input->"+scope_name+str(field.name)+", microCDRWriter);")
else:
print("\tserialize"+str(get_serialization_type_name(field.base_type))+"Array(input->"+scope_name+str(field.name)+", "+str(field.array_len)+", microCDRWriter);")
else:
name = field.name
children_fields = get_children_fields(field.base_type, search_path)
if (scope_name): name = scope_name + name
if (not field.is_array):
add_serialize_functions(children_fields, name + '.')
else:
for i in range(field.array_len):
add_serialize_functions(children_fields, name + ('[%d].' %i))
def add_deserialize_functions(fields, scope_name):
for field in fields:
if (not field.is_header):
if (field.is_builtin):
if (not field.is_array):
print("\tdeserialize"+str(get_serialization_type_name(field.type))+"(&output->"+scope_name+str(field.name)+", microCDRReader);")
else:
for i in range(field.array_len):
print("\tdeserialize"+str(get_serialization_type_name(field.base_type))+"(&output->"+scope_name+str(field.name)+ str('[%d]' %i) +", microCDRReader);")
else:
name = field.name
children_fields = get_children_fields(field.base_type, search_path)
if (scope_name): name = scope_name + name
if (not field.is_array):
add_deserialize_functions(children_fields, name + '.')
else:
for i in range(field.array_len):
add_deserialize_functions(children_fields, name + ('[%d].' %i))
def add_code_to_serialize():
# 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)
add_serialize_functions(sorted_fields, "")
def add_code_to_deserialize():
# 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)
add_deserialize_functions(sorted_fields, "")
}@
void serialize_@(topic_name)(const struct @(uorb_struct) *input, char *output, uint32_t *length, struct microCDR *microCDRWriter)
{
if (nullptr == input || nullptr == output || nullptr == length || nullptr == microCDRWriter) return;
resetStaticMicroCDRForSerialize(microCDRWriter);
@add_code_to_serialize()
(*length) = microCDRWriter->m_microBuffer->m_serializedBuffer;
}
void deserialize_@(topic_name)(struct @(uorb_struct) *output, char *input, struct microCDR *microCDRReader)
{
if (nullptr == output || nullptr == input || nullptr == microCDRReader) return;
resetStaticMicroCDRForDeserialize(microCDRReader);
@add_code_to_deserialize()
}

View File

@ -0,0 +1,75 @@
@###############################################
@#
@# PX4 ROS compatible message source code
@# generation for C++
@#
@# EmPy template for generating <msg>.h files
@# Based on the original template for ROS
@#
@###############################################
@# Start of Template
@#
@# Context:
@# - file_name_in (String) Source file
@# - spec (msggen.MsgSpec) Parsed specification of the .msg file
@# - md5sum (String) MD5Sum of the .msg specification
@# - search_path (dict) search paths for genmsg
@# - topics (List of String) multi-topic names
@###############################################
/****************************************************************************
*
* Copyright (C) 2013-2016 PX4 Development Team. All rights reserved.
*
* 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 PX4 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 OWNER 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.
*
****************************************************************************/
/* Auto-generated by genmsg_cpp from file @file_name_in */
@{
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
}@
#pragma once
@##############################
@# Generic Includes
@##############################
#include <uORB/topics/@(topic_name).h>
#include <uORB_microcdr/topics/@(topic_name).h>
struct microCDR;
void serialize_@(topic_name)(const struct @(uorb_struct) *input, char *output, uint32_t *length, struct microCDR *microCDRWriter);
void deserialize_@(topic_name)(struct @(uorb_struct) *output, char *input, struct microCDR *microCDRReader);

View File

@ -0,0 +1,46 @@
@###############################################
@#
@# EmPy template for generating uORBTopics.cpp file
@# for logging purposes
@#
@###############################################
@# Start of Template
@#
@# Context:
@# - msgs (List) list of all msg files
@# - multi_topics (List) list of all multi-topic names
@###############################################
/****************************************************************************
*
* Copyright (C) 2013-2015 PX4 Development Team. All rights reserved.
*
* 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 PX4 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 OWNER 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.
*
****************************************************************************/
#include <uORB/uORB.h>

View File

@ -126,7 +126,7 @@ if del_tree:
if agent and os.path.isdir(agent_out_dir + "/idl"):
shutil.rmtree(agent_out_dir + "/idl")
uorb_templates_dir = msg_folder + "/templates/uorb"
uorb_templates_dir = msg_folder + "/templates/uorb_microcdr"
urtps_templates_dir = msg_folder + "/templates/urtps"
uRTPS_CLIENT_TEMPL_FILE = 'microRTPS_client.cpp.template'

View File

@ -33,6 +33,7 @@
#pragma once
#include <string.h>
#include <drivers/device/i2c.h>
#include <drivers/drv_airspeed.h>
#include <drivers/drv_hrt.h>

View File

@ -93,6 +93,8 @@
*
*/
#include <strings.h>
#include <px4_config.h>
#include <sys/types.h>

View File

@ -40,6 +40,7 @@
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>
#include <cstring>
#include "mavlink_ftp.h"
#include "mavlink_main.h"

View File

@ -31,19 +31,12 @@
#
############################################################################
if(NOT GENERATE_RTPS_BRIDGE MATCHES "off")
if(GENERATE_RTPS_BRIDGE)
find_program(FASTRTPSGEN fastrtpsgen PATHS $ENV{FASTRTPSGEN_DIR})
if(NOT FASTRTPSGEN)
message(STATUS "WARNING: Unable to find fastrtpsgen. Building PX4 without RTPS bridge support")
px4_add_module(
MODULE modules__micrortps_bridge__micrortps_client
MAIN micrortps_client
SRCS
microRTPS_client_dummy.cpp
DEPENDS
platforms__common
)
return()
endif()
@ -63,13 +56,13 @@ if(NOT GENERATE_RTPS_BRIDGE MATCHES "off")
endforeach()
foreach(topic ${config_rtps_send_topics})
list(APPEND topic_bridge_files_out ${msg_out_path}/${topic}_Publisher.cpp)
list(APPEND topic_bridge_files_out ${msg_out_path}/${topic}_Publisher.h)
list(APPEND topic_bridge_files_out ${msg_out_path}/micrortps_agent/${topic}_Publisher.cpp)
list(APPEND topic_bridge_files_out ${msg_out_path}/micrortps_agent/${topic}_Publisher.h)
endforeach()
foreach(topic ${config_rtps_receive_topics})
list(APPEND topic_bridge_files_out ${msg_out_path}/${topic}_Subscriber.cpp)
list(APPEND topic_bridge_files_out ${msg_out_path}/${topic}_Subscriber.h)
list(APPEND topic_bridge_files_out ${msg_out_path}/micrortps_agent/${topic}_Subscriber.cpp)
list(APPEND topic_bridge_files_out ${msg_out_path}/micrortps_agent/${topic}_Subscriber.h)
endforeach()
set(send_topic_files_opt)
@ -96,9 +89,9 @@ if(NOT GENERATE_RTPS_BRIDGE MATCHES "off")
--topic-msg-dir ${PX4_SOURCE_DIR}/msg
--agent-outdir ${CMAKE_CURRENT_BINARY_DIR}/micrortps_agent
--client-outdir ${CMAKE_CURRENT_BINARY_DIR}/micrortps_client
>micrortps_bridge.log 2>&1 || cat micrortps_bridge.log # quiet successful build output
DEPENDS ${send_topic_files} ${receive_topic_files}
COMMENT "Generating RTPS topic bridge"
VERBATIM
)
add_custom_target(topic_bridge_files DEPENDS ${topic_bridge_files_out})
@ -110,13 +103,13 @@ if(NOT GENERATE_RTPS_BRIDGE MATCHES "off")
MAIN micrortps_client
STACK_MAIN 4096
SRCS
${CMAKE_CURRENT_BINARY_DIR}/micrortps_client/microRTPS_transport.cpp
${CMAKE_CURRENT_BINARY_DIR}/micrortps_client/microRTPS_client.cpp
microRTPS_client_main.cpp
${msg_out_path}/micrortps_client/microRTPS_client.cpp
${msg_out_path}/micrortps_client/microRTPS_transport.cpp
DEPENDS
platforms__common
topic_bridge_files
uorb_headers
uorb_headers_microcdr
)
target_link_libraries(modules__micrortps_bridge__micrortps_client PRIVATE lib__micro-CDR)
endif()

View File

@ -61,6 +61,7 @@
#include <systemlib/err.h>
#include <drivers/drv_hrt.h>
#include <math.h>
#include <string.h>
#include <uORB/uORB.h>
#include <uORB/topics/vehicle_status.h>

View File

@ -48,5 +48,4 @@ px4_add_module(
uORBUtils.cpp
DEPENDS
platforms__common
)
target_link_libraries(modules__uORB uorb_msgs)
)

View File

@ -1,4 +1,5 @@
#include <stdlib.h>
#include <string.h>
#include <px4_log.h>
#ifdef __PX4_POSIX
#include <execinfo.h>