From 54b8a5a240664a5f47a6cc031b6e4ed96caf38ed Mon Sep 17 00:00:00 2001 From: MReenen Date: Thu, 5 Oct 2023 21:08:55 +0200 Subject: [PATCH] convert ciculaire buffer to flipflop buffer --- rx_esp2866/rx_esp2866.ino | 55 ++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/rx_esp2866/rx_esp2866.ino b/rx_esp2866/rx_esp2866.ino index 9723d63..81eda0c 100644 --- a/rx_esp2866/rx_esp2866.ino +++ b/rx_esp2866/rx_esp2866.ino @@ -11,38 +11,57 @@ char rxBuffer[RX_BUFFER_SIZE]; uint8_t rxBuffer_writePointer = 0; uint8_t rxBuffer_readPointer = 0; -class Buffer +class FlipFlop_Buffer { - void *buffer_start; - void *buffer_end; - int size; + void *buffer_flip; + void *buffer_flop; + size_t _size; - void *write_p; - void *read_p; + void *active_buffer; - Buffer(void *buffer, size) + void *_write_head; + + Buffer(size_t size) { - this->buffer_start = buffer; - this->buffer_end = buffer + size - 1; + this->_size = size; + this->buffer_flip = maloc(size); + this->buffer_flop = maloc(size); - this->write_p = this->buffer_start; - this->read_p = this->buffer_start; - - this->size = size; + this->active_buffer = this->buffer_flip; + } + ~Buffer() + { + 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) - this->put(data, leftToEnd); - this->put(data + leftToEnd, len - leftToEnd); + memcpy(this->_write_head, data, this->_write_head - this->buffer_flip); + sucsess = false; } else { 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; } }