diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 0000000..33388b3 --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,6 @@ +((c-mode . ((lsp-clients-clangd-args . ("--compile-commands-dir=build/" + "--pch-storage=memory" + "--background-index" + "-j=4" + )) + ))) diff --git a/CircularBuffer/Makefile b/CircularBuffer/Makefile deleted file mode 100644 index e83eba7..0000000 --- a/CircularBuffer/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -CC=gcc -CFLAGS=-std=c99 -Wall -Wextra - - - -BIN=./bin -SRC=./src -INC=./inc -TEST=./test -EXAMPLE_DIR=./example -TESTER_OBJS=$(BIN)/PCircularBuffer.o $(BIN)/test.o -EXAMPLE_OBJS=$(BIN)/PCircularBuffer.o $(BIN)/simple_circular_buffer_example.o - -TESTER=$(BIN)/tester -EXAMPLE=$(BIN)/simple_circular_buffer_example - -$(TESTER): $(TESTER_OBJS) - $(CC) $(CFLAGS) -o $@ $(TESTER_OBJS) - -$(EXAMPLE): $(EXAMPLE_OBJS) - $(CC) $(CFLAGS) -o $@ $(EXAMPLE_OBJS) - -$(BIN)/PCircularBuffer.o: $(SRC)/PCircularBuffer.c $(INC)/PCircularBuffer.h - $(CC) -c $(CFLAGS) -I$(INC) $(SRC)/PCircularBuffer.c -o $(BIN)/PCircularBuffer.o - -$(BIN)/test.o: $(TEST)/test.c - $(CC) -c $(CFLAGS) -I$(INC) $(TEST)/test.c -o $(BIN)/test.o - -$(BIN)/simple_circular_buffer_example.o: $(EXAMPLE_DIR)/simple_circular_buffer_example.c - $(CC) -c $(CFLAGS) -I$(INC) $(EXAMPLE_DIR)/simple_circular_buffer_example.c -o $(BIN)/simple_circular_buffer_example.o - -all: $(TESTER) $(EXAMPLE) - -clean: - rm -rf $(BIN)/* - -test: $(TESTER) - $(TESTER) - -example: $(EXAMPLE) - $(EXAMPLE) \ No newline at end of file diff --git a/CircularBuffer/build/Makefile b/CircularBuffer/build/Makefile new file mode 100644 index 0000000..26a4af0 --- /dev/null +++ b/CircularBuffer/build/Makefile @@ -0,0 +1,54 @@ +PRJNAME=pcbuffer +PRJOUT=lib$(PRJNAME).a + +TESTSOUT=$(PRJNAME)_tests +EXAMPLESOUT=$(PRJNAME)_example +CC=gcc +SIZE=size +MK_DIR=mkdir -p + +CFLAGS=\ +-Wall \ +-DDEBUG \ +-std=gnu11 \ +-ffunctions-sections \ +-O3 \ +-g3 + + +ARFLAGS=\ + +# Core Stuff +CORE_SUB_DIRS=src +CORE_INC_DIRS=\ +-I../cfg \ +-I../inc + +# Tests +TESTS_SUB_DIRS=\ +test/src + +TESTS_INC_DIRS=\ +-I../tests/inc \ +-I../test/cfg + +# Examples +EXAMPLES_SUB_DIRS=\ +EXAMPLES_INC_DIRS=\ + +.PHONY: all tests examples clean + +all: $(CORE_SUB_DIRS) $(PRJOUT) +tests: all $(TESTS_SUB_DIRS) $(TESTSOUT) +examples: all $(EXAMPLES_SUB_DIRS) $(EXAMPLESOUT) + +$(PRJOUT): $(CORE_OBJS) + $(AR) $(CORE_INC_DIRS) $(CFLAGS) $(ARFLAGS) $@ $< + +$(TESTSOUT): $(TEST_OBJS) + $(CC) $(CFLAGS) -o $< $(TEST_OBJS) + +$(EXAMPLESOUT) + + + diff --git a/CircularBuffer/example/simple_circular_buffer_example.c b/CircularBuffer/examples/simple_circular_buffer_example.c similarity index 100% rename from CircularBuffer/example/simple_circular_buffer_example.c rename to CircularBuffer/examples/simple_circular_buffer_example.c diff --git a/CircularBuffer/src/PCircularBuffer.c b/CircularBuffer/src/PCircularBuffer.c index b535ffd..213f7b8 100644 --- a/CircularBuffer/src/PCircularBuffer.c +++ b/CircularBuffer/src/PCircularBuffer.c @@ -1,408 +1,409 @@ -#include - -// Error handler used for debugging only -#ifdef PB_CB_DEBUG -#include -static void handle_status(const char* func, PB_CB_STATUS status_code) -{ - if(status_code != PB_CB_GOOD) - { - printf("%s failed: error code: %d\r\n", func, status_code); - } -} -#endif - -// Circular Buffer Prototypes -- uint8_t -#if PB_CB_U8 -static PB_CB_STATUS p_cb_u8_push(p_cb_double* cbuffer, uint8_t value); -static PB_CB_STATUS p_cb_u8_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- uint16_t -#if PB_CB_U16 -static PB_CB_STATUS p_cb_u16_push(p_cb_double* cbuffer, uint16_t value); -static PB_CB_STATUS p_cb_u16_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- uint32_t -#if PB_CB_U32 -static PB_CB_STATUS p_cb_u32_push(p_cb_double* cbuffer, uint32_t value); -static PB_CB_STATUS p_cb_u32_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- uint64_t -#if PB_CB_U64 -static PB_CB_STATUS p_cb_u64_push(p_cb_double* cbuffer, uint64_t value); -static PB_CB_STATUS p_cb_u64_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- int8_t -#if PB_CB_I8 -static PB_CB_STATUS p_cb_i8_push(p_cb_double* cbuffer, int8_t value); -static PB_CB_STATUS p_cb_i8_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- int16_t -#if PB_CB_I16 -static PB_CB_STATUS p_cb_i16_push(p_cb_double* cbuffer, int16_t value); -static PB_CB_STATUS p_cb_i16_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- int32_t -#if PB_CB_I32 -static PB_CB_STATUS p_cb_i32_push(p_cb_double* cbuffer, int32_t value); -static PB_CB_STATUS p_cb_i32_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- int64_t -#if PB_CB_I64 -static PB_CB_STATUS p_cb_i64_push(p_cb_double* cbuffer, int64_t value); -static PB_CB_STATUS p_cb_i64_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- Float -#if PB_CB_FLOAT -static PB_CB_STATUS p_cb_float_push(p_cb_double* cbuffer, float value); -static PB_CB_STATUS p_cb_float_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Prototypes -- Double -#if PB_CB_DOUBLE -static PB_CB_STATUS p_cb_double_push(p_cb_double* cbuffer, double value); -static PB_CB_STATUS p_cb_double_empty(p_cb_double* cbuffer); -#endif - -// Circular Buffer Definitions -- uint8_t -#if PB_CB_U8 -PB_CB_STATUS p_cb_u8_init(p_cb_u8* circ_buffer, uint8_t* buff, uint32_t max_length) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - do - { - // Make sure the buffer isn't bad (null) - if(!buff) - { - ret = PB_CB_NULL_BUFFER; - break; - } - - // Make sure the max buffer is a useable size - if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) - { - ret = PB_CB_BAD_BUFFER_SIZE; - break; - } - } while (0); - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} - -PB_CB_STATUS p_cb_u8_push(p_cb_double* cbuffer, uint8_t value) -{ - -} -PB_CB_STATUS p_cb_u8_empty(p_cb_double* cbuffer) -{ - -} -#endif -// Circular Buffer Definitions -- uint16_t -#if PB_CB_U16 -PB_CB_STATUS p_cb_u16_init(p_cb_u16* circ_buffer, uint16_t* buff, uint32_t max_length) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - do - { - // Make sure the buffer isn't bad (null) - if(!buff) - { - ret = PB_CB_NULL_BUFFER; - break; - } - - // Make sure the max buffer is a useable size - if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) - { - ret = PB_CB_BAD_BUFFER_SIZE; - break; - } - } while (0); - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_u16_push(p_cb_double* cbuffer, uint16_t value) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_u16_empty(p_cb_double* cbuffer) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -#endif - -// Circular Buffer Definitions -- uint32_t -#if PB_CB_U32 -PB_CB_STATUS p_cb_u32_init(p_cb_u32* circ_buffer, uint32_t* buff, uint32_t max_length) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - do - { - // Make sure the buffer isn't bad (null) - if(!buff) - { - ret = PB_CB_NULL_BUFFER; - break; - } - - // Make sure the max buffer is a useable size - if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) - { - ret = PB_CB_BAD_BUFFER_SIZE; - break; - } - } while (0); - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_u32_push(p_cb_double* cbuffer, uint32_t value) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_u32_empty(p_cb_double* cbuffer) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -#endif - -// Circular Buffer Definitions -- uint64_t -#if PB_CB_U64 -PB_CB_STATUS p_cb_u64_init(p_cb_u64* circ_buffer, uint64_t* buff, uint32_t max_length) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - do - { - // Make sure the buffer isn't bad (null) - if(!buff) - { - ret = PB_CB_NULL_BUFFER; - break; - } - - // Make sure the max buffer is a useable size - if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) - { - ret = PB_CB_BAD_BUFFER_SIZE; - break; - } - } while (0); - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_u64_push(p_cb_double* cbuffer, uint64_t value) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_u64_empty(p_cb_double* cbuffer) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -#endif - -#if PB_CB_FLOAT -PB_CB_STATUS p_cb_float_init(p_cb_float* circ_buffer, float* buff, uint32_t max_length) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - do - { - // Make sure the buffer isn't bad (null) - if(!buff) - { - ret = PB_CB_NULL_BUFFER; - break; - } - - // Make sure the max buffer is a useable size - if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) - { - ret = PB_CB_BAD_BUFFER_SIZE; - break; - } - } while (0); - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_float_push(p_cb_double* cbuffer, float value) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_float_empty(p_cb_double* cbuffer) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -#endif - -// Circular Buffer Definitions -- double -#if PB_CB_DOUBLE -PB_CB_STATUS p_cb_double_init(p_cb_double* circ_buffer, double* buff, uint32_t max_length) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - do - { - // Make sure the buffer isn't bad (null) - if(!buff) - { - ret = PB_CB_NULL_BUFFER; - break; - } - - // Make sure the max buffer is a useable size - if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) - { - ret = PB_CB_BAD_BUFFER_SIZE; - break; - } - circ_buffer->buffer = buff; - circ_buffer->max_len = (uint16_t)max_length; - circ_buffer->head = 0; - circ_buffer->push = p_cb_double_push; - circ_buffer->empty = p_cb_double_empty; - circ_buffer->empty(circ_buffer); - } while (0); - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - - return ret; -} - -PB_CB_STATUS p_cb_double_push(p_cb_double* cbuffer, double value) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - - if(!cbuffer) - { - ret = PB_CB_NULL_CBUFFER; - } - else - { - cbuffer->buffer[cbuffer->head] = value; - cbuffer->head = (cbuffer->head + 1) % cbuffer->max_len; - } - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -PB_CB_STATUS p_cb_double_empty(p_cb_double* cbuffer) -{ - PB_CB_STATUS ret = PB_CB_GOOD; - - do - { - if(!cbuffer) - { - ret = PB_CB_NULL_CBUFFER; - break; - } - - if(!cbuffer->buffer) - { - ret = PB_CB_NULL_BUFFER; - break; - } - for(int ind = 0; ind < cbuffer->max_len; ind++) - { - cbuffer->buffer[ind] = 0.0; - } - cbuffer->head = 0; - cbuffer->b_empty = true; - cbuffer->b_filled = false; - } while (0); - - // Debugging - #ifdef PB_CB_DEBUG - handle_status(__func__, ret); - #endif - - return ret; -} -#endif +#include + +// Error handler used for debugging only +#ifdef PB_CB_DEBUG +#include +static void handle_status(const char* func, PB_CB_STATUS status_code) +{ + if(status_code != PB_CB_GOOD) + { + printf("%s failed: error code: %d\r\n", func, status_code); + } +} +#endif + +// Circular Buffer Prototypes -- uint8_t +#if PB_CB_U8 +static PB_CB_STATUS p_cb_u8_push(p_cb_double* cbuffer, uint8_t value); +static PB_CB_STATUS p_cb_u8_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- uint16_t +#if PB_CB_U16 +static PB_CB_STATUS p_cb_u16_push(p_cb_double* cbuffer, uint16_t value); +static PB_CB_STATUS p_cb_u16_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- uint32_t +#if PB_CB_U32 +static PB_CB_STATUS p_cb_u32_push(p_cb_double* cbuffer, uint32_t value); +static PB_CB_STATUS p_cb_u32_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- uint64_t +#if PB_CB_U64 +static PB_CB_STATUS p_cb_u64_push(p_cb_double* cbuffer, uint64_t value); +static PB_CB_STATUS p_cb_u64_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int8_t +#if PB_CB_I8 +static PB_CB_STATUS p_cb_i8_push(p_cb_double* cbuffer, int8_t value); +static PB_CB_STATUS p_cb_i8_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int16_t +#if PB_CB_I16 +static PB_CB_STATUS p_cb_i16_push(p_cb_double* cbuffer, int16_t value); +static PB_CB_STATUS p_cb_i16_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int32_t +#if PB_CB_I32 +static PB_CB_STATUS p_cb_i32_push(p_cb_double* cbuffer, int32_t value); +static PB_CB_STATUS p_cb_i32_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- int64_t +#if PB_CB_I64 +static PB_CB_STATUS p_cb_i64_push(p_cb_double* cbuffer, int64_t value); +static PB_CB_STATUS p_cb_i64_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- Float +#if PB_CB_FLOAT +static PB_CB_STATUS p_cb_float_push(p_cb_double* cbuffer, float value); +static PB_CB_STATUS p_cb_float_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Prototypes -- Double +#if PB_CB_DOUBLE +static PB_CB_STATUS p_cb_double_push(p_cb_double* cbuffer, double value); +static PB_CB_STATUS p_cb_double_empty(p_cb_double* cbuffer); +#endif + +// Circular Buffer Definitions -- uint8_t +#if PB_CB_U8 +PB_CB_STATUS p_cb_u8_init(p_cb_u8* circ_buffer, uint8_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} + +PB_CB_STATUS p_cb_u8_push(p_cb_double* cbuffer, uint8_t value) +{ + +} +PB_CB_STATUS p_cb_u8_empty(p_cb_double* cbuffer) +{ + +} +#endif +// Circular Buffer Definitions -- uint16_t +#if PB_CB_U16 +PB_CB_STATUS p_cb_u16_init(p_cb_u16* circ_buffer, uint16_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} + +PB_CB_STATUS p_cb_u16_push(p_cb_double* cbuffer, uint16_t value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u16_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +// Circular Buffer Definitions -- uint32_t +#if PB_CB_U32 +PB_CB_STATUS p_cb_u32_init(p_cb_u32* circ_buffer, uint32_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u32_push(p_cb_double* cbuffer, uint32_t value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u32_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +// Circular Buffer Definitions -- uint64_t +#if PB_CB_U64 +PB_CB_STATUS p_cb_u64_init(p_cb_u64* circ_buffer, uint64_t* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u64_push(p_cb_double* cbuffer, uint64_t value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_u64_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +#if PB_CB_FLOAT +PB_CB_STATUS p_cb_float_init(p_cb_float* circ_buffer, float* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_float_push(p_cb_double* cbuffer, float value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_float_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif + +// Circular Buffer Definitions -- double +#if PB_CB_DOUBLE +PB_CB_STATUS p_cb_double_init(p_cb_double* circ_buffer, double* buff, uint32_t max_length) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + do + { + // Make sure the buffer isn't bad (null) + if(!buff) + { + ret = PB_CB_NULL_BUFFER; + break; + } + + // Make sure the max buffer is a useable size + if(max_length > PB_CB_MAX_BUFFER_SIZE || max_length <= 0) + { + ret = PB_CB_BAD_BUFFER_SIZE; + break; + } + circ_buffer->buffer = buff; + circ_buffer->max_len = (uint16_t)max_length; + circ_buffer->head = 0; + circ_buffer->push = p_cb_double_push; + circ_buffer->empty = p_cb_double_empty; + circ_buffer->empty(circ_buffer); + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + + return ret; +} + +PB_CB_STATUS p_cb_double_push(p_cb_double* cbuffer, double value) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + + if(!cbuffer) + { + ret = PB_CB_NULL_CBUFFER; + } + else + { + cbuffer->buffer[cbuffer->head] = value; + cbuffer->head = (cbuffer->head + 1) % cbuffer->max_len; + } + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +PB_CB_STATUS p_cb_double_empty(p_cb_double* cbuffer) +{ + PB_CB_STATUS ret = PB_CB_GOOD; + + do + { + if(!cbuffer) + { + ret = PB_CB_NULL_CBUFFER; + break; + } + + if(!cbuffer->buffer) + { + ret = PB_CB_NULL_BUFFER; + break; + } + for(int ind = 0; ind < cbuffer->max_len; ind++) + { + cbuffer->buffer[ind] = 0.0; + } + cbuffer->head = 0; + cbuffer->b_empty = true; + cbuffer->b_filled = false; + } while (0); + + // Debugging + #ifdef PB_CB_DEBUG + handle_status(__func__, ret); + #endif + + return ret; +} +#endif