初版
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
#ifndef __BUFFER_MANAGER_H__
|
||||
#define __BUFFER_MANAGER_H__
|
||||
|
||||
|
||||
|
||||
// 缓存buf的状态定义
|
||||
typedef enum buffer_status_def {
|
||||
BUFFER_STATUS_INIT, // 初始
|
||||
BUFFER_STATUS_IDLE, // 空闲
|
||||
BUFFER_STATUS_LOCK, // 锁定
|
||||
BUFFER_STATUS_PEND, // 等待
|
||||
BUFFER_STATUS_USED, // 使用
|
||||
} BUFFER_STATUS;
|
||||
|
||||
|
||||
|
||||
// buffer管理原生API,不建议直接调用原生API,
|
||||
// 防止后续库升级导致调用方法改变,使用时请调用重封装的快捷调用
|
||||
int buffer_manager_set_default_handler(void *buffer_hdl);
|
||||
|
||||
void buffer_manager_set_memory_callback(void *(*malloc)(int size, u32 ram_type, u32 module_type), void (*free)(void *p, u32 ram_type, u32 module_type));
|
||||
|
||||
void *buffer_manager_init_handler(u32 buf_list[], int buf_num);
|
||||
|
||||
void buffer_manager_free_handler(void *buffer_hdl);
|
||||
|
||||
int buffer_manager_set_buf_status(void *buffer_hdl, void *buf, int status);
|
||||
|
||||
int buffer_manager_get_buf_status(void *buffer_hdl, void *buf);
|
||||
|
||||
void *buffer_manager_get_buf_by_status(void *buffer_hdl, int status);
|
||||
|
||||
void *buffer_manager_change_buf_status(void *buffer_hdl, int target, int result);
|
||||
|
||||
void *buffer_manager_status_dump(void *buffer_hdl);
|
||||
|
||||
/* buffer管理API快捷调用 */
|
||||
// 注册buffer管理模块的回调
|
||||
#define buffer_manager_callback(malloc, free) \
|
||||
buffer_manager_set_memory_callback(malloc, free)
|
||||
|
||||
// 初始化buffer管理,创建buffer管理句柄
|
||||
#define buffer_manager_init(hdl, buf, size, block_num) \
|
||||
{ \
|
||||
int BM_i = 0; \
|
||||
int BM_buf_size = (size) / (block_num); \
|
||||
u32 BM_buf_list[3] = {0}; \
|
||||
for (BM_i = 0; BM_i < (block_num); BM_i++) { \
|
||||
BM_buf_list[BM_i] = (u32)((buf) + (BM_buf_size * BM_i)); \
|
||||
} \
|
||||
(hdl) = buffer_manager_init_handler(BM_buf_list, (block_num)); \
|
||||
}
|
||||
|
||||
// 释放buffer管理资源和句柄
|
||||
#define buffer_manager_free(buffer_handler) \
|
||||
buffer_manager_free_handler(buffer_handler)
|
||||
|
||||
// 设置指定buffer的状态
|
||||
#define set_buffer_status(buffer_handler, buf_addr, status) \
|
||||
buffer_manager_set_buf_status(buffer_handler, buf_addr, status)
|
||||
|
||||
// 获取指定buffer的状态
|
||||
#define get_buffer_status(buffer_handler, buf_addr) \
|
||||
buffer_manager_get_buf_status(buffer_handler, buf_addr)
|
||||
|
||||
// 获取指定状态的buffer
|
||||
#define get_buffer_by_status(buffer_handler, status) \
|
||||
buffer_manager_get_buf_by_status(buffer_handler, status)
|
||||
|
||||
// 获取目标状态的buffer,并修改为结果状态
|
||||
#define change_buffer_status(buffer_handler, target, result) \
|
||||
buffer_manager_change_buf_status(buffer_handler, target, result)
|
||||
|
||||
|
||||
// 设置默认句柄,可以设置一个默认句柄,该句柄将作为buffer管理的静态变量,外部无需每次操作都传入该句柄
|
||||
// 需要注意的时,buffer_manager_free时,可以传入NULL来释放默认句柄,但大buffer还需外面主动释放
|
||||
// 即:buffer管理只做状态管理,和自身资源的申请、释放,不管被管理的buffer申请和释放
|
||||
#define set_default_buffer_handler(buffer_handler) \
|
||||
buffer_manager_set_default_handler(buffer_handler)
|
||||
|
||||
|
||||
|
||||
|
||||
/* 快捷获取指定状态的buffer */
|
||||
// 获取空闲状态的buffer
|
||||
#define get_idle_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_IDLE)
|
||||
|
||||
// 获取锁定状态的buffer
|
||||
#define get_lock_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_LOCK)
|
||||
|
||||
// 获取等待状态的buffer
|
||||
#define get_pend_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_PEND)
|
||||
|
||||
// 获取使用状态的buffer
|
||||
#define get_used_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_USED)
|
||||
|
||||
|
||||
|
||||
|
||||
/* 快捷获取指定状态的buffer,并修改buffer状态 */
|
||||
// 获取空闲状态的buffer,并修改为锁定状态
|
||||
#define get_idle_buffer_to_lock(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_IDLE, BUFFER_STATUS_LOCK)
|
||||
|
||||
// 获取锁定状态的buffer,并修改为等待状态
|
||||
#define get_lock_buffer_to_pend(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_LOCK, BUFFER_STATUS_PEND)
|
||||
|
||||
// 获取等待状态的buffer,并修改为使用状态
|
||||
#define get_pend_buffer_to_used(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_PEND, BUFFER_STATUS_USED)
|
||||
|
||||
// 获取使用状态的buffer,并修改为空闲状态
|
||||
#define get_used_buffer_to_idle(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_USED, BUFFER_STATUS_IDLE)
|
||||
|
||||
|
||||
|
||||
|
||||
/* 快捷设置指定buffer的状态 */
|
||||
// 设置buffer状态为空闲
|
||||
#define set_buffer_idle(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_IDLE)
|
||||
|
||||
// 设置buffer状态为锁定
|
||||
#define set_buffer_lock(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_LOCK)
|
||||
|
||||
// 设置buffer状态为等待
|
||||
#define set_buffer_pend(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_PEND)
|
||||
|
||||
// 设置buffer状态为使用
|
||||
#define set_buffer_used(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_USED)
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user