Skip to content

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.

typedef void(* SYN_COBS_PacketCallback) (const uint8_t *data, size_t len, void *ctx);

Parameters:

  • data Decoded packet data.
  • len Decoded packet length.
  • ctx User context.

Public Functions Documentation

function syn_cobs_decode

Decode a COBS-encoded packet.

size_t syn_cobs_decode (
    const void * src,
    size_t src_len,
    void * dst
) 

Parameters:

  • src COBS-encoded data (without the 0x00 delimiter).
  • src_len Encoded length.
  • dst Output 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.

void syn_cobs_decoder_feed (
    SYN_COBS_Decoder * dec,
    uint8_t byte
) 

When a 0x00 delimiter is received, the accumulated bytes are decoded and the callback is invoked with the decoded packet.

Parameters:

  • dec Decoder.
  • byte Received 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:

  • dec Decoder instance.
  • buf Receive buffer for accumulating encoded bytes.
  • buf_size Buffer capacity.
  • callback Called when a complete packet is decoded.
  • ctx User context for callback.

function syn_cobs_decoder_reset

Reset the streaming decoder state.

void syn_cobs_decoder_reset (
    SYN_COBS_Decoder * dec
) 

Parameters:

  • dec Decoder.

function syn_cobs_encode

Encode data using COBS.

size_t syn_cobs_encode (
    const void * src,
    size_t src_len,
    void * dst
) 

Parameters:

  • src Input data.
  • src_len Input length.
  • dst Output 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