convert ciculaire buffer to flipflop buffer
This commit is contained in:
parent
9d6e7c5e0d
commit
54b8a5a240
@ -11,38 +11,57 @@ char rxBuffer[RX_BUFFER_SIZE];
|
|||||||
uint8_t rxBuffer_writePointer = 0;
|
uint8_t rxBuffer_writePointer = 0;
|
||||||
uint8_t rxBuffer_readPointer = 0;
|
uint8_t rxBuffer_readPointer = 0;
|
||||||
|
|
||||||
class Buffer
|
class FlipFlop_Buffer
|
||||||
{
|
{
|
||||||
void *buffer_start;
|
void *buffer_flip;
|
||||||
void *buffer_end;
|
void *buffer_flop;
|
||||||
int size;
|
size_t _size;
|
||||||
|
|
||||||
void *write_p;
|
void *active_buffer;
|
||||||
void *read_p;
|
|
||||||
|
|
||||||
Buffer(void *buffer, size)
|
void *_write_head;
|
||||||
|
|
||||||
|
Buffer(size_t size)
|
||||||
{
|
{
|
||||||
this->buffer_start = buffer;
|
this->_size = size;
|
||||||
this->buffer_end = buffer + size - 1;
|
this->buffer_flip = maloc(size);
|
||||||
|
this->buffer_flop = maloc(size);
|
||||||
|
|
||||||
this->write_p = this->buffer_start;
|
this->active_buffer = this->buffer_flip;
|
||||||
this->read_p = this->buffer_start;
|
}
|
||||||
|
~Buffer()
|
||||||
this->size = size;
|
{
|
||||||
|
free(this->buffer_flip);
|
||||||
|
free(this->buffer_flop);
|
||||||
}
|
}
|
||||||
|
|
||||||
void put(void *data, size_t len)
|
bool put(void *data, size_t len)
|
||||||
{
|
{
|
||||||
if (this->write_p + len > buffer_end)
|
bool sucsess;
|
||||||
|
if (this->_write_head + len > this->buffer_flip + this->size)
|
||||||
{
|
{
|
||||||
size_t leftToEnd = (size_t)(buffer_end - this->write_p)
|
memcpy(this->_write_head, data, this->_write_head - this->buffer_flip);
|
||||||
this->put(data, leftToEnd);
|
sucsess = false;
|
||||||
this->put(data + leftToEnd, len - leftToEnd);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(this->write_p, data, len);
|
memcpy(this->write_p, data, len);
|
||||||
|
sucsess = true;
|
||||||
}
|
}
|
||||||
|
return sucsess;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* swich_buffer()
|
||||||
|
{
|
||||||
|
if (this->active_buffer == this->buffer_flip)
|
||||||
|
{
|
||||||
|
this->active_buffer == this->buffer_flip;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->active_buffer == this->buffer_flop;
|
||||||
|
}
|
||||||
|
return this->active_buffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user