From 0eef8ab8a38b75122d52bbc42473f85ff55929b0 Mon Sep 17 00:00:00 2001 From: Fabien Proriol Date: Sun, 24 Nov 2019 18:18:05 +0100 Subject: [PATCH] Restore ring_buffer code in the right place: ring_buffer.[h/c], add also macro for STATIC initialization using C++11 --- src/ring_buffer.c | 53 ++++++++++++++++++++++++++++++++++ src/ring_buffer.h | 8 ++++++ src/stm32_platform.cpp | 65 ------------------------------------------ 3 files changed, 61 insertions(+), 65 deletions(-) diff --git a/src/ring_buffer.c b/src/ring_buffer.c index 0080a2d..f3f8ae2 100644 --- a/src/ring_buffer.c +++ b/src/ring_buffer.c @@ -1,2 +1,55 @@ #include +#include #include "ring_buffer.h" + +void init_static_ring_buffer(struct ring_buffer *buf, uint8_t *buffer, uint32_t maxlen) +{ + buf->_buffer = buffer; + buf->_writer = buf->_buffer; + buf->_reader = buf->_buffer; + buf->_len = 0; + buf->_maxlen = maxlen; +} + +int fifo_push(struct ring_buffer *buf, uint8_t data) +{ + /* FIFO FULL */ + if(buf->_len >= buf->_maxlen) + return -1; + + *buf->_writer = data; + ++buf->_len; + ++buf->_writer; + + /* If end of buffer, restart to begin */ + if(buf->_writer > (buf->_buffer + buf->_maxlen)) + { + buf->_writer = buf->_buffer; + } + return 1; +} + +int fifo_pop(struct ring_buffer *buf, uint8_t *data) +{ + /* FIFO EMPTY */ + if(buf->_len == 0) + return -1; + + *data = *buf->_reader; + ++buf->_reader; + --buf->_len; + + /* If end of buffer, restart to begin */ + if(buf->_reader > (buf->_buffer + buf->_maxlen)) + { + buf->_reader = buf->_buffer; + } + return 1; +} + +uint32_t buffer_length(struct ring_buffer *buf) +{ + return buf->_len; +} + + diff --git a/src/ring_buffer.h b/src/ring_buffer.h index bae8e87..5d21960 100644 --- a/src/ring_buffer.h +++ b/src/ring_buffer.h @@ -4,7 +4,15 @@ extern "C" { #endif +struct ring_buffer { + uint32_t _len; + uint32_t _maxlen; + uint8_t *_writer; + uint8_t *_reader; + uint8_t *_buffer; +}; +#define BUFFER_STATIC_INIT(BUFF,LEN) {0, LEN, BUFF, BUFF, BUFF} void init_static_ring_buffer(struct ring_buffer *buf, uint8_t *buffer, uint32_t maxlen); void init_buffer(struct ring_buffer *buf, uint32_t maxlen); diff --git a/src/stm32_platform.cpp b/src/stm32_platform.cpp index 9f937bd..36f0705 100644 --- a/src/stm32_platform.cpp +++ b/src/stm32_platform.cpp @@ -30,71 +30,6 @@ static uint8_t __USER_MEMORY[USER_MEMORY_SIZE]; volatile static int tx_it_enable = 0; unsigned char rx_byte; -#include - -#define BUFFER_LEN 64 - -struct ring_buffer { - uint32_t _len; - uint32_t _maxlen; - uint8_t *_writer; - uint8_t *_reader; - uint8_t *_buffer; -}; - -struct ring_buffer rx_buffer; -struct ring_buffer tx_buffer; - - -void init_static_ring_buffer(struct ring_buffer *buf, uint8_t *buffer, uint32_t maxlen) -{ - buf->_buffer = buffer; - buf->_writer = buf->_buffer; - buf->_reader = buf->_buffer; - buf->_len = 0; - buf->_maxlen = maxlen; -} - -int fifo_push(struct ring_buffer *buf, uint8_t data) -{ - /* FIFO FULL */ - if(buf->_len >= buf->_maxlen) - return -1; - - *buf->_writer = data; - ++buf->_len; - ++buf->_writer; - - /* If end of buffer, restart to begin */ - if(buf->_writer > (buf->_buffer + buf->_maxlen)) - { - buf->_writer = buf->_buffer; - } - return 1; -} - -int fifo_pop(struct ring_buffer *buf, uint8_t *data) -{ - /* FIFO EMPTY */ - if(buf->_len == 0) - return -1; - - *data = *buf->_reader; - ++buf->_reader; - --buf->_len; - - /* If end of buffer, restart to begin */ - if(buf->_reader > (buf->_buffer + buf->_maxlen)) - { - buf->_reader = buf->_buffer; - } - return 1; -} - -uint32_t buffer_length(struct ring_buffer *buf) -{ - return buf->_len; -} void delay(uint32_t delay) {