
- Refactored site specific stuff into a site module - PSI specific stuff is now in the PSI directory. - The old version has been tagged with pre-ansto
352 lines
12 KiB
C
Executable File
352 lines
12 KiB
C
Executable File
/*======================================= [...SinqHM]SinqHM_gbl.h - Ident V01N
|
|
**
|
|
** Include file of Gbl Variables for SinqHM_srv and its children.
|
|
*/
|
|
|
|
#ifndef uint
|
|
#define uint unsigned int
|
|
#endif
|
|
|
|
#ifndef usint
|
|
#define usint unsigned short int
|
|
#endif
|
|
|
|
#ifndef uchar
|
|
#define uchar unsigned char
|
|
#endif
|
|
/*
|
|
**==================== Global Variables ======================================
|
|
** Note:
|
|
** On VxWorks, all these global variables are visible by all tasks.
|
|
** Any changes to them should therefore only be done if protected
|
|
** by a semaphore.
|
|
**
|
|
** At present, only the parent process changes these variables in a
|
|
** 'significant' way (I don't count updating diagnostic counters such
|
|
** as Rw_bytes_got!).
|
|
*/
|
|
int My_errno;
|
|
int Cnt_SIGUSR1;
|
|
char Inet_host[32];
|
|
char Inet_addr[20];
|
|
|
|
int Dbg_mask; /* This is the log'l or of Dbg_lev0, etc */
|
|
int Dbg_lev0, Dbg_lev1, Dbg_lev2, Dbg_lev3;
|
|
|
|
int Cfgn_done; /* == 0 if SinqHM_srv not configured */
|
|
/*
|
|
** The buffer for holding Hist Mem data is pointed to
|
|
** by Hist_base_addr.
|
|
*/
|
|
void *Hist_base_addr;
|
|
/*
|
|
** The MEN board has a divided memory architecture: below 32 MB everything
|
|
** is normal. The area above has to be allocated in a separate memory
|
|
** partition with the partition number stored in sysHighMemPart. This
|
|
** now is a flag which determines if Hist_base_addr has been allocated in
|
|
** such a way in order to be able to free it properly again.
|
|
**/
|
|
int Hist_base_MEN_alloc;
|
|
|
|
/*
|
|
** The buffer for holding a frame of data for CERCA type
|
|
** interfaces (e.g. HRPT) is pointed to by Frame_base_addr.
|
|
*/
|
|
void *Frame_base_addr;
|
|
|
|
uint Hm_mode_ALL; /* The "total" mode of the histogram memory */
|
|
uint Hm_mode; /* The basic mode of the histogram memory */
|
|
uint Hm_mode_DEBUG; /* The SQHM__DEBUG bit of Hm_mode_ALL */
|
|
uint Hm_mode_UD; /* The SQHM__UD bit of Hm_mode_ALL */
|
|
uint Hm_mode_BO; /* The SQHM__BO bits of Hm_mode_ALL */
|
|
uint Hm_mode_STROBO; /* The SQHM__STROBO bit of Hm_mode_ALL */
|
|
uint Hm_mode_REFLECT; /* The SQHM__REFLECT bit of Hm_mode_ALL */
|
|
uint Hm_mode_NO_STAT; /* The SQHM__NO_STAT bit of Hm_mode_ALL */
|
|
|
|
uint N_hists; /* The number of histograms */
|
|
uint N_bins; /* The number of bins per histogram */
|
|
uint Lo_cntr; /* The first counter in TOF mode */
|
|
uint Lo_bin; /* The first bin of the histogram */
|
|
uint Hi_bin; /* The top bin of the histogram */
|
|
uint Bytes_per_bin; /* The number of bytes per bin */
|
|
uint Compress; /* The bin compression factor */
|
|
uint Curr_hist; /* The currently selected histogram */
|
|
uint Total_bytes; /* The total number of bytes of histogram mem */
|
|
uint Cnts_lo; /* Count of hits below histogram(s) */
|
|
uint Cnts_hi; /* Count of hits above histogram(s) */
|
|
uchar *Tran_buff_base; /* Pointer to start of curr buff in TRANS mode */
|
|
uchar *Next_char; /* Pointer to next free byte in TRANS mode */
|
|
uint Bytes_free; /* Space left in current buffer in TRANS mode */
|
|
uint MDI_mode; /* Mode of Multi-detector interface as obtained
|
|
** from the Extended Time-Stamp-Info packets */
|
|
uint Frame_hdr; /* The frame header (in HRPT mode) */
|
|
uint Frame_num; /* The frame number (in HRPT mode) */
|
|
|
|
usint SinqHM_Dsbl_Mask; /* The data-acq disable mask */
|
|
usint Server_masks[MAX_CLIENTS+1]; /* The daq masks for ..
|
|
** ..servers (0 is Filler) */
|
|
/*--------------------------------------*/
|
|
time_t Sqhm_start_time; /* The time that SinqHM-main started */
|
|
uint Port_base;
|
|
pid_t Parent_pid;
|
|
pid_t Child_pid[MAX_CLIENTS+1];
|
|
int Child_exit_status[MAX_CLIENTS];
|
|
int Child_cnct_skt[MAX_CLIENTS+1];
|
|
int Child_rw_skt[MAX_CLIENTS+1];
|
|
pid_t Filler_pid; /* The process ID of the SinqHM-filler */
|
|
char Filler_name[20]; /* The name of the SinqHM-filler */
|
|
char Tsk_name[MAX_CLIENTS+1][20]; /* The name of the SinqHM-servers */
|
|
|
|
char Instr_name[16]; /* This identifies the instrument */
|
|
char Def_ident[8]; /* This is Ident of SinqHM_def.h */
|
|
char Sqhm_main_ident[8]; /* This is Ident of main program */
|
|
char Sqhm_main_date[32]; /* This is compil date of main program */
|
|
char Sqhm_serv_ident[8]; /* This is Ident of server program */
|
|
char Sqhm_serv_date[32]; /* This is compil date of server program */
|
|
char Sqhm_fill_ident[8]; /* This is Ident of filler program */
|
|
char Sqhm_fill_date[32]; /* This is compil date of filler program */
|
|
char Sqhm_rout_ident[8]; /* This is Ident of routines */
|
|
char Sqhm_rout_date[32]; /* This is compil date of routines */
|
|
|
|
uint Lwl_hdr_daq_mask; /* Mask of header bits to be tested before
|
|
** histogramming a packet */
|
|
uint Lwl_hdr_daq_soll; /* Required value of masked hdr bits */
|
|
|
|
|
|
uint Rw_bytes_got, Rw_bytes_put;
|
|
uint Nrl_active; /* True if Neutron Rate Low bit set */
|
|
uint Daq_active; /* True if Hdr Mask Bits are correct so that
|
|
** data acquisition is active */
|
|
int Print_hdr; /* Set to True to get header printed in Filler */
|
|
uint N_events; /* # of events collected */
|
|
uint N_skipped; /* # of events skipped */
|
|
uint N_no_coin_tsi; /* # of "normal" TSI packets */
|
|
uint N_coin_tsi; /* # of "coincidence-mode" TSI packets */
|
|
uint Tof_dts_soll; /* Delay-Time-to-Start (soll-wert) */
|
|
uint Tof_count_bad_counter_number; /* Counter of number
|
|
** of TOF packets received in which
|
|
** the counter number is bad.
|
|
*/
|
|
uint Num_bad_events; /* Number of bad events (from last "coinc"
|
|
** type TSI */
|
|
union {
|
|
uint dead_time;
|
|
uint dts;
|
|
uint both;
|
|
} Dt_or_dts; /* Dead-time or Delay-Time-to-Start from TSI packets */
|
|
usint Tsi_status_info; /* Status info from last TSI */
|
|
usint Tsi_flags; /* Various flags from last TSI */
|
|
|
|
uint *Lwl_fifo; /* This gets set to 0x80810080. ..
|
|
** .. It is the address via which ..
|
|
** .. one reads data from the fibre ..
|
|
** .. optic link (Licht-Wellen-Leiter)
|
|
*/
|
|
uint *Lwl_csr; /* When we have one, this will get ..
|
|
** .. set to the addr of the optic ..
|
|
** .. link CSR. In the mean time, it ..
|
|
** .. is dummy (Lwl_dummy_csr).
|
|
*/
|
|
uint Lwl_dummy_csr; /* This is the dummy CSR till we have ..
|
|
** .. a real one.
|
|
*/
|
|
uint Filler_flag;
|
|
SEM_ID Sem_Filler;
|
|
SEM_ID Sem_Server;
|
|
MSG_Q_ID MsgQ_to_filler;
|
|
MSG_Q_ID MsgQ_to_server[MAX_CLIENTS+1]; /* Index 0 is for messages ..
|
|
** .. to SinqHM-master. The ..
|
|
** others are to the various ..
|
|
** servers.
|
|
*/
|
|
uint Sem_tmo;
|
|
uint Use_sem_tmo; /* If zero, disable sem timeouts */
|
|
/*--------------------------------------*/
|
|
struct tof_histog *Tof_descr[MAX_TOF_CNTR]; /* An array of pointers to
|
|
** the data structures for the
|
|
** histos in TOF mode.
|
|
*/
|
|
uint N_tof_edges; /* The number of edge arrays */
|
|
struct tof_edge_info *Tof_edges[MAX_TOF_EDGE]; /* An array of pointers to
|
|
** data structures for the bin
|
|
** boundary information.
|
|
*/
|
|
/*--------------------------------------*/
|
|
int FillTimer_active; /* Set True if FillTimer active */
|
|
int FillTimer_expired; /* Set True in handler */
|
|
timer_t FillTimerId; /* Identifier for Filler timer */
|
|
struct itimerspec FillerTime; /* Set to Filler timer interval */
|
|
/*--------------------------------------*/
|
|
uchar *VmioBase; /* Base address of VMIO10 module, if present */
|
|
uchar Vmio_Dummy[64]; /* Dummy VMIO10 addr space, in case absent */
|
|
|
|
jmp_buf Vmio_trap_env;
|
|
/*==========================================================================
|
|
Special variables for decoding PSD data: The PSD detector position is
|
|
calculated as: coord = TXPOS*calibfactor + caliboffset. Thus we need two
|
|
factors for each direction. In addition we need to keep track of flashes
|
|
and hits on the detector for diagnostic reasons.
|
|
---------------------------------------------------------------------------*/
|
|
int psdXOffset;
|
|
int psdYOffset;
|
|
int psdXFactor;
|
|
int psdYFactor;
|
|
int psdFlashCount;
|
|
int psdHitCount;
|
|
int psdXSize;
|
|
int psdYSize;
|
|
int psdXORF, psdConf;
|
|
/*========================== Define the function prototypes ================*/
|
|
|
|
void catch_int_signal (
|
|
int signo);
|
|
void catch_machine_check (
|
|
int signo);
|
|
void catch_signal (
|
|
int signo);
|
|
int chk_config_alloc (
|
|
int skt,
|
|
struct req_buff_struct *request,
|
|
struct rply_buff_struct *reply);
|
|
void cleanup_children ();
|
|
int close_down_offspring (
|
|
struct req_buff_struct *request,
|
|
struct rply_buff_struct *reply);
|
|
void do_daq (
|
|
struct rply_buff_struct *reply,
|
|
int index,
|
|
int sub_cmnd);
|
|
int do_command (
|
|
int index,
|
|
int skt,
|
|
int pkt_size,
|
|
struct req_buff_struct *rqst,
|
|
struct rply_buff_struct *reply);
|
|
int do_project (
|
|
int index,
|
|
struct rply_buff_struct *rply_bf,
|
|
int rw_skt,
|
|
int pkt_size,
|
|
uint sub_code,
|
|
uint x_lo,
|
|
uint nx,
|
|
uint y_lo,
|
|
uint ny,
|
|
uint xdim,
|
|
uint h_slct);
|
|
int do_read (
|
|
int index,
|
|
struct rply_buff_struct *rply_bf,
|
|
int rw_skt,
|
|
int pkt_size,
|
|
uint nbins,
|
|
uint first,
|
|
uint hist_no);
|
|
int do_SQHM__HM_DIG_alloc (
|
|
struct req_buff_struct *request,
|
|
struct rply_buff_struct *reply);
|
|
int do_SQHM__HRPT_alloc (
|
|
struct req_buff_struct *request,
|
|
struct rply_buff_struct *reply);
|
|
int do_SQHM__TOF_alloc (
|
|
int skt,
|
|
struct req_buff_struct *request,
|
|
struct rply_buff_struct *reply);
|
|
int do_SQHM__PSD_alloc (
|
|
int skt,
|
|
struct req_buff_struct *request,
|
|
struct rply_buff_struct *reply);
|
|
int do_SQHM__TRANS_alloc (
|
|
struct req_buff_struct *request,
|
|
struct rply_buff_struct *reply);
|
|
int do_write (
|
|
int index,
|
|
struct req_buff_struct *req_bf,
|
|
struct rply_buff_struct *rply_bf,
|
|
int rw_skt,
|
|
int pkt_size,
|
|
int nbins,
|
|
int first,
|
|
int bytes_per_bin,
|
|
int hist_no);
|
|
void do_zero (
|
|
struct rply_buff_struct *reply,
|
|
int index,
|
|
int nbins,
|
|
int fst_bin,
|
|
int hist_no);
|
|
void failInet (
|
|
char *text);
|
|
void failInet_port (
|
|
char *text, int port);
|
|
void free_HM_memory (void *extras);
|
|
void getErrno (
|
|
int *his_errno);
|
|
pid_t get_pid ();
|
|
int hm_zero (
|
|
int index, int nbins, int first, int hist_no);
|
|
void kill_children ();
|
|
void lwl_Fifo_Flush ();
|
|
int lwl_Packet_Read (
|
|
uint hdr,
|
|
uchar *buff);
|
|
int make_child (
|
|
int proc (),
|
|
int flag,
|
|
int pkt_size);
|
|
int make_filler (
|
|
int suspendMode);
|
|
int net_flush (
|
|
int skt,
|
|
int nbytes);
|
|
void process_coinc_tsi (
|
|
uint hdr);
|
|
void process_psd_tsi (
|
|
uint hdr);
|
|
void process_no_coinc_tsi (
|
|
uint hdr);
|
|
void process_gummi_monitor(
|
|
uint hdr);
|
|
|
|
int rply_status_send (
|
|
int skt,
|
|
struct rply_buff_struct *rply_bf);
|
|
void rply_status_setup (
|
|
struct rply_buff_struct *rply_bf,
|
|
int status,
|
|
int sub_status,
|
|
char *msg);
|
|
int rply_status_setup_and_send (
|
|
int skt,
|
|
struct rply_buff_struct *rply_bf,
|
|
int status,
|
|
int sub_status,
|
|
char *msg);
|
|
uchar *selectNewBuffer (uchar *nxt);
|
|
void setupLevelGenerator (
|
|
int use_level_gen,
|
|
char *base_addr);
|
|
void setup_inet_info (
|
|
char *host,
|
|
int host_size,
|
|
char *addr,
|
|
int addr_size);
|
|
int sleep (
|
|
int xx);
|
|
char *StrJoin (
|
|
char *result,
|
|
int result_size,
|
|
char *str_a,
|
|
char *str_b);
|
|
int SinqHM_filler (
|
|
int suspend_flag);
|
|
void SinqHM_filler_setup_id ();
|
|
void SinqHM_routines_setup_id ();
|
|
void SinqHM_server_setup_id ();
|
|
int SinqHM_server (
|
|
int suspend_flag,
|
|
int index,
|
|
int pkt_size);
|
|
|
|
/*===================================================== End of SinqHM_gbl.h */
|