diff options
Diffstat (limited to 'kernel/ringbuffer.c')
| -rw-r--r-- | kernel/ringbuffer.c | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/kernel/ringbuffer.c b/kernel/ringbuffer.c index 43d0e33..3886340 100644 --- a/kernel/ringbuffer.c +++ b/kernel/ringbuffer.c @@ -16,48 +16,58 @@ void ringbuffer_free(ringbuffer *f) kbfree(f->data); } -bool ringbuffer_put(ringbuffer* f,uint8_t c) +bool ringbuffer_full(ringbuffer* f) { - if(ringbuffer_full(f))return false; - - f->data[f->back]=c; - f->back--; - f->back+=f->size; - f->back%=f->size; - return true; + if((f->back-1+f->size)%f->size==f->front)return true; + return false; } -bool ringbuffer_full(ringbuffer* f) +bool ringbuffer_empty(ringbuffer* f) { - if((f->back-1+f->size)%f->size==f->front) - { - return true; - } + if(f->front==f->back)return true; return false; } bool ringbuffer_has(ringbuffer* f) { - bool res=true; + return !ringbuffer_empty(f); +} + +// + +bool ringbuffer_put(ringbuffer* f,uint8_t c) +{ + if(ringbuffer_full(f))return false; + + f->data[f->back]=c; + f->back--; + f->back+=f->size; + f->back%=f->size; - if(f->front==f->back) - res=false; - return res; + return true; } uint8_t ringbuffer_get(ringbuffer* f) { - char c; - - if(f->front==f->back) - { - return 0; - } + if(ringbuffer_empty(f))return 0; // indistinguishable from value 0 :( // TODO - c=f->data[f->front]; + uint8_t c = f->data[f->front]; f->front--; f->front+=f->size; f->front%=f->size; + return c; } + +// TODO // + +uint32_t ringbuffer_write(ringbuffer* f, uint8_t *buf, uint32_t size) +{ + return 0; +} + +uint32_t ringbuffer_read(ringbuffer* f, uint8_t *buf, uint32_t size) +{ + return 0; +} |
