summaryrefslogtreecommitdiff
path: root/kernel/fifo.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fifo.c')
-rw-r--r--kernel/fifo.c25
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;
+}