Main Page   Compound List   File List   Compound Members   File Members  

buffer.c

Go to the documentation of this file.
00001 
00002 //*****************************************************************************
00003 //
00004 // File Name    : 'buffer.c'
00005 // Title                        : Multipurpose byte buffer structure and methods
00006 // Author               : Pascal Stang - Copyright (C) 2001-2002
00007 // Created              : 9/23/2001
00008 // Revised              : 9/23/2001
00009 // Version              : 1.0
00010 // Target MCU   : any
00011 // Editor Tabs  : 3
00012 //
00013 // This code is distributed under the GNU Public License
00014 //              which can be found at http://www.gnu.org/licenses/gpl.txt
00015 //
00016 //*****************************************************************************
00017 
00018 #include "buffer.h"
00019 
00020 // global variables
00021 
00022 // access routines
00023 void bufferInit(cBuffer* buffer, unsigned char *start, unsigned short size)
00024 {
00025         // set start pointer of the buffer
00026         buffer->dataptr = start;
00027         buffer->size = size;
00028         // initialize index and length
00029         buffer->dataindex = 0;
00030         buffer->datalength = 0;
00031 }
00032 
00033 unsigned char  bufferGetFromFront(cBuffer* buffer)
00034 {
00035         unsigned char data = 0;
00036         
00037         // check to see if there's data in the buffer
00038         if(buffer->datalength)
00039         {
00040                 // get the first character from buffer
00041                 data = buffer->dataptr[buffer->dataindex];
00042                 // move index down and decrement length
00043                 buffer->dataindex++;
00044                 if(buffer->dataindex >= buffer->size)
00045                 {
00046                         buffer->dataindex %= buffer->size;
00047                 }
00048                 buffer->datalength--;
00049         }
00050         // return
00051         return data;
00052 }
00053 
00054 unsigned char bufferGetAtIndex(cBuffer* buffer, unsigned short index)
00055 {
00056         // return character at index in buffer
00057         return buffer->dataptr[(buffer->dataindex+index)%(buffer->size)];
00058 }
00059 
00060 unsigned char bufferAddToEnd(cBuffer* buffer, unsigned char data)
00061 {
00062         // make sure the buffer has room
00063         if(buffer->datalength < buffer->size)
00064         {
00065                 // save data byte at end of buffer
00066                 buffer->dataptr[(buffer->dataindex + buffer->datalength) % buffer->size] = data;
00067                 // increment the length
00068                 buffer->datalength++;
00069                 // return success
00070                 return -1;
00071         }
00072         else return 0;
00073 }
00074 
00075 unsigned char bufferIsNotFull(cBuffer* buffer)
00076 {
00077         // check to see if the buffer has room
00078         // return true if there is room
00079         return (buffer->datalength < buffer->size);
00080 }
00081 
00082 void bufferFlush(cBuffer* buffer)
00083 {
00084         // flush contents of the buffer
00085         buffer->datalength = 0;
00086 }
00087 

Generated at Mon Oct 14 00:10:51 2002 for avrlib by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001