Dependencies:   mbed NetServicesMin

Committer:
fernya
Date:
Mon Jun 18 03:59:39 2012 +0000
Revision:
0:aa9ebbd3715f
Beta

Who changed what in which revision?

UserRevisionLine numberNew 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 }