printf_fifo.h 1.76 KB
#ifndef	_PRINTF_FIFO_H_
#define	_PRINTF_FIFO_H_


struct FIFO_;
typedef	int (*FIFO_CALLBACK) ( struct FIFO_ *fifo);

typedef	struct FIFO_ {
	U8	*buf;
	U32	maxsize;
	
	U8	*head;
	U8	*tail;
	U32	size;
	
	FIFO_CALLBACK	getCallback;
	FIFO_CALLBACK	putCallback;
	FIFO_CALLBACK	emptyCallback;
	FIFO_CALLBACK	fullCallback;

	FIFO_CALLBACK	halfEmptyCallbk;
	FIFO_CALLBACK	halfFullCallbk;
}	PRINTF_FIFO;


//The macro below is for increasing efficiency.
#define FiFo_GetEmptySpace( fifo )    ((fifo->maxsize) - (fifo->size))

#define FiFo_Put(fifo, src, size)     (fifoPut( (fifo), (src), (size), (FALSE) ))
#define FiFo_iPut(fifo, src, size)    (fifoPut( (fifo), (src), (size), (TRUE) ))

#define FiFo_GetDataSize(fifo)        (fifo->size)

#define FiFo_Get(fifo, dst, size)     (fifoGet( (fifo), (dst), (size), (FALSE) ) )
#define FiFo_iGet(fifo, dst, size)    (fifoGet( (fifo), (dst), (size), (TRUE) ) )

//#define FiFo_HalfEmptyCallback(fifo)  (fifoHalfEmptyCallback(fifo))
//#define FiFo_FullCallback(fifo)       (fifoFullCallback(fifo))


void printf_fifo_init( PRINTF_FIFO *fifo, U8 *buf, U32 bufsize, 
		FIFO_CALLBACK pput, FIFO_CALLBACK pget, FIFO_CALLBACK pempty, FIFO_CALLBACK pfull,
		FIFO_CALLBACK phalfEmpty, FIFO_CALLBACK phalfFull );


U32 fifo_getDataSize( PRINTF_FIFO *fifo );
U32 fifo_getEmptySpace( PRINTF_FIFO *fifo );
U32 fifo_put( PRINTF_FIFO *fifo, U8 *src, U32 size );
U32 fifo_iput( PRINTF_FIFO *fifo, U8 *src, U32 size );
U32 fifo_get( PRINTF_FIFO *fifo, U8 *dst, U32 size );
U32 fifo_iget( PRINTF_FIFO *fifo, U8 *dst, U32 size );

//static U32 fifoPut( PRINTF_FIFO *fifo, U8 *src, U32 size, BOOL isr );
U32 fifoPut( PRINTF_FIFO *fifo, U8 *src, U32 size, BOOL isr );

U32	fifo_peekChar( PRINTF_FIFO *fifo, U8 cha );

void fifo_clear( PRINTF_FIFO *fifo );

#endif //_PRINTF_FIFO_H_