Files
unitreeApp/unitree_SDK/include/dds/ddsi/ddsi_shm_transport.h

90 lines
2.4 KiB
C
Raw Permalink Normal View History

2025-09-24 10:53:28 +08:00
/*
* Copyright(c) 2021 ZettaScale Technology and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
* v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#ifndef DDS_SHM__TRANSPORT_H
#define DDS_SHM__TRANSPORT_H
#include "dds/export.h"
#include "dds/features.h"
#include "dds/ddsi/ddsi_config.h"
#include "dds/ddsi/ddsi_keyhash.h"
#include "dds/ddsi/ddsi_tran.h"
#include "dds/ddsi/q_protocol.h" /* for, e.g., SubmessageKind_t */
#include "dds/ddsrt/sync.h"
#include "iceoryx_binding_c/chunk.h"
#include "iceoryx_binding_c/publisher.h"
#include "iceoryx_binding_c/subscriber.h"
#include "iceoryx_binding_c/config.h"
#if defined(__cplusplus)
extern "C" {
#endif
typedef enum {
IOX_CHUNK_UNINITIALIZED,
IOX_CHUNK_CONTAINS_RAW_DATA,
IOX_CHUNK_CONTAINS_SERIALIZED_DATA
} iox_shm_data_state_t;
struct iceoryx_header {
struct ddsi_guid guid;
dds_time_t tstamp;
uint32_t statusinfo;
uint32_t data_size;
unsigned char data_kind;
ddsi_keyhash_t keyhash;
iox_shm_data_state_t shm_data_state;
};
typedef struct iceoryx_header iceoryx_header_t;
struct dds_reader;
struct shm_monitor;
typedef struct {
ddsrt_mutex_t mutex;
struct shm_monitor *monitor;
struct dds_reader *parent_reader;
} iox_sub_context_t;
DDS_EXPORT iox_sub_context_t **iox_sub_context_ptr(iox_sub_t sub);
DDS_EXPORT void iox_sub_context_init(iox_sub_context_t *context);
DDS_EXPORT void
iox_sub_context_fini(iox_sub_context_t *context);
// lock and unlock for individual subscribers
DDS_EXPORT void shm_lock_iox_sub(iox_sub_t sub);
DDS_EXPORT void shm_unlock_iox_sub(iox_sub_t sub);
DDS_EXPORT void free_iox_chunk(iox_sub_t *iox_sub, void **iox_chunk);
DDS_EXPORT iceoryx_header_t *iceoryx_header_from_chunk(const void *iox_chunk);
DDS_EXPORT void shm_set_loglevel(enum ddsi_shm_loglevel);
DDS_EXPORT void *shm_create_chunk(iox_pub_t iox_pub, size_t size);
DDS_EXPORT void shm_set_data_state(void *iox_chunk,
iox_shm_data_state_t data_state);
DDS_EXPORT iox_shm_data_state_t shm_get_data_state(void *iox_chunk);
#if defined(__cplusplus)
}
#endif
#endif // DDS_SHM__TRANSPORT_H