#include "ringbuffer.h"
#include "trace.h"

void rbuf_reset(volatile ringbuf *rb)
{
    rb->ird = 0;
    rb->iwr = 0;
}

uint8_t rbuf_read(volatile ringbuf *rb)
{
    uint8_t val = rb->buf[rb->ird];
    rb->ird = (rb->ird + 1)%RING_BUFLEN;
    return val;
}

uint8_t rbuf_peek(volatile ringbuf *rb)
{
    return rb->buf[rb->ird];
}

void rbuf_write(volatile volatile ringbuf *rb, uint8_t item)
{
    if(!rbuf_is_full(rb)) {
        rb->buf[rb->iwr] = item;
        rb->iwr = (rb->iwr + 1)%RING_BUFLEN;
    } else {
        TRACE_ERROR("Ringbuffer full, losing bytes!");
    }
}

bool rbuf_is_empty(volatile ringbuf *rb)
{
    return rb->ird == rb->iwr;
}

bool rbuf_is_full(volatile ringbuf *rb)
{
    return rb->ird == (rb->iwr+1)%RING_BUFLEN;
}
