nros C API
Lightweight ROS 2 client for embedded real-time systems
Loading...
Searching...
No Matches
cdr.h
Go to the documentation of this file.
1
14#ifndef NROS_CDR_H
15#define NROS_CDR_H
16
17#include "nros/types.h"
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/* ===================================================================
24 * Write Functions
25 * =================================================================== */
26
37// phase-303 W4 (#0267) — XCDR2 DHEADER delimiters. Under XCDR1 (humble) these
38// are no-ops returning -1 (mark) / 0. Under XCDR2 (iron/jazzy+) begin reserves a
39// 4-byte DHEADER (returns its offset as the mark); end backpatches it with the
40// member-block size. Generated `_serialize_inline` / `_deserialize_inline` wrap
41// every struct so appendable types carry a DHEADER matching a modern ROS 2 peer.
42// begin returns >=0 mark or -1 (XCDR1) on success, -2 on error.
43// Writes the edition-appropriate 4-byte encapsulation header (XCDR1 or XCDR2).
44int32_t nros_cdr_write_encaps_header(uint8_t** ptr, const uint8_t* end);
45
46int64_t nros_cdr_begin_dheader(uint8_t** ptr, const uint8_t* end, const uint8_t* origin);
47int32_t nros_cdr_end_dheader(int64_t mark, uint8_t** ptr, const uint8_t* end,
48 const uint8_t* origin);
49int64_t nros_cdr_begin_dheader_read(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin);
50int32_t nros_cdr_end_dheader_read(int64_t scope, const uint8_t** ptr, const uint8_t* end,
51 const uint8_t* origin);
52
53int32_t nros_cdr_write_bool(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, bool value);
54
65int32_t nros_cdr_write_u8(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, uint8_t value);
66
77int32_t nros_cdr_write_i8(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, int8_t value);
78
89int32_t nros_cdr_write_u16(uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
90 uint16_t value);
91
102int32_t nros_cdr_write_i16(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, int16_t value);
103
114int32_t nros_cdr_write_u32(uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
115 uint32_t value);
116
127int32_t nros_cdr_write_i32(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, int32_t value);
128
139int32_t nros_cdr_write_u64(uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
140 uint64_t value);
141
152int32_t nros_cdr_write_i64(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, int64_t value);
153
164int32_t nros_cdr_write_f32(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, float value);
165
176int32_t nros_cdr_write_f64(uint8_t** ptr, const uint8_t* end, const uint8_t* origin, double value);
177
191int32_t nros_cdr_write_string(uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
192 const char* value);
193
210int32_t nros_cdr_write_string_n(uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
211 const char* data, size_t len);
212
213/* ===================================================================
214 * Read Functions
215 * =================================================================== */
216
227int32_t nros_cdr_read_bool(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
228 bool* value);
229
240int32_t nros_cdr_read_u8(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
241 uint8_t* value);
242
253int32_t nros_cdr_read_i8(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
254 int8_t* value);
255
266int32_t nros_cdr_read_u16(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
267 uint16_t* value);
268
279int32_t nros_cdr_read_i16(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
280 int16_t* value);
281
292int32_t nros_cdr_read_u32(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
293 uint32_t* value);
294
305int32_t nros_cdr_read_i32(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
306 int32_t* value);
307
318int32_t nros_cdr_read_u64(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
319 uint64_t* value);
320
331int32_t nros_cdr_read_i64(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
332 int64_t* value);
333
344int32_t nros_cdr_read_f32(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
345 float* value);
346
357int32_t nros_cdr_read_f64(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
358 double* value);
359
374int32_t nros_cdr_read_string(const uint8_t** ptr, const uint8_t* end, const uint8_t* origin,
375 char* value, size_t max_len);
376
377#ifdef __cplusplus
378}
379#endif
380
381#endif /* NROS_CDR_H */
int32_t nros_cdr_write_u32(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint32_t value)
Write a u32 value to the buffer (with alignment).
int32_t nros_cdr_write_u64(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint64_t value)
Write a u64 value to the buffer (with alignment).
int32_t nros_cdr_write_string_n(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, const char *data, size_t len)
Write a string from a pointer+length pair (not null-terminated).
int32_t nros_cdr_read_f64(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, double *value)
Read a f64 value from the buffer.
int32_t nros_cdr_read_string(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, char *value, size_t max_len)
Read a string from the buffer into a fixed-size buffer.
int32_t nros_cdr_read_u16(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint16_t *value)
Read a u16 value from the buffer (with alignment).
int32_t nros_cdr_read_i16(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int16_t *value)
Read an i16 value from the buffer.
int32_t nros_cdr_write_bool(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, bool value)
int32_t nros_cdr_read_i8(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int8_t *value)
Read an i8 value from the buffer.
int32_t nros_cdr_read_i64(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int64_t *value)
Read an i64 value from the buffer.
int32_t nros_cdr_read_i32(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int32_t *value)
Read an i32 value from the buffer.
int32_t nros_cdr_write_f32(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, float value)
Write a f32 value to the buffer (with alignment).
int32_t nros_cdr_end_dheader_read(int64_t scope, const uint8_t **ptr, const uint8_t *end, const uint8_t *origin)
int32_t nros_cdr_read_f32(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, float *value)
Read a f32 value from the buffer.
int32_t nros_cdr_write_u8(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint8_t value)
Write a u8 value to the buffer.
int32_t nros_cdr_write_i64(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int64_t value)
Write an i64 value to the buffer.
int32_t nros_cdr_read_u8(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint8_t *value)
Read a u8 value from the buffer.
int32_t nros_cdr_write_string(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, const char *value)
Write a string to the buffer (length-prefixed).
int32_t nros_cdr_end_dheader(int64_t mark, uint8_t **ptr, const uint8_t *end, const uint8_t *origin)
int32_t nros_cdr_read_u64(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint64_t *value)
Read a u64 value from the buffer (with alignment).
int32_t nros_cdr_write_encaps_header(uint8_t **ptr, const uint8_t *end)
Write a boolean value to the buffer.
int32_t nros_cdr_write_i32(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int32_t value)
Write an i32 value to the buffer.
int32_t nros_cdr_write_i16(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int16_t value)
Write an i16 value to the buffer.
int32_t nros_cdr_write_i8(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, int8_t value)
Write an i8 value to the buffer.
int64_t nros_cdr_begin_dheader(uint8_t **ptr, const uint8_t *end, const uint8_t *origin)
int64_t nros_cdr_begin_dheader_read(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin)
int32_t nros_cdr_read_bool(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, bool *value)
Read a boolean value from the buffer.
int32_t nros_cdr_read_u32(const uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint32_t *value)
Read a u32 value from the buffer (with alignment).
int32_t nros_cdr_write_u16(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, uint16_t value)
Write a u16 value to the buffer (with alignment).
int32_t nros_cdr_write_f64(uint8_t **ptr, const uint8_t *end, const uint8_t *origin, double value)
Write a f64 value to the buffer (with alignment).
const char char size_t max_len
Definition parameter.h:570
const char bool * value
Definition parameter.h:552
int64_t const uint8_t * data
Definition service.h:68
int64_t const uint8_t size_t len
Definition service.h:69
Shared types and constants for the nros C API.
#define NROS_PUBLIC
Definition visibility.h:33