File: fifo.h

package info (click to toggle)
lwip 2.2.1%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,028 kB
  • sloc: ansic: 109,551; cs: 6,714; sh: 115; makefile: 112; perl: 81
file content (62 lines) | stat: -rw-r--r-- 1,784 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef FIFO_H
#define FIFO_H

#include "lwip/sys.h"

#ifdef __cplusplus
extern "C" {
#endif

/** 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 supposed to clear */
  						/* this flag prior to signaling the getSem semaphore */
} fifo_t;


/**
*   Get a character from fifo
*   Blocking call.
*	@param 	fifo 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 	fifo 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);

#ifdef __cplusplus
}
#endif

#endif