| | |
| | | |
| | | #include "fifo_private.h" |
| | | |
| | | /** |
| | | * Initialize fifo |
| | | * @param fifo |
| | | */ |
| | | void fifo_init(scpi_fifo_t * fifo) { |
| | | fifo->wr = 0; |
| | | fifo->rd = 0; |
| | | fifo->size = FIFO_SIZE; |
| | | } |
| | | |
| | | /** |
| | | * Empty fifo |
| | | * @param fifo |
| | | */ |
| | | void fifo_clear(scpi_fifo_t * fifo) { |
| | | fifo->wr = 0; |
| | | fifo->rd = 0; |
| | | } |
| | | |
| | | /** |
| | | * Add element to fifo. If fifo is full, remove last element. |
| | | * @param fifo |
| | | * @param value |
| | | * @return |
| | | */ |
| | | scpi_bool_t fifo_add(scpi_fifo_t * fifo, int16_t value) { |
| | | /* FIFO full? */ |
| | | if (fifo->wr == ((fifo->rd + fifo->size) % (fifo->size + 1))) { |
| | |
| | | return TRUE; |
| | | } |
| | | |
| | | /** |
| | | * Remove element form fifo |
| | | * @param fifo |
| | | * @param value |
| | | * @return FALSE - fifo is empty |
| | | */ |
| | | scpi_bool_t fifo_remove(scpi_fifo_t * fifo, int16_t * value) { |
| | | /* FIFO empty? */ |
| | | if (fifo->wr == fifo->rd) { |
| | |
| | | return TRUE; |
| | | } |
| | | |
| | | /** |
| | | * Retrive number of elements in fifo |
| | | * @param fifo |
| | | * @param value |
| | | * @return |
| | | */ |
| | | scpi_bool_t fifo_count(scpi_fifo_t * fifo, int16_t * value) { |
| | | *value = fifo->wr - fifo->rd; |
| | | if (*value < 0) { |