mirror of
https://github.com/ep00ch/lwip-contrib-mac.git
synced 2024-09-19 19:59:12 +00:00
55 lines
1.6 KiB
C
55 lines
1.6 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
|
||
|
|