system/xrcedds: add eProsima Micro XRCE-DDS

Add a lightweight Micro XRCE-DDS Client integration with UDP transport support and a publisher example.

Signed-off-by: lljwork2021 <lljwork2021@163.com>
This commit is contained in:
lljwork2021 2026-09-09 18:53:59 +08:00 • committed by Alan C. Assis
parent 9fdf62935b
commit 6284bdc50e
15 changed files with 864 additions and 0 deletions

View file

@ -0,0 +1,38 @@
# ##############################################################################
# apps/examples/xrcedds/CMakeLists.txt
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with this work for
# additional information regarding copyright ownership. The ASF licenses this
# file to you under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
# ##############################################################################
if(CONFIG_EXAMPLES_XRCEDDS_PUB)
nuttx_add_application(
NAME
${CONFIG_EXAMPLES_XRCEDDS_PUB_PROGNAME}
SRCS
xrcedds_pub_main.c
hello_world.c
STACKSIZE
${CONFIG_EXAMPLES_XRCEDDS_PUB_STACKSIZE}
PRIORITY
${CONFIG_EXAMPLES_XRCEDDS_PUB_PRIORITY}
MODULE
${CONFIG_EXAMPLES_XRCEDDS_PUB}
DEPENDS
xrcedds)
endif()

View file

@ -0,0 +1,5 @@
struct HelloWorld
{
unsigned long index;
string message;
};

29
examples/xrcedds/Kconfig Normal file
View file

@ -0,0 +1,29 @@
#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
menuconfig EXAMPLES_XRCEDDS_PUB
tristate "XRCEDDS publisher demo"
default n
depends on SYSTEM_XRCEDDS && NET_UDP && NET_IPv4
---help---
Build the PublishHelloWorldClient command. It connects to a
Micro XRCE-DDS Agent through the built-in UDP transport and
publishes HelloWorld samples.
if EXAMPLES_XRCEDDS_PUB
config EXAMPLES_XRCEDDS_PUB_PROGNAME
string "Publisher command name"
default "PublishHelloWorldClient"
config EXAMPLES_XRCEDDS_PUB_PRIORITY
int "Publisher task priority"
default 100
config EXAMPLES_XRCEDDS_PUB_STACKSIZE
int "Publisher task stack size"
default 4096
endif

View file

@ -0,0 +1,25 @@
############################################################################
# apps/examples/xrcedds/Make.defs
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
ifneq ($(CONFIG_EXAMPLES_XRCEDDS_PUB),)
CONFIGURED_APPS += $(APPDIR)/examples/xrcedds
endif

33
examples/xrcedds/Makefile Normal file
View file

@ -0,0 +1,33 @@
############################################################################
# apps/examples/xrcedds/Makefile
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
include $(APPDIR)/Make.defs
PROGNAME = $(CONFIG_EXAMPLES_XRCEDDS_PUB_PROGNAME)
PRIORITY = $(CONFIG_EXAMPLES_XRCEDDS_PUB_PRIORITY)
STACKSIZE = $(CONFIG_EXAMPLES_XRCEDDS_PUB_STACKSIZE)
MODULE = $(CONFIG_EXAMPLES_XRCEDDS_PUB)
MAINSRC = xrcedds_pub_main.c
CSRCS += hello_world.c
include $(APPDIR)/Application.mk

View file

@ -0,0 +1,66 @@
/****************************************************************************
* apps/examples/xrcedds/hello_world.c
*
* Implements the HelloWorld type described by HelloWorld.idl.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <string.h>
#include <ucdr/microcdr.h>
#include "hello_world.h"
/****************************************************************************
* Public Functions
****************************************************************************/
bool hello_world_serialize_topic(struct ucdrBuffer *writer,
const struct hello_world_s *topic)
{
ucdr_serialize_uint32_t(writer, topic->index);
ucdr_serialize_string(writer, topic->message);
return !writer->error;
}
bool hello_world_deserialize_topic(struct ucdrBuffer *reader,
struct hello_world_s *topic)
{
ucdr_deserialize_uint32_t(reader, &topic->index);
ucdr_deserialize_string(reader, topic->message, 255);
return !reader->error;
}
uint32_t hello_world_topic_size(const struct hello_world_s *topic,
uint32_t size)
{
uint32_t previous_size = size;
size += ucdr_alignment(size, 4) + 4;
size += ucdr_alignment(size, 4) + 4 + strlen(topic->message) + 1;
return size - previous_size;
}

