AMU Library 3.0
C/C++ library for communicating with AMU (Aerospace Measurement Unit) devices
Loading...
Searching...
No Matches
fifo.c
Go to the documentation of this file.
1
2#include "fifo_private.h"
3
8void fifo_init(scpi_fifo_t * fifo, scpi_error_t * data, int16_t size) {
9 fifo->wr = 0;
10 fifo->rd = 0;
11 fifo->count = 0;
12 fifo->data = data;
13 fifo->size = size;
14}
15
20void fifo_clear(scpi_fifo_t * fifo) {
21 fifo->wr = 0;
22 fifo->rd = 0;
23 fifo->count = 0;
24}
25
31scpi_bool_t fifo_is_empty(scpi_fifo_t * fifo) {
32 return fifo->count == 0;
33}
34
40scpi_bool_t fifo_is_full(scpi_fifo_t * fifo) {
41 return fifo->count == fifo->size;
42}
43
51scpi_bool_t fifo_add(scpi_fifo_t * fifo, const scpi_error_t * value) {
52 /* FIFO full? */
53 if (fifo_is_full(fifo)) {
54 return FALSE;
55 }
56 if (!value) {
57 return FALSE;
58 }
59
60 fifo->data[fifo->wr] = *value;
61 fifo->wr = (fifo->wr + 1) % (fifo->size);
62 fifo->count += 1;
63 return TRUE;
64}
65
72scpi_bool_t fifo_remove(scpi_fifo_t * fifo, scpi_error_t * value) {
73 /* FIFO empty? */
74 if (fifo_is_empty(fifo)) {
75 return FALSE;
76 }
77
78 if (value) {
79 *value = fifo->data[fifo->rd];
80 }
81
82 fifo->rd = (fifo->rd + 1) % (fifo->size);
83 fifo->count -= 1;
84
85 return TRUE;
86}
87
94scpi_bool_t fifo_remove_last(scpi_fifo_t * fifo, scpi_error_t * value) {
95 /* FIFO empty? */
96 if (fifo_is_empty(fifo)) {
97 return FALSE;
98 }
99
100 fifo->wr = (fifo->wr + fifo->size - 1) % (fifo->size);
101
102 if (value) {
103 *value = fifo->data[fifo->wr];
104 }
105 fifo->count -= 1;
106
107 return TRUE;
108}
109
116scpi_bool_t fifo_count(scpi_fifo_t * fifo, int16_t * value) {
117 *value = fifo->count;
118 return TRUE;
119}
scpi_bool_t fifo_remove_last(scpi_fifo_t *fifo, scpi_error_t *value)
Definition fifo.c:94
scpi_bool_t fifo_is_empty(scpi_fifo_t *fifo)
Definition fifo.c:31
scpi_bool_t fifo_remove(scpi_fifo_t *fifo, scpi_error_t *value)
Definition fifo.c:72
scpi_bool_t fifo_is_full(scpi_fifo_t *fifo)
Definition fifo.c:40
scpi_bool_t fifo_add(scpi_fifo_t *fifo, const scpi_error_t *value)
Definition fifo.c:51
scpi_bool_t fifo_count(scpi_fifo_t *fifo, int16_t *value)
Definition fifo.c:116
void fifo_init(scpi_fifo_t *fifo, scpi_error_t *data, int16_t size)
Definition fifo.c:8
void fifo_clear(scpi_fifo_t *fifo)
Definition fifo.c:20
bool scpi_bool_t
Definition types.h:67
#define TRUE
Definition types.h:63
#define FALSE
Definition types.h:60