convert ciculaire buffer to flipflop buffer

This commit is contained in:
MReenen 2023-10-05 21:08:55 +02:00
parent 9d6e7c5e0d
commit 54b8a5a240

View File

@ -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;
} }
} }