1 #ifndef FIFO_H 2 #define FIFO_H 3 4 #include "lwip/sys.h" 5 6 /** How many bytes in fifo */ 7 #define FIFOSIZE 2048 8 9 /** fifo data structure, this one is passed to all fifo functions */ 10 typedef struct fifo_t { 11 u8_t data[FIFOSIZE+10]; /* data segment, +10 is a hack probably not needed.. FIXME! */ 12 int dataslot; /* index to next char to be read */ 13 int emptyslot; /* index to next empty slot */ 14 int len; /* len probably not needed, may be calculated from dataslot and emptyslot in conjunction with FIFOSIZE */ 15 16 sys_sem_t sem; /* semaphore protecting simultaneous data manipulation */ 17 sys_sem_t getSem; /* sepaphore used to signal new data if getWaiting is set */ 18 u8_t getWaiting; /* flag used to indicate that fifoget is waiting for data. fifoput is supposed to clear */ 19 /* this flag prior to signaling the getSem semaphore */ 20 } fifo_t; 21 22 23 /** 24 * Get a character from fifo 25 * Blocking call. 26 * @param fifo pointer to fifo data structure 27 * @return character read from fifo 28 */ 29 u8_t fifoGet(fifo_t * fifo); 30 31 /** 32 * Get a character from fifo 33 * Non blocking call. 34 * @param fifo pointer to fifo data structure 35 * @return character read from fifo, or < zero if non was available 36 */ 37 s16_t fifoGetNonBlock(fifo_t * fifo); 38 39 /** 40 * fifoput is called by the signalhandler when new data has arrived (or some other event is indicated) 41 * fifoput reads directly from the serialport and is thus highly dependent on unix arch at this moment 42 * @param fifo pointer to fifo data structure 43 * @param fd unix file descriptor 44 */ 45 void fifoPut(fifo_t * fifo, int fd); 46 47 /** 48 * fifoinit initiate fifo 49 * @param fifo pointer to fifo data structure, allocated by the user 50 */ 51 void fifoInit(fifo_t * fifo); 52 53 #endif 54 55