Zephyr API Documentation 4.4.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
8#ifndef ZEPHYR_INCLUDE_DATA_COBS_H_
9#define ZEPHYR_INCLUDE_DATA_COBS_H_
10
11#include <stddef.h>
12#include <sys/types.h>
13#include <zephyr/sys/util.h>
14
15#if defined(CONFIG_NET_BUF)
16#include <zephyr/net_buf.h>
17#endif
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23
30
37#define COBS_DEFAULT_DELIMITER 0x00
38
45#define COBS_FLAG_TRAILING_DELIMITER BIT(8)
46
64#define COBS_FLAG_CUSTOM_DELIMITER(x) ((x) & 0xff)
65
69
81
90static inline size_t cobs_max_encoded_len(size_t decoded_size, uint32_t flags)
91{
93 return decoded_size + decoded_size / 254 + 1 + 1;
94 } else {
95 return decoded_size + decoded_size / 254 + 1;
96 }
97}
98
99#if defined(CONFIG_NET_BUF) || defined(__DOXYGEN__)
100
116
117int cobs_encode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
118
134int cobs_decode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
135
136#endif /* defined(CONFIG_NET_BUF) || defined(__DOXYGEN__) */
137
155typedef int (*cobs_stream_cb)(const uint8_t *buf, size_t len, void *user_data);
156
168 void *cb_user_data;
169
171 uint8_t fragment[255];
175};
176
188 void *cb_user_data;
189
191 uint8_t code;
193 uint8_t code_index;
197};
198
213int cobs_encoder_init(struct cobs_encoder *enc, cobs_stream_cb cb, void *user_data, uint32_t flags);
214
228
244int cobs_encoder_write(struct cobs_encoder *enc, const uint8_t *buf, size_t len);
245
260int cobs_decoder_init(struct cobs_decoder *dec, cobs_stream_cb cb, void *user_data, uint32_t flags);
261
276
296int cobs_decoder_write(struct cobs_decoder *dec, const uint8_t *buf, size_t len);
297
299
300#ifdef __cplusplus
301}
302#endif
303
304#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:45
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:90
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:155
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:97
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
COBS streaming decoder state.
Definition cobs.h:183
COBS streaming encoder state.
Definition cobs.h:163
Network buffer representation.
Definition net_buf.h:1015
Misc utilities.