?lang_form?
?lang_select?
?lang_submit?
?lang_endform?
{HEADER END}
{FILE START}
library
?curdirlinks? - Rev 6
?prevdifflink? - Blame - ?getfile?
/*! \file bitbuf.c \brief Multipurpose bit buffer structure and methods. */
//*****************************************************************************
//
// File Name : 'bitbuf.c'
// Title : Multipurpose bit buffer structure and methods
// Author : Pascal Stang - Copyright (C) 2001-2002
// Created : 7/10/2002
// Revised : 7/10/2002
// Version : 0.5
// Target MCU : any
// Editor Tabs : 4
//
// This code is distributed under the GNU Public License
// which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************
#include "bitbuf.h"
// global variables
//! Initialize the bit buffer
// sets the start location and size of the buffer in memory
void bitbufInit(BitBuf* bitBuffer, unsigned char *start, unsigned short bytesize)
{
// set start pointer of the buffer
bitBuffer->dataptr = start;
bitBuffer->size = bytesize;
// initialize indexing and length
bitBuffer->dataindex = 0;
bitbufFlush(bitBuffer);
}
// access routines
//! Get a bit from the current position in the buffer
// returns the bit at the current position in the buffer
// and increments the bit position
unsigned char bitbufGet(BitBuf* bitBuffer)
{
unsigned char byte;
unsigned char bit;
// get current working byte
byte = bitBuffer->dataptr[bitBuffer->bytePos];
// read data bit
bit = (byte & (1<<bitBuffer->bitPos))?(1):(0);
// increment bit counter
if(bitBuffer->bitPos < 7)
{
bitBuffer->bitPos++;
}
else
{
// increment byte counter
bitBuffer->bitPos = 0;
bitBuffer->bytePos++;
}
// return bit value
return bit;
}
//! Get a bit from a given index into the buffer
// returns the bit at position [bitIndex] in the buffer
unsigned char bitbufGetAtIndex(BitBuf* bitBuffer, unsigned short bitIndex)
{
// return bit at index in buffer
return (bitBuffer->dataptr[bitIndex>>3] & (1<<(bitIndex & 0x07)))?(1):(0);
}
//! Store a bit at the current position in the buffer
// stores the bit at the current position in the buffer
// and increments the bit position
void bitbufStore(BitBuf* bitBuffer, unsigned char bit)
{
unsigned char byte;
// get current working byte
byte = bitBuffer->dataptr[bitBuffer->bytePos];
// apply data bit
if(bit)
byte |= (1<<bitBuffer->bitPos);
else
byte &= ~(1<<bitBuffer->bitPos);
// store data
bitBuffer->dataptr[bitBuffer->bytePos] = byte;
bitBuffer->datalength++;
// increment bit counter
if(bitBuffer->bitPos < 7)
{
bitBuffer->bitPos++;
}
else
{
// increment byte counter
bitBuffer->bitPos = 0;
bitBuffer->bytePos++;
}
}
void bitbufReset(BitBuf* bitBuffer)
{
// reset counters
bitBuffer->bytePos = 0;
bitBuffer->bitPos = 0;
}
void bitbufFlush(BitBuf* bitBuffer)
{
// flush contents of the buffer
bitBuffer->datalength = 0;
// reset indexing
bitbufReset(bitBuffer);
}
unsigned short bitbufGetDataLength(BitBuf* bitBuffer)
{
return bitBuffer->datalength;
}
/*
unsigned char bitbufIsNotFull(cBuffer* buffer)
{
// check to see if the buffer has room
// return true if there is room
return (buffer->datalength < buffer->size);
}
*/
|
{FILE END}
{FOOTER START}
Powered by WebSVN v2.8.3