diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-11-26 17:42:33 +0100 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-11-26 17:42:33 +0100 |
| commit | 9c8cfc2e52b0446f7cab14325028075760869b45 (patch) | |
| tree | b85a0f9403bd38ac7947cdf709de787241509533 /lib/buffer/ringbuffer.c | |
| parent | 786bd02b01d80e335d4445698d721213a1884ff5 (diff) | |
further cleanup
Diffstat (limited to 'lib/buffer/ringbuffer.c')
| -rw-r--r-- | lib/buffer/ringbuffer.c | 46 |
1 files changed, 8 insertions, 38 deletions
diff --git a/lib/buffer/ringbuffer.c b/lib/buffer/ringbuffer.c index 9e3adaf..dcf7bc2 100644 --- a/lib/buffer/ringbuffer.c +++ b/lib/buffer/ringbuffer.c @@ -3,45 +3,37 @@ // todo: syncing access to buffer. #define FOOLOS_MODULE_NAME "ringbuffer" + #include "lib/bool/bool.h" #include "lib/logger/log.h" #include "kernel/spinlock.h" -static volatile int front; -static volatile int back; -static volatile int size; - #define RINGBUFFER_SIZE 10 +static volatile int size=RINGBUFFER_SIZE; +static volatile int front=RINGBUFFER_SIZE-1; +static volatile int back=RINGBUFFER_SIZE-1; static volatile char buf[RINGBUFFER_SIZE]; -bool ringbuffer_selftest(); - -void ringbuffer_init() -{ - size=RINGBUFFER_SIZE; - front=size-1; - back=size-1; - -// ringbuffer_selftest(); -// while(1); -} - bool ringbuffer_put(char c) { + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"put wants lock)"); lock_spin(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"locked by put)"); + if((back-1+size)%size==front) { lock_release(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by put)"); return false; } + buf[back]=c; log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"put %d %d (%c)", back, front,c); back--; back+=size; back%=size; + lock_release(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by put)"); @@ -51,7 +43,6 @@ bool ringbuffer_put(char c) bool ringbuffer_get(char *c) { - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"get wants lock)"); lock_spin(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"locked by get)"); @@ -74,24 +65,3 @@ bool ringbuffer_get(char *c) return true; } - -bool ringbuffer_selftest() -{ - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"ringbuffer selftest"); - char c; - - ringbuffer_put('a'); - ringbuffer_put('b'); - ringbuffer_put('c'); - ringbuffer_put('d'); - ringbuffer_put('e'); - - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - -} |
