Subversion Repositories NaviCtrl

Compare Revisions

Ignore whitespace Rev 237 → Rev 238

/tags/V0_20c/fifo.c
0,0 → 1,52
#include "fifo.h"
 
u8 fifo_init (fifo_t *f, u8 *buffer, const u16 size)
{
if(f == NULL) return(0);
f->buffer = buffer;
f->size = size;
fifo_purge(f);
return(1);
}
 
u8 fifo_put (fifo_t *f, const u8 data)
{
if (f->count >= f->size) return(0); // return 0 in case of FIFO overflow.
 
u8 * pwrite = f->pwrite;
 
*(pwrite++) = data; // copy data byte to buffer
if(pwrite >= f->buffer + f->size) pwrite = f->buffer; // start at the begining after reaching the end
f->pwrite = pwrite;
f->count++;
return 1;
}
 
u8 fifo_get (fifo_t *f, u8 *pdata)
{
if((f == NULL) || (pdata == NULL)) return(0);
if(!f->count) return(0);
 
u8 *pread = f->pread;
*pdata = *(pread++);
if(pread >= f->buffer + f->size) pread = f->buffer; // start at the begining after reaching the end
f->pread = pread;
f->count--;
return(1);
}
 
u8 fifo_get_wait (fifo_t *f, u8 *pdata)
{
while (!f->count);
 
return fifo_get(f, pdata);
}
 
void fifo_purge(fifo_t* f)
{
if((f == NULL)) return;
f->count = 0;
f->pread = f->buffer;
f->pwrite = f->buffer;
return;
}