| typedef struct ringbuf { |
| uint8_t buf[BUFLEN]; |
| uint8_t *buf_end; |
| uint8_t *reader; |
| uint8_t *writer; |
| } ringbuf; |
| |
| void rbuf_init(ringbuf *rb) |
| { |
| rb->buf_end = buf[BUFLEN-1]; |
| rb->buf = {0}; |
| rb->reader = rb->buf[0]; |
| rb->writer = rb->buf[0]; |
| } |
| |
| uint8_t rbuf_read(ringbuf *rb) |
| { |
| uint8_t val = *(rb->reader); |
| if (rb->reader == rb->buf_end) { |
| rb->reader = rb->buf; |
| } else{ |
| rb->reader++; |
| } |
| return val; |
| } |
| |
| void rbuf_write(ringbuf *rb, uint8_t item) { |
| *(rb->writer) = item; |
| if (rb->writer == rb->buf_end) { |
| rb->writer = rb->buf; |
| } else{ |
| rb->writer++; |
| } |
| } |