00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 #include "global.h"
00019 #include "processor.h"
00020 #include "buffer.h"
00021 
00022 
00023 
00024 
00025 
00026 void bufferInit(cBuffer* buffer, unsigned char *start, unsigned short size)
00027 {
00028     
00029     CRITICAL_SECTION_BEGIN;
00030     
00031     buffer->dataptr = start;
00032     buffer->size = size;
00033     
00034     buffer->dataindex = 0;
00035     buffer->datalength = 0;
00036     
00037     CRITICAL_SECTION_END;
00038 }
00039 
00040 
00041 unsigned char  bufferGetFromFront(cBuffer* buffer)
00042 {
00043     unsigned char data = 0;
00044     
00045     CRITICAL_SECTION_BEGIN;
00046     
00047     if(buffer->datalength)
00048     {
00049         
00050         data = buffer->dataptr[buffer->dataindex];
00051         
00052         buffer->dataindex++;
00053         if(buffer->dataindex >= buffer->size)
00054         {
00055             buffer->dataindex -= buffer->size;
00056         }
00057         buffer->datalength--;
00058     }
00059     
00060     CRITICAL_SECTION_END;
00061     
00062     return data;
00063 }
00064 
00065 void bufferDumpFromFront(cBuffer* buffer, unsigned short numbytes)
00066 {
00067     
00068     CRITICAL_SECTION_BEGIN;
00069     
00070     
00071     if(numbytes < buffer->datalength)
00072     {
00073         
00074         buffer->dataindex += numbytes;
00075         if(buffer->dataindex >= buffer->size)
00076         {
00077             buffer->dataindex -= buffer->size;
00078         }
00079         buffer->datalength -= numbytes;
00080     }
00081     else
00082     {
00083         
00084         buffer->datalength = 0;
00085     }
00086     
00087     CRITICAL_SECTION_END;
00088 }
00089 
00090 unsigned char bufferGetAtIndex(cBuffer* buffer, unsigned short index)
00091 {
00092     
00093     CRITICAL_SECTION_BEGIN;
00094     
00095     unsigned char data = buffer->dataptr[(buffer->dataindex+index)%(buffer->size)];
00096     
00097     CRITICAL_SECTION_END;
00098     return data;
00099 }
00100 
00101 unsigned char bufferAddToEnd(cBuffer* buffer, unsigned char data)
00102 {
00103     
00104     CRITICAL_SECTION_BEGIN;
00105     
00106     if(buffer->datalength < buffer->size)
00107     {
00108         
00109         buffer->dataptr[(buffer->dataindex + buffer->datalength) % buffer->size] = data;
00110         
00111         buffer->datalength++;
00112         
00113         CRITICAL_SECTION_END;
00114         
00115         return -1;
00116     }
00117     
00118     CRITICAL_SECTION_END;
00119     
00120     return 0;
00121 }
00122 
00123 unsigned short bufferIsNotFull(cBuffer* buffer)
00124 {
00125     
00126     CRITICAL_SECTION_BEGIN;
00127     
00128     
00129     unsigned short bytesleft = (buffer->size - buffer->datalength);
00130     
00131     CRITICAL_SECTION_END;
00132     return bytesleft;
00133 }
00134 
00135 void bufferFlush(cBuffer* buffer)
00136 {
00137     
00138     CRITICAL_SECTION_BEGIN;
00139     
00140     buffer->datalength = 0;
00141     
00142     CRITICAL_SECTION_END;
00143 }
00144