diff options
| author | Miguel <m.i@gmx.at> | 2018-10-18 06:23:26 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-10-18 06:23:26 +0200 |
| commit | e2a6ca9d03a3c0743384f0955609650f2cdce9bb (patch) | |
| tree | 09da82ba6fbb51c9492d05bd94a3d7b044492061 /kernel/ringbuffer.c | |
| parent | 4d1a149531bc5d672cdf4a5a3e010662f9611d61 (diff) | |
struggling with new syscalls
Diffstat (limited to 'kernel/ringbuffer.c')
| -rw-r--r-- | kernel/ringbuffer.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/kernel/ringbuffer.c b/kernel/ringbuffer.c index f11e02b..e3f5ce8 100644 --- a/kernel/ringbuffer.c +++ b/kernel/ringbuffer.c @@ -1,15 +1,14 @@ #include "ringbuffer.h" #include "kmalloc.h" #include "log.h" -#include "asm_x86.h" ringbuffer ringbuffer_init(uint32_t size) { ringbuffer f; f.data=kballoc(size); f.size=size*4096; - f.front=0; - f.back=0; + f.head=0; + f.tail=0; return f; } @@ -20,41 +19,51 @@ void ringbuffer_free(ringbuffer *f) bool ringbuffer_full(ringbuffer* f) { - return((f->back+1)%f->size==f->front); + return((f->tail+1)%f->size==f->head); +} + +bool ringbuffer_not_full(ringbuffer* f) +{ + return((f->tail+1)%f->size!=f->head); } bool ringbuffer_empty(ringbuffer* f) { - return(f->front==f->back); + return(f->head==f->tail); } bool ringbuffer_has(ringbuffer* f) { - return !ringbuffer_empty(f); + return(f->head!=f->tail); } bool ringbuffer_put(ringbuffer* f,uint8_t c) { if(ringbuffer_full(f)) { +#ifdef RINGBUFFER_WARN klog("ringbuffer is full!"); +#endif return false; } - f->data[f->back]=c; - f->back++; - f->back%=f->size; - + f->data[f->tail]=c; + f->tail=(f->tail+1)%f->size; return true; } uint8_t ringbuffer_get(ringbuffer* f) { - if(ringbuffer_empty(f))return 0; // indistinguishable from value 0 :( // TODO + if(ringbuffer_empty(f)) + { +#ifdef RINGBUFFER_WARN + klog("ringbuffer is empty!"); +#endif + return 0; // indistinguishable from byte value 0x00. + } - uint8_t c = f->data[f->front]; - f->front++; - f->front%=f->size; + uint8_t c = f->data[f->head]; + f->head=(f->head+1)%f->size; return c; } |
