ESPHome 2026.5.0b1
Loading...
Searching...
No Matches
esphome::ring_buffer::RingBuffer Class Reference

#include <ring_buffer.h>

Public Types

enum class  MemoryPreference { EXTERNAL_FIRST , INTERNAL_FIRST }
 

Public Member Functions

 ~RingBuffer ()
 
size_t read (void *data, size_t len, TickType_t ticks_to_wait=0)
 Reads from the ring buffer, waiting up to a specified number of ticks if necessary.
 
void * receive_acquire (size_t &length, size_t max_length, TickType_t ticks_to_wait=0)
 Acquires a pointer into the ring buffer's internal storage without copying.
 
void receive_release (void *item)
 Releases a previously acquired ring buffer item.
 
size_t write (const void *data, size_t len)
 Writes to the ring buffer, overwriting oldest data if necessary.
 
size_t write_without_replacement (const void *data, size_t len, TickType_t ticks_to_wait=0, bool write_partial=true)
 Writes to the ring buffer without overwriting oldest data.
 
size_t available () const
 Returns the number of available bytes in the ring buffer.
 
size_t free () const
 Returns the number of free bytes in the ring buffer.
 
BaseType_t reset ()
 Resets the ring buffer, discarding all stored data.
 

Static Public Member Functions

static std::unique_ptr< RingBuffercreate (size_t len, MemoryPreference preference=MemoryPreference::EXTERNAL_FIRST)
 

Protected Member Functions

bool discard_bytes_ (size_t discard_bytes)
 Discards data from the ring buffer.
 

Protected Attributes

RingbufHandle_t handle_ {nullptr}
 
StaticRingbuffer_t structure_
 
uint8_t * storage_ {nullptr}
 
size_t size_ {0}
 

Detailed Description

Definition at line 13 of file ring_buffer.h.

Member Enumeration Documentation

◆ MemoryPreference

Enumerator
EXTERNAL_FIRST 
INTERNAL_FIRST 

Definition at line 105 of file ring_buffer.h.

Constructor & Destructor Documentation

◆ ~RingBuffer()

esphome::ring_buffer::RingBuffer::~RingBuffer ( )

Definition at line 12 of file ring_buffer.cpp.

Member Function Documentation

◆ available()

size_t esphome::ring_buffer::RingBuffer::available ( ) const

Returns the number of available bytes in the ring buffer.

This function provides the number of bytes that can be read from the ring buffer without blocking the calling FreeRTOS task.

Returns
Number of available bytes

Definition at line 106 of file ring_buffer.cpp.

◆ create()

std::unique_ptr< RingBuffer > esphome::ring_buffer::RingBuffer::create ( size_t len,
MemoryPreference preference = MemoryPreference::EXTERNAL_FIRST )
static

Definition at line 20 of file ring_buffer.cpp.

◆ discard_bytes_()

bool esphome::ring_buffer::RingBuffer::discard_bytes_ ( size_t discard_bytes)
protected

Discards data from the ring buffer.

Parameters
discard_bytesamount of bytes to discard
Returns
True if all bytes were successfully discarded, false otherwise

Definition at line 119 of file ring_buffer.cpp.

◆ free()

size_t esphome::ring_buffer::RingBuffer::free ( ) const

Returns the number of free bytes in the ring buffer.

This function provides the number of bytes that can be written to the ring buffer without overwriting data or blocking the calling FreeRTOS task.

Returns
Number of free bytes

Definition at line 112 of file ring_buffer.cpp.

◆ read()

size_t esphome::ring_buffer::RingBuffer::read ( void * data,
size_t len,
TickType_t ticks_to_wait = 0 )

Reads from the ring buffer, waiting up to a specified number of ticks if necessary.

Available bytes are read into the provided data pointer. If not enough bytes are available, the function will wait up to ticks_to_wait FreeRTOS ticks before reading what is available.

Parameters
dataPointer to copy read data into
lenNumber of bytes to read
ticks_to_waitMaximum number of FreeRTOS ticks to wait (default: 0)
Returns
Number of bytes read

Definition at line 48 of file ring_buffer.cpp.

◆ receive_acquire()

void * esphome::ring_buffer::RingBuffer::receive_acquire ( size_t & length,
size_t max_length,
TickType_t ticks_to_wait = 0 )

Acquires a pointer into the ring buffer's internal storage without copying.

The returned pointer is valid until receive_release() is called. Only one item may be checked out at a time.

Parameters
[out]lengthSet to the number of bytes actually acquired (may be less than max_length at wrap boundary)
max_lengthMaximum number of bytes to acquire
ticks_to_waitMaximum number of FreeRTOS ticks to wait (default: 0)
Returns
Pointer into the ring buffer's internal storage, or nullptr if no data is available

Definition at line 40 of file ring_buffer.cpp.

◆ receive_release()

void esphome::ring_buffer::RingBuffer::receive_release ( void * item)

Releases a previously acquired ring buffer item.

Must be called exactly once for each successful receive_acquire().

Parameters
itemPointer returned by receive_acquire()

Definition at line 46 of file ring_buffer.cpp.

◆ reset()

BaseType_t esphome::ring_buffer::RingBuffer::reset ( )

Resets the ring buffer, discarding all stored data.

Returns
pdPASS if successful, pdFAIL otherwise

Definition at line 114 of file ring_buffer.cpp.

◆ write()

size_t esphome::ring_buffer::RingBuffer::write ( const void * data,
size_t len )

Writes to the ring buffer, overwriting oldest data if necessary.

The provided data is written to the ring buffer. If not enough space is available, the function will overwrite the oldest data in the ring buffer.

Parameters
dataPointer to data for writing
lenNumber of bytes to write
Returns
Number of bytes written

Definition at line 81 of file ring_buffer.cpp.

◆ write_without_replacement()

size_t esphome::ring_buffer::RingBuffer::write_without_replacement ( const void * data,
size_t len,
TickType_t ticks_to_wait = 0,
bool write_partial = true )

Writes to the ring buffer without overwriting oldest data.

The provided data is written to the ring buffer. If not enough space is available, the function will wait up to ticks_to_wait FreeRTOS ticks before writing as much as possible.

Parameters
dataPointer to data for writing
lenNumber of bytes to write
ticks_to_waitMaximum number of FreeRTOS ticks to wait (default: 0)
Returns
Number of bytes written

Definition at line 90 of file ring_buffer.cpp.

Field Documentation

◆ handle_

RingbufHandle_t esphome::ring_buffer::RingBuffer::handle_ {nullptr}
protected

Definition at line 118 of file ring_buffer.h.

◆ size_

size_t esphome::ring_buffer::RingBuffer::size_ {0}
protected

Definition at line 121 of file ring_buffer.h.

◆ storage_

uint8_t* esphome::ring_buffer::RingBuffer::storage_ {nullptr}
protected

Definition at line 120 of file ring_buffer.h.

◆ structure_

StaticRingbuffer_t esphome::ring_buffer::RingBuffer::structure_
protected

Definition at line 119 of file ring_buffer.h.


The documentation for this class was generated from the following files: