#define BUFFER_SIZE 128
typedef struct {
uint8_t buffer[BUFFER_SIZE];
volatile uint16_t head;
volatile uint16_t tail;
} ring_buffer_t;
void rb_init(ring_buffer_t *rb) {
rb->head = 0;
rb->tail = 0;
}
int rb_is_full(ring_buffer_t *rb) {
return ((rb->head + 1) % BUFFER_SIZE) == rb->tail;
}
int rb_is_empty(ring_buffer_t *rb) {
return rb->head == rb->tail;
}
int rb_put(ring_buffer_t *rb, uint8_t data) {
if (!rb_is_full(rb)) {
rb->buffer[rb->head] = data;
rb->head = (rb->head + 1) % BUFFER_SIZE;
return 0; // Success
}
return -1; // Buffer full
}
int rb_get(ring_buffer_t *rb, uint8_t *data) {
if (!rb_is_empty(rb)) {
*data = rb->buffer[rb->tail];
rb->tail = (rb->tail + 1) % BUFFER_SIZE;
return 0; // Success
}
return -1; // Buffer empty
}
|