View file

@ -0,0 +1,58 @@
/****************************************************************************
* apps/examples/xrcedds/hello_world.h
*
* Declares the HelloWorld type described by HelloWorld.idl.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __APPS_EXAMPLES_XRCEDDS_HELLO_WORLD_H
#define __APPS_EXAMPLES_XRCEDDS_HELLO_WORLD_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdbool.h>
#include <stdint.h>
/****************************************************************************
* Public Types
****************************************************************************/
struct hello_world_s
{
uint32_t index;
char message[255];
};
struct ucdrBuffer;
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
bool hello_world_serialize_topic(struct ucdrBuffer *writer,
const struct hello_world_s *topic);
bool hello_world_deserialize_topic(struct ucdrBuffer *reader,
struct hello_world_s *topic);
uint32_t hello_world_topic_size(const struct hello_world_s *topic,
uint32_t size);
#endif /* __APPS_EXAMPLES_XRCEDDS_HELLO_WORLD_H */

View file

@ -0,0 +1,225 @@
/****************************************************************************
* apps/examples/xrcedds/xrcedds_pub_main.c
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <uxr/client/client.h>
#include <ucdr/microcdr.h>
#include "hello_world.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define STREAM_HISTORY 8
#define BUFFER_SIZE (UXR_CONFIG_UDP_TRANSPORT_MTU * STREAM_HISTORY)
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* main
****************************************************************************/
int main(int argc, FAR char *argv[])
{
uxrUDPTransport transport;
uxrSession session;
uxrStreamId reliable_out;
uint8_t out_stream_buffer[BUFFER_SIZE];
uint8_t in_stream_buffer[BUFFER_SIZE];
uxrObjectId participant_id;
uxrObjectId topic_id;
uxrObjectId publisher_id;
uxrObjectId datawriter_id;
const char *participant_xml;
const char *topic_xml;
const char *publisher_xml;
const char *datawriter_xml;
uint16_t participant_req;
uint16_t topic_req;
uint16_t publisher_req;
uint16_t datawriter_req;
uint8_t status[4];
uint16_t requests[4];
bool connected;
uint32_t count;
char *ip;
char *port;
uint32_t max_topics;
/* Parse the command line. */
if (argc < 3 || atoi(argv[2]) == 0)
{
printf("usage: %s ip port [<max_topics>]\n", argv[0]);
return 0;
}
ip = argv[1];
port = argv[2];
max_topics = argc == 4 ? atoi(argv[3]) : UINT32_MAX;
/* Create the UDP transport. */
if (!uxr_init_udp_transport(&transport, UXR_IPv4, ip, port))
{
printf("Error at create transport.\n");
return 1;
}
/* Create the session. */
uxr_init_session(&session, &transport.comm, 0xaaaabbbb);
if (!uxr_create_session(&session))
{
printf("Error at create session.\n");
return 1;
}
/* Create the reliable streams. */
reliable_out = uxr_create_output_reliable_stream(&session,
out_stream_buffer,
BUFFER_SIZE,
STREAM_HISTORY);
uxr_create_input_reliable_stream(&session, in_stream_buffer,
BUFFER_SIZE, STREAM_HISTORY);
/* Create the DDS entities. */
participant_id = uxr_object_id(0x01, UXR_PARTICIPANT_ID);
participant_xml = "<dds>"
"<participant>"
"<rtps>"
"<name>default_xrce_participant</name>"
"</rtps>"
"</participant>"
"</dds>";
participant_req = uxr_buffer_create_participant_xml(&session, reliable_out,
participant_id, 0,
participant_xml,
UXR_REPLACE);
topic_id = uxr_object_id(0x01, UXR_TOPIC_ID);
topic_xml = "<dds>"
"<topic>"
"<name>HelloWorldTopic</name>"
"<dataType>HelloWorld</dataType>"
"</topic>"
"</dds>";
topic_req = uxr_buffer_create_topic_xml(&session, reliable_out, topic_id,
participant_id, topic_xml,
UXR_REPLACE);
publisher_id = uxr_object_id(0x01, UXR_PUBLISHER_ID);
publisher_xml = "";
publisher_req = uxr_buffer_create_publisher_xml(&session, reliable_out,
publisher_id,
participant_id,
publisher_xml,
UXR_REPLACE);
datawriter_id = uxr_object_id(0x01, UXR_DATAWRITER_ID);
datawriter_xml = "<dds>"
"<data_writer>"
"<topic>"
"<kind>NO_KEY</kind>"
"<name>HelloWorldTopic</name>"
"<dataType>HelloWorld</dataType>"
"</topic>"
"</data_writer>"
"</dds>";
datawriter_req = uxr_buffer_create_datawriter_xml(&session, reliable_out,
datawriter_id,
publisher_id,
datawriter_xml,
UXR_REPLACE);
/* Send the create entities message and wait for its status. */
requests[0] = participant_req;
requests[1] = topic_req;
requests[2] = publisher_req;
requests[3] = datawriter_req;
if (!uxr_run_session_until_all_status(&session, 1000, requests, status, 4))
{
printf("Error at create entities: participant: %d topic: %d "
"publisher: %d datawriter: %d\n",
status[0], status[1], status[2], status[3]);
return 1;
}
/* Wait for the Agent to match the DataWriter before sending. */
sleep(3);
/* Publish samples until the requested number is reached or the session
* is disconnected.
*/
connected = true;
count = 0;
while (connected && count < max_topics)
{
struct hello_world_s topic;
ucdrBuffer ub;
uint32_t topic_size;
topic.index = ++count;
strlcpy(topic.message, "Hello DDS world!",
sizeof(topic.message));
topic_size = hello_world_topic_size(&topic, 0);
uxr_prepare_output_stream(&session, reliable_out, datawriter_id, &ub,
topic_size);
hello_world_serialize_topic(&ub, &topic);
printf("Send topic: %s, id: %" PRIu32 "\n", topic.message,
topic.index);
connected = uxr_run_session_time(&session, 1000);
}
/* Delete the session and close the transport. */
uxr_delete_session(&session);
uxr_close_udp_transport(&transport);
return 0;
}

