| #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; |
| } |