/******************************************************************************
版权所有：	
文件名称：	rt_fifo.h
文件版本：	01.01
创建作者：	sunxi
创建日期：	2020-06-18
功能说明：	实时FIFO，采用免锁算法，只支持单进单出，不支持多进多处。
其它说明：
修改记录：
*/
#ifndef _RT_FIFO_H
#define _RT_FIFO_H
/*------------------------------- 头文件 --------------------------------------
*/


/*------------------------------- 宏定义 --------------------------------------
*/


/*------------------------------ 类型结构 -------------------------------------
*/
struct rt_fifo 
{
	unsigned char 	*buffer;	// 数据缓存
	unsigned int 	size;		// buffer 的大小，必须是2的n次方
	unsigned int 	in;			// 数据进偏移 (in % size)
	unsigned int 	out;		// 数据出偏移(out % size)
};


/*------------------------------ 函数声明 -------------------------------------
*/
static inline void rt_fifo_reset(struct rt_fifo *fifo)
{
	fifo->in = fifo->out = 0;
}

static inline unsigned int rt_fifo_len(struct rt_fifo *fifo)
{
	return fifo->in - fifo->out;
}

static inline int rt_fifo_space(struct rt_fifo *fifo)
{
	return fifo->size - (fifo->in - fifo->out) - 1;
}

int rt_fifo_init(struct rt_fifo *fifo, unsigned char *buffer, unsigned int size);
unsigned int rt_fifo_get(struct rt_fifo *fifo,unsigned char *buffer, unsigned int len);
unsigned int rt_fifo_put(struct rt_fifo *fifo,unsigned char *buffer, unsigned int len);

				
#endif //_RT_FIFO_H

/*------------------------------ 文件结束 -------------------------------------
*/

