// // Created by epagris on 2023.11.22.. // #ifndef ETHERLIB_TEST_BLOCKING_FIFO_H #define ETHERLIB_TEST_BLOCKING_FIFO_H #include #include /** * Blocking FIFO */ typedef struct { uint32_t readIdx; ///< Read index uint32_t absReadIdx; ///< Absolute read index uint32_t writeIdx; ///< Write index uint32_t absWriteIdx; ///< Absolute write index uint32_t size; ///< Size of the storage area ETHLIB_OS_SEM_TYPE notFull, nonEmpty; ///< Semaphore, protecting read and write operations uint8_t data[]; ///< Window data storage } EthBlockingFifo; /** * Create new blocking FIFO. * @param size size of the FIFO in bytes * @return newly allocated FIFO */ EthBlockingFifo * eth_bfifo_new(uint32_t size); void eth_bfifo_destroy(EthBlockingFifo * bfifo); uint32_t eth_bfifo_get_used(const EthBlockingFifo * bfifo); uint32_t eth_bfifo_get_free(const EthBlockingFifo * bfifo); uint32_t eth_bfifo_push(EthBlockingFifo * bfifo, const uint8_t * data, uint32_t size); uint32_t eth_bfifo_push_try(EthBlockingFifo * bfifo, const uint8_t * data, uint32_t size); uint32_t eth_bfifo_peek(EthBlockingFifo * bfifo, uint8_t * dst, uint32_t size); uint32_t eth_bfifo_pop(EthBlockingFifo *bfifo, uint8_t *dst, uint32_t size); #endif //ETHERLIB_TEST_BLOCKING_FIFO_H