| | |
| | | void fifo_init(scpi_fifo_t * fifo, int16_t * data, int16_t size) { |
| | | fifo->wr = 0; |
| | | fifo->rd = 0; |
| | | fifo->count = 0; |
| | | fifo->data = data; |
| | | fifo->size = size; |
| | | } |
| | |
| | | void fifo_clear(scpi_fifo_t * fifo) { |
| | | fifo->wr = 0; |
| | | fifo->rd = 0; |
| | | fifo->count = 0; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return |
| | | */ |
| | | scpi_bool_t fifo_is_empty(scpi_fifo_t * fifo) { |
| | | return fifo->wr == fifo->rd; |
| | | return fifo->count == 0; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return |
| | | */ |
| | | scpi_bool_t fifo_is_full(scpi_fifo_t * fifo) { |
| | | return fifo->wr == ((fifo->rd + fifo->size - 1) % (fifo->size)); |
| | | return fifo->count == fifo->size; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | fifo->data[fifo->wr] = value; |
| | | fifo->wr = (fifo->wr + 1) % (fifo->size); |
| | | |
| | | fifo->count += 1; |
| | | return TRUE; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | fifo->rd = (fifo->rd + 1) % (fifo->size); |
| | | fifo->count -= 1; |
| | | |
| | | return TRUE; |
| | | } |
| | |
| | | if (value) { |
| | | *value = fifo->data[fifo->wr]; |
| | | } |
| | | fifo->count -= 1; |
| | | |
| | | return TRUE; |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | scpi_bool_t fifo_count(scpi_fifo_t * fifo, int16_t * value) { |
| | | *value = fifo->wr - fifo->rd; |
| | | if (*value < 0) { |
| | | *value += (fifo->size); |
| | | } |
| | | *value = fifo->count; |
| | | return TRUE; |
| | | } |