/*-------------------------------------------------------------*/ /*************************************************************** * A netwib_wait permits to wait for an event during a user * * defined duration. * ***************************************************************/ /*-------------------------------------------------------------*/ typedef struct netwib_wait netwib_wait; /*-------------------------------------------------------------*/ /* Name : netwib_wait_init Description : Initialize a netwib_wait : wait for an event decided by a function. Input parameter(s) : pfuncevent : memory address of the function which will be called to check for an event For each call, the first parameter ('infos') will be set with the optional parameter below. pfuncclose : optional parameter (can be NULL) which contain the function to call to free resources allocated by infos (when netwib_wait_close will be called) Input/output parameter(s) : infos : optional parameter (can be NULL) which will be used as the first parameter for *pfunc. This may be used to send information to *pfunc. Output parameter(s) : **ppwait : netwib_wait associated to function Normal return values : NETWIB_ERR_OK : ok */ typedef netwib_err (*netwib_wait_event_pf)(netwib_ptr infos, netwib_consttime *pabstime, netwib_bool *pevent); typedef netwib_err (*netwib_wait_close_pf)(netwib_ptr infos); netwib_err netwib_wait_init(netwib_wait_event_pf pfuncevent, netwib_ptr infos, netwib_wait_close_pf pfuncclose, netwib_wait **ppwait); /*-------------------------------------------------------------*/ /* Name : netwib_wait_close Description : Close a netwib_wait. Input parameter(s) : Input/output parameter(s) : **ppwait : netwib_wait to close Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_wait_close(netwib_wait **ppwait); /*-------------------------------------------------------------*/ /* Name : netwib_wait_init_io Description : Initialize a netwib_wait : wait for data from the netwib_io. Input parameter(s) : *pio : netwib_io where to wait for data Input/output parameter(s) : Output parameter(s) : **ppwait : netwib_wait associated to *pio Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_wait_init_io(netwib_io *pio, netwib_io_waytype way, netwib_wait **ppwait); /* netwib_err f(netwib_io *pio, netwib_wait **ppwait); */ #define netwib_wait_init_io_read(pio,ppwait) netwib_wait_init_io(pio,NETWIB_IO_WAYTYPE_READ,ppwait) #define netwib_wait_init_io_write(pio,ppwait) netwib_wait_init_io(pio,NETWIB_IO_WAYTYPE_WRITE,ppwait) #define netwib_wait_init_io_rdwr(pio,ppwait) netwib_wait_init_io(pio,NETWIB_IO_WAYTYPE_RDWR,ppwait) /*-------------------------------------------------------------*/ /* Name : netwib_wait_init_thread_end Description : Initialize a netwib_wait : wait for the end of a thread. Input parameter(s) : *pthread : thread to wait for Input/output parameter(s) : preturnederror : address of a variable which will contain returned error pinfosout : address of a variable which will contain output information Output parameter(s) : *ppwait : netwib_wait associated to *pthread Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_wait_init_thread_end(netwib_thread *pthread, netwib_err *preturnederror, netwib_ptr *pinfosout, netwib_wait **ppwait); /*-------------------------------------------------------------*/ /* Name : netwib_wait_init_thread_cond Description : Initialize a netwib_wait : wait for a condition Input parameter(s) : *pcond : condition to wait for Input/output parameter(s) : *pvalue : address of a variable which will contain condition value Output parameter(s) : *ppwait : netwib_wait associated to *pcond Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_wait_init_thread_cond(netwib_thread_cond *pcond, netwib_uint32 *pvalue, netwib_wait **ppwait); /*-------------------------------------------------------------*/ /* Name : netwib_wait_wait1 Description : Wait for 1 event. Input parameter(s) : *pwait : netwib_wait to wait for *pabstime : end time Input/output parameter(s) : Output parameter(s) : *pevent : an event occurred on *pwait. If *pabstime is reached *pevent is set to NETWIB_FALSE. Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_wait_wait1(netwib_wait *pwait, netwib_consttime *pabstime, netwib_bool *pevent); /*-------------------------------------------------------------*/ /* Name : netwib_wait_wait5 Description : Wait for 1 event amongst 5 netwib_wait. Input parameter(s) : *pwait1..5 : netwib_wait to wait for *pabstime : end time Input/output parameter(s) : Output parameter(s) : *pevent1..5 : an event occurred on *pwait1..5 If abstime is reached *pevent is set to NETWIB_FALSE. Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_wait_wait5(netwib_wait *pwait1, netwib_wait *pwait2, netwib_wait *pwait3, netwib_wait *pwait4, netwib_wait *pwait5, netwib_consttime *pabstime, netwib_bool *pevent1, netwib_bool *pevent2, netwib_bool *pevent3, netwib_bool *pevent4, netwib_bool *pevent5); #define netwib_wait_wait4(pwait1,pwait2,pwait3,pwait4,pabstime,pevent1,pevent2,pevent3,pevent4) netwib_wait_wait5(pwait1,pwait2,pwait3,pwait4,NULL,pabstime,pevent1,pevent2,pevent3,pevent4,NULL) #define netwib_wait_wait3(pwait1,pwait2,pwait3,pabstime,pevent1,pevent2,pevent3) netwib_wait_wait5(pwait1,pwait2,pwait3,NULL,NULL,pabstime,pevent1,pevent2,pevent3,NULL,NULL) #define netwib_wait_wait2(pwait1,pwait2,pabstime,pevent1,pevent2) netwib_wait_wait5(pwait1,pwait2,NULL,NULL,NULL,pabstime,pevent1,pevent2,NULL,NULL,NULL)