3
system/xrcedds/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
/Micro-XRCE-DDS-Client/
/Micro-CDR/
/*.tar.gz

View file

@ -0,0 +1,88 @@
# ##############################################################################
# apps/system/xrcedds/CMakeLists.txt
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with this work for
# additional information regarding copyright ownership. The ASF licenses this
# file to you under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
# ##############################################################################
if(CONFIG_SYSTEM_XRCEDDS)
set(XRCEDDS_VERSION 3.0.1)
set(MICROCDR_VERSION 2.0.2)
set(XRCEDDS_DIR ${CMAKE_CURRENT_LIST_DIR}/Micro-XRCE-DDS-Client)
set(MICROCDR_DIR ${CMAKE_CURRENT_LIST_DIR}/Micro-CDR)
set(XRCEDDS_URL https://github.com/eProsima/Micro-XRCE-DDS-Client/archive)
set(MICROCDR_URL https://github.com/eProsima/Micro-CDR/archive)
if(NOT EXISTS ${XRCEDDS_DIR})
FetchContent_Declare(
xrcedds_fetch
URL ${XRCEDDS_URL}/refs/tags/v${XRCEDDS_VERSION}.tar.gz SOURCE_DIR
${XRCEDDS_DIR} BINARY_DIR
${NUTTX_APPS_BINDIR}/system/xrcedds/xrcedds-client
DOWNLOAD_NO_PROGRESS true
TIMEOUT 30)
FetchContent_GetProperties(xrcedds_fetch)
if(NOT xrcedds_fetch_POPULATED)
FetchContent_Populate(xrcedds_fetch)
endif()
endif()
if(NOT EXISTS ${MICROCDR_DIR})
FetchContent_Declare(
microcdr_fetch
URL ${MICROCDR_URL}/refs/tags/v${MICROCDR_VERSION}.tar.gz SOURCE_DIR
${MICROCDR_DIR} BINARY_DIR
${NUTTX_APPS_BINDIR}/system/xrcedds/microcdr
DOWNLOAD_NO_PROGRESS true
TIMEOUT 30)
FetchContent_GetProperties(microcdr_fetch)
if(NOT microcdr_fetch_POPULATED)
FetchContent_Populate(microcdr_fetch)
endif()
endif()
file(
GLOB XRCEDDS_SRCS ${XRCEDDS_DIR}/src/c/core/serialization/*.c
${XRCEDDS_DIR}/src/c/core/session/*.c
${XRCEDDS_DIR}/src/c/core/session/stream/*.c ${XRCEDDS_DIR}/src/c/util/*.c)
list(APPEND XRCEDDS_SRCS
${XRCEDDS_DIR}/src/c/profile/transport/ip/udp/udp_transport.c
${XRCEDDS_DIR}/src/c/profile/transport/ip/udp/udp_transport_posix.c)
if(CONFIG_SYSTEM_XRCEDDS_STREAM_FRAMING)
file(GLOB XRCEDDS_FRAMING_SRCS
${XRCEDDS_DIR}/src/c/profile/transport/stream_framing/*.c)
list(APPEND XRCEDDS_SRCS ${XRCEDDS_FRAMING_SRCS})
endif()
file(GLOB MICROCDR_SRCS ${MICROCDR_DIR}/src/c/*.c
${MICROCDR_DIR}/src/c/types/*.c)
nuttx_add_library(xrcedds STATIC)
target_sources(xrcedds PRIVATE ${XRCEDDS_SRCS} ${MICROCDR_SRCS})
target_include_directories(
xrcedds PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include ${XRCEDDS_DIR}/include
${XRCEDDS_DIR}/src/c ${MICROCDR_DIR}/include)
set_property(
TARGET nuttx
APPEND
PROPERTY NUTTX_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/include
${XRCEDDS_DIR}/include ${MICROCDR_DIR}/include)
endif()

50
system/xrcedds/Kconfig Normal file
View file

@ -0,0 +1,50 @@
#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
menuconfig SYSTEM_XRCEDDS
bool "eProsima Micro XRCE-DDS"
default n
---help---
Enable a lightweight build of Micro XRCE-DDS Client 3.0.1 and
Micro-CDR 2.0.2. Only the core client and the built-in UDP
transport are built; ROS 2, micro-ROS, discovery, and other
transports are not included.
if SYSTEM_XRCEDDS
config SYSTEM_XRCEDDS_STREAM_FRAMING
bool "Byte-stream transport framing"
default n
---help---
Enable HDLC framing for byte-stream transports such as UART.
The built-in UDP transport preserves packet boundaries, so this
is not needed for the UDP publisher demo.
config SYSTEM_XRCEDDS_MTU
int "UDP transport MTU"
range 64 65535
default 512
config SYSTEM_XRCEDDS_MAX_OUTPUT_BEST_EFFORT_STREAMS
int "Maximum output best-effort streams"
range 1 127
default 1
config SYSTEM_XRCEDDS_MAX_OUTPUT_RELIABLE_STREAMS
int "Maximum output reliable streams"
range 1 127
default 1
config SYSTEM_XRCEDDS_MAX_INPUT_BEST_EFFORT_STREAMS
int "Maximum input best-effort streams"
range 1 127
default 1
config SYSTEM_XRCEDDS_MAX_INPUT_RELIABLE_STREAMS
int "Maximum input reliable streams"
range 1 127
default 1
endif

35
system/xrcedds/Make.defs Normal file
View file

@ -0,0 +1,35 @@
############################################################################
# apps/system/xrcedds/Make.defs
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
ifneq ($(CONFIG_SYSTEM_XRCEDDS),)
CONFIGURED_APPS += $(APPDIR)/system/xrcedds
XRCEDDS_DIR := $(APPDIR)/system/xrcedds
CFLAGS += ${INCDIR_PREFIX}"$(XRCEDDS_DIR)/include"
CFLAGS += ${INCDIR_PREFIX}"$(XRCEDDS_DIR)/Micro-XRCE-DDS-Client/include"
CFLAGS += ${INCDIR_PREFIX}"$(XRCEDDS_DIR)/Micro-CDR/include"
CXXFLAGS += ${INCDIR_PREFIX}"$(XRCEDDS_DIR)/include"
CXXFLAGS += ${INCDIR_PREFIX}"$(XRCEDDS_DIR)/Micro-XRCE-DDS-Client/include"
CXXFLAGS += ${INCDIR_PREFIX}"$(XRCEDDS_DIR)/Micro-CDR/include"
endif

106
system/xrcedds/Makefile Normal file
View file

@ -0,0 +1,106 @@
############################################################################
# apps/system/xrcedds/Makefile
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
include $(APPDIR)/Make.defs
XRCEDDS_VERSION := 3.0.1
MICROCDR_VERSION := 2.0.2
XRCEDDS_TARBALL := Micro-XRCE-DDS-Client-$(XRCEDDS_VERSION).tar.gz
MICROCDR_TARBALL := Micro-CDR-$(MICROCDR_VERSION).tar.gz
XRCEDDS_UNPACK := Micro-XRCE-DDS-Client
MICROCDR_UNPACK := Micro-CDR
XRCEDDS_CSRC := $(XRCEDDS_UNPACK)$(DELIM)src$(DELIM)c
MICROCDR_CSRC := $(MICROCDR_UNPACK)$(DELIM)src$(DELIM)c
XRCEDDS_URL := https://github.com/eProsima/Micro-XRCE-DDS-Client/archive
MICROCDR_URL := https://github.com/eProsima/Micro-CDR/archive
CFLAGS += ${INCDIR_PREFIX}"$(XRCEDDS_CSRC)"
XRCEDDS_CORE := $(XRCEDDS_CSRC)$(DELIM)core
XRCEDDS_UTIL := $(XRCEDDS_CSRC)$(DELIM)util
XRCEDDS_SESSION := $(XRCEDDS_CORE)$(DELIM)session
XRCEDDS_STREAM := $(XRCEDDS_SESSION)$(DELIM)stream
XRCEDDS_TRANSPORT := $(XRCEDDS_CSRC)$(DELIM)profile$(DELIM)transport
XRCEDDS_UDP := $(XRCEDDS_TRANSPORT)$(DELIM)ip$(DELIM)udp
CSRCS += $(XRCEDDS_CORE)$(DELIM)serialization$(DELIM)xrce_header.c
CSRCS += $(XRCEDDS_CORE)$(DELIM)serialization$(DELIM)xrce_subheader.c
CSRCS += $(XRCEDDS_CORE)$(DELIM)serialization$(DELIM)xrce_types.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)common_create_entities.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)create_entities_bin.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)create_entities_ref.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)create_entities_xml.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)object_id.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)read_access.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)session.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)session_info.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)submessage.c
CSRCS += $(XRCEDDS_SESSION)$(DELIM)write_access.c
CSRCS += $(XRCEDDS_STREAM)$(DELIM)input_best_effort_stream.c
CSRCS += $(XRCEDDS_STREAM)$(DELIM)input_reliable_stream.c
CSRCS += $(XRCEDDS_STREAM)$(DELIM)output_best_effort_stream.c
CSRCS += $(XRCEDDS_STREAM)$(DELIM)output_reliable_stream.c
CSRCS += $(XRCEDDS_STREAM)$(DELIM)seq_num.c
CSRCS += $(XRCEDDS_STREAM)$(DELIM)stream_id.c
CSRCS += $(XRCEDDS_STREAM)$(DELIM)stream_storage.c
CSRCS += $(XRCEDDS_UTIL)$(DELIM)ping.c
CSRCS += $(XRCEDDS_UTIL)$(DELIM)time.c
CSRCS += $(XRCEDDS_UDP)$(DELIM)udp_transport.c
CSRCS += $(XRCEDDS_UDP)$(DELIM)udp_transport_posix.c
ifeq ($(CONFIG_SYSTEM_XRCEDDS_STREAM_FRAMING),y)
XRCEDDS_FRAMING := $(XRCEDDS_TRANSPORT)$(DELIM)stream_framing
CSRCS += $(XRCEDDS_FRAMING)$(DELIM)stream_framing_protocol.c
endif
CSRCS += $(MICROCDR_CSRC)$(DELIM)common.c
CSRCS += $(MICROCDR_CSRC)$(DELIM)types$(DELIM)array.c
CSRCS += $(MICROCDR_CSRC)$(DELIM)types$(DELIM)basic.c
CSRCS += $(MICROCDR_CSRC)$(DELIM)types$(DELIM)sequence.c
CSRCS += $(MICROCDR_CSRC)$(DELIM)types$(DELIM)string.c
$(XRCEDDS_TARBALL):
$(Q) echo "Downloading Micro XRCE-DDS Client $(XRCEDDS_VERSION)"
$(Q) curl -L -o $@ $(XRCEDDS_URL)/refs/tags/v$(XRCEDDS_VERSION).tar.gz
$(MICROCDR_TARBALL):
$(Q) echo "Downloading Micro-CDR $(MICROCDR_VERSION)"
$(Q) curl -L -o $@ $(MICROCDR_URL)/refs/tags/v$(MICROCDR_VERSION).tar.gz
$(XRCEDDS_UNPACK): $(XRCEDDS_TARBALL)
$(Q) tar zxf $<
$(Q) mv Micro-XRCE-DDS-Client-$(XRCEDDS_VERSION) $@
$(MICROCDR_UNPACK): $(MICROCDR_TARBALL)
$(Q) tar zxf $<
$(Q) mv Micro-CDR-$(MICROCDR_VERSION) $@
context:: $(XRCEDDS_UNPACK) $(MICROCDR_UNPACK)
distclean::
$(call DELFILE,$(XRCEDDS_TARBALL))
$(call DELFILE,$(MICROCDR_TARBALL))
$(call DELDIR,$(XRCEDDS_UNPACK))
$(call DELDIR,$(MICROCDR_UNPACK))
include $(APPDIR)/Application.mk

View file

@ -0,0 +1,42 @@
/****************************************************************************
* apps/system/xrcedds/include/ucdr/config.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
****************************************************************************/
#ifndef __APPS_SYSTEM_XRCEDDS_INCLUDE_UCDR_CONFIG_H
#define __APPS_SYSTEM_XRCEDDS_INCLUDE_UCDR_CONFIG_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#define MICROCDR_VERSION_MAJOR 2
#define MICROCDR_VERSION_MINOR 0
#define MICROCDR_VERSION_MICRO 2
#define MICROCDR_VERSION_STR "2.0.2"
#ifdef CONFIG_ENDIAN_BIG
# define UCDR_MACHINE_ENDIANNESS UCDR_BIG_ENDIANNESS
#else
# define UCDR_MACHINE_ENDIANNESS UCDR_LITTLE_ENDIANNESS
#endif
#endif /* __APPS_SYSTEM_XRCEDDS_INCLUDE_UCDR_CONFIG_H */

