diff --git a/embedded/STM32/src/Drivers/ring_buffer.c b/embedded/STM32/src/Drivers/ring_buffer.c index fa5a3a42..2c3f5304 100644 --- a/embedded/STM32/src/Drivers/ring_buffer.c +++ b/embedded/STM32/src/Drivers/ring_buffer.c @@ -1,34 +1,50 @@ -#include "../../app/inc/common_defines.h" - -#define RING_BUF_SIZE 128U - -typedef struct ring_buffer_s -{ - uint32_t read_index; - uint32_t write_index; - uint8_t* buf; - uint32_t size; -} ring_buffer_t; +#include "ring_buffer.h" void ring_buffer_init(ring_buffer_t* rb, uint8_t* buf, uint32_t size) { - + rb->buf = buf; + rb->size = size; + rb->read_index = 0U; + rb->write_index = 0U; } -bool ring_buffer_read(ring_buffer_t* rb, uint8_t* byte) +bool ring_buffer_empty(ring_buffer_t* rb) { + return (rb->read_index == rb->write_index); +} - +static bool ring_buffer_full(ring_buffer_t* rb) +{ + return (((rb->write_index + 1U) % rb->size) == rb->read_index); } +bool ring_buffer_read(ring_buffer_t* rb, uint8_t* byte) +{ + if (ring_buffer_empty(rb)) + { + return false; + } + + *byte = rb->buf[rb->read_index]; + rb->read_index = (rb->read_index + 1U) % rb->size; + + return true; +} + bool ring_buffer_write(ring_buffer_t* rb, uint8_t byte) { - - + if (ring_buffer_full(rb)) + { + return false; + } + + rb->buf[rb->write_index] = byte; + rb->write_index = (rb->write_index + 1U) % rb->size; + + return true; } -bool ring_buffer_empty(ring_buffer_t* rb) -{ + + -} \ No newline at end of file diff --git a/embedded/STM32/src/Drivers/ring_buffer.h b/embedded/STM32/src/Drivers/ring_buffer.h new file mode 100644 index 00000000..087db415 --- /dev/null +++ b/embedded/STM32/src/Drivers/ring_buffer.h @@ -0,0 +1,21 @@ +#ifndef RING_BUFFER_H +#define RING_BUFFER_H + +#include "../../app/inc/common_defines.h" + +#define RING_BUF_SIZE 128U + + +typedef struct ring_buffer_s { + uint32_t read_index; + uint32_t write_index; + uint8_t* buf; + uint32_t size; +} ring_buffer_t; + +void ring_buffer_init(ring_buffer_t* rb, uint8_t* buf, uint32_t size); +bool ring_buffer_read(ring_buffer_t* rb, uint8_t* byte); +bool ring_buffer_write(ring_buffer_t* rb, uint8_t byte); +bool ring_buffer_empty(ring_buffer_t* rb); + +#endif /* RING_BUFFER_H */ \ No newline at end of file