Zephyr API Documentation 4.5.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
cobs.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Kelly Helmut Lord
3 * Copyright (c) 2026 Basalte bv
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
13
14#ifndef ZEPHYR_INCLUDE_DATA_COBS_H_
15#define ZEPHYR_INCLUDE_DATA_COBS_H_
16
17#include <stddef.h>
18#include <sys/types.h>
19#include <zephyr/sys/util.h>
20
21#if defined(CONFIG_NET_BUF)
22#include <zephyr/net_buf.h>
23#endif
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
42
49
56#define COBS_DEFAULT_DELIMITER 0x00
57
64#define COBS_FLAG_TRAILING_DELIMITER BIT(8)
65
83#define COBS_FLAG_CUSTOM_DELIMITER(x) ((x) & 0xff)
84
88
97static inline size_t cobs_max_encoded_len(size_t decoded_size, uint32_t flags)
98{
99 size_t len = decoded_size + decoded_size / 254U + 1U;
100
101 if ((flags & COBS_FLAG_TRAILING_DELIMITER) != 0U) {
102 len++;
103 }
104
105 return len;
106}
107
108#if defined(CONFIG_NET_BUF) || defined(__DOXYGEN__)
109
126int cobs_encode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
127
151int cobs_decode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
152
153#endif /* defined(CONFIG_NET_BUF) || defined(__DOXYGEN__) */
154
180typedef int (*cobs_stream_cb)(const uint8_t *buf, size_t len, void *user_data);
181
193 void *cb_user_data;
194
196 uint8_t fragment[255];
200};
201
213 void *cb_user_data;
214
216 uint8_t code;
218 uint8_t code_index;
222};
223
239int cobs_encoder_init(struct cobs_encoder *enc, cobs_stream_cb cb, void *user_data, uint32_t flags);
240
255
272int cobs_encoder_write(struct cobs_encoder *enc, const uint8_t *buf, size_t len);
273
289int cobs_decoder_init(struct cobs_decoder *dec, cobs_stream_cb cb, void *user_data, uint32_t flags);
290
309
333int cobs_decoder_write(struct cobs_decoder *dec, const uint8_t *buf, size_t len);
334
336
337#ifdef __cplusplus
338}
339#endif
340
341#endif /* ZEPHYR_INCLUDE_DATA_COBS_H_ */
#define COBS_FLAG_TRAILING_DELIMITER
Flag indicating that encode or decode should include a trailing delimiter.
Definition cobs.h:64
int cobs_encoder_close(struct cobs_encoder *enc)
Finalize COBS streaming encoder.
int cobs_decoder_write(struct cobs_decoder *dec, const uint8_t *buf, size_t len)
Write data to COBS streaming decoder.
int cobs_decoder_init(struct cobs_decoder *dec, cobs_stream_cb cb, void *user_data, uint32_t flags)
Initialize COBS streaming decoder.
static size_t cobs_max_encoded_len(size_t decoded_size, uint32_t flags)
Calculate maximum encoded buffer size.
Definition cobs.h:97
int cobs_encoder_write(struct cobs_encoder *enc, const uint8_t *buf, size_t len)
Write data to COBS streaming encoder.
int cobs_decode(struct net_buf *src, struct net_buf *dst, uint32_t flags)
COBS decoding.
int cobs_decoder_close(struct cobs_decoder *dec)
Finalize COBS streaming decoder.
int cobs_encode(struct net_buf *src, struct net_buf *dst, uint32_t flags)
COBS encoding.
int(* cobs_stream_cb)(const uint8_t *buf, size_t len, void *user_data)
Callback function type for streaming COBS encoder/decoder.
Definition cobs.h:180
int cobs_encoder_init(struct cobs_encoder *enc, cobs_stream_cb cb, void *user_data, uint32_t flags)
Initialize COBS streaming encoder.
Buffer management.
flags
Definition parser.h:86
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
COBS streaming decoder state.
Definition cobs.h:208
COBS streaming encoder state.
Definition cobs.h:188
Network buffer representation.
Definition net_buf.h:1062
Misc utilities.