View file

@ -0,0 +1,61 @@
/****************************************************************************
* apps/system/xrcedds/include/uxr/client/config.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
****************************************************************************/
#ifndef __APPS_SYSTEM_XRCEDDS_INCLUDE_UXR_CLIENT_CONFIG_H
#define __APPS_SYSTEM_XRCEDDS_INCLUDE_UXR_CLIENT_CONFIG_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#define UXR_CLIENT_VERSION_MAJOR 3
#define UXR_CLIENT_VERSION_MINOR 0
#define UXR_CLIENT_VERSION_MICRO 1
#define UXR_CLIENT_VERSION_STR "3.0.1"
#define UCLIENT_PROFILE_UDP
#define UCLIENT_PLATFORM_POSIX
#define UCLIENT_TWEAK_XRCE_WRITE_LIMIT
#ifdef CONFIG_SYSTEM_XRCEDDS_STREAM_FRAMING
# define UCLIENT_PROFILE_STREAM_FRAMING
#endif
#define UXR_CONFIG_MAX_OUTPUT_BEST_EFFORT_STREAMS \
CONFIG_SYSTEM_XRCEDDS_MAX_OUTPUT_BEST_EFFORT_STREAMS
#define UXR_CONFIG_MAX_OUTPUT_RELIABLE_STREAMS \
CONFIG_SYSTEM_XRCEDDS_MAX_OUTPUT_RELIABLE_STREAMS
#define UXR_CONFIG_MAX_INPUT_BEST_EFFORT_STREAMS \
CONFIG_SYSTEM_XRCEDDS_MAX_INPUT_BEST_EFFORT_STREAMS
#define UXR_CONFIG_MAX_INPUT_RELIABLE_STREAMS \
CONFIG_SYSTEM_XRCEDDS_MAX_INPUT_RELIABLE_STREAMS
#define UXR_CONFIG_MAX_SESSION_CONNECTION_ATTEMPTS 10
#define UXR_CONFIG_MIN_SESSION_CONNECTION_INTERVAL 1000
#define UXR_CONFIG_MIN_HEARTBEAT_TIME_INTERVAL 100
#ifdef UCLIENT_PROFILE_UDP
# define UXR_CONFIG_UDP_TRANSPORT_MTU CONFIG_SYSTEM_XRCEDDS_MTU
#endif
#endif /* __APPS_SYSTEM_XRCEDDS_INCLUDE_UXR_CLIENT_CONFIG_H */