Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 35 additions & 19 deletions embedded/STM32/src/Drivers/ring_buffer.c
Original file line number Diff line number Diff line change
@@ -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)
{


}
21 changes: 21 additions & 0 deletions embedded/STM32/src/Drivers/ring_buffer.h
Original file line number Diff line number Diff line change
@@ -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 */
Loading