diff --git a/k/Makefile b/k/Makefile index b804bfd..e36d9fc 100644 --- a/k/Makefile +++ b/k/Makefile @@ -35,7 +35,8 @@ OBJS = \ idt.o \ isr.o \ pic.o \ - pic/keyboard.o + pic/keyboard.o \ + utils/ring_buffer.o DEPS = $(OBJS:.o=.d) diff --git a/k/utils/ring_buffer.c b/k/utils/ring_buffer.c new file mode 100644 index 0000000..7120ac3 --- /dev/null +++ b/k/utils/ring_buffer.c @@ -0,0 +1,18 @@ +#include "ring_buffer.h" + +uint8_t read_entry(struct ring_buffer *buf) +{ + if (buf->read >= buf->write) + return 0; + + uint8_t data = buf->buffer[buf->read]; + buf->read = (buf->read + 1) % RING_BUFFER_SIZE; + + return data; +} + +void write_entry(struct ring_buffer *buf, uint8_t entry) +{ + buf->buffer[buf->write] = entry; + buf->write = (buf->write + 1) % RING_BUFFER_SIZE; +} diff --git a/k/utils/ring_buffer.h b/k/utils/ring_buffer.h new file mode 100644 index 0000000..6580e15 --- /dev/null +++ b/k/utils/ring_buffer.h @@ -0,0 +1,18 @@ +#ifndef RING_BUFFER_H +#define RING_BUFFER_H + +#define RING_BUFFER_SIZE 32 + +#include + +struct ring_buffer +{ + uint8_t buffer[RING_BUFFER_SIZE]; + uint8_t read; + uint8_t write; +}; + +uint8_t read_entry(struct ring_buffer *buf); +void write_entry(struct ring_buffer *buf, uint8_t entry); + +#endif /* !RING_BUFFER_H */