/*************************************** * hv_go.c * * ( like hv_init, but does not reset * * parameters at the beginning ) * * * ***************************************/ #include #include #include #include #include #include "../lib/mylib1.h" #include "a200.h" #include "../dbase/hv_dbase.h" extern int os9forkc(); extern char **environ; char *argblk[5]; int hra[6]; int ev127_id; FILE *fp, *fopen(); unsigned long pid; char parm1[20], parm2[20], parm3[20], parm4[20], parm5[20]; main(argc,argv) int argc; char **argv; { SY127_MBOX *mod127; SY227_MBOX *mod227; PROCS_INFO *hv_procs_mod; hv_mod_struct *hv_mid; int tcp_ip_nr, cpu_nr; char *hv_config[3]; int ev127_id, ev227_id, evpro_id; int i, iev, tcycle; short sy127_crate; short dis, cr, sl; int n_child_wait; if (argc < 2) usage(); if (strcmp(argv[1], "ok") && strcmp(argv[1], "OK")) usage(); /* first reset old semaphores and delete old data modules */ system("sem_mod_reset"); /* create semaphores */ evpro_id = sem_link_cr("hv_pr_info", argv[0]); ev127_id = sem_link_cr("sy127mod", argv[0]); ev227_id = sem_link_cr("sy227mod", argv[0]); /* create module for sy127 informations */ if((mod127 = ( SY127_MBOX *)modlink("sy127mod", 0)) == (SY127_MBOX *)-1){ data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(ev127_id, argv[0]); if((mod127 = (SY127_MBOX *)_mkdata_module("sy127mod", sizeof(SY127_MBOX), 0x8001, 0x0033)) == (SY127_MBOX *)-1) /* see module.h for attr,perm */ exit(_errmsg(errno,"mod127: err. link/create data module\n")); for(i=0; i<6; i++) mod127->creat_tim[i] = hra[i]; mod127->nchk = 0; mod127->nchk_err = 0; mod127->nvim = 0; mod127->nvim_err = 0; mod127->nsta = 0; mod127->nsta_err = 0; sem_free(ev127_id, argv[0]); } /* create module for sy227 informations */ if((mod227 = ( SY227_MBOX *)modlink("sy227mod", 0)) == (SY227_MBOX *)-1){ data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(ev227_id, argv[0]); if((mod227 = (SY227_MBOX *)_mkdata_module("sy227mod", sizeof(SY227_MBOX), 0x8001, 0x0033)) == (SY227_MBOX *)-1) /* see module.h for attr,perm */ exit(_errmsg(errno,"mod227: err. link/create data module\n")); for(i=0; i<6; i++) mod227->creat_tim[i] = hra[i]; mod227->nchk = 0; mod227->nchk_err = 0; mod227->nvim = 0; mod227->nvim_err = 0; mod227->nsta = 0; mod227->nsta_err = 0; sem_free(ev227_id, argv[0]); } /* create module for processes informations ( needed by hv_procs_stop for example ) */ if((hv_procs_mod = (PROCS_INFO *)modlink("hv_pr_info", 0)) == (PROCS_INFO *)-1){ data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); if((hv_procs_mod = (PROCS_INFO *)_mkdata_module("hv_pr_info", sizeof(PROCS_INFO), 0x8001, 0x0033)) == (PROCS_INFO *) -1) /* see module.h for attr,perm */ exit(_errmsg(errno,"hv_procs_mod: err. link/create data module\n")); for(i=0; i<6; i++) hv_procs_mod->creat_date[i] = hra[i]; hv_procs_mod->sy127_vi_mon_id = 0; hv_procs_mod->sy127_st_mon_id = 0; hv_procs_mod->sy127_par_mon_id = 0; hv_procs_mod->sy227_vi_mon_id = 0; hv_procs_mod->sy227_st_mon_id = 0; hv_procs_mod->sy227_par_mon_id = 0; hv_procs_mod->sy127_vi_send_id = 0; hv_procs_mod->sy227_vi_send_id = 0; hv_procs_mod->a200_resetter_id = 0; hv_procs_mod->xxcond_id = 0; hv_procs_mod->sy127_vi_mon_active = 1; /* value set to 0 when the */ hv_procs_mod->sy127_st_mon_active = 1; /* process puts itself to */ hv_procs_mod->sy127_par_mon_active = 1; /* sleep */ hv_procs_mod->sy227_vi_mon_active = 1; hv_procs_mod->sy227_st_mon_active = 1; hv_procs_mod->sy227_par_mon_active = 1; hv_procs_mod->sy127_vi_send_active = 1; hv_procs_mod->sy227_vi_send_active = 1; hv_procs_mod->a200_resetter_active = 1; hv_procs_mod->xxcond_active = 1; hv_procs_mod->sy127_vi_mon_com = 0; /* a value != 0 is a */ hv_procs_mod->sy127_st_mon_com = 0; /* command to the process */ hv_procs_mod->sy127_par_mon_com = 0; /* ( initially used to PAUSE */ hv_procs_mod->sy227_vi_mon_com = 0; /* and STOP ) */ hv_procs_mod->sy227_st_mon_com = 0; hv_procs_mod->sy127_vi_send_com = 0; hv_procs_mod->sy227_vi_send_com = 0; hv_procs_mod->a200_resetter_com = 0; hv_procs_mod->xxcond_com = 0; sem_free(evpro_id, argv[0]); } /* identifies the cpu in order to point to the right database */ get_config(&tcp_ip_nr, &cpu_nr, hv_config); if ((hv_mid = (hv_mod_struct *)modlink(hv_config[cpu_nr], 0)) == (hv_mod_struct *)-1) if ((hv_mid = (hv_mod_struct *)modload(hv_config[cpu_nr], 0)) == (hv_mod_struct *)-1) exit(_errmsg(errno, " %s: error loading/linking module %s\n", argv[0], hv_config[cpu_nr])); sy127_crate = hv_mid->hv_crate; printf("\n inizialization takes around 15 seconds \n"); /* clear alarm and disable keyboard */ subm_sy127_set( DUMMY, (int)sy127_crate, PROT_WORD, 8, 1); n_child_wait = 0; for (i = 0; i < 40; i++) if (hv_mid->hv_used_ch[i]) { subm_sy127_set(GROUP_ASS, (int)sy127_crate, i, (int)hv_mid->def_group[i], 0); n_child_wait++; } while (n_child_wait > 0){ wait(0); n_child_wait--; } /* submit process to monitor the status */ tcycle = hv_mid->sy127_st_mon_cycle; /* time between monitors in sec */ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->sy127_st_mon_id; sem_free(evpro_id, argv[0]); if(pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_st_mon_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "sy127_st_mon"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds */ argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_st_mon_id = pid; for(i=0; i<6; i++) hv_procs_mod->sy127_st_mon_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process sy127_st_mon submitted \n"); } else printf(" hv_go: process sy127_st_mon already exists !! \n"); /* submit process to monitor VMON and IMON */ tcycle = hv_mid->sy127_vi_mon_cycle; /* time between monitors in sec */ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->sy127_vi_mon_id; sem_free(evpro_id, argv[0]); if(pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_vi_mon_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "sy127_vi_mon"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds */ argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_vi_mon_id = pid; for(i=0; i<6; i++) hv_procs_mod->sy127_vi_mon_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process sy127_vi_mon submitted \n"); } else printf(" hv_go: process sy127_vi_mon already exists !! \n"); /* submit process to monitor Parameters */ tcycle = hv_mid->sy127_par_mon_cycle; /* time between monitors in sec */ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->sy127_par_mon_id; sem_free(evpro_id, argv[0]); if(pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_par_mon_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "sy127_par_mon"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds */ argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_par_mon_id = pid; for(i=0; i<6; i++) hv_procs_mod->sy127_par_mon_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process sy127_par_mon submitted \n"); } else printf(" hv_go: process sy127_par_mon already exists !! \n"); /* submit process to monitor the status of SY227 */ tcycle = hv_mid->sy227_st_mon_cycle; /* time between monitors in sec */ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->sy227_st_mon_id; sem_free(evpro_id, argv[0]); if(pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->sy227_st_mon_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "sy227_st_mon"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds */ argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->sy227_st_mon_id = pid; for(i=0; i<6; i++) hv_procs_mod->sy227_st_mon_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process sy227_st_mon submitted \n"); } else printf(" hv_go: process sy227_st_mon already exists !! \n"); /* submit process to monitor vmon and imon of SY227 */ tcycle = hv_mid->sy227_vi_mon_cycle; /* time between monitors in sec */ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->sy227_vi_mon_id; sem_free(evpro_id, argv[0]); if(pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->sy227_vi_mon_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "sy227_vi_mon"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds */ argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->sy227_vi_mon_id = pid; for(i=0; i<6; i++) hv_procs_mod->sy227_vi_mon_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process sy227_vi_mon submitted \n"); } else printf(" hv_go: process sy227_vi_mon already exists !! \n"); /* process to send events to VAX * tcycle = hv_mid->sy127_vi_send_cycle; /* time between reports in sec * if (tcycle){ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->sy127_vi_send_id; sem_free(evpro_id, argv[0]); if (pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_vi_send_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "sy127_vi_send"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds * argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->sy127_vi_send_id = pid; for(i=0; i<6; i++) hv_procs_mod->sy127_vi_send_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process sy127_vi_send submitted \n"); } else printf(" hv_go: process sy127_vi_send already exists !! \n"); } tcycle = hv_mid->sy227_vi_send_cycle; /* time between reports in sec * if (tcycle){ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->sy227_vi_send_id; sem_free(evpro_id, argv[0]); if(pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->sy227_vi_send_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "sy227_vi_send"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds * argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->sy227_vi_send_id = pid; for(i=0; i<6; i++) hv_procs_mod->sy227_vi_send_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process sy227_vi_send submitted \n"); } else printf(" hv_go: process sy227_vi_send already exists !! \n"); } ***/ /* submit process to reset cyclically the A200 */ tcycle = hv_mid->a200_resetter_cycle; /* time between resetss in sec a reset is also given by a127_par_mon ! */ sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->a200_resetter_id; sem_free(evpro_id, argv[0]); if(pid == 0){ sem_wait(evpro_id, argv[0]); hv_procs_mod->a200_resetter_tcycle = tcycle; sem_free(evpro_id, argv[0]); argblk[0] = "a200_resetter"; itoa(tcycle, parm1); argblk[1] = parm1; /* time between monitors in seconds */ argblk[2] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->a200_resetter_id = pid; for(i=0; i<6; i++) hv_procs_mod->a200_resetter_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process a200_resetter submitted \n"); } else printf(" hv_go: process a200_resetter already exists !! \n"); /* submit to perform the conditioning sem_wait(evpro_id, argv[0]); pid = hv_procs_mod->xxcond_id; sem_free(evpro_id, argv[0]); if(pid == 0){ argblk[0] = "xxcond"; argblk[1] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); data_ora(&hra[0], &hra[1], &hra[2], &hra[3], &hra[4], &hra[5]); sem_wait(evpro_id, argv[0]); hv_procs_mod->xxcond_id = pid; for(i=0; i<6; i++) hv_procs_mod->xxcond_date[i] = hra[i]; sem_free(evpro_id, argv[0]); printf(" hv_go: process xxcond submitted \n"); } else printf(" hv_go: process xxcond already exists !! \n"); */ /* unlink dbase module */ munlink(hv_mid); /* unlink modules of sy127 , of sy227 and module of process info's */ sem_unl(ev127_id, argv[0]); sem_unl(ev227_id, argv[0]); sem_unl(evpro_id, argv[0]); } subm_sy127_set(par, crate, ch, val, child_wait) int par, crate, ch, val, child_wait; { argblk[0] = "sy127_set"; itoa(par, parm1); argblk[1] = parm1; itoa(crate, parm2); argblk[2] = parm2; itoa(ch, parm3); argblk[3] = parm3; itoa(val, parm4); argblk[4] = parm4; argblk[5] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); if (child_wait ) wait(0); return 0; } subm_sy227_set(par, crate, slot, ch, val, child_wait) int par, crate, slot, ch, val, child_wait; { argblk[0] = "sy227_set"; itoa(par, parm1); argblk[1] = parm1; itoa(crate, parm2); argblk[2] = parm2; itoa(slot, parm3); argblk[3] = parm3; itoa(ch, parm4); argblk[4] = parm4; itoa(val, parm5); argblk[5] = parm5; argblk[6] = 0; if ((pid=os9exec(os9forkc,argblk[0],argblk,environ,0,0,3)) == -1) exit(_errmsg(0," error returned from os9exec(%s) \n", argblk[0])); if (child_wait ) wait(0); return 0; } usage() { printf(" hv_go : starts hwc system \n\n"); printf(" usage : hv_go ok \n"); exit(0); }