Dependencies: mbed NetServicesMin
fifo.c@0:aa9ebbd3715f, 2012-06-18 (annotated)
- Committer:
- fernya
- Date:
- Mon Jun 18 03:59:39 2012 +0000
- Revision:
- 0:aa9ebbd3715f
Beta
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fernya | 0:aa9ebbd3715f | 1 | #include "fifo.h" |
fernya | 0:aa9ebbd3715f | 2 | |
fernya | 0:aa9ebbd3715f | 3 | fifo::fifo() |
fernya | 0:aa9ebbd3715f | 4 | { |
fernya | 0:aa9ebbd3715f | 5 | this->head = 0; |
fernya | 0:aa9ebbd3715f | 6 | this->tail = 0; |
fernya | 0:aa9ebbd3715f | 7 | memset(this->buffer,0,800); |
fernya | 0:aa9ebbd3715f | 8 | } |
fernya | 0:aa9ebbd3715f | 9 | |
fernya | 0:aa9ebbd3715f | 10 | uint32_t fifo::available() |
fernya | 0:aa9ebbd3715f | 11 | { |
fernya | 0:aa9ebbd3715f | 12 | return (FIFO_SIZE + this->head - this->tail) % FIFO_SIZE; |
fernya | 0:aa9ebbd3715f | 13 | } |
fernya | 0:aa9ebbd3715f | 14 | uint32_t fifo::free() |
fernya | 0:aa9ebbd3715f | 15 | { |
fernya | 0:aa9ebbd3715f | 16 | return (FIFO_SIZE - 1 - available()); |
fernya | 0:aa9ebbd3715f | 17 | } |
fernya | 0:aa9ebbd3715f | 18 | uint8_t fifo::put(FIFO_TYPE data) |
fernya | 0:aa9ebbd3715f | 19 | { |
fernya | 0:aa9ebbd3715f | 20 | uint32_t next; |
fernya | 0:aa9ebbd3715f | 21 | |
fernya | 0:aa9ebbd3715f | 22 | // check if FIFO has room |
fernya | 0:aa9ebbd3715f | 23 | next = (this->head + 1) % FIFO_SIZE; |
fernya | 0:aa9ebbd3715f | 24 | if (next == this->tail) |
fernya | 0:aa9ebbd3715f | 25 | { |
fernya | 0:aa9ebbd3715f | 26 | // full |
fernya | 0:aa9ebbd3715f | 27 | return 1; |
fernya | 0:aa9ebbd3715f | 28 | } |
fernya | 0:aa9ebbd3715f | 29 | |
fernya | 0:aa9ebbd3715f | 30 | this->buffer[this->head] = data; |
fernya | 0:aa9ebbd3715f | 31 | this->head = next; |
fernya | 0:aa9ebbd3715f | 32 | |
fernya | 0:aa9ebbd3715f | 33 | return 0; |
fernya | 0:aa9ebbd3715f | 34 | } |
fernya | 0:aa9ebbd3715f | 35 | uint8_t fifo::get(FIFO_TYPE* data) |
fernya | 0:aa9ebbd3715f | 36 | { |
fernya | 0:aa9ebbd3715f | 37 | uint32_t next; |
fernya | 0:aa9ebbd3715f | 38 | |
fernya | 0:aa9ebbd3715f | 39 | // check if FIFO has data |
fernya | 0:aa9ebbd3715f | 40 | if (this->head == this->tail) |
fernya | 0:aa9ebbd3715f | 41 | { |
fernya | 0:aa9ebbd3715f | 42 | return 1; // FIFO empty |
fernya | 0:aa9ebbd3715f | 43 | } |
fernya | 0:aa9ebbd3715f | 44 | |
fernya | 0:aa9ebbd3715f | 45 | next = (this->tail + 1) % FIFO_SIZE; |
fernya | 0:aa9ebbd3715f | 46 | |
fernya | 0:aa9ebbd3715f | 47 | *data = this->buffer[this->tail]; |
fernya | 0:aa9ebbd3715f | 48 | this->tail = next; |
fernya | 0:aa9ebbd3715f | 49 | |
fernya | 0:aa9ebbd3715f | 50 | return 0; |
fernya | 0:aa9ebbd3715f | 51 | } |