diff --git a/sinqhm/FOCUS_gbl.h b/sinqhm/FOCUS_gbl.h new file mode 100755 index 00000000..942e409d --- /dev/null +++ b/sinqhm/FOCUS_gbl.h @@ -0,0 +1,289 @@ +/*======================================= [...SinqHM]FOCUS_gbl.h - Ident V01B +** +** Include file of Gbl Variables for FOCUS_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 FS_bytes_got!). +*/ + int FS_errno; + int FS_cnt_SIGUSR1; + char FS_host[32]; + char FS_addr[20]; + + int FS_dbg_mask; /* This is the log'l or of FS_dbg_lev0, etc */ + int FS_dbg_lev0, FS_dbg_lev1, FS_dbg_lev2, FS_dbg_lev3; + + int FS_cfgn_done; /* == 0 if FOCUS_srv not configured */ + /* + ** The buffer for holding Hist Mem data is pointed to + ** by FS_base_addr. + */ + void *FS_base_addr; + + uint FS_mode_ALL; /* The "total" mode of the histogram memory */ + uint FS_mode; /* The basic mode of the histogram memory */ + uint FS_mode_DEBUG; /* The SQHM__DEBUG bit of FS_mode_ALL */ + uint FS_mode_UD; /* The SQHM__UD bit of FS_mode_ALL */ + uint FS_mode_BO; /* The SQHM__BO bits of FS_mode_ALL */ + uint FS_mode_STROBO; /* The SQHM__STROBO bit of FS_mode_ALL */ + uint FS_mode_REFLECT; /* The SQHM__REFLECT bit of FS_mode_ALL */ + uint FS_mode_NO_STAT; /* The SQHM__NO_STAT bit of FS_mode_ALL */ + + uint FS_lo_cntr; /* The first counter in TOF mode */ + uint FS_hi_cntr; /* The last counter in TOF mode */ + uint FS_lo_bin; /* The first bin of the histogram */ + uint FS_hi_bin; /* The last bin of the histogram */ + uint FS_bpb; /* The number of bytes per bin */ + uint FS_compress; /* The bin compression factor */ + uint FS_totl_bytes; /* The total number of bytes of histogram mem */ + + SEM_ID FS_sem_daq; /* Semaphore to guard FS_dsbl_mask */ + usint FS_dsbl_mask; /* The data-acq disable mask */ + usint FS_srv_masks[MAX_CLIENTS+1]; /* The daq masks for .. + ** .. servers (0 is mask of .. + ** .. master process). */ + /*--------------------------------------*/ + time_t FS_start_time; /* The time that FOCUS-main started */ + uint FS_port; + int FS_cnct_skt; + int FS_rw_skt; + pid_t FS_pid; /* PID of Master Process */ + pid_t FS_pids[MAX_CLIENTS+1]; /* Index 0 = Filler (not present for + ** FOCUS_srv) + ** Index 1... = Child servers */ + int FS_chld_exit_status[MAX_CLIENTS+1]; + int FS_chld_cnct_skt[MAX_CLIENTS+1]; + int FS_chld_rw_skt[MAX_CLIENTS+1]; + char FS_name[MAX_CLIENTS+1][20]; /* The name of the FOCUS-servers */ + char *FS_p_names[MAX_CLIENTS+1]; /* Pointers to the names */ + + char FS_inst[16]; /* This identifies the instrument */ + char FS_def_ident[8]; /* This is Ident of FOCUS_def.h */ + char FS_main_ident[8]; /* This is Ident of main program */ + char FS_main_date[32]; /* This is compil date of main program */ + char FS_serv_ident[8]; /* This is Ident of server program */ + char FS_serv_date[32]; /* This is compil date of server program */ + char FS_rout_ident[8]; /* This is Ident of routines */ + char FS_rout_date[32]; /* This is compil date of routines */ + + uint FS_bytes_got, FS_bytes_put; + + MSG_Q_ID FS_msgQ_to_srv[MAX_CLIENTS+1]; /* Index 0 is for messages .. + ** .. to FOCUS-master. The .. + ** others are to the various .. + ** servers. + */ + uint FS_sem_tmo; + uint FS_use_sem_tmo; /* If True (== 1), enable sem timeouts */ + + int FS_n_slaves; /* The number of slaves */ + char *FS_slaves[3]; /* The names of the slaves */ + struct sockaddr_in FS_rmt_socknam[3]; /* Internet addresses of our slaves */ + uint FS_lo_det[3]; /* # of first det'r on each slave */ + uint FS_hi_det[3]; /* # of last det'r on each slave */ + int FS_slv_active[3]; /* True if slave has been cfg'd */ + int FS_skt[MAX_CLIENTS][3]; /* Client skts for children */ + int FS_pkt_siz[MAX_CLIENTS][3]; /* Packet sizes for children */ +/*========================== Define the function prototypes ================*/ + + int chk_config_alloc ( + int skt, + struct req_buff_struct *request, + struct rply_buff_struct *reply); + void failInet ( + char *text); + void failInet_port ( + char *text, int port); + int FOCUS_server ( + pid_t parent_pid, + SEM_ID sem, + int index, + int pkt_size, + int suspend_flag, + int *status); + void FS_catch_int_signal ( + int signo); + void FS_catch_signal ( + int signo); + void FS_cleanup_children ( + int max_chld, + pid_t *pids, + int *pcnt_SIGUSR1, + int verbose, + char **tsk_names, + char *filler_name); + int FS_close_all ( + int index); + int FS_close_down_offspring ( + int harshness, + int max_chld, + pid_t *pids, + int *exit_stat, + int *pcnt_SIGUSR1, + int verbose, + char **tsk_names, + char *filler_name); + int FS_deconfig_all ( + int harshness); + int FS_do_command ( + int index, + int skt, + int pkt_size, + struct req_buff_struct *rqst, + struct rply_buff_struct *reply); + int FS_do_config ( + int skt, + struct req_buff_struct *request, + struct rply_buff_struct *reply); + int FS_do_daq ( + int index, + int sub_cmnd, + struct req_buff_struct *request, + struct rply_buff_struct *reply); + int FS_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 FS_do_read ( + int index, + struct rply_buff_struct *rply_bf, + int rw_skt, + int pkt_size, + uint nbins, + uint first, + uint hist_no); + int FS_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); + int FS_do_zero ( + struct rply_buff_struct *reply, + int index, + int nbins, + int fst_bin, + int hist_no); + void FS_free_memory ( + void *extras); + void FS_kill_children (); + int FS_make_child ( + int proc (), + int prty, + int spnd, + int pkt_size, + int max_chld, + pid_t *pids, + int *exit_stat, + int *pcnt_SIGUSR1, + char *name); + int FS_project_hm ( + int index, + int pkt_size, + uint *buff, + uint *w_buff, + uint blen_in_bins, + uint sub_code, + uint lo_cntr, + uint hi_cntr, + uint fst_bin, + uint lst_bin); + int FS_read_hm ( + int skt, + int pkt_size, + uchar *buff, + uint blen_in_bins, + uint first_bin, + uint last_bin); + int FS_rply_status_send ( + int skt, + struct rply_buff_struct *rply_bf, + uint *out_cntr); + int FS_rply_status_setup_and_send ( + int skt, + struct rply_buff_struct *rply_bf, + int status, + int sub_status, + char *msg, + uint *out_cntr); + int FS_send_cmnd_to_mstr ( + struct sockaddr_in *rmt_sockname, + struct req_buff_struct *request, + int requ_len, + struct rply_buff_struct *reply, + uint *in_cntr, + uint *out_cntr); + void getErrno ( + int *his_errno); + pid_t get_pid (); + int net_flush ( + int skt, + int nbytes); + void rply_status_setup ( + struct rply_buff_struct *rply_bf, + int status, + int sub_status, + char *msg); + int rqst_send_get ( + int skt, + struct req_buff_struct *rqst_bf, + int rq_len, + struct rply_buff_struct *rply_bf, + int rp_size, + int *out_cntr, + int *in_cntr, + char *tsk_name); + int setup_host ( + char *host, + struct sockaddr_in *sockname, + int port, + int verbose); + void setup_inet_info ( + char *host, + int host_size, + char *addr, + int addr_size); + int sleep ( + int xx); + int socket_bind ( + int port, + char *tsk_name); + char *StrJoin ( + char *result, + int result_size, + char *str_a, + char *str_b); + +/*===================================================== End of FOCUS_gbl.h */