summaryrefslogtreecommitdiff
path: root/kernel/fifo.c
blob: 8062c829eae906b3e5deadea1bb71f6fb66aa878 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#define FOOLOS_MODULE_NAME "fifo"
#include "fifo.h"

#include "ringbuffer.h"
#include "kernel.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);
}

uint8_t fifo_get(fifo* f)
{
    return f->get(f->data);
}

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];
    ringbuffer_c++;
    f.put=ringbuffer_put;
    f.get=ringbuffer_get;
    f.has=ringbuffer_has;
    return f;
}