/********************************************************************************* * Copyright: (C) 2023 LingYun IoT System Studio. * All rights reserved. * * Filename: ringbuf.h * Description: This file is common ring buffer API functions * * Version: 1.0.0(11/08/23) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "11/08/23 16:18:43" * ********************************************************************************/ #ifndef _RINGBUF_H_ #define _RINGBUF_H_ struct ring_buffer { unsigned char *buffer; int wr_pointer; int rd_pointer; int size; }; /* Initial the ring buffer */ void rb_init(struct ring_buffer *rb, unsigned char *buf, int size); /* Clear the ring buffer data */ void rb_clear(struct ring_buffer *rb); /* Get data size in the ring buffer */ int rb_data_size(struct ring_buffer *rb); /* Get ring buffer left free size */ int rb_free_size(struct ring_buffer *rb); /* Read a specify $index byte data in ring buffer $rb */ unsigned char rb_peek(struct ring_buffer *rb, int index); /* 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(struct ring_buffer *rb, unsigned char *buf, int len); /* Read $bytes data from ring buffer $rb to $buf */ int rb_read(struct ring_buffer *rb, unsigned char *buf, int bytes); /* Read $bytes data from ring buffer $rb to $buf, but not drain */ int rb_copy(struct ring_buffer *rb, unsigned char *buf, int bytes); #endif /* ----- #ifndef _RINGBUF_H_ ----- */