// $Id$ //----------------------------------------------------------------------- // The GSI Online Offline Object Oriented (Go4) Project // Experiment Data Processing at EE department, GSI //----------------------------------------------------------------------- // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH // Planckstr. 1, 64291 Darmstadt, Germany // Contact: http://go4.gsi.de //----------------------------------------------------------------------- // This software can be used under the license agreements as stated // in Go4License.txt file which is part of the distribution. //----------------------------------------------------------------------- #ifndef F_EVT_H #define F_EVT_H #include "typedefs.h" /* ++++++++++++++++ include UNIX standard headers +++++++++++++++++++++++++ */ #include "s_ve10_1.h" #include "s_ves10_1.h" #include "s_evhe.h" #include "s_bufhe.h" #define MAX_BUF_LGTH 32768 #define MIN_BUF_LGTH 512 #define MAX_BUFS_IN_STREAM 100 /* at a maximum, 100 buffers per stream */ #define MAX_LONG 99999999 /* maximum long data */ typedef struct { INTS4 l_endian; INTS4 l_version; INTS4 l_bufsize; INTS4 l_buffers; INTS4 l_events; INTS4 l_filesize; INTS4 l_first; INTS4 l_last; INTS4 l_linear; } s_taghe; typedef struct { INTS4 l_event; INTS4 l_offset; } s_tag; struct sLmdControl; typedef struct { INTS4 l_server_type; /* number specifying input source */ INTS4 l_buf_type; /* buffer type number */ INTS4 l_buf_subtype; /* buffer subtype number */ INTS4 l_channel_no; /* file descripter or server No. */ INTS4 l_buf_size; /* buffer size */ INTS4 l_buf_no; INTS4 l_buf_posi; INTS4 l_buf_lmt; INTS4 l_bufs_in_stream; /* # of buffers per stream */ INTS4 l_stream_bufs; INTS4 l_io_buf_size; /* I/O buffer size=l_buf_size*l_bufs_in_stream */ INTS4 l_io_buf_posi; INTS4 l_evt_buf_size; /* internal buffer size */ INTS4 l_evt_buf_posi; INTS4 l_evt_size; INTS4 l_timeout; /* -1 (default) no timeout */ INTS4 l_events; /* events since open */ INTS4 l_buffers; /* buffers since open */ INTS4 l_kbytes; /* kbytes since open */ INTS4 l_first_get; INTS4 l_first_put; INTS4 l_first_buf; INTS4 l_frag_len; CHARS *pc_io_buf; /* pointer to I/O buffer to server */ CHARS *pc_evt_buf; /* pointer to internal event buffer */ s_bufhe *ps_bufhe; s_bufhe s_bufhe_1; /* keep buffer header of 1st buffer for spanned event */ s_ve10_1 *ps_ve10_1; CHARS c_channel[128]; /* channel name */ INTS4 l_tagfile_no; /* file descripter or server No. */ INTS4 l_tagswap; INTS4 l_lmdswap; s_taghe *ps_taghe; s_tag *ps_tag; sLmdControl *pLmd; void (*cb_polling)(void); /* function to call when polling for timeout */ } s_evt_channel; INTS4 f_evt_cre_tagfile(CHARS *,CHARS *, INTS4 (*)(s_ve10_1 *)); INTS4 f_evt_get_tagopen(s_evt_channel *,CHARS *,CHARS *,CHARS **,INTS4); INTS4 f_evt_get_tagevent(s_evt_channel *,INTS4,INTS4,INTS4 **); INTS4 f_evt_get_tagnext(s_evt_channel *,INTS4,INTS4 **); INTS4 f_evt_get_tagclose(s_evt_channel *); INTS4 f_evt_get_open(INTS4, CHARS *, s_evt_channel *, CHARS **, INTS4, INTS4); INTS4 f_evt_get_event(s_evt_channel *, INTS4 **, INTS4 **); INTS4 f_evt_get_subevent(s_ve10_1 *,INTS4,INTS4 **,INTS4 **,INTS4 *); INTS4 f_evt_get_buffer(s_evt_channel *, INTS4 *); INTS4 f_evt_get_close(s_evt_channel *); CHARS * f_evt_get_buffer_ptr(s_evt_channel *); INTS4 f_evt_skip_buffer(s_evt_channel *, INTS4); INTS4 f_evt_put_open(CHARS *,INTS4,INTS4,INTS4,INTS4,s_evt_channel *,CHARS *); INTS4 f_evt_put_event(s_evt_channel *, INTS4 *); INTS4 f_evt_put_buffer(s_evt_channel *, s_bufhe *); INTS4 f_evt_put_close(s_evt_channel *); INTS4 f_evt_type(s_bufhe *,s_evhe *,INTS4,INTS4,INTS4,INTS4); INTS4 f_evt_error( INTS4 , CHARS * , INTS4 ); INTS4 f_evt_timeout(s_evt_channel *, INTS4 ); INTS4 f_evt_source_port(INTS4 l_port); INTS4 f_evt_rev_port(INTS4); /* obsolete */ INTS4 f_evt_swap(CHARS *, INTS4); s_evt_channel * f_evt_control(void); /* ******************************/ /* Input selector */ /* ******************************/ #define GETEVT__FILE 1 #define GETEVT__STREAM 2 #define GETEVT__TRANS 3 #define GETEVT__EVENT 4 #define GETEVT__REVSERV 5 #define GETEVT__RFIO 6 #define GETEVT__TAGINDEX 10 #define GETEVT__TAGNUMBER 11 /* ********************************************************************** */ /* error messages */ /* ********************************************************************** */ #define GETEVT__SUCCESS 0 #define GETEVT__FAILURE 1 #define GETEVT__FRAGMENT 2 #define GETEVT__NOMORE 3 #define GETEVT__NOFILE 4 #define GETEVT__NOSERVER 5 #define GETEVT__RDERR 6 #define GETEVT__CLOSE_ERR 7 #define GETEVT__NOCHANNEL 8 #define GETEVT__TIMEOUT 9 #define GETEVT__NOTAGFILE 10 #define GETEVT__NOTAG 11 #define GETEVT__TAGRDERR 12 #define GETEVT__TAGWRERR 13 #define GETEVT__NOLMDFILE 14 #define PUTEVT__SUCCESS 0 #define PUTEVT__FILE_EXIST 101 #define PUTEVT__FAILURE 102 #define PUTEVT__TOOBIG 103 #define PUTEVT__TOO_SMALLS 104 #define PUTEVT__CLOSE_ERR 105 #define PUTEVT__WRERR 106 #define PUTEVT__NOCHANNEL 107 #endif /***************** End f_evt.h ******************************/