/** * @file * @author Steve Karg * @date 2004 */ #ifndef FIFO_H #define FIFO_H #include #include /** * FIFO data structure * * @{ */ struct fifo_buffer_t { /** first byte of data */ volatile unsigned head; /** last byte of data */ volatile unsigned tail; /** block of memory or array of data */ volatile uint8_t *buffer; /** length of the data */ unsigned buffer_len; }; typedef struct fifo_buffer_t FIFO_BUFFER; /** @} */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ unsigned FIFO_Count( FIFO_BUFFER const *b); bool FIFO_Full( FIFO_BUFFER const *b); bool FIFO_Available( FIFO_BUFFER const *b, unsigned count); bool FIFO_Empty( FIFO_BUFFER const *b); uint8_t FIFO_Peek( FIFO_BUFFER const *b); uint8_t FIFO_Get( FIFO_BUFFER * b); unsigned FIFO_Pull( FIFO_BUFFER * b, uint8_t * data_bytes, unsigned length); bool FIFO_Put( FIFO_BUFFER * b, uint8_t data_byte); bool FIFO_Add( FIFO_BUFFER * b, uint8_t * data_bytes, unsigned count); void FIFO_Flush( FIFO_BUFFER * b); /* note: buffer_len must be a power of two */ void FIFO_Init( FIFO_BUFFER * b, volatile uint8_t * buffer, unsigned buffer_len); #ifdef TEST #include "ctest.h" void testFIFOBuffer( Test * pTest); #endif #ifdef __cplusplus } #endif /* __cplusplus */ #endif