5.13.0.0R1
Software Development Kit
Ring buffer

Functions

wiced_result_t ring_buffer_consume (wiced_ring_buffer_t *ring_buffer, uint32_t bytes_consumed)
 
wiced_result_t ring_buffer_deinit (wiced_ring_buffer_t *ring_buffer)
 
uint32_t ring_buffer_free_space (wiced_ring_buffer_t *ring_buffer)
 
wiced_result_t ring_buffer_get_data (wiced_ring_buffer_t *ring_buffer, uint8_t **data, uint32_t *contiguous_bytes)
 
wiced_result_t ring_buffer_init (wiced_ring_buffer_t *ring_buffer, uint8_t *buffer, uint32_t buffer_size)
 
wiced_result_t ring_buffer_read (wiced_ring_buffer_t *ring_buffer, uint8_t *data, uint32_t data_length, uint32_t *number_of_bytes_read)
 
uint32_t ring_buffer_used_space (wiced_ring_buffer_t *ring_buffer)
 
uint32_t ring_buffer_write (wiced_ring_buffer_t *ring_buffer, const uint8_t *data, uint32_t data_length)
 

Detailed Description

This library implements a lock-free ringbuffer as described in Donald E. Knuth, The Art of Computer Programming, Volume 3: Sorting and Searching. Note that since the last entry of the ring buffer is not used in a lock free implementation, you should allocate one more entry then the total number of entries you plan to use.

Function Documentation

wiced_result_t ring_buffer_consume ( wiced_ring_buffer_t *  ring_buffer,
uint32_t  bytes_consumed 
)

Consume (discard) data in a ring buffer.

Parameters
[in]ring_buffer: Pointer to the ring buffer structure.
[in]bytes_consumed: Number of bytes to consume.
Returns
wiced_result_t
wiced_result_t ring_buffer_deinit ( wiced_ring_buffer_t *  ring_buffer)

De-initialize a ring buffer.

Parameters
[in]ring_buffer: Pointer to the ring buffer structure.
Returns
wiced_result_t
uint32_t ring_buffer_free_space ( wiced_ring_buffer_t *  ring_buffer)

Return the amount of available space in a ring buffer.

Parameters
[in]ring_buffer: Pointer to the ring buffer structure.
Returns
Length of available space in the buffer.
wiced_result_t ring_buffer_get_data ( wiced_ring_buffer_t *  ring_buffer,
uint8_t **  data,
uint32_t *  contiguous_bytes 
)

Get a pointer to the start of data in a ring buffer.

Parameters
[in]ring_buffer: Pointer to the ring buffer structure.
[out]data: Address of the pointer for the data start in the buffer.
[out]data_length: Length of contiguous data bytes in the buffer.
Returns
wiced_result_t
wiced_result_t ring_buffer_init ( wiced_ring_buffer_t *  ring_buffer,
uint8_t *  buffer,
uint32_t  buffer_size 
)

Initialize a ring buffer.

Note: This is a non-locking ring buffer implementation that will store a maximum of buffer_size - 1 bytes of data.

Parameters
[out]ring_buffer: Pointer to the ring buffer structure to be initialized.
[in]buffer: Pointer to the buffer to use for the ring buffer.
[in]buffer_size: Size of the buffer (maximum buffer_size - 1 bytes will be stored).
Returns
wiced_result_t
wiced_result_t ring_buffer_read ( wiced_ring_buffer_t *  ring_buffer,
uint8_t *  data,
uint32_t  data_length,
uint32_t *  number_of_bytes_read 
)

Read data from a ring buffer.

Parameters
[in]ring_buffer: Pointer to the ring buffer structure.
[in]data: Pointer to the buffer for read data.
[in]data_length: Length of the data buffer.
[out]number_of_bytes_read: Number of bytes read from the ring buffer.
Returns
wiced_result_t
uint32_t ring_buffer_used_space ( wiced_ring_buffer_t *  ring_buffer)

Return the amount of used space in a ring buffer.

Parameters
[in]ring_buffer: Pointer to the ring buffer structure.
Returns
Length of data currently in the buffer.
uint32_t ring_buffer_write ( wiced_ring_buffer_t *  ring_buffer,
const uint8_t *  data,
uint32_t  data_length 
)

Write to a ring buffer.

Parameters
[in]ring_buffer: Pointer to the ring buffer structure.
[in]data: Pointer to the data to write to the buffer.
[in]data_length: Length of data in bytes.
Returns
Length of data successfully written to the buffer.