Zephyr Project API 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
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
29
41
48
55#define COBS_DEFAULT_DELIMITER 0x00
56
63#define COBS_FLAG_TRAILING_DELIMITER BIT(8)
64
82#define COBS_FLAG_CUSTOM_DELIMITER(x) ((x) & 0xff)
83
87
96static inline size_t cobs_max_encoded_len(size_t decoded_size, uint32_t flags)
97{
99 return decoded_size + decoded_size / 254 + 1 + 1;
100 } else {
101 return decoded_size + decoded_size / 254 + 1;
102 }
103}
104
105#if defined(CONFIG_NET_BUF) || defined(__DOXYGEN__)
106
122
123int cobs_encode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
124
140int cobs_decode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
141
142#endif /* defined(CONFIG_NET_BUF) || defined(__DOXYGEN__) */
143
161typedef int (*cobs_stream_cb)(const uint8_t *buf, size_t len, void *user_data);
162
174 void *cb_user_data;
175
177 uint8_t fragment[255];
181};
182
194 void *cb_user_data;
195
197 uint8_t code;
199 uint8_t code_index;
203};
204
219int cobs_encoder_init(struct cobs_encoder *enc, cobs_stream_cb cb, void *user_data, uint32_t flags);
220
234
250int cobs_encoder_write(struct cobs_encoder *enc, const uint8_t *buf, size_t len);
251
266int cobs_decoder_init(struct cobs_decoder *dec, cobs_stream_cb cb, void *user_data, uint32_t flags);
267
282
302int cobs_decoder_write(struct cobs_decoder *dec, const uint8_t *buf, size_t len);
303
305
306#ifdef __cplusplus
307}
308#endif
309
310#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:63
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:96
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:161
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:189
COBS streaming encoder state.
Definition cobs.h:169
Network buffer representation.
Definition net_buf.h:1015
Misc utilities.