Zephyr API Documentation 4.3.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#include <zephyr/net_buf.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20
27
34#define COBS_DEFAULT_DELIMITER 0x00
35
42#define COBS_FLAG_TRAILING_DELIMITER BIT(8)
43
61#define COBS_FLAG_CUSTOM_DELIMITER(x) ((x) & 0xff)
62
66
78
87static inline size_t cobs_max_encoded_len(size_t decoded_size, uint32_t flags)
88{
90 return decoded_size + decoded_size / 254 + 1 + 1;
91 } else {
92 return decoded_size + decoded_size / 254 + 1;
93 }
94}
95
109
110int cobs_encode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
111
125int cobs_decode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
126
144typedef int (*cobs_stream_cb)(const uint8_t *buf, size_t len, void *user_data);
145
157 void *cb_user_data;
158
160 uint8_t fragment[255];
164};
165
177 void *cb_user_data;
178
180 uint8_t code;
182 uint8_t code_index;
186};
187
202int cobs_encoder_init(struct cobs_encoder *enc, cobs_stream_cb cb, void *user_data, uint32_t flags);
203
217
233int cobs_encoder_write(struct cobs_encoder *enc, const uint8_t *buf, size_t len);
234
249int cobs_decoder_init(struct cobs_decoder *dec, cobs_stream_cb cb, void *user_data, uint32_t flags);
250
265
285int cobs_decoder_write(struct cobs_decoder *dec, const uint8_t *buf, size_t len);
286
288
289#ifdef __cplusplus
290}
291#endif
292
293#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:42
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:87
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:144
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:172
COBS streaming encoder state.
Definition cobs.h:152
Network buffer representation.
Definition net_buf.h:1006
Misc utilities.