99 * 2013-05-08 Grissiom reimplement
1010 * 2016-08-18 heyuanjie add interface
1111 * 2021-07-20 arminker fix write_index bug in function rt_ringbuffer_put_force
12+ * 2021-08-14 Jackistang add comments for function interface.
1213 */
1314
1415#include <rtthread.h>
@@ -27,6 +28,13 @@ rt_inline enum rt_ringbuffer_state rt_ringbuffer_status(struct rt_ringbuffer *rb
2728 return RT_RINGBUFFER_HALFFULL ;
2829}
2930
31+ /**
32+ * @brief Initialize the ring buffer object.
33+ *
34+ * @param rb A pointer to the ring buffer object.
35+ * @param pool A pointer to the buffer.
36+ * @param size The size of the buffer in bytes.
37+ */
3038void rt_ringbuffer_init (struct rt_ringbuffer * rb ,
3139 rt_uint8_t * pool ,
3240 rt_int16_t size )
@@ -45,7 +53,13 @@ void rt_ringbuffer_init(struct rt_ringbuffer *rb,
4553RTM_EXPORT (rt_ringbuffer_init );
4654
4755/**
48- * put a block of data into ring buffer
56+ * @brief Put a block of data into the ring buffer. If the capacity of ring buffer is insufficient, it will discard out-of-range data.
57+ *
58+ * @param rb A pointer to the ring buffer object.
59+ * @param ptr A pointer to the data buffer.
60+ * @param length The size of data in bytes.
61+ *
62+ * @return Return the data size we put into the ring buffer.
4963 */
5064rt_size_t rt_ringbuffer_put (struct rt_ringbuffer * rb ,
5165 const rt_uint8_t * ptr ,
@@ -92,9 +106,13 @@ rt_size_t rt_ringbuffer_put(struct rt_ringbuffer *rb,
92106RTM_EXPORT (rt_ringbuffer_put );
93107
94108/**
95- * put a block of data into ring buffer
109+ * @brief Put a block of data into the ring buffer. If the capacity of ring buffer is insufficient, it will overwrite the existing data in the ring buffer.
110+ *
111+ * @param rb A pointer to the ring buffer object.
112+ * @param ptr A pointer to the data buffer.
113+ * @param length The size of data in bytes.
96114 *
97- * When the buffer is full, it will discard the old data .
115+ * @return Return the data size we put into the ring buffer .
98116 */
99117rt_size_t rt_ringbuffer_put_force (struct rt_ringbuffer * rb ,
100118 const rt_uint8_t * ptr ,
@@ -149,7 +167,13 @@ rt_size_t rt_ringbuffer_put_force(struct rt_ringbuffer *rb,
149167RTM_EXPORT (rt_ringbuffer_put_force );
150168
151169/**
152- * get data from ring buffer
170+ * @brief Get data from the ring buffer.
171+ *
172+ * @param rb A pointer to the ring buffer.
173+ * @param ptr A pointer to the data buffer.
174+ * @param length The size of the data we want to read from the ring buffer.
175+ *
176+ * @return Return the data size we read from the ring buffer.
153177 */
154178rt_size_t rt_ringbuffer_get (struct rt_ringbuffer * rb ,
155179 rt_uint8_t * ptr ,
@@ -196,7 +220,14 @@ rt_size_t rt_ringbuffer_get(struct rt_ringbuffer *rb,
196220RTM_EXPORT (rt_ringbuffer_get );
197221
198222/**
199- * peak data from ring buffer
223+ * @brief Get the first readable byte of the ring buffer.
224+ *
225+ * @param rb A pointer to the ringbuffer.
226+ * @param ptr When this function return, *ptr is a pointer to the first readable byte of the ring buffer.
227+ *
228+ * @note It is recommended to read only one byte, otherwise it may cause buffer overflow.
229+ *
230+ * @return Return the size of the ring buffer.
200231 */
201232rt_size_t rt_ringbuffer_peak (struct rt_ringbuffer * rb , rt_uint8_t * * ptr )
202233{
@@ -230,7 +261,12 @@ rt_size_t rt_ringbuffer_peak(struct rt_ringbuffer *rb, rt_uint8_t **ptr)
230261RTM_EXPORT (rt_ringbuffer_peak );
231262
232263/**
233- * put a character into ring buffer
264+ * @brief Put a byte into the ring buffer. If ring buffer is full, this operation will fail.
265+ *
266+ * @param rb A pointer to the ring buffer object.
267+ * @param ch A byte put into the ring buffer.
268+ *
269+ * @return Return the data size we put into the ring buffer. The ring buffer is full if returns 0. Otherwise, it will return 1.
234270 */
235271rt_size_t rt_ringbuffer_putchar (struct rt_ringbuffer * rb , const rt_uint8_t ch )
236272{
@@ -258,9 +294,12 @@ rt_size_t rt_ringbuffer_putchar(struct rt_ringbuffer *rb, const rt_uint8_t ch)
258294RTM_EXPORT (rt_ringbuffer_putchar );
259295
260296/**
261- * put a character into ring buffer
297+ * @brief Put a byte into the ring buffer. If ring buffer is full, it will discard an old data and put into a new data.
262298 *
263- * When the buffer is full, it will discard one old data.
299+ * @param rb A pointer to the ring buffer object.
300+ * @param ch A byte put into the ring buffer.
301+ *
302+ * @return Return the data size we put into the ring buffer. Always return 1.
264303 */
265304rt_size_t rt_ringbuffer_putchar_force (struct rt_ringbuffer * rb , const rt_uint8_t ch )
266305{
@@ -295,7 +334,13 @@ rt_size_t rt_ringbuffer_putchar_force(struct rt_ringbuffer *rb, const rt_uint8_t
295334RTM_EXPORT (rt_ringbuffer_putchar_force );
296335
297336/**
298- * get a character from a ringbuffer
337+ * @brief Get a byte from the ring buffer.
338+ *
339+ * @param rb The pointer to the ring buffer object.
340+ * @param ch A pointer to the buffer, used to store one byte.
341+ *
342+ * @return 0 The ring buffer is empty.
343+ * @return 1 Success
299344 */
300345rt_size_t rt_ringbuffer_getchar (struct rt_ringbuffer * rb , rt_uint8_t * ch )
301346{
@@ -305,7 +350,7 @@ rt_size_t rt_ringbuffer_getchar(struct rt_ringbuffer *rb, rt_uint8_t *ch)
305350 if (!rt_ringbuffer_data_len (rb ))
306351 return 0 ;
307352
308- /* put character */
353+ /* put byte */
309354 * ch = rb -> buffer_ptr [rb -> read_index ];
310355
311356 if (rb -> read_index == rb -> buffer_size - 1 )
@@ -323,7 +368,11 @@ rt_size_t rt_ringbuffer_getchar(struct rt_ringbuffer *rb, rt_uint8_t *ch)
323368RTM_EXPORT (rt_ringbuffer_getchar );
324369
325370/**
326- * get the size of data in rb
371+ * @brief Get the size of data in the ring buffer in bytes.
372+ *
373+ * @param rb The pointer to the ring buffer object.
374+ *
375+ * @return Return the size of data in the ring buffer in bytes.
327376 */
328377rt_size_t rt_ringbuffer_data_len (struct rt_ringbuffer * rb )
329378{
@@ -348,7 +397,9 @@ rt_size_t rt_ringbuffer_data_len(struct rt_ringbuffer *rb)
348397RTM_EXPORT (rt_ringbuffer_data_len );
349398
350399/**
351- * empty the rb
400+ * @brief Reset the ring buffer object, and clear all contents in the buffer.
401+ *
402+ * @param rb A pointer to the ring buffer object.
352403 */
353404void rt_ringbuffer_reset (struct rt_ringbuffer * rb )
354405{
@@ -363,7 +414,14 @@ RTM_EXPORT(rt_ringbuffer_reset);
363414
364415#ifdef RT_USING_HEAP
365416
366- struct rt_ringbuffer * rt_ringbuffer_create (rt_uint16_t size )
417+ /**
418+ * @brief Create a ring buffer object with a given size.
419+ *
420+ * @param size The size of the buffer in bytes.
421+ *
422+ * @return Return a pointer to ring buffer object. When the return value is RT_NULL, it means this creation failed.
423+ */
424+ struct rt_ringbuffer * rt_ringbuffer_create (rt_uint16_t size )
367425{
368426 struct rt_ringbuffer * rb ;
369427 rt_uint8_t * pool ;
@@ -390,6 +448,11 @@ struct rt_ringbuffer* rt_ringbuffer_create(rt_uint16_t size)
390448}
391449RTM_EXPORT (rt_ringbuffer_create );
392450
451+ /**
452+ * @brief Destroy the ring buffer object, which is created by rt_ringbuffer_create() .
453+ *
454+ * @param rb A pointer to the ring buffer object.
455+ */
393456void rt_ringbuffer_destroy (struct rt_ringbuffer * rb )
394457{
395458 RT_ASSERT (rb != RT_NULL );
0 commit comments