-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFifoBuffer.h
70 lines (62 loc) · 1.18 KB
/
FifoBuffer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef FifoBuffer_h
#define FifoBuffer_h
#define FIFO_BUFFER_SIZE 36
class FifoBuffer {
private:
byte _data[FIFO_BUFFER_SIZE];
byte _first = 0;
public:
byte count = 0;
bool isFull() { return (count == FIFO_BUFFER_SIZE); }
bool push(byte value);
bool peek(byte *value);
bool pop(byte *value);
void clear();
void dump();
};
bool FifoBuffer::push(byte value) {
if (count < FIFO_BUFFER_SIZE) {
count++;
byte i = _first + count - 1;
if (i >= FIFO_BUFFER_SIZE) i -= FIFO_BUFFER_SIZE;
_data[i] = value;
return true;
} else {
return false;
}
}
bool FifoBuffer::peek(byte *value) {
if (count > 0) {
*value = _data[_first];
return true;
} else {
return false;
}
}
bool FifoBuffer::pop(byte *value) {
if (count > 0) {
*value = _data[_first];
_first++;
if (_first == FIFO_BUFFER_SIZE) _first = 0;
count--;
return true;
} else {
return false;
}
}
void FifoBuffer::clear() {
_first = 0;
count = 0;
}
void FifoBuffer::dump() {
byte b,i,c;
c = count;
for (i=0;i<c;i++) {
pop(&b);
push(b);
Serial.print(b,HEX);
Serial.print(" ");
}
Serial.println("");
}
#endif