00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "bitbuf.h"
00019
00020
00021
00022
00023
00024 void bitbufInit(BitBuf* bitBuffer, unsigned char *start, unsigned short bytesize)
00025 {
00026
00027 bitBuffer->dataptr = start;
00028 bitBuffer->size = bytesize;
00029
00030 bitBuffer->dataindex = 0;
00031 bitbufFlush(bitBuffer);
00032 }
00033
00034
00035
00036
00037
00038
00039 unsigned char bitbufGet(BitBuf* bitBuffer)
00040 {
00041 unsigned char byte;
00042 unsigned char bit;
00043
00044
00045 byte = bitBuffer->dataptr[bitBuffer->bytePos];
00046
00047 bit = (byte & (1<<bitBuffer->bitPos))?(1):(0);
00048
00049
00050 if(bitBuffer->bitPos < 7)
00051 {
00052 bitBuffer->bitPos++;
00053 }
00054 else
00055 {
00056
00057 bitBuffer->bitPos = 0;
00058 bitBuffer->bytePos++;
00059 }
00060
00061
00062 return bit;
00063 }
00064
00065
00066
00067 unsigned char bitbufGetAtIndex(BitBuf* bitBuffer, unsigned short bitIndex)
00068 {
00069
00070 return (bitBuffer->dataptr[bitIndex>>3] & (1<<(bitIndex & 0x07)))?(1):(0);
00071 }
00072
00073
00074
00075
00076 void bitbufStore(BitBuf* bitBuffer, unsigned char bit)
00077 {
00078 unsigned char byte;
00079
00080 byte = bitBuffer->dataptr[bitBuffer->bytePos];
00081
00082 if(bit)
00083 byte |= (1<<bitBuffer->bitPos);
00084 else
00085 byte &= ~(1<<bitBuffer->bitPos);
00086
00087 bitBuffer->dataptr[bitBuffer->bytePos] = byte;
00088 bitBuffer->datalength++;
00089
00090
00091 if(bitBuffer->bitPos < 7)
00092 {
00093 bitBuffer->bitPos++;
00094 }
00095 else
00096 {
00097
00098 bitBuffer->bitPos = 0;
00099 bitBuffer->bytePos++;
00100 }
00101 }
00102
00103 void bitbufReset(BitBuf* bitBuffer)
00104 {
00105
00106 bitBuffer->bytePos = 0;
00107 bitBuffer->bitPos = 0;
00108 }
00109
00110 void bitbufFlush(BitBuf* bitBuffer)
00111 {
00112
00113 bitBuffer->datalength = 0;
00114
00115 bitbufReset(bitBuffer);
00116 }
00117
00118 unsigned short bitbufGetDataLength(BitBuf* bitBuffer)
00119 {
00120 return bitBuffer->datalength;
00121 }
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131