mirror of
https://github.com/ep00ch/lwip-contrib-mac.git
synced 2024-11-06 04:05:03 +00:00
55 lines
1.7 KiB
C
55 lines
1.7 KiB
C
#ifndef FIFO_H
|
|
#define FIFO_H
|
|
|
|
#include "lwip/sys.h"
|
|
|
|
/** How many bytes in fifo */
|
|
#define FIFOSIZE 2048
|
|
|
|
/** fifo data structure, this one is passed to all fifo functions */
|
|
typedef struct fifo_t {
|
|
u8_t data[FIFOSIZE+10]; /* data segment, +10 is a hack probably not needed.. FIXME! */
|
|
int dataslot; /* index to next char to be read */
|
|
int emptyslot; /* index to next empty slot */
|
|
int len; /* len probably not needed, may be calculated from dataslot and emptyslot in conjunction with FIFOSIZE */
|
|
|
|
sys_sem_t sem; /* semaphore protecting simultaneous data manipulation */
|
|
sys_sem_t getSem; /* sepaphore used to signal new data if getWaiting is set */
|
|
u8_t getWaiting; /* flag used to indicate that fifoget is waiting for data. fifoput is suposed to clear */
|
|
/* this flag prior to signaling the getSem semaphore */
|
|
} fifo_t;
|
|
|
|
|
|
/**
|
|
* Get a character from fifo
|
|
* Blocking call.
|
|
* @param pointer to fifo data structure
|
|
* @return character read from fifo
|
|
*/
|
|
u8_t fifoGet(fifo_t * fifo);
|
|
|
|
/**
|
|
* Get a character from fifo
|
|
* Non blocking call.
|
|
* @param pointer to fifo data structure
|
|
* @return character read from fifo, or < zero if non was available
|
|
*/
|
|
s16_t fifoGetNonBlock(fifo_t * fifo);
|
|
|
|
/**
|
|
* fifoput is called by the signalhandler when new data has arrived (or some other event is indicated)
|
|
* fifoput reads directly from the serialport and is thus highly dependent on unix arch at this moment
|
|
* @param fifo pointer to fifo data structure
|
|
* @param fd unix file descriptor
|
|
*/
|
|
void fifoPut(fifo_t * fifo, int fd);
|
|
|
|
/**
|
|
* fifoinit initiate fifo
|
|
* @param fifo pointer to fifo data structure, allocated by the user
|
|
*/
|
|
void fifoInit(fifo_t * fifo);
|
|
|
|
#endif
|
|
|