[457] | 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 suposed 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 |
|
---|