/** @file fifo_buffered.h @brief fifo implementation for buffered access */ #ifndef INC_FIFO_BUFFERED_H #define INC_FIFO_BUFFERED_H #include #include #include typedef size_t fifo_size_t; typedef struct { volatile fifo_size_t in; // in index, modified on write volatile fifo_size_t out; // out index, modified on read volatile fifo_size_t locked_size; // out index, modified on read_locked fifo_size_t top; // topmost value of index uint8_t *data; // pointer to data } fifo_t; extern void fifo_init(fifo_t *ctx, uint8_t *data, fifo_size_t top); extern bool fifo_isempty(fifo_t *ctx); extern void fifo_clear(fifo_t *ctx); extern bool fifo_islocked(fifo_t *ctx); extern fifo_size_t fifo_write(fifo_t *ctx, uint8_t data); extern fifo_size_t fifo_write_buf(fifo_t *ctx, const uint8_t *data, fifo_size_t len); extern fifo_size_t fifo_read(fifo_t *ctx, uint8_t *data); extern fifo_size_t fifo_read_locked(fifo_t *ctx, uint8_t **data); extern fifo_size_t fifo_read_unlock(fifo_t *ctx); extern fifo_size_t fifo_size(fifo_t *ctx); extern fifo_size_t fifo_capacity(fifo_t *ctx); #endif // #ifndef INC_FIFO_BUFFERED_H