https://github.com/j123b567/scpi-parser
Dependents: scpi_sx127x scpi_sx127x_firstTest MLX90418_I2C_master
src/fifo.c
- Committer:
- dudmuck
- Date:
- 2015-08-07
- Revision:
- 1:b497f235115a
- Parent:
- 0:aad43948c45c
File content as of revision 1:b497f235115a:
#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))) { fifo_remove(fifo, NULL); } fifo->data[fifo->wr] = value; fifo->wr = (fifo->wr + 1) % (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 FALSE; } if(value) { *value = fifo->data[fifo->rd]; } fifo->rd = (fifo->rd + 1) % (fifo->size + 1); 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) { *value += (fifo->size + 1); } return TRUE; }