Program Listing for File rclc_parameter.h
↰ Return to documentation for file (include/rclc_parameter/rclc_parameter.h
)
// Copyright (c) 2021 - for information on the respective copyright owner
//
// Licensed 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 RCLC_PARAMETER__RCLC_PARAMETER_H_
#define RCLC_PARAMETER__RCLC_PARAMETER_H_
#if __cplusplus
extern "C"
{
#endif // if __cplusplus
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <rcl/types.h>
#include <rcl_interfaces/msg/parameter.h>
#include <rcl_interfaces/msg/parameter_value.h>
#include <rcl_interfaces/msg/parameter_event.h>
#include <rcl_interfaces/srv/get_parameter_types.h>
#include <rcl_interfaces/srv/get_parameters.h>
#include <rcl_interfaces/msg/set_parameters_result.h>
#include <rcl_interfaces/srv/list_parameters.h>
#include <rcl_interfaces/srv/set_parameters.h>
#include <rcl_interfaces/srv/describe_parameters.h>
#include <rcl_interfaces/msg/parameter_descriptor.h>
#include <rosidl_runtime_c/string_functions.h>
#include <rosidl_runtime_c/primitives_sequence_functions.h>
#include <rclc_parameter/visibility_control.h>
// Alias for rcl_interfaces types
typedef struct rcl_interfaces__srv__GetParameters_Request GetParameters_Request;
typedef struct rcl_interfaces__srv__GetParameters_Response GetParameters_Response;
typedef struct rcl_interfaces__srv__GetParameterTypes_Request GetParameterTypes_Request;
typedef struct rcl_interfaces__srv__GetParameterTypes_Response GetParameterTypes_Response;
typedef struct rcl_interfaces__srv__SetParameters_Request SetParameters_Request;
typedef struct rcl_interfaces__srv__SetParameters_Response SetParameters_Response;
typedef struct rcl_interfaces__msg__SetParametersResult SetParameters_Result;
typedef struct rcl_interfaces__srv__DescribeParameters_Request DescribeParameters_Request;
typedef struct rcl_interfaces__srv__DescribeParameters_Response DescribeParameters_Response;
typedef struct rcl_interfaces__srv__ListParameters_Request ListParameters_Request;
typedef struct rcl_interfaces__srv__ListParameters_Response ListParameters_Response;
typedef struct rcl_interfaces__msg__Parameter Parameter;
typedef struct rcl_interfaces__msg__ParameterValue ParameterValue;
typedef struct rcl_interfaces__msg__Parameter__Sequence Parameter__Sequence;
typedef struct rcl_interfaces__msg__ParameterDescriptor ParameterDescriptor;
typedef struct rcl_interfaces__msg__ParameterDescriptor__Sequence ParameterDescriptor__Sequence;
typedef struct rcl_interfaces__msg__ParameterEvent ParameterEvent;
// Number of RCLC executor handles required for a parameter server
#define RCLC_EXECUTOR_PARAMETER_SERVER_HANDLES 5
#define RCLC_PARAMETER_MODIFICATION_REJECTED 4001
#define RCLC_PARAMETER_TYPE_MISMATCH 4002
#define RCLC_PARAMETER_UNSUPORTED_ON_LOW_MEM 4003
#define RCLC_PARAMETER_DISABLED_ON_CALLBACK 40004
typedef bool (* rclc_parameter_callback_t)(
const Parameter * old_param,
const Parameter * new_param,
void * context);
// Allowed RCLC parameter types
typedef enum rclc_parameter_type_t
{
RCLC_PARAMETER_NOT_SET = 0,
RCLC_PARAMETER_BOOL,
RCLC_PARAMETER_INT,
RCLC_PARAMETER_DOUBLE
} rclc_parameter_type_t;
// RCLC parameter server options
typedef struct rclc_parameter_options_t
{
bool notify_changed_over_dds;
size_t max_params;
bool allow_undeclared_parameters;
bool low_mem_mode;
} rclc_parameter_options_t;
// Container for RCLC parameter server
typedef struct rclc_parameter_server_t
{
rcl_service_t get_service;
rcl_service_t get_types_service;
rcl_service_t set_service;
rcl_service_t list_service;
rcl_service_t describe_service;
rcl_publisher_t event_publisher;
GetParameters_Request get_request;
GetParameters_Response get_response;
GetParameterTypes_Request get_types_request;
GetParameterTypes_Response get_types_response;
SetParameters_Request set_request;
SetParameters_Response set_response;
ListParameters_Request list_request;
ListParameters_Response list_response;
DescribeParameters_Request describe_request;
DescribeParameters_Response describe_response;
Parameter__Sequence parameter_list;
ParameterDescriptor__Sequence parameter_descriptors;
ParameterEvent event_list;
rclc_parameter_callback_t on_modification;
void * context;
bool on_callback;
bool notify_changed_over_dds;
bool allow_undeclared_parameters;
bool low_mem_mode;
} rclc_parameter_server_t;
RCLC_PARAMETER_PUBLIC
rcl_ret_t rclc_parameter_server_init_default(
rclc_parameter_server_t * parameter_server,
rcl_node_t * node);
RCLC_PARAMETER_PUBLIC
rcl_ret_t rclc_parameter_server_init_with_option(
rclc_parameter_server_t * parameter_server,
rcl_node_t * node,
const rclc_parameter_options_t * options);
RCLC_PARAMETER_PUBLIC
rcl_ret_t rclc_parameter_server_fini(
rclc_parameter_server_t * parameter_server,
rcl_node_t * node);
RCLC_PARAMETER_PUBLIC
rcl_ret_t rclc_executor_add_parameter_server(
rclc_executor_t * executor,
rclc_parameter_server_t * parameter_server,
rclc_parameter_callback_t on_modification);
RCLC_PARAMETER_PUBLIC
rcl_ret_t rclc_executor_add_parameter_server_with_context(
rclc_executor_t * executor,
rclc_parameter_server_t * parameter_server,
rclc_parameter_callback_t on_modification,
void * context);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_add_parameter(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
rclc_parameter_type_t type);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_delete_parameter(
rclc_parameter_server_t * parameter_server,
const char * parameter_name);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_parameter_set_bool(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
bool value);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_parameter_set_int(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
int64_t value);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_parameter_set_double(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
double value);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_parameter_get_bool(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
bool * output);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_parameter_get_int(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
int64_t * output);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_parameter_get_double(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
double * output);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_add_parameter_description(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
const char * parameter_description,
const char * additional_constraints);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_set_parameter_read_only(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
bool read_only);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_add_parameter_constraint_integer(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
int64_t from_value,
int64_t to_value,
uint64_t step);
RCLC_PARAMETER_PUBLIC
rcl_ret_t
rclc_add_parameter_constraint_double(
rclc_parameter_server_t * parameter_server,
const char * parameter_name,
double from_value,
double to_value,
double step);
#if __cplusplus
}
#endif // if __cplusplus
#endif // RCLC_PARAMETER__RCLC_PARAMETER_H_