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