Program Listing for File types.h

Return to documentation for file (include/rmw/types.h)

// Copyright 2014-2017 Open Source Robotics Foundation, Inc.
//
// 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 RMW__TYPES_H_
#define RMW__TYPES_H_

#ifdef __cplusplus
extern "C"
{
#endif

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

// map rcutils specific log levels to rmw speicfic type
#include <rcutils/logging.h>

#include "rmw/events_statuses/events_statuses.h"
#include "rmw/init.h"
#include "rmw/init_options.h"
#include "rmw/ret_types.h"
#include "rmw/security_options.h"
#include "rmw/serialized_message.h"
#include "rmw/subscription_content_filter_options.h"
#include "rmw/time.h"
#include "rmw/visibility_control.h"

// 24 bytes is the most memory needed to represent the GID by any current
// implementation. It may need to be increased in the future.
#define RMW_GID_STORAGE_SIZE 24u

typedef struct RMW_PUBLIC_TYPE rmw_node_s
{
  const char * implementation_identifier;

  void * data;

  const char * name;

  const char * namespace_;

  rmw_context_t * context;
} rmw_node_t;

typedef enum RMW_PUBLIC_TYPE rmw_endpoint_type_e
{
  RMW_ENDPOINT_INVALID = 0,

  RMW_ENDPOINT_PUBLISHER,

  RMW_ENDPOINT_SUBSCRIPTION
} rmw_endpoint_type_t;

typedef enum RMW_PUBLIC_TYPE rmw_unique_network_flow_endpoints_requirement_e
{
  RMW_UNIQUE_NETWORK_FLOW_ENDPOINTS_NOT_REQUIRED = 0,

  RMW_UNIQUE_NETWORK_FLOW_ENDPOINTS_STRICTLY_REQUIRED,

  RMW_UNIQUE_NETWORK_FLOW_ENDPOINTS_OPTIONALLY_REQUIRED,

  RMW_UNIQUE_NETWORK_FLOW_ENDPOINTS_SYSTEM_DEFAULT
} rmw_unique_network_flow_endpoints_requirement_t;

typedef struct RMW_PUBLIC_TYPE rmw_publisher_options_s
{

  void * rmw_specific_publisher_payload;


  rmw_unique_network_flow_endpoints_requirement_t require_unique_network_flow_endpoints;
} rmw_publisher_options_t;

typedef struct RMW_PUBLIC_TYPE rmw_publisher_s
{
  const char * implementation_identifier;

  void * data;

  const char * topic_name;


  rmw_publisher_options_t options;

  bool can_loan_messages;
} rmw_publisher_t;

typedef struct RMW_PUBLIC_TYPE rmw_subscription_options_s
{

  void * rmw_specific_subscription_payload;


  bool ignore_local_publications;


  rmw_unique_network_flow_endpoints_requirement_t require_unique_network_flow_endpoints;

  rmw_subscription_content_filter_options_t * content_filter_options;
} rmw_subscription_options_t;

typedef struct RMW_PUBLIC_TYPE rmw_subscription_s
{
  const char * implementation_identifier;

  void * data;

  const char * topic_name;


  rmw_subscription_options_t options;

  bool can_loan_messages;

  bool is_cft_enabled;
} rmw_subscription_t;

typedef struct RMW_PUBLIC_TYPE rmw_service_s
{
  const char * implementation_identifier;

  void * data;

  const char * service_name;
} rmw_service_t;

typedef struct RMW_PUBLIC_TYPE rmw_client_s
{
  const char * implementation_identifier;

  void * data;

  const char * service_name;
} rmw_client_t;

typedef struct RMW_PUBLIC_TYPE rmw_guard_condition_s
{
  const char * implementation_identifier;

  void * data;

  rmw_context_t * context;
} rmw_guard_condition_t;

typedef struct RMW_PUBLIC_TYPE rmw_publisher_allocation_s
{
  const char * implementation_identifier;

  void * data;
} rmw_publisher_allocation_t;

typedef struct RMW_PUBLIC_TYPE rmw_subscription_allocation_s
{
  const char * implementation_identifier;

  void * data;
} rmw_subscription_allocation_t;


typedef struct RMW_PUBLIC_TYPE rmw_subscriptions_s
{
  size_t subscriber_count;
  void ** subscribers;
} rmw_subscriptions_t;


typedef struct RMW_PUBLIC_TYPE rmw_services_s
{
  size_t service_count;
  void ** services;
} rmw_services_t;


typedef struct RMW_PUBLIC_TYPE rmw_clients_s
{
  size_t client_count;
  void ** clients;
} rmw_clients_t;

typedef struct RMW_PUBLIC_TYPE rmw_events_s
{
  size_t event_count;
  void ** events;
} rmw_events_t;


typedef struct RMW_PUBLIC_TYPE rmw_guard_conditions_s
{
  size_t guard_condition_count;
  void ** guard_conditions;
} rmw_guard_conditions_t;

typedef struct RMW_PUBLIC_TYPE rmw_wait_set_s
{
  const char * implementation_identifier;

  rmw_guard_conditions_t * guard_conditions;

  void * data;
} rmw_wait_set_t;

typedef struct RMW_PUBLIC_TYPE rmw_request_id_s
{
  int8_t writer_guid[16];

  int64_t sequence_number;
} rmw_request_id_t;

typedef struct RMW_PUBLIC_TYPE rmw_service_info_s
{
  rmw_time_point_value_t source_timestamp;
  rmw_time_point_value_t received_timestamp;
  rmw_request_id_t request_id;
} rmw_service_info_t;

typedef enum RMW_PUBLIC_TYPE rmw_qos_reliability_policy_e
{
  RMW_QOS_POLICY_RELIABILITY_SYSTEM_DEFAULT,

  RMW_QOS_POLICY_RELIABILITY_RELIABLE,

  RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT,

  RMW_QOS_POLICY_RELIABILITY_UNKNOWN
} rmw_qos_reliability_policy_t;

typedef enum RMW_PUBLIC_TYPE rmw_qos_history_policy_e
{
  RMW_QOS_POLICY_HISTORY_SYSTEM_DEFAULT,

  RMW_QOS_POLICY_HISTORY_KEEP_LAST,

  RMW_QOS_POLICY_HISTORY_KEEP_ALL,

  RMW_QOS_POLICY_HISTORY_UNKNOWN
} rmw_qos_history_policy_t;

typedef enum RMW_PUBLIC_TYPE rmw_qos_durability_policy_e
{
  RMW_QOS_POLICY_DURABILITY_SYSTEM_DEFAULT,

  RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL,

  RMW_QOS_POLICY_DURABILITY_VOLATILE,

  RMW_QOS_POLICY_DURABILITY_UNKNOWN
} rmw_qos_durability_policy_t;

#define RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_NODE_DEPRECATED_MSG \
  "RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_NODE is deprecated. " \
  "Use RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_TOPIC if manually asserted liveliness is needed."

#ifndef _WIN32
# define RMW_DECLARE_DEPRECATED(name, msg) name __attribute__((deprecated(msg)))
#else
# define RMW_DECLARE_DEPRECATED(name, msg) name __pragma(deprecated(name))
#endif

// Suppress syntax errors, as cppcheck does not seem to handle enumerator attributes.
// cppcheck-suppress syntaxError
typedef enum RMW_PUBLIC_TYPE rmw_qos_liveliness_policy_e
{
  RMW_QOS_POLICY_LIVELINESS_SYSTEM_DEFAULT = 0,

  RMW_QOS_POLICY_LIVELINESS_AUTOMATIC = 1,

  RMW_DECLARE_DEPRECATED(
    RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_NODE,
    RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_NODE_DEPRECATED_MSG) = 2,

  // Using `3` for backwards compatibility.
  RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_TOPIC = 3,

  RMW_QOS_POLICY_LIVELINESS_UNKNOWN = 4
} rmw_qos_liveliness_policy_t;

#define RMW_QOS_DEADLINE_DEFAULT RMW_DURATION_UNSPECIFIED

#define RMW_QOS_LIFESPAN_DEFAULT RMW_DURATION_UNSPECIFIED

#define RMW_QOS_LIVELINESS_LEASE_DURATION_DEFAULT RMW_DURATION_UNSPECIFIED

typedef struct RMW_PUBLIC_TYPE rmw_qos_profile_s
{
  enum rmw_qos_history_policy_e history;
  size_t depth;
  enum rmw_qos_reliability_policy_e reliability;
  enum rmw_qos_durability_policy_e durability;

  struct rmw_time_s deadline;

  struct rmw_time_s lifespan;
  enum rmw_qos_liveliness_policy_e liveliness;

  struct rmw_time_s liveliness_lease_duration;


  bool avoid_ros_namespace_conventions;
} rmw_qos_profile_t;

typedef struct RMW_PUBLIC_TYPE rmw_gid_s
{
  const char * implementation_identifier;

  uint8_t data[RMW_GID_STORAGE_SIZE];
} rmw_gid_t;

#define RMW_MESSAGE_INFO_SEQUENCE_NUMBER_UNSUPPORTED UINT64_MAX

typedef struct RMW_PUBLIC_TYPE rmw_message_info_s
{

  rmw_time_point_value_t source_timestamp;

  rmw_time_point_value_t received_timestamp;

  uint64_t publication_sequence_number;

  uint64_t reception_sequence_number;

  rmw_gid_t publisher_gid;

  bool from_intra_process;
} rmw_message_info_t;

RMW_PUBLIC
RMW_WARN_UNUSED
rmw_message_info_t
rmw_get_zero_initialized_message_info(void);

enum {RMW_QOS_POLICY_DEPTH_SYSTEM_DEFAULT = 0};

typedef enum RMW_PUBLIC_TYPE
{
  RMW_LOG_SEVERITY_DEBUG = RCUTILS_LOG_SEVERITY_DEBUG,

  RMW_LOG_SEVERITY_INFO = RCUTILS_LOG_SEVERITY_INFO,

  RMW_LOG_SEVERITY_WARN = RCUTILS_LOG_SEVERITY_WARN,

  RMW_LOG_SEVERITY_ERROR = RCUTILS_LOG_SEVERITY_ERROR,

  RMW_LOG_SEVERITY_FATAL = RCUTILS_LOG_SEVERITY_FATAL
} rmw_log_severity_t;

#ifdef __cplusplus
}
#endif

#endif  // RMW__TYPES_H_