Files
sicspsi/sinqhm/SinqHM_gbl.h
cvs 064ec37e9a - Rearranged directory structure for forking out ANSTO
- 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
2003-06-20 10:18:47 +00:00

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 */