Files
ESPC3-wireless/app/drivers/sertrf/ring_buffer.h

93 lines
2.5 KiB
C
Raw Normal View History

2025-10-16 09:44:18 +08:00
#pragma once
#include <stdbool.h>
#include <stddef.h>
/** 环形缓冲区结构体 */
typedef struct {
void *buffer; /**< 缓冲区起始地址 */
size_t head; /**< 写索引 */
size_t tail; /**< 读索引 */
size_t max; /**< 最大元素数量 */
size_t sz; /**< 每个元素字节大小 */
bool full; /**< 是否已满标志 */
} RingBuffer;
/**
*
* @param rb RingBuffer
* @param capacity
* @param elem_size
* @return true false
*/
bool rb_init(RingBuffer *rb, size_t capacity, size_t elem_size);
/**
*
* @param rb RingBuffer
*/
void rb_free(RingBuffer *rb);
/**
*
* @param rb RingBuffer
*/
void rb_reset(RingBuffer *rb);
/**
*
* @param rb RingBuffer
* @return true false
*/
bool rb_empty(const RingBuffer *rb);
/**
*
* @param rb RingBuffer
* @return true false
*/
bool rb_full(const RingBuffer *rb);
/**
*
* @param rb RingBuffer
* @param data
* @return true false
*/
bool rb_put(RingBuffer *rb, const void *data);
/**
*
* @param rb RingBuffer
* @param data
* @return true false
*/
bool rb_get(RingBuffer *rb, void *data);
/**
*
* @param rb RingBuffer
* @return
*/
size_t rb_size(const RingBuffer *rb);
/**
*
* @param rb RingBuffer
* @param data
* @param len
* @return len
*/
size_t rb_put_bulk(RingBuffer *rb, const void *data, size_t len);
/**
*
* @param rb RingBuffer
* @param data
* @param len
* @return len
*/
size_t rb_get_bulk(RingBuffer *rb, void *data, size_t len) ;