46 lines
1.3 KiB
C
46 lines
1.3 KiB
C
//
|
|
// Created by epagris on 2023.11.22..
|
|
//
|
|
|
|
#ifndef ETHERLIB_TEST_BLOCKING_FIFO_H
|
|
#define ETHERLIB_TEST_BLOCKING_FIFO_H
|
|
|
|
#include <stdint.h>
|
|
#include <etherlib_options.h>
|
|
|
|
/**
|
|
* 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
|
|
} BlockingFifo;
|
|
|
|
/**
|
|
* Create new blocking FIFO.
|
|
* @param size size of the FIFO in bytes
|
|
* @return newly allocated FIFO
|
|
*/
|
|
BlockingFifo * eth_bfifo_new(uint32_t size);
|
|
|
|
void eth_bfifo_destroy(BlockingFifo * bfifo);
|
|
|
|
uint32_t eth_bfifo_get_used(const BlockingFifo * bfifo);
|
|
|
|
uint32_t eth_bfifo_get_free(const BlockingFifo * bfifo);
|
|
|
|
uint32_t eth_bfifo_push(BlockingFifo * bfifo, const uint8_t * data, uint32_t size);
|
|
|
|
uint32_t eth_bfifo_push_try(BlockingFifo * bfifo, const uint8_t * data, uint32_t size);
|
|
|
|
uint32_t eth_bfifo_peek(BlockingFifo * bfifo, uint8_t * dst, uint32_t size);
|
|
|
|
uint32_t eth_bfifo_pop(BlockingFifo *bfifo, uint8_t *dst, uint32_t size);
|
|
|
|
#endif //ETHERLIB_TEST_BLOCKING_FIFO_H
|