zerodds-iceoryx-cyclone

Same-host shared memory. Bridge between ZeroDDS and Cyclone DDS over the iceoryx C++ (POSH) shared-memory transport; it follows Cyclone's PSMX chunk convention and implements no OMG specification.

Cyclone DDS uses iceoryx POSH, with the iox-roudi daemon, through its iox_psmx plugin. zerodds-iceoryx-cyclone binds the C ABI of libiceoryx_binding_c and reads and writes chunks in Cyclone's PSMX convention, so a ZeroDDS process can read samples a Cyclone writer publishes and write samples a Cyclone reader takes. This path is separate from the iceoryx2 bridge in zerodds-flatdata.

  • DdsPsmxMetadata — #[repr(C)] layout of Cyclone's dds_psmx_metadata_t, the iceoryx user header of every chunk (instance_id is u32). raw() builds the header for a raw native struct (STATE_RAW_DATA = 2), serialized() the one for a classic CDR little-endian sample (STATE_SERIALIZED_DATA = 4).
  • CYCLONE_IOX_SERVICE = "DDS_CYCLONE"; iox_event_name(partition, topic) builds "<partition>.<topic>". The iceoryx service description is { "DDS_CYCLONE", <type name>, ".<topic>" } for the empty partition.
  • With posh on Linux: init_runtime, CycloneIoxReader (new, discover_by_instance, take), CycloneIoxWriter (new, write_raw).

According to the README, Cyclone accepts the ZeroDDS writer, a plain iceoryx publisher that DDS discovery does not know, only with ALLOW_NONDISCOVERED_WRITERS=true in its PSMX configuration.

Consumers

  • zerodds-dcps — optional dependency behind its feature cyclone-iox, which also enables posh here. A DataWriter or DataReader on which enable_cyclone_iox was called publishes or subscribes PSMX-shaped chunks through this crate.

Features

  • posh (off; default = []) — compiles the FFI module under cfg(all(target_os = "linux", feature = "posh")). build.rs then links libiceoryx_binding_c and libstdc++, with /usr/lib/x86_64-linux-gnu as search path; ICEORYX_LIB_DIR adds another. Both binaries require it. Without posh, the crate exposes only DdsPsmxMetadata, CYCLONE_IOX_SERVICE and iox_event_name and builds on any platform.

Status

  • std; no forbid(unsafe_code). The posh module calls the iceoryx C ABI through unsafe FFI.
  • Binaries zerodds-cyclone-iox-reader and zerodds-cyclone-iox-writer (require posh and a running iox-roudi), one per direction. The crate is excluded from the cargo-dist release binaries (dist = false).
  • No test functions in the source. The script proofs/run.sh builds the crate and a Cyclone publisher and subscriber, starts iox-roudi and checks both directions; it needs Linux with Cyclone DDS and iceoryx POSH.

zerodds-iceoryx-cyclone

Gemeinsamer Speicher auf einem Host. Brücke zwischen ZeroDDS und Cyclone DDS über den Shared-Memory-Transport von iceoryx C++ (POSH); sie folgt der PSMX-Konvention von Cyclone für Chunks und implementiert keine OMG-Spezifikation.

Cyclone DDS nutzt iceoryx POSH mit dem Daemon iox-roudi über sein Plugin iox_psmx. zerodds-iceoryx-cyclone bindet die C-ABI von libiceoryx_binding_c an und liest und schreibt Chunks in der PSMX-Konvention von Cyclone, sodass ein ZeroDDS-Prozess Samples lesen kann, die ein Cyclone-Writer veröffentlicht, und Samples schreiben kann, die ein Cyclone-Reader entnimmt. Dieser Weg ist getrennt von der Brücke zu iceoryx2 in zerodds-flatdata.

  • DdsPsmxMetadata — Layout #[repr(C)] von dds_psmx_metadata_t aus Cyclone, dem iceoryx-Benutzerkopf jedes Chunks (instance_id ist u32). raw() baut den Kopf für eine rohe native Struktur (STATE_RAW_DATA = 2), serialized() den für ein Sample in klassischem CDR, Little Endian (STATE_SERIALIZED_DATA = 4).
  • CYCLONE_IOX_SERVICE = "DDS_CYCLONE"; iox_event_name(partition, topic) baut "<partition>.<topic>". Die Dienstbeschreibung in iceoryx ist für die leere Partition { "DDS_CYCLONE", <type name>, ".<topic>" }.
  • Mit posh unter Linux: init_runtime, CycloneIoxReader (new, discover_by_instance, take), CycloneIoxWriter (new, write_raw).

Laut README nimmt Cyclone den ZeroDDS-Writer, einen einfachen iceoryx-Publisher, den die DDS-Discovery nicht kennt, nur mit ALLOW_NONDISCOVERED_WRITERS=true in seiner PSMX-Konfiguration an.

Konsumenten

  • zerodds-dcps — optionale Abhängigkeit hinter dessen Feature cyclone-iox, das hier zugleich posh aktiviert. Ein DataWriter oder DataReader, auf dem enable_cyclone_iox aufgerufen wurde, veröffentlicht oder abonniert über dieses Crate Chunks in PSMX-Form.

Features

  • posh (aus; default = []) — kompiliert das FFI-Modul unter cfg(all(target_os = "linux", feature = "posh")). build.rs bindet dann libiceoryx_binding_c und libstdc++ ein, mit /usr/lib/x86_64-linux-gnu als Suchpfad; ICEORYX_LIB_DIR fügt einen weiteren hinzu. Beide Binaries setzen es voraus. Ohne posh stellt das Crate nur DdsPsmxMetadata, CYCLONE_IOX_SERVICE und iox_event_name bereit und baut auf jeder Plattform.

Status

  • std; kein forbid(unsafe_code). Das Modul posh ruft die C-ABI von iceoryx über unsafe-FFI auf.
  • Binaries zerodds-cyclone-iox-reader und zerodds-cyclone-iox-writer (setzen posh und ein laufendes iox-roudi voraus), je eines pro Richtung. Das Crate ist von den Release-Binaries über cargo-dist ausgenommen (dist = false).
  • Keine Testfunktionen im Quelltext. Das Skript proofs/run.sh baut das Crate sowie einen Publisher und einen Subscriber für Cyclone, startet iox-roudi und prüft beide Richtungen; es braucht Linux mit Cyclone DDS und iceoryx POSH.