diff --git a/.github/workflows/arduino_esp32.yaml b/.github/workflows/arduino_esp32.yaml index 1bc0f27e4..a1c386616 100644 --- a/.github/workflows/arduino_esp32.yaml +++ b/.github/workflows/arduino_esp32.yaml @@ -51,7 +51,7 @@ jobs: mkdir -p $ARDUINO_BASE cd $ARDUINO_BASE - platformio init -b esp32thing_plus -O "build_flags=-DZ_FEATURE_LINK_BLUETOOTH=1 -DZENOH_DEBUG=3 -DZENOH_COMPILER_GCC" -O "lib_ldf_mode=deep+" + platformio init -b esp32thing_plus -O "board_build.cmake_extra_args=-DZ_FEATURE_LINK_BLUETOOTH=1" -O "build_flags=-DZENOH_DEBUG=3 -DZENOH_COMPILER_GCC" -O "lib_ldf_mode=deep+" cd $ARDUINO_BASE/lib ln -s $ZENOH_PICO_BASE diff --git a/.github/workflows/emscripten.yaml b/.github/workflows/emscripten.yaml index a240c7188..c097789dc 100644 --- a/.github/workflows/emscripten.yaml +++ b/.github/workflows/emscripten.yaml @@ -34,5 +34,5 @@ jobs: - name: Compile debug run: | mkdir build - emcmake cmake -E env CFLAGS="-DZ_FEATURE_LINK_WS=1 -DZ_FEATURE_LINK_TCP=0 -DZ_FEATURE_LINK_UDP_MULTICAST=0 -DZ_FEATURE_LINK_UDP_UNICAST=0 -DZ_FEATURE_SCOUTING_UDP=0" cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_STANDARD=11 -DBUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=OFF -DBUILD_MULTICAST=OFF -DBUILD_INTEGRATION=OFF -DBUILD_TOOLS=OFF -DZENOH_DEBUG=3 -H. -Bbuild + emcmake cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_STANDARD=11 -DBUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=OFF -DBUILD_MULTICAST=OFF -DBUILD_INTEGRATION=OFF -DBUILD_TOOLS=OFF -DZENOH_DEBUG=3 -DZ_FEATURE_LINK_WS=1 -DZ_FEATURE_LINK_TCP=0 -DZ_FEATURE_LINK_UDP_MULTICAST=0 -DZ_FEATURE_LINK_UDP_UNICAST=0 -DZ_FEATURE_SCOUTING_UDP=0 -H. -Bbuild make -C build diff --git a/.github/workflows/freertos_plus_tcp.yaml b/.github/workflows/freertos_plus_tcp.yaml index c3e56e62b..8e29b7bcb 100644 --- a/.github/workflows/freertos_plus_tcp.yaml +++ b/.github/workflows/freertos_plus_tcp.yaml @@ -37,11 +37,6 @@ jobs: - name: Build examples run: | cd examples/freertos_plus_tcp - cmake -Bbuild -G"Ninja Multi-Config" + cmake -Bbuild -G"Ninja Multi-Config" -DZ_FEATURE_LINK_UDP_MULTICAST=0 -DZ_CONFIG_SOCKET_TIMEOUT=1000 cmake --build ./build --config Debug cmake --build ./build --config Release - env: - Z_FEATURE_PUBLICATION: 1 - Z_FEATURE_SUBSCRIPTION: 1 - Z_FEATURE_QUERYABLE: 1 - Z_FEATURE_QUERY: 1 diff --git a/.github/workflows/mbed.yaml b/.github/workflows/mbed.yaml index d3c799cd3..5d7a57b7d 100644 --- a/.github/workflows/mbed.yaml +++ b/.github/workflows/mbed.yaml @@ -51,7 +51,7 @@ jobs: mkdir -p $MBED_BASE cd $MBED_BASE - pio init -b nucleo_f767zi --project-option="framework=mbed" --project-option="build_flags=-DZ_FEATURE_LINK_SERIAL=1 -DZENOH_DEBUG=3 -DZENOH_COMPILER_GCC" + pio init -b nucleo_f767zi --project-option="framework=mbed" --project-option="board_build.cmake_extra_args=-DZ_FEATURE_LINK_SERIAL=1" -O "build_flags=-DZENOH_DEBUG=3 -DZENOH_COMPILER_GCC" cd $MBED_BASE/lib ln -s $ZENOH_PICO_BASE diff --git a/.github/workflows/zephyr.yaml b/.github/workflows/zephyr.yaml index 20c7082fe..3cf503c04 100644 --- a/.github/workflows/zephyr.yaml +++ b/.github/workflows/zephyr.yaml @@ -49,7 +49,7 @@ jobs: mkdir -p $ZEPHYR_BASE cd $ZEPHYR_BASE - pio init -b nucleo_f767zi --project-option="framework=zephyr" --project-option="build_flags=-DZ_FEATURE_LINK_SERIAL=1 -DZENOH_DEBUG=3" + pio init -b nucleo_f767zi --project-option="framework=zephyr" --project-option="board_build.cmake_extra_args=-DZ_FEATURE_LINK_SERIAL=1 -DZENOH_DEBUG=3" cd $ZEPHYR_BASE/lib ln -s $ZENOH_PICO_BASE diff --git a/CMakeLists.txt b/CMakeLists.txt index 4268ebe0c..0dfcd31fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,8 +57,6 @@ option(BUILD_SHARED_LIBS "Build shared libraries if ON, otherwise build static l option(WITH_ZEPHYR "Build for Zephyr RTOS" OFF) option(WITH_FREERTOS_PLUS_TCP "Build for FreeRTOS RTOS and FreeRTOS-Plus-TCP network stack" OFF) set(ZENOH_DEBUG 0 CACHE STRING "Use this to set the ZENOH_DEBUG variable") -set(FRAG_MAX_SIZE 0 CACHE STRING "Use this to override the maximum size for fragmented messages") -set(BATCH_UNICAST_SIZE 0 CACHE STRING "Use this to override the maximum unicast batch size") set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") if(CMAKE_EXPORT_COMPILE_COMMANDS) set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES @@ -181,13 +179,33 @@ add_definition(ZENOH_DEBUG=${ZENOH_DEBUG}) # Zenoh pico feature configuration options -set(Z_FEATURE_MULTI_THREAD 1 CACHE STRING "Toggle multithread feature") +set(FRAG_MAX_SIZE 4096 CACHE STRING "Use this to override the maximum size for fragmented messages") +set(BATCH_UNICAST_SIZE 2048 CACHE STRING "Use this to override the maximum unicast batch size") +set(BATCH_MULTICAST_SIZE 2048 CACHE STRING "Use this to override the maximum multicast batch size") +set(Z_CONFIG_SOCKET_TIMEOUT 100 CACHE STRING "Default socket timeout in milliseconds") + set(Z_FEATURE_PUBLICATION 1 CACHE STRING "Toggle publication feature") set(Z_FEATURE_SUBSCRIPTION 1 CACHE STRING "Toggle subscription feature") set(Z_FEATURE_QUERY 1 CACHE STRING "Toggle query feature") set(Z_FEATURE_QUERYABLE 1 CACHE STRING "Toggle queryable feature") -set(Z_FEATURE_RAWETH_TRANSPORT 0 CACHE STRING "Toggle raw ethernet transport feature") +set(Z_FEATURE_INTEREST 1 CACHE STRING "Toggle interests") +set(Z_FEATURE_FRAGMENTATION 1 CACHE STRING "Toggle fragmentation") +set(Z_FEATURE_ENCODING_VALUES 1 CACHE STRING "Toggle encoding values") +set(Z_FEATURE_MULTI_THREAD 1 CACHE STRING "Toggle multithread") +set(Z_FEATURE_DYNAMIC_MEMORY_ALLOCATION 0 CACHE STRING "Toggle dynamic memory allocation") + +set(Z_FEATURE_LINK_TCP 1 CACHE STRING "Toggle TCP links") +set(Z_FEATURE_LINK_BLUETOOTH 0 CACHE STRING "Toggle Bluetooth links") +set(Z_FEATURE_LINK_WS 0 CACHE STRING "Toggle WebSocket links") +set(Z_FEATURE_LINK_SERIAL 0 CACHE STRING "Toggle Serial links") +set(Z_FEATURE_SCOUTING_UDP 1 CACHE STRING "Toggle UDP scouting") +set(Z_FEATURE_LINK_UDP_MULTICAST 1 CACHE STRING "Toggle UDP multicast links") +set(Z_FEATURE_LINK_UDP_UNICAST 1 CACHE STRING "Toggle UDP unicast links") +set(Z_FEATURE_MULTICAST_TRANSPORT 1 CACHE STRING "Toggle multicast transport") +set(Z_FEATURE_UNICAST_TRANSPORT 1 CACHE STRING "Toggle unicast transport") +set(Z_FEATURE_RAWETH_TRANSPORT 0 CACHE STRING "Toggle raw ethernet transport") set(Z_FEATURE_INTEREST 1 CACHE STRING "Toggle interest feature") + add_compile_definitions("Z_BUILD_DEBUG=$") message(STATUS "Building with feature confing:\n\ * MULTI-THREAD: ${Z_FEATURE_MULTI_THREAD}\n\ @@ -204,16 +222,19 @@ configure_file( @ONLY ) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/include/zenoh-pico/config.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/include/zenoh-pico/config.h + @ONLY +) + # Print summary of CMAKE configurations message(STATUS "Building in ${CMAKE_BUILD_TYPE} mode") message(STATUS "Build shared library: ${BUILD_SHARED_LIBS}") message(STATUS "Zenoh Level Log: ${ZENOH_DEBUG}") -if(FRAG_MAX_SIZE) - message(STATUS "Fragmented message max size: ${FRAG_MAX_SIZE}") -endif() -if(BATCH_UNICAST_SIZE) - message(STATUS "Unicast batch max size: ${BATCH_UNICAST_SIZE}") -endif() +message(STATUS "Fragmented message max size: ${FRAG_MAX_SIZE}") +message(STATUS "Unicast batch max size: ${BATCH_UNICAST_SIZE}") +message(STATUS "Multicast batch max size: ${BATCH_MULTICAST_SIZE}") message(STATUS "Build for Zephyr RTOS: ${WITH_ZEPHYR}") message(STATUS "Build for FreeRTOS-Plus-TCP: ${WITH_FREERTOS_PLUS_TCP}") message(STATUS "Configuring for ${CMAKE_SYSTEM_NAME}") diff --git a/GNUmakefile b/GNUmakefile index 465c8abad..217a64342 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -59,6 +59,11 @@ Z_FEATURE_QUERYABLE?=1 Z_FEATURE_INTEREST?=1 Z_FEATURE_RAWETH_TRANSPORT?=0 +# Buffer sizes +FRAG_MAX_SIZE?=300000 +BATCH_UNICAST_SIZE?=65535 +BATCH_MULTICAST_SIZE?=8096 + # zenoh-pico/ directory ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) @@ -75,7 +80,8 @@ CROSSIMG_PREFIX=zenoh-pico_ CMAKE_OPT=-DZENOH_DEBUG=$(ZENOH_DEBUG) -DBUILD_EXAMPLES=$(BUILD_EXAMPLES) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DBUILD_TESTING=$(BUILD_TESTING) -DBUILD_MULTICAST=$(BUILD_MULTICAST)\ -DZ_FEATURE_MULTI_THREAD=$(Z_FEATURE_MULTI_THREAD) -DZ_FEATURE_INTEREST=$(Z_FEATURE_INTEREST) \ -DZ_FEATURE_PUBLICATION=$(Z_FEATURE_PUBLICATION) -DZ_FEATURE_SUBSCRIPTION=$(Z_FEATURE_SUBSCRIPTION) -DZ_FEATURE_QUERY=$(Z_FEATURE_QUERY) -DZ_FEATURE_QUERYABLE=$(Z_FEATURE_QUERYABLE)\ - -DZ_FEATURE_RAWETH_TRANSPORT=$(Z_FEATURE_RAWETH_TRANSPORT) -DBUILD_INTEGRATION=$(BUILD_INTEGRATION) -DBUILD_TOOLS=$(BUILD_TOOLS) -DBUILD_SHARED_LIBS=$(BUILD_SHARED_LIBS) -H. + -DZ_FEATURE_RAWETH_TRANSPORT=$(Z_FEATURE_RAWETH_TRANSPORT) -DFRAG_MAX_SIZE=$(FRAG_MAX_SIZE) -DBATCH_UNICAST_SIZE=$(BATCH_UNICAST_SIZE) -DBATCH_MULTICAST_SIZE=$(BATCH_MULTICAST_SIZE)\ + -DBUILD_INTEGRATION=$(BUILD_INTEGRATION) -DBUILD_TOOLS=$(BUILD_TOOLS) -DBUILD_SHARED_LIBS=$(BUILD_SHARED_LIBS) -H. ifeq ($(FORCE_C99), ON) CMAKE_OPT += -DCMAKE_C_STANDARD=99 diff --git a/README.md b/README.md index 6eb1a2ee8..034fd2232 100644 --- a/README.md +++ b/README.md @@ -399,3 +399,26 @@ And on another shell, do: $ ./z_pub -m peer -l udp/224.0.0.123:7447#iface=lo0 ``` A publisher will start publishing over UDP multicast and the **zenoh** router will take care of forwarding data from the Zenoh-Pico publisher to the Zenoh-Pico subscriber. + +## Troubleshooting + +### Activate debug logs +By default debug logs are deactivated but if you're encountering issues they can help you finding the cause. To activate them you need to pass the build flag value: `-DZENOH_DEBUG=3` + +### Error when opening a session on a microcontroller +If you get an error when opening the session even though everything is setup correctly, it might be because the default buffer sizes are too large for the limited memory available on your system. + +The first thing to try is to reduce the values of the following configuration options (found in `CMakeLists.txt`): +* BATCH_UNICAST_SIZE: The maximum size of a packet in client mode. +* BATCH_MULTICAST_SIZE: The maximum size of a packet in peer mode. +* FRAG_MAX_SIZE: The maximum size of a message that can be fragmented into multiple packets. + +Until you find values that suits both your app requirements and your system memory constraints. + +These values can also be passed directly as cmake args. For example, in a `platformio.ini` you might write: +``` +board_build.cmake_extra_args= + -DBATCH_UNICAST_SIZE=1024 + -DFRAG_MAX_SIZE=2048 +``` + diff --git a/examples/freertos_plus_tcp/CMakeLists.txt b/examples/freertos_plus_tcp/CMakeLists.txt index 8130e0a23..83f890f30 100644 --- a/examples/freertos_plus_tcp/CMakeLists.txt +++ b/examples/freertos_plus_tcp/CMakeLists.txt @@ -61,15 +61,6 @@ target_link_libraries(zenohpico freertos_kernel freertos_plus_tcp ) -target_compile_definitions(zenohpico - PUBLIC - Z_FEATURE_MULTI_THREAD=1 - Z_FEATURE_LINK_TCP=1 - Z_FEATURE_SCOUTING_UDP=1 - Z_FEATURE_LINK_UDP_UNICAST=1 - Z_FEATURE_LINK_UDP_MULTICAST=0 - Z_CONFIG_SOCKET_TIMEOUT=1000 -) add_library(main OBJECT main.c) target_link_libraries(main diff --git a/include/zenoh-pico.h b/include/zenoh-pico.h index 37975134f..a41138ff3 100644 --- a/include/zenoh-pico.h +++ b/include/zenoh-pico.h @@ -23,21 +23,11 @@ #define ZENOH_PICO_PATCH 0 #define ZENOH_PICO_TWEAK 0 -/* #undef Z_FRAG_MAX_SIZE */ -/* #undef Z_BATCH_UNICAST_SIZE */ - -#define Z_FEATURE_MULTI_THREAD 1 -#define Z_FEATURE_PUBLICATION 1 -#define Z_FEATURE_SUBSCRIPTION 1 -#define Z_FEATURE_QUERY 1 -#define Z_FEATURE_QUERYABLE 1 -#define Z_FEATURE_RAWETH_TRANSPORT 0 -#define Z_FEATURE_INTEREST 1 - #include "zenoh-pico/api/constants.h" #include "zenoh-pico/api/handlers.h" #include "zenoh-pico/api/macros.h" #include "zenoh-pico/api/primitives.h" #include "zenoh-pico/api/types.h" +#include "zenoh-pico/config.h" #endif /* ZENOH_PICO_H */ diff --git a/include/zenoh-pico.h.in b/include/zenoh-pico.h.in index 71c67e10d..1db75cd76 100644 --- a/include/zenoh-pico.h.in +++ b/include/zenoh-pico.h.in @@ -23,21 +23,11 @@ #define ZENOH_PICO_PATCH @ZENOH_PICO_PATCH@ #define ZENOH_PICO_TWEAK @ZENOH_PICO_TWEAK@ -#cmakedefine Z_FRAG_MAX_SIZE @FRAG_MAX_SIZE@ -#cmakedefine Z_BATCH_UNICAST_SIZE @BATCH_UNICAST_SIZE@ - -#define Z_FEATURE_MULTI_THREAD @Z_FEATURE_MULTI_THREAD@ -#define Z_FEATURE_PUBLICATION @Z_FEATURE_PUBLICATION@ -#define Z_FEATURE_SUBSCRIPTION @Z_FEATURE_SUBSCRIPTION@ -#define Z_FEATURE_QUERY @Z_FEATURE_QUERY@ -#define Z_FEATURE_QUERYABLE @Z_FEATURE_QUERYABLE@ -#define Z_FEATURE_RAWETH_TRANSPORT @Z_FEATURE_RAWETH_TRANSPORT@ -#define Z_FEATURE_INTEREST @Z_FEATURE_INTEREST@ - #include "zenoh-pico/api/constants.h" #include "zenoh-pico/api/handlers.h" #include "zenoh-pico/api/macros.h" #include "zenoh-pico/api/primitives.h" #include "zenoh-pico/api/types.h" +#include "zenoh-pico/config.h" #endif /* ZENOH_PICO_H */ diff --git a/include/zenoh-pico/config.h b/include/zenoh-pico/config.h index fb631d680..de3cb138e 100644 --- a/include/zenoh-pico/config.h +++ b/include/zenoh-pico/config.h @@ -15,6 +15,33 @@ #ifndef INCLUDE_ZENOH_PICO_CONFIG_H #define INCLUDE_ZENOH_PICO_CONFIG_H +/*--- CMake generated config; pass values to CMake to change the following tokens ---*/ +#define Z_FRAG_MAX_SIZE 300000 +#define Z_BATCH_UNICAST_SIZE 65535 +#define Z_BATCH_MULTICAST_SIZE 8096 +#define Z_CONFIG_SOCKET_TIMEOUT 100 + +#define Z_FEATURE_MULTI_THREAD 1 +#define Z_FEATURE_PUBLICATION 1 +#define Z_FEATURE_SUBSCRIPTION 1 +#define Z_FEATURE_QUERY 1 +#define Z_FEATURE_QUERYABLE 1 +#define Z_FEATURE_RAWETH_TRANSPORT 0 +#define Z_FEATURE_INTEREST 1 +#define Z_FEATURE_DYNAMIC_MEMORY_ALLOCATION 0 +#define Z_FEATURE_LINK_TCP 1 +#define Z_FEATURE_LINK_BLUETOOTH 0 +#define Z_FEATURE_LINK_WS 0 +#define Z_FEATURE_LINK_SERIAL 0 +#define Z_FEATURE_SCOUTING_UDP 1 +#define Z_FEATURE_LINK_UDP_MULTICAST 1 +#define Z_FEATURE_LINK_UDP_UNICAST 1 +#define Z_FEATURE_MULTICAST_TRANSPORT 1 +#define Z_FEATURE_UNICAST_TRANSPORT 1 +#define Z_FEATURE_FRAGMENTATION 1 +#define Z_FEATURE_ENCODING_VALUES 1 +// End of CMake generation + /*------------------ Runtime configuration properties ------------------*/ /** * The library mode. @@ -102,246 +129,51 @@ #define Z_CONFIG_ADD_TIMESTAMP_KEY 0x4A #define Z_CONFIG_ADD_TIMESTAMP_DEFAULT "false" -/*------------------ Compile-time feature configuration ------------------*/ -// WARNING: Default values may always be overridden by CMake/make values - -/** - * Enable multi-thread support. - */ -#ifndef Z_FEATURE_MULTI_THREAD -#define Z_FEATURE_MULTI_THREAD 1 -#endif - -/** - * Enable dynamic memory allocation. - */ -#ifndef Z_FEATURE_DYNAMIC_MEMORY_ALLOCATION -#define Z_FEATURE_DYNAMIC_MEMORY_ALLOCATION 0 -#endif - -/** - * Enable queryables - */ -#ifndef Z_FEATURE_QUERYABLE -#define Z_FEATURE_QUERYABLE 1 -#endif - -/** - * Enable queries - */ -#ifndef Z_FEATURE_QUERY -#define Z_FEATURE_QUERY 1 -#endif - -/** - * Enable subscription on this node - */ -#ifndef Z_FEATURE_SUBSCRIPTION -#define Z_FEATURE_SUBSCRIPTION 1 -#endif - -/** - * Enable publication - */ -#ifndef Z_FEATURE_PUBLICATION -#define Z_FEATURE_PUBLICATION 1 -#endif - -/** - * Enable TCP links. - */ -#ifndef Z_FEATURE_LINK_TCP -#define Z_FEATURE_LINK_TCP 1 -#endif - -/** - * Enable Bluetooth links. - */ -#ifndef Z_FEATURE_LINK_BLUETOOTH -#define Z_FEATURE_LINK_BLUETOOTH 0 -#endif - -/** - * Enable WebSocket links. - */ -#ifndef Z_FEATURE_LINK_WS -#define Z_FEATURE_LINK_WS 0 -#endif - -/** - * Enable Serial links. - */ -#ifndef Z_FEATURE_LINK_SERIAL -#define Z_FEATURE_LINK_SERIAL 0 -#endif - -/** - * Enable UDP Scouting. - */ -#ifndef Z_FEATURE_SCOUTING_UDP -#define Z_FEATURE_SCOUTING_UDP 1 -#endif - -/** - * Enable UDP Multicast links. - */ -#ifndef Z_FEATURE_LINK_UDP_MULTICAST -#define Z_FEATURE_LINK_UDP_MULTICAST 1 -#endif - -/** - * Enable UDP Unicast links. - */ -#ifndef Z_FEATURE_LINK_UDP_UNICAST -#define Z_FEATURE_LINK_UDP_UNICAST 1 -#endif - -/** - * Enable Multicast Transport. - */ -#ifndef Z_FEATURE_MULTICAST_TRANSPORT -#if Z_FEATURE_SCOUTING_UDP == 0 && Z_FEATURE_LINK_BLUETOOTH == 0 && Z_FEATURE_LINK_UDP_MULTICAST == 0 -#define Z_FEATURE_MULTICAST_TRANSPORT 0 -#else -#define Z_FEATURE_MULTICAST_TRANSPORT 1 -#endif -#endif - -/** - * Enable Unicast Transport. - */ -#ifndef Z_FEATURE_UNICAST_TRANSPORT -#if Z_FEATURE_LINK_TCP == 0 && Z_FEATURE_LINK_UDP_UNICAST == 0 && Z_FEATURE_LINK_SERIAL == 0 && Z_FEATURE_LINK_WS == 0 -#define Z_FEATURE_UNICAST_TRANSPORT 0 -#else -#define Z_FEATURE_UNICAST_TRANSPORT 1 -#endif -#endif - -/** - * Enable raweth transport/link. - */ -#ifndef Z_FEATURE_RAWETH_TRANSPORT -#define Z_FEATURE_RAWETH_TRANSPORT 0 -#endif - -/** - * Enable message fragmentation. - */ -#ifndef Z_FEATURE_FRAGMENTATION -#define Z_FEATURE_FRAGMENTATION 1 -#endif - -/** - * Enable interests. - */ -#ifndef Z_FEATURE_INTEREST -#define Z_FEATURE_INTEREST 0 -#endif - -/** - * Enable encoding values. - */ -#ifndef Z_FEATURE_ENCODING_VALUES -#define Z_FEATURE_ENCODING_VALUES 1 -#endif - /*------------------ Compile-time configuration properties ------------------*/ /** * Default length for Zenoh ID. Maximum size is 16 bytes. * This configuration will only be applied to Zenoh IDs generated by Zenoh-Pico. */ -#ifndef Z_ZID_LENGTH #define Z_ZID_LENGTH 16 -#endif - -#ifndef Z_TSID_LENGTH #define Z_TSID_LENGTH 16 -#endif /** * Protocol version identifier. * Do not change this value. */ -#ifndef Z_PROTO_VERSION #define Z_PROTO_VERSION 0x09 -#endif /** * Default session lease in milliseconds. */ -#ifndef Z_TRANSPORT_LEASE #define Z_TRANSPORT_LEASE 10000 -#endif /** * Default session lease expire factor. */ -#ifndef Z_TRANSPORT_LEASE_EXPIRE_FACTOR #define Z_TRANSPORT_LEASE_EXPIRE_FACTOR 3 -#endif /** * Default multicast session join interval in milliseconds. */ -#ifndef Z_JOIN_INTERVAL #define Z_JOIN_INTERVAL 2500 -#endif -/** - * Default socket timeout in milliseconds. - */ -#ifndef Z_CONFIG_SOCKET_TIMEOUT -#define Z_CONFIG_SOCKET_TIMEOUT 100 -#endif - -#ifndef Z_SN_RESOLUTION #define Z_SN_RESOLUTION 0x02 -#endif - -#ifndef Z_REQ_RESOLUTION #define Z_REQ_RESOLUTION 0x02 -#endif /** * Default size for an IO slice. */ -#ifndef Z_IOSLICE_SIZE #define Z_IOSLICE_SIZE 128 -#endif /** - * Default maximum batch size possible to be received or sent. - */ -#ifndef Z_BATCH_UNICAST_SIZE -#define Z_BATCH_UNICAST_SIZE 65535 -#endif -/** - * Default maximum batch size possible to be received or sent. - */ -#ifndef Z_BATCH_MULTICAST_SIZE -#define Z_BATCH_MULTICAST_SIZE 8192 -#endif - -/** - * Default maximum size for fragmented messages. + * Default get timeout in milliseconds. */ -#ifndef Z_FRAG_MAX_SIZE -#define Z_FRAG_MAX_SIZE 300000 -#endif +#define Z_GET_TIMEOUT_DEFAULT 10000 /** * Default "nop" instruction */ -#ifndef ZP_ASM_NOP #define ZP_ASM_NOP __asm__("nop") -#endif - -/** - * Default get timeout in milliseconds. - */ -#ifndef Z_GET_TIMEOUT_DEFAULT -#define Z_GET_TIMEOUT_DEFAULT 10000 -#endif #endif /* INCLUDE_ZENOH_PICO_CONFIG_H */ diff --git a/include/zenoh-pico/config.h.in b/include/zenoh-pico/config.h.in new file mode 100644 index 000000000..b4577f1fe --- /dev/null +++ b/include/zenoh-pico/config.h.in @@ -0,0 +1,179 @@ +// +// Copyright (c) 2022 ZettaScale Technology +// +// This program and the accompanying materials are made available under the +// terms of the Eclipse Public License 2.0 which is available at +// http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 +// which is available at https://www.apache.org/licenses/LICENSE-2.0. +// +// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 +// +// Contributors: +// ZettaScale Zenoh Team, +// + +#ifndef INCLUDE_ZENOH_PICO_CONFIG_H +#define INCLUDE_ZENOH_PICO_CONFIG_H + +/*--- CMake generated config; pass values to CMake to change the following tokens ---*/ +#define Z_FRAG_MAX_SIZE @FRAG_MAX_SIZE@ +#define Z_BATCH_UNICAST_SIZE @BATCH_UNICAST_SIZE@ +#define Z_BATCH_MULTICAST_SIZE @BATCH_MULTICAST_SIZE@ +#define Z_CONFIG_SOCKET_TIMEOUT @Z_CONFIG_SOCKET_TIMEOUT@ + +#define Z_FEATURE_MULTI_THREAD @Z_FEATURE_MULTI_THREAD@ +#define Z_FEATURE_PUBLICATION @Z_FEATURE_PUBLICATION@ +#define Z_FEATURE_SUBSCRIPTION @Z_FEATURE_SUBSCRIPTION@ +#define Z_FEATURE_QUERY @Z_FEATURE_QUERY@ +#define Z_FEATURE_QUERYABLE @Z_FEATURE_QUERYABLE@ +#define Z_FEATURE_RAWETH_TRANSPORT @Z_FEATURE_RAWETH_TRANSPORT@ +#define Z_FEATURE_INTEREST @Z_FEATURE_INTEREST@ +#define Z_FEATURE_DYNAMIC_MEMORY_ALLOCATION @Z_FEATURE_DYNAMIC_MEMORY_ALLOCATION@ +#define Z_FEATURE_LINK_TCP @Z_FEATURE_LINK_TCP@ +#define Z_FEATURE_LINK_BLUETOOTH @Z_FEATURE_LINK_BLUETOOTH@ +#define Z_FEATURE_LINK_WS @Z_FEATURE_LINK_WS@ +#define Z_FEATURE_LINK_SERIAL @Z_FEATURE_LINK_SERIAL@ +#define Z_FEATURE_SCOUTING_UDP @Z_FEATURE_SCOUTING_UDP@ +#define Z_FEATURE_LINK_UDP_MULTICAST @Z_FEATURE_LINK_UDP_MULTICAST@ +#define Z_FEATURE_LINK_UDP_UNICAST @Z_FEATURE_LINK_UDP_UNICAST@ +#define Z_FEATURE_MULTICAST_TRANSPORT @Z_FEATURE_MULTICAST_TRANSPORT@ +#define Z_FEATURE_UNICAST_TRANSPORT @Z_FEATURE_UNICAST_TRANSPORT@ +#define Z_FEATURE_FRAGMENTATION @Z_FEATURE_FRAGMENTATION@ +#define Z_FEATURE_ENCODING_VALUES @Z_FEATURE_ENCODING_VALUES@ +// End of CMake generation + +/*------------------ Runtime configuration properties ------------------*/ +/** + * The library mode. + * Accepted values : `"client"`, `"peer"`. + * Default value : `"client"`. + */ +#define Z_CONFIG_MODE_KEY 0x40 +#define Z_CONFIG_MODE_CLIENT "client" +#define Z_CONFIG_MODE_PEER "peer" +#define Z_CONFIG_MODE_DEFAULT Z_CONFIG_MODE_CLIENT + +/** + * The locator of a peer to connect to. + * Accepted values : `` (ex: `"tcp/10.10.10.10:7447"`). + * Default value : None. + * Multiple values are not accepted in zenoh-pico. + */ +#define Z_CONFIG_CONNECT_KEY 0x41 + +/** + * A locator to listen on. + * Accepted values : `` (ex: `"tcp/10.10.10.10:7447"`). + * Default value : None. + * Multiple values accepted. + */ +#define Z_CONFIG_LISTEN_KEY 0x42 + +/** + * The user name to use for authentication. + * Accepted values : ``. + * Default value : None. + */ +#define Z_CONFIG_USER_KEY 0x43 + +/** + * The password to use for authentication. + * Accepted values : ``. + * Default value : None. + */ +#define Z_CONFIG_PASSWORD_KEY 0x44 + +/** + * Activates/Deactivates multicast scouting. + * Accepted values : `false`, `true`. + * Default value : `true`. + */ +#define Z_CONFIG_MULTICAST_SCOUTING_KEY 0x45 +#define Z_CONFIG_MULTICAST_SCOUTING_DEFAULT "true" + +/** + * The multicast address and ports to use for multicast scouting. + * Accepted values : `:`. + * Default value : `"224.0.0.224:7446"`. + */ +#define Z_CONFIG_MULTICAST_LOCATOR_KEY 0x46 +#define Z_CONFIG_MULTICAST_LOCATOR_DEFAULT "udp/224.0.0.224:7446" + +/** + * In client mode, the period dedicated to scouting a router before failing. + * Accepted values : ``. + * Default value : `"1000"`. + */ +#define Z_CONFIG_SCOUTING_TIMEOUT_KEY 0x47 +#define Z_CONFIG_SCOUTING_TIMEOUT_DEFAULT "1000" + +/** + * The entities to find in the multicast scouting, defined as a bitwise value. + * Accepted values : [0-7]. Bitwise value are defined in :c:enum:`z_whatami_t`. + * Default value : `3`. + */ +#define Z_CONFIG_SCOUTING_WHAT_KEY 0x48 +#define Z_CONFIG_SCOUTING_WHAT_DEFAULT "3" + +/** + * A configurable and static Zenoh ID to be used on Zenoh Sessions. + * Accepted values : ``. + */ +#define Z_CONFIG_SESSION_ZID_KEY 0x49 + +/** + * Indicates if data messages should be timestamped. + * Accepted values : `false`, `true`. + * Default value : `false`. + */ +#define Z_CONFIG_ADD_TIMESTAMP_KEY 0x4A +#define Z_CONFIG_ADD_TIMESTAMP_DEFAULT "false" + +/*------------------ Compile-time configuration properties ------------------*/ +/** + * Default length for Zenoh ID. Maximum size is 16 bytes. + * This configuration will only be applied to Zenoh IDs generated by Zenoh-Pico. + */ +#define Z_ZID_LENGTH 16 +#define Z_TSID_LENGTH 16 + +/** + * Protocol version identifier. + * Do not change this value. + */ +#define Z_PROTO_VERSION 0x09 + +/** + * Default session lease in milliseconds. + */ +#define Z_TRANSPORT_LEASE 10000 + +/** + * Default session lease expire factor. + */ +#define Z_TRANSPORT_LEASE_EXPIRE_FACTOR 3 + +/** + * Default multicast session join interval in milliseconds. + */ +#define Z_JOIN_INTERVAL 2500 + +#define Z_SN_RESOLUTION 0x02 +#define Z_REQ_RESOLUTION 0x02 + +/** + * Default size for an IO slice. + */ +#define Z_IOSLICE_SIZE 128 + +/** + * Default get timeout in milliseconds. + */ +#define Z_GET_TIMEOUT_DEFAULT 10000 + +/** + * Default "nop" instruction + */ +#define ZP_ASM_NOP __asm__("nop") + +#endif /* INCLUDE_ZENOH_PICO_CONFIG_H */ diff --git a/src/api/api.c b/src/api/api.c index f1d2d83b2..2f5fbe3b9 100644 --- a/src/api/api.c +++ b/src/api/api.c @@ -826,7 +826,9 @@ static _z_bytes_t _z_bytes_from_owned_bytes(z_owned_bytes_t *bytes) { return _z_bytes_null(); } } +#endif +#if Z_FEATURE_QUERYABLE == 1 || Z_FEATURE_QUERY == 1 // Convert a user owned encoding to an internal encoding, return default encoding if value invalid static _z_encoding_t _z_encoding_from_owned(const z_owned_encoding_t *encoding) { if (encoding == NULL) { diff --git a/src/link/multicast/bt.c b/src/link/multicast/bt.c index 4af9b148c..64c66409f 100644 --- a/src/link/multicast/bt.c +++ b/src/link/multicast/bt.c @@ -14,6 +14,7 @@ #include "zenoh-pico/link/config/bt.h" #include +#include #include #include "zenoh-pico/config.h" @@ -50,7 +51,7 @@ int8_t _z_f_link_open_bt(_z_link_t *self) { uint32_t tout = Z_CONFIG_SOCKET_TIMEOUT; char *tout_as_str = _z_str_intmap_get(&self->_endpoint._config, BT_CONFIG_TOUT_KEY); if (tout_as_str != NULL) { - tout = strtoul(tout_as_str, NULL, 10); + tout = (uint32_t)strtoul(tout_as_str, NULL, 10); } self->_socket._bt._gname = self->_endpoint._locator._address; @@ -69,7 +70,7 @@ int8_t _z_f_link_listen_bt(_z_link_t *self) { uint32_t tout = Z_CONFIG_SOCKET_TIMEOUT; char *tout_as_str = _z_str_intmap_get(&self->_endpoint._config, BT_CONFIG_TOUT_KEY); if (tout_as_str != NULL) { - tout = strtoul(tout_as_str, NULL, 10); + tout = (uint32_t)strtoul(tout_as_str, NULL, 10); } self->_socket._bt._gname = self->_endpoint._locator._address; @@ -80,7 +81,7 @@ int8_t _z_f_link_listen_bt(_z_link_t *self) { void _z_f_link_close_bt(_z_link_t *self) { _z_close_bt(&self->_socket._bt._sock); } -void _z_f_link_free_bt(_z_link_t *self) {} +void _z_f_link_free_bt(_z_link_t *self) { _ZP_UNUSED(self); } size_t _z_f_link_write_bt(const _z_link_t *self, const uint8_t *ptr, size_t len) { return _z_send_bt(self->_socket._bt._sock, ptr, len); diff --git a/src/link/unicast/serial.c b/src/link/unicast/serial.c index 2423c2804..b8abc8aeb 100644 --- a/src/link/unicast/serial.c +++ b/src/link/unicast/serial.c @@ -55,13 +55,13 @@ int8_t _z_f_link_open_serial(_z_link_t *self) { int8_t ret = _Z_RES_OK; const char *baudrate_str = _z_str_intmap_get(&self->_endpoint._config, SERIAL_CONFIG_BAUDRATE_KEY); - uint32_t baudrate = strtoul(baudrate_str, NULL, 10); + uint32_t baudrate = (uint32_t)strtoul(baudrate_str, NULL, 10); char *p_dot = strchr(self->_endpoint._locator._address, '.'); if (p_dot != NULL) { - uint32_t txpin = strtoul(self->_endpoint._locator._address, &p_dot, 10); + uint32_t txpin = (uint32_t)strtoul(self->_endpoint._locator._address, &p_dot, 10); p_dot = _z_ptr_char_offset(p_dot, 1); - uint32_t rxpin = strtoul(p_dot, NULL, 10); + uint32_t rxpin = (uint32_t)strtoul(p_dot, NULL, 10); ret = _z_open_serial_from_pins(&self->_socket._serial._sock, txpin, rxpin, baudrate); } else { ret = _z_open_serial_from_dev(&self->_socket._serial._sock, self->_endpoint._locator._address, baudrate); @@ -74,13 +74,13 @@ int8_t _z_f_link_listen_serial(_z_link_t *self) { int8_t ret = _Z_RES_OK; const char *baudrate_str = _z_str_intmap_get(&self->_endpoint._config, SERIAL_CONFIG_BAUDRATE_KEY); - uint32_t baudrate = strtoul(baudrate_str, NULL, 10); + uint32_t baudrate = (uint32_t)strtoul(baudrate_str, NULL, 10); char *p_dot = strchr(self->_endpoint._locator._address, '.'); if (p_dot != NULL) { - uint32_t txpin = strtoul(self->_endpoint._locator._address, &p_dot, 10); + uint32_t txpin = (uint32_t)strtoul(self->_endpoint._locator._address, &p_dot, 10); p_dot = _z_ptr_char_offset(p_dot, 1); - uint32_t rxpin = strtoul(p_dot, NULL, 10); + uint32_t rxpin = (uint32_t)strtoul(p_dot, NULL, 10); ret = _z_listen_serial_from_pins(&self->_socket._serial._sock, txpin, rxpin, baudrate); } else { ret = _z_listen_serial_from_dev(&self->_socket._serial._sock, self->_endpoint._locator._address, baudrate); diff --git a/src/link/unicast/ws.c b/src/link/unicast/ws.c index 5de468a68..fd7590849 100644 --- a/src/link/unicast/ws.c +++ b/src/link/unicast/ws.c @@ -94,7 +94,7 @@ int8_t _z_endpoint_ws_valid(_z_endpoint_t *endpoint) { if (s_port == NULL) { ret = _Z_ERR_CONFIG_LOCATOR_INVALID; } else { - uint32_t port = strtoul(s_port, NULL, 10); + uint32_t port = (uint32_t)strtoul(s_port, NULL, 10); if ((port < (uint32_t)1) || (port > (uint32_t)65355)) { // Port numbers should range from 1 to 65355 ret = _Z_ERR_CONFIG_LOCATOR_INVALID; } @@ -111,7 +111,7 @@ int8_t _z_f_link_open_ws(_z_link_t *zl) { uint32_t tout = Z_CONFIG_SOCKET_TIMEOUT; char *tout_as_str = _z_str_intmap_get(&zl->_endpoint._config, WS_CONFIG_TOUT_KEY); if (tout_as_str != NULL) { - tout = strtoul(tout_as_str, NULL, 10); + tout = (uint32_t)strtoul(tout_as_str, NULL, 10); } ret = _z_open_ws(&zl->_socket._ws._sock, zl->_socket._ws._rep, tout); diff --git a/src/session/subscription.c b/src/session/subscription.c index 01e6c687c..0d739816f 100644 --- a/src/session/subscription.c +++ b/src/session/subscription.c @@ -207,10 +207,12 @@ void _z_flush_subscriptions(_z_session_t *zn) { #else // Z_FEATURE_SUBSCRIPTION == 0 void _z_trigger_local_subscriptions(_z_session_t *zn, const _z_keyexpr_t keyexpr, const _z_bytes_t payload, - _z_n_qos_t qos, const _z_timestampt_t *timestamp, const _z_bytes_t attachment) { + _z_encoding_t *encoding, const _z_n_qos_t qos, const _z_timestamp_t *timestamp, + const _z_bytes_t attachment) { _ZP_UNUSED(zn); _ZP_UNUSED(keyexpr); _ZP_UNUSED(payload); + _ZP_UNUSED(encoding); _ZP_UNUSED(qos); _ZP_UNUSED(timestamp); _ZP_UNUSED(attachment);