46 lines
1.4 KiB
C
46 lines
1.4 KiB
C
|
|
#ifndef _BY_RINGBUF_H__
|
|||
|
|
#define _BY_RINGBUF_H__
|
|||
|
|
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include <stdbool.h>
|
|||
|
|
|
|||
|
|
// 定义宏来选择内存分配方式
|
|||
|
|
// 如果定义了 BY_RINGBUF_STATIC_ALLOC,则使用预先分配的内存
|
|||
|
|
// 否则使用 malloc 动态分配内存
|
|||
|
|
// #define BY_RINGBUF_STATIC_ALLOC
|
|||
|
|
|
|||
|
|
#define BY_RINGBUF_STATIC_BUFFER_SIZE (8192)
|
|||
|
|
|
|||
|
|
typedef struct {
|
|||
|
|
uint8_t *buffer; // 缓冲区指针
|
|||
|
|
int size; // 缓冲区大小
|
|||
|
|
int head; // 写指针
|
|||
|
|
int tail; // 读指针
|
|||
|
|
bool is_full; // 缓冲区是否已满
|
|||
|
|
} by_ringbuf_t;
|
|||
|
|
|
|||
|
|
// 初始化环形缓冲区
|
|||
|
|
extern int by_ringbuf_init(by_ringbuf_t *rb, int size);
|
|||
|
|
|
|||
|
|
// 释放环形缓冲区
|
|||
|
|
extern void by_ringbuf_free(by_ringbuf_t *rb);
|
|||
|
|
|
|||
|
|
// 向缓冲区追加数据
|
|||
|
|
extern int by_ringbuf_append(by_ringbuf_t *rb, const uint8_t *data, int len);
|
|||
|
|
|
|||
|
|
// 从缓冲区弹出数据
|
|||
|
|
extern int by_ringbuf_pop(by_ringbuf_t *rb, uint8_t *data, int len);
|
|||
|
|
|
|||
|
|
// 查找缓冲区中是否包含特定数据
|
|||
|
|
extern int by_ringbuf_find(by_ringbuf_t *rb, const uint8_t *pattern, int pattern_len);
|
|||
|
|
|
|||
|
|
// 获取缓冲区中可用数据的大小
|
|||
|
|
extern int by_ringbuf_available_data(by_ringbuf_t *rb);
|
|||
|
|
|
|||
|
|
// 获取缓冲区中空闲空间的大小
|
|||
|
|
extern int by_ringbuf_available_space(by_ringbuf_t *rb);
|
|||
|
|
|
|||
|
|
// 调试函数:打印环形缓冲区中的数据及其序号
|
|||
|
|
extern void by_ringbuf_debug_print(by_ringbuf_t *rb);
|
|||
|
|
|
|||
|
|
#endif // _BY_RINGBUF_H__
|