/********************************************************************** * Copyright: (C)2024 LingYun IoT System Studio * Author: GuoWenxue * * Description: The purpose of this code is to provide a simple ring buffer * C library for ISKBoard. * * ChangeLog: * Version Date Author Description * V1.0.0 2024.08.29 GuoWenxue Release initial version * ***********************************************************************/ #ifndef __RINGBUF_H_ #define __RINGBUF_H_ #include #include typedef struct ring_buffer_s { uint8_t *buffer; int wr_pointer; int rd_pointer; int size; } ring_buffer_t; /* Initial the ring buffer */ void rb_init (ring_buffer_t *ring, uint8_t *buf, int size) ; /* Clear the ring buffer data */ void rb_clear (ring_buffer_t *rb) ; /* Get ring buffer left free size */ int rb_free_size (ring_buffer_t *rb); /* Get data size in the ring buffer */ int rb_data_size (ring_buffer_t *rb); /* Read $max bytes data from ring buffer $rb to $buf */ int rb_read (ring_buffer_t *rb, uint8_t *buf, int max); /* Description: Write $len bytes data in $buf into ring buffer $rb * Return Value: The actual written into ring buffer data size, if ring buffer * left space size small than $len, then only part of the data be written into. */ int rb_write (ring_buffer_t *rb, uint8_t *buf, int len) ; /* Read a specify $index byte data in ring buffer $rb */ uint8_t rb_peek(ring_buffer_t *rb, int index); #endif /* __RINGBUF_H_ */