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