Files
ESPC3-wireless/app/drivers/sertrf/ring_buffer.h
2025-10-16 09:44:18 +08:00

93 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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) ;