File syn_cobs.h¶
FileList > proto > syn_cobs.h
Go to the source code of this file
COBS (Consistent Overhead Byte Stuffing) packet framing. More...
#include <stdbool.h>#include <stddef.h>#include <stdint.h>
Classes¶
| Type | Name |
|---|---|
| struct | SYN_COBS_Decoder Streaming COBS frame decoder. |
Public Types¶
| Type | Name |
|---|---|
| typedef void(* | SYN_COBS_PacketCallback Callback invoked when a complete packet is decoded. |
Public Functions¶
| Type | Name |
|---|---|
| size_t | syn_cobs_decode (const void * src, size_t src_len, void * dst) Decode a COBS-encoded packet. |
| void | syn_cobs_decoder_feed (SYN_COBS_Decoder * dec, uint8_t byte) Feed a byte to the streaming decoder. |
| void | syn_cobs_decoder_init (SYN_COBS_Decoder * dec, uint8_t * buf, size_t buf_size, SYN_COBS_PacketCallback callback, void * ctx) Initialize streaming COBS decoder. |
| void | syn_cobs_decoder_reset (SYN_COBS_Decoder * dec) Reset the streaming decoder state. |
| size_t | syn_cobs_encode (const void * src, size_t src_len, void * dst) Encode data using COBS. |
Detailed Description¶
Turns an arbitrary byte stream into framed packets separated by 0x00 delimiters, with zero bytes inside replaced by run-length codes. Overhead is exactly 1 byte per 254 data bytes.
Use this over UART, RS-485, or any byte-oriented link where you need reliable packet boundaries.
** **
// Encode a packet
uint8_t encoded[256];
size_t enc_len = syn_cobs_encode(data, data_len, encoded);
// Decode a packet
uint8_t decoded[256];
size_t dec_len = syn_cobs_decode(encoded, enc_len, decoded);
// Streaming decoder (byte-at-a-time from UART RX)
SYN_COBS_Decoder dec;
syn_cobs_decoder_init(&dec, rx_buf, sizeof(rx_buf), on_packet, NULL);
syn_cobs_decoder_feed(&dec, byte);
Public Types Documentation¶
typedef SYN_COBS_PacketCallback¶
Callback invoked when a complete packet is decoded.
Parameters:
dataDecoded packet data.lenDecoded packet length.ctxUser context.
Public Functions Documentation¶
function syn_cobs_decode¶
Decode a COBS-encoded packet.
Parameters:
srcCOBS-encoded data (without the 0x00 delimiter).src_lenEncoded length.dstOutput buffer (must be at least src_len).
Returns:
Number of decoded bytes, or 0 on error.
function syn_cobs_decoder_feed¶
Feed a byte to the streaming decoder.
When a 0x00 delimiter is received, the accumulated bytes are decoded and the callback is invoked with the decoded packet.
Parameters:
decDecoder.byteReceived byte.
function syn_cobs_decoder_init¶
Initialize streaming COBS decoder.
void syn_cobs_decoder_init (
SYN_COBS_Decoder * dec,
uint8_t * buf,
size_t buf_size,
SYN_COBS_PacketCallback callback,
void * ctx
)
Parameters:
decDecoder instance.bufReceive buffer for accumulating encoded bytes.buf_sizeBuffer capacity.callbackCalled when a complete packet is decoded.ctxUser context for callback.
function syn_cobs_decoder_reset¶
Reset the streaming decoder state.
Parameters:
decDecoder.
function syn_cobs_encode¶
Encode data using COBS.
Parameters:
srcInput data.src_lenInput length.dstOutput buffer (must be at least src_len + src_len/254 + 1).
Returns:
Number of bytes written to dst (excluding the trailing 0x00 delimiter).
The documentation for this class was generated from the following file src/syntropic/proto/syn_cobs.h