From c46db07f2668801914bb0a6656a0a64e6d30da42 Mon Sep 17 00:00:00 2001 From: Michael Moon Date: Sun, 12 Sep 2010 12:33:12 +1000 Subject: [PATCH] separate ringbuffers no longer necessary as pointed out by jakepoz --- ringbuffer.c | 88 ---------------------------------------------------- ringbuffer.h | 33 -------------------- serial.c | 3 +- 3 files changed, 2 insertions(+), 122 deletions(-) delete mode 100644 ringbuffer.c delete mode 100644 ringbuffer.h diff --git a/ringbuffer.c b/ringbuffer.c deleted file mode 100644 index 2f2636e..0000000 --- a/ringbuffer.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "ringbuffer.h" - -RB_BITS _rb_mod(RB_BITS num, RB_BITS denom) -{ - for (; num >= denom; num -= denom); - return num; -} - -void ringbuffer_init(ringbuffer *buf, RB_BITS bufsize) -{ - buf->read_pointer = 0; - buf->write_pointer = 0; - buf->size = bufsize - sizeof(ringbuffer); -} - -RB_BITS ringbuffer_canread(ringbuffer *buf) -{ - return _rb_mod(buf->size + buf->write_pointer - buf->read_pointer, buf->size); -} - -RB_BITS ringbuffer_canwrite(ringbuffer *buf) -{ - return _rb_mod(buf->size + buf->size + buf->read_pointer - buf->write_pointer - 1, buf->size); -} - -uint8_t ringbuffer_readchar(ringbuffer *buf) -{ - uint8_t r = 0; - if (ringbuffer_canread(buf)) - { - r = buf->data[buf->read_pointer]; - buf->read_pointer = _rb_mod(buf->read_pointer + 1, buf->size); - } - return r; -} - -void ringbuffer_writechar(ringbuffer *buf, uint8_t data) -{ - if (ringbuffer_canwrite(buf)) - { - buf->data[buf->write_pointer] = data; - buf->write_pointer = _rb_mod(buf->write_pointer + 1, buf->size); - } -} - -uint8_t ringbuffer_peekchar(ringbuffer *buf, RB_BITS index) -{ - return buf->data[_rb_mod(buf->read_pointer + index, buf->size)]; -} - -RB_BITS ringbuffer_readblock(ringbuffer *buf, uint8_t *newbuf, RB_BITS size) -{ - RB_BITS nc, i; - uint8_t *rp, *ms; - if ((nc = ringbuffer_canread(buf)) < size) - size = nc; - if (size) - { - for (i = 0, rp = ((uint8_t *) buf->data + buf->read_pointer), ms = ((uint8_t *) buf->data + buf->size); i < size; i++, rp++) - { - if (rp >= ms) - rp = (uint8_t *) buf->data; - newbuf[i] = *rp; - } - buf->read_pointer = rp - buf->data; - } - return size; -} - -RB_BITS ringbuffer_writeblock(ringbuffer *buf, uint8_t *data, RB_BITS size) -{ - RB_BITS nc, i; - uint8_t *wp, *ms; - - if ((nc = ringbuffer_canwrite(buf)) < size) - size = nc; - if (size) - { - for (i = 0, wp = (uint8_t *) (buf->write_pointer + buf->data), ms = (uint8_t *) (buf->data + buf->size); i < size; i++, wp++) - { - if (wp >= ms) - wp = (uint8_t *) buf->data; - *wp = data[i]; - } - buf->write_pointer = wp - buf->data; - } - return size; -} diff --git a/ringbuffer.h b/ringbuffer.h deleted file mode 100644 index a5dd28c..0000000 --- a/ringbuffer.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _RINGBUFFER_H -#define _RINGBUFFER_H - -#include -#include - -// ringbuffer head/tail/length precision. change to uint16_t if you want a buffer bigger than 250 bytes or so -#define RB_BITS uint8_t - -typedef struct { - volatile RB_BITS read_pointer; - volatile RB_BITS write_pointer; - volatile RB_BITS size; - volatile uint8_t data[]; -} ringbuffer; - -// initialize a ringbuffer -void ringbuffer_init(ringbuffer *buf, RB_BITS bufsize); - -// return how many bytes can be read or written -RB_BITS ringbuffer_canread(ringbuffer *buf); -RB_BITS ringbuffer_canwrite(ringbuffer *buf); - -// read bytes -uint8_t ringbuffer_readchar(ringbuffer *buf); -uint8_t ringbuffer_peekchar(ringbuffer *buf, RB_BITS index); -RB_BITS ringbuffer_readblock(ringbuffer *buf, uint8_t *newbuf, RB_BITS size); - -// write bytes -void ringbuffer_writechar(ringbuffer *buf, uint8_t data); -RB_BITS ringbuffer_writeblock(ringbuffer *buf, uint8_t *data, RB_BITS size); - -#endif /* _RINGBUFFER_H */ diff --git a/serial.c b/serial.c index 4141dfb..732fb2f 100644 --- a/serial.c +++ b/serial.c @@ -1,6 +1,7 @@ #include "serial.h" -#include "ringbuffer.h" +#include + #include "arduino.h" #define BUFSIZE 64