Files
99_7018_lmx/include_lib/system/generic/circular_buf.h

303 lines
10 KiB
C
Raw Normal View History

2025-10-29 13:10:02 +08:00
#ifndef CIRCULAR_BUF_INTERFACE_H
#define CIRCULAR_BUF_INTERFACE_H
#include "typedef.h"
#include "system/spinlock.h"
#ifndef CONFIG_CBUF_IN_MASKROM
/* --------------------------------------------------------------------------*/
/**
* @brief cbuffer结构体
*/
/* ----------------------------------------------------------------------------*/
typedef struct _cbuffer {
u8 *begin;
u8 *end;
u8 *read_ptr;
u8 *write_ptr;
u8 *tmp_ptr ;
u32 tmp_len;
u32 data_len;
u32 total_len;
spinlock_t lock;
} cbuffer_t;
#else /* #ifndef CONFIG_CBUF_IN_MASKROM */
/* ---------------------------------------------------------------------------- */
/**
* @brief cbuffer结构体
* @note:
*/
/* ---------------------------------------------------------------------------- */
typedef struct _cbuffer {
u8 *begin;
u8 *end;
u8 *read_ptr;
u8 *write_ptr;
u8 *tmp_ptr ;
u32 tmp_len;
u32 data_len;
u32 total_len;
spinlock_t lock;
} cbuffer_t;
#endif /* #ifndef CONFIG_CBUF_IN_MASKROM */
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief cbuffer初始化
*
* @param [in] cbuffer cbuffer
* @param [in] buf
* @param [in] size
*/
/* ----------------------------------------------------------------------------*/
void cbuf_init(cbuffer_t *cbuffer, void *buf, u32 size);
/* --------------------------------------------------------------------------*/
/**
* @brief :cb_memcpy管理
* @brief cbuffer_t结构体管理的内存空间的数据拷贝到buf数组
* @param [in] cbuffer cbuffer
* @param [out] buf
* @param [in] len
*
* @return
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_read(cbuffer_t *cbuffer, void *buf, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :cb_memcpy管理
* @brief buf数组数据拷贝cbuffer_t结构体管理的内存空间
*
* @param [in] cbuffer cbuffer
* @param [in] buf
* @param [in] len
*
* @return
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_write(cbuffer_t *cbuffer, void *buf, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief len字节长度的数据
*
* @param [in] cbuffer cbuffer
* @param [in] len len字节长度的数据
*
* @return len字节长度
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_is_write_able(cbuffer_t *cbuffer, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief cbuf_write_updata()使,cbuf管理handle数据
*
* @param [in] cbuffer cbuffer句柄
* @param [in] len len字节长度的数据
*
* @return
*/
/* ----------------------------------------------------------------------------*/
void *cbuf_write_alloc(cbuffer_t *cbuffer, u32 *len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief cbuf管理handle的写指针位置和数据长度
*
* @param [in] cbuffer cbuffer句柄
* @param [in] len cbuffer_t结构体包含的内存空间中写入的数据的实际字节长度
*
* @return
*/
/* ----------------------------------------------------------------------------*/
void cbuf_write_updata(cbuffer_t *cbuffer, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief ,cbuf_read_updata()使,cbuf管理handle数据
*
* @param [in] cbuffer cbuffer
* @param [in] len len字节长度的数据
*
* @return
*/
/* ----------------------------------------------------------------------------*/
void *cbuf_read_alloc(cbuffer_t *cbuffer, u32 *len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief cbuf管理handle的读指针位置和数据长度
*
* @param [in] cbuffer cbuffer
* @param [in] len cbuffer_t结构体包含的内存空间中读取的数据的实际字节长度
*/
/* ----------------------------------------------------------------------------*/
void cbuf_read_updata(cbuffer_t *cbuffer, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief cbuffer空间
*
* @param [in] cbuffer cbuffer
*/
/* ----------------------------------------------------------------------------*/
void cbuf_clear(cbuffer_t *cbuffer);
/* --------------------------------------------------------------------------*/
/**
* @brief :cb_memcpy管理
* @brief
*
* @param [in] cbuffer cbuffer
* @param [in] begin
* @param [out] buf
* @param [in] len
*
* @return
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_rewrite(cbuffer_t *cbuffer, void *begin, void *buf, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :cb_memcpy管理
* @brief ,
*
* @param [in] cbuffer cbuffer
*/
/* ----------------------------------------------------------------------------*/
void cbuf_discard_prewrite(cbuffer_t *cbuffer);
/* --------------------------------------------------------------------------*/
/**
* @brief :cb_memcpy管理
* @brief 退,
*
* @param [in] cbuffer cbuffer
*/
/* ----------------------------------------------------------------------------*/
void cbuf_updata_prewrite(cbuffer_t *cbuffer);
/* --------------------------------------------------------------------------*/
/**
* @brief :cb_memcpy管理
* @brief 退
*
* @param [in] cbuffer cbuffer
* @param [out] buf
* @param [in] len
*
* @return
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_prewrite(cbuffer_t *cbuffer, void *buf, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief
*
* @param [in] cbuffer cbuffer
*
* @return
*/
/* ----------------------------------------------------------------------------*/
void *cbuf_get_writeptr(cbuffer_t *cbuffer);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief cbuffer存储的数据的字节长度
*
* @param [in] cbuffer cbuffer句柄
*
* @return cbuffer存储的数据的字节长度
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_get_data_size(cbuffer_t *cbuffer);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief
*
* @param [in] cbuffer cbuffer句柄
*
* @return
*/
/* ----------------------------------------------------------------------------*/
void *cbuf_get_readptr(cbuffer_t *cbuffer);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief 退
*
* @param [in] cbuffer cbuffer
* @param [in] len 退
*
* @return 退
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_read_goback(cbuffer_t *cbuffer, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :
* @brief
*
* @param [in] cbuffer cbuffer
*
* @return
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_get_data_len(cbuffer_t *cbuffer);
/* --------------------------------------------------------------------------*/
/**
* @brief :memcpy管理+cbuf_read_alloc系列管理函数
* @brief ,buf数组
*
* @param [in] cbuffer cbuffer
* @param [out] buf buf数组
* @param [in] len
*
* @return
*/
/* ----------------------------------------------------------------------------*/
u32 cbuf_read_alloc_len(cbuffer_t *cbuffer, void *buf, u32 len);
/* --------------------------------------------------------------------------*/
/**
* @brief :memcpy管理+cbuf_read_alloc系列管理函数
* @brief cbuf管理handle的读指针位置和数据长度
*
* @param [in] cbuffer cbuffer
* @param [in] len
*/
/* ----------------------------------------------------------------------------*/
void cbuf_read_alloc_len_updata(cbuffer_t *cbuffer, u32 len);
#endif