#ifndef FIFO_H #define FIFO_H #include <zeta.h> #define FIFO_LEN 32 struct fifo { u8 head; u8 tail; u8 data[FIFO_LEN]; }; static inline u8 fifo_pop(struct fifo *fifo) { u8 ret = fifo->data[fifo->head]; if (++fifo->head >= LENGTH(fifo->data)) fifo->head = 0; return ret; } static inline void fifo_push(struct fifo *fifo, u8 v) { fifo->data[fifo->tail] = v; if (++fifo->tail >= LENGTH(fifo->data)) fifo->tail = 0; } static inline bool fifo_empty(const struct fifo *fifo) { return (fifo->head == fifo->tail); } static inline void fifo_clear(struct fifo *fifo) { fifo->head = 0; fifo->tail = 0; } #endif // FIFO_H