diff options
Diffstat (limited to 'kernel/fifo.c')
| -rw-r--r-- | kernel/fifo.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/kernel/fifo.c b/kernel/fifo.c index 314e9ff..eb477be 100644 --- a/kernel/fifo.c +++ b/kernel/fifo.c @@ -1,11 +1,21 @@ +#define FOOLOS_MODULE_NAME "fifo" #include "fifo.h" +#include "ringbuffer.h" +#include "config.h" +#include "lib/logger/log.h" + +#include <stddef.h> + +static ringbuffer fifo_ringbuffers[FIFO_MAX_RINGBUFFERS]; +static ringbuffer_c=0; + bool fifo_put(fifo* f,uint8_t c) { return f->put(f->data,c); } -volatile uint8_t fifo_get(fifo* f) +uint8_t fifo_get(fifo* f) { return f->get(f->data); } @@ -14,3 +24,16 @@ bool fifo_has(fifo* f) { return f->has(f->data); } + +fifo fifo_create_buffered(uint8_t size) +{ + if (ringbuffer_c>=FIFO_MAX_RINGBUFFERS) panic(FOOLOS_MODULE_NAME,"ran out of ringbuffers for fifos"); + + fifo f; + fifo_ringbuffers[ringbuffer_c]=ringbuffer_init(size); + f.data=&fifo_ringbuffers[ringbuffer_c]; + f.put=ringbuffer_put; + f.get=ringbuffer_get; + f.has=ringbuffer_has; + return f; +} |
