int main(int argc, char **argv) { infolog_SetFacility((char *)"CTP"); infolog_SetStream("",0); setlinebuf(stdout); signal(SIGUSR1, gotsignal); siginterrupt(SIGUSR1, 0); signal(SIGQUIT, gotsignal); siginterrupt(SIGQUIT, 0); signal(SIGBUS, gotsignal); siginterrupt(SIGBUS, 0); micrate(-1); if(micratepresent()) { SLOT_S= 30; // was 60 before 10.11.2011 } else { SLOT_S= 5; // in lab just 5secs }; /* if(envcmp("VMESITE", "ALICE")==0) { udpsock= udpopens("alidcscom835", send2PORT); } else { udpsock= udpopens("avmes", send2PORT); }; */ ds_register(); while(1) { int rc=0; rc= update_qpll(); if(rc!=0) break; //printf("sleteping 10secs...\n"); fflush(stdout); //sleep(1) ; //msleep(1000); dtq_sleep(2); //printf("slept 10secs...\n"); fflush(stdout); }; ds_stop(); exit(0); }
/*--------------------------------------------------- main */ int main(int argc, char **argv) { int rc,grc=0; //char *cs; char command[40]; char servername[40]; char cmd[80]; setlinebuf(stdout); if(argc!=3) { printf("ERROR: Usage: linux/server servername command\n"); return(8); }; infolog_SetFacility("CTP"); infolog_SetStream("",0); strcpy(servername, argv[1]); strcpy(command, argv[2]); sprintf(cmd, "%s/%s", servername, command); // CTPRCFG/RCFG // following line has to be 1st line printed! printf("DIM server:%s cmd:%s\n", servername, command); // should be 1st line reset_insver(); /*cs=*/ readCS(); rc= readAliases(); if(rc==-1) { char emsg[200]; strcpy(emsg,"aliases info from aliases.txt not updated correctly"); infolog_trg(LOG_ERROR, emsg); printf("ERROR %s\n",emsg); }; cshmInit(); readTables(); // + when ctpprxy restarted, i.e. in time of rcfgdel 0 ALL printf("INFO ctpshmbase1:%p\n", ctpshmbase); ctpc_clear(); ctpc_print(CNAMESString); //updateCNAMES(); rc= getINT12fromcfg(INT1String, INT2String, MAXINT12LINE); printf("INFO rc:%d INT1:%s INT2:%s\n", rc, INT1String, INT2String); rc= mydbConnect(); dis_add_error_handler(error_handler); dis_add_exit_handler(exit_handler); dis_add_client_exit_handler (client_exit_handler); // commands: CTPRCFGRCFGid= dis_add_cmnd(cmd,"C", DOcmd, 88); printf("INFO DIM cmd:%s id:%d\n", cmd, CTPRCFGRCFGid); sprintf(cmd, "%s", servername); // CTPRCFG binary (after LS1) RCFG request CTPRCFGid= dis_add_cmnd(cmd,NULL, DOrcfg, 89); printf("INFO DIM cmd:%s id:%d\n", cmd, CTPRCFGid); sprintf(cmd, "%s/LTUCFG", servername); // LTUCFG binary (after LS1) LTUCFGid= dis_add_cmnd(cmd,NULL, DOltucfg, 90); printf("INFO DIM cmd:%s id:%d\n", cmd, LTUCFGid); sprintf(cmd, "%s/COM2DAQ", servername); // CTPRCFG/COM2DAQ C2Did= dis_add_cmnd(cmd,"C", DOcom2daq, 91); printf("INFO DIM cmd:%s id:%d\n", cmd, C2Did); sprintf(cmd, "%s/SETBM", servername); // CTPRCFG/SETBM SETBMid= dis_add_cmnd(cmd,"C", DOsetbm, 92); printf("INFO DIM cmd:%s id:%d\n", cmd, SETBMid); /* sprintf(cmd, "%s/FSUPDATE", servername); // CTPRCFG/FSUPDATE FSUid= dis_add_cmnd(cmd,NULL, DOfsupdate, 92); printf("INFO DIM cmd:%s id:%d\n", cmd, FSUid); */ // services: sprintf(cmd, "%s/INT1", servername); // CTPRCFG/INT1 INT1id=dis_add_service(cmd,"C:99", INT1String, MAXINT12LINE, NULL, 4567); printf("INFO DIM service:%s id:%d\n", cmd, INT1id); sprintf(cmd, "%s/INT2", servername); // CTPRCFG/INT2 INT2id=dis_add_service(cmd,"C:99", INT2String, MAXINT12LINE, NULL, 4568); printf("INFO DIM service:%s id:%d\n", cmd, INT2id); sprintf(cmd, "%s/CS", servername); // CTPRCFG/CS CSid=dis_add_service(cmd,"C", CSString, MAXCSString, CScaba, 4569); printf("INFO DIM service:%s id:%d\n", cmd, CSid); sprintf(cmd, "%s/CNAMES", servername); // CTPRCFG/CNAMES CNAMESid=dis_add_service(cmd,"C", CNAMESString, MAXCNAMESString, CNAMEScaba, 4570); printf("INFO DIM service:%s id:%d\n", cmd, CNAMESid); dis_start_serving(servername); while(1) { char *frc; #define MAXLINECS 8000 char line[MAXLINECS]; //80 chars per class for NCLASS classes //sleep(10); frc= fgets(line, MAXLINECS, stdin); if(frc==NULL) break; if(strncmp(line,"quit",4)==0) { break; } else if(strncmp(line,"class ",6)==0) { int rcdaq; printf("INFO igDAQLOGBOOK:%d line:%s",ignoreDAQLOGBOOK, line); /* from 28.5.2013: DAQlogbook opened/closed when ctp_proxy restarted rcdaq= daqlogbook_open(); if(rcdaq==-1) { printf("ERROR DAQlogbook_open failed\n"); } else { if(ignoreDAQLOGBOOK==0) { rcdaq= updateDAQDB(line); if(rcdaq!=0) { printf("ERROR updateDAQLOGBOOK failed. rc=%d\n", rcdaq); }; rcdaq= daqlogbook_close(); if(rcdaq==-1) { printf("ERROR DAQlogbook_close failed\n"); }; }; };*/ rcdaq= updateDAQDB(line); if(rcdaq!=0) { printf("ERROR updateDAQLOGBOOK failed. rc=%d\n", rcdaq); }; } else if(strncmp(line,"inpupd ",7)==0) { update_ctpins(line); } else if(strncmp(line,"indets ",7)==0) { int ix, ix1, runnumb; char *efstart; ix1= sscanf(&line[7], "%d ", &runnumb); efstart= strstr(&line[7], "0x"); // indets runN 0xeffiout 0xindets ix= sscanf(efstart, "0x%x 0x%x\n", &effiout, &indets); printf("INFO ix1:%d runnumb:%d ix:%d effiout:0x%x indets:0x%x\n", ix1, runnumb, ix, effiout, indets); fflush(stdout); //rcupd= updeff_insver(runnumb, effiout); } else if(strncmp(line,"cmd ",4)==0) { int unsigned ix,rcsystem; for(ix=0; ix<strlen(line); ix++) { if(line[ix]=='\n'){ line[ix]='\0'; break; }; }; rcsystem= system(&line[4]); printf("INFO rc:%d cmd:%s\n", rcsystem, &line[4]); continue; } else { printf("ERROR %s", line); fflush(stdout); }; }; rc= daqlogbook_close(); if(rc==-1) { printf("ERROR DAQlogbook_close failed\n"); }; mydbDisconnect(); stopserving(); cshmDetach(); printf("INFO shm detached.\n"); return(grc); }
/*----------------------------------------*/ int main(int argc, char **argv) { int rc; int ssmcr_tries=0; infolog_SetFacility("CTP"); infolog_SetStream("",0); #ifdef PQWAY printf("main_ctp: opening rec/send queues...\n"); mq_rec= pq_open(); if(mq_rec==(mqd_t)-1) { infolog_trgboth(LOG_FATAL, "posix mq_rec not created"); exit(8); } mq_sendmsg= pq_connect(); if(mq_sendmsg==(mqd_t)-1) { infolog_trgboth(LOG_FATAL, "posix mq_sendmsg not connected"); exit(8); } #endif signal(SIGUSR1, gotsignal); siginterrupt(SIGUSR1, 0); signal(SIGQUIT, gotsignal); siginterrupt(SIGQUIT, 0); signal(SIGKILL, gotsignal); siginterrupt(SIGKILL, 0); // -9 signal(SIGTERM, gotsignal); siginterrupt(SIGTERM, 0); // kill pid signal(SIGINT, gotsignal); siginterrupt(SIGINT, 0); // CTRL C 2 partmode[0]='\0'; printf("cshmInit i.e. initBakery(swtriggers/ccread/ssmcr ONLY once, when shm allocated)...\n"); /*printf("initBakery(swtriggers,4): 0:SOD/EOD 1:gcalib 2:ctp.exe 3:dims\n"); printf("initBakery(ccread,5): 0:proxy 1:dims 2:ctp+busytool 3:smaq 4:inputs\n"); */ cshmInit(); setglobalflags(argc, argv); /* changed in aug2016 (initBakery only once from now, when shm allocated) printf("initBakery(swtriggers,4): 0:SOD/EOD 1:gcalib 2:ctp.exe 3:dims\n"); initBakery(&ctpshmbase->swtriggers, "swtriggers", swtriggers_N); printf("initBakery(ccread,6): 0:proxy 1:dims 2:ctp+busytool 3:smaq 4:inputs 5:orbitddl2\n"); initBakery(&ctpshmbase->ccread, "ccread", ccread_N); printf("initBakery(ssmcr,4): 0:smaq 1:orbitddl2 2:ctp 3:inputs\n"); initBakery(&ctpshmbase->ssmcr, "ssmcr", ssmcr_N); */ printBakery(&ctpshmbase->swtriggers); printBakery(&ctpshmbase->ccread); printBakery(&ctpshmbase->ssmcr); unlockBakery(&ctpshmbase->swtriggers,swtriggers_ctpproxy); unlockBakery(&ctpshmbase->ccread,ccread_ctpproxy); unlockBakery(&ctpshmbase->ssmcr,ssmcr_ctpproxy); /* Let' synchronise with smcr only, i.e. - ccread_dims,... can go in parallel with ctp_Initproxy, orbitddl2: should use ccread_orbitddl2 customer when reading counters - swtriggers_gcalib/_dims cannot appear (no global runs becasue ctpproxy being restarted) */ while(1) { // do not allow SSM usage (smaq) because ctp_Initproxy is initialising it char msg[100]; rc= lockBakeryTimeout(&ctpshmbase->ssmcr,ssmcr_ctpproxy, 10); if(rc==1) { if(ssmcr_tries>0) { sprintf(msg, "Got ssmcr resource after %d attempts", ssmcr_tries); infolog_trgboth(LOG_INFO, msg); }; break; // ssmcr reserved for me now }; ssmcr_tries++; sprintf(msg,"%d secs Waiting for ssmcr resource. Is smaq stopped?", ssmcr_tries*10); infolog_trgboth(LOG_WARNING, msg); }; if(isArg(argc, argv, "configrunset")) { /* do we need before orbitddl2.py INT/L2 orbit in SYNC (automatic with L2a)? */ int rc, reslen; char cmd[200]; char result[1000]=""; // ~ 10 lines char orbchanged[]="Warning: orbitoffset changed:"; if(envcmp("VMESITE", "PRIVATE")==0) { strcpy(cmd, "who"); } else { strcpy(cmd, "orbitddl2.py configrunset"); }; infolog_trgboth(LOG_INFO, "Starting L0 orbit calibration (30s...)"); rc= popenread(cmd, result, 1000); // opens vme... reslen= strlen(result); if((rc==EXIT_FAILURE) || (reslen<=1)) { infolog_trgboth(LOG_ERROR, "L0 orbit calibration problem"); } else { int ixr= reslen; if(result[ixr-1]=='\n') { //remove last NL character if present result[ixr-1]='\0'; ixr= reslen-2; } else { ixr= reslen-1; // pointer to the last non-NEWLINE character }; while(ixr>=0) { // find last line if(result[ixr]=='\n') { ixr++; break; }; ixr--; }; sprintf(cmd, "L0 orbit calibration: %s", &result[ixr]); if((strcmp(&result[ixr], "Everything ok")==0) || (strncmp(&result[ixr], orbchanged, strlen(orbchanged))==0) ) { infolog_trgboth(LOG_INFO, cmd); } else { infolog_trgboth(LOG_ERROR, cmd); infolog_trgboth(LOG_ERROR, "ctpproxy not started"); unlockBakery(&ctpshmbase->ssmcr,ssmcr_ctpproxy); rc=8; goto STP; }; }; }; // init CTP after calibration (e.g. to repair modifications done by orbitddl2.py) rc=ctp_Initproxy(); unlockBakery(&ctpshmbase->ssmcr,ssmcr_ctpproxy); if(rc!=0) goto STP; // DIM services not registered here (see ctpdims.c), they run in separae task: // ds_register(); strcpy(obj,argv[1]); smi_attach(obj, SMI_handle_command); printf("CTP attached to: %s\n",obj); /* if smi_volatile: stops the ctp_proxy in case TRIGGER domain is down smi_volatile(); */ strcpy(errorReason,"not set"); smi_set_parER(); strcpy(ORBIT_NUMBER,""); smi_set_par("ORBIT_NUMBER",ORBIT_NUMBER,STRING); smi_setState("RUNNING"); while(1) { #ifdef PQWAY executectp("wait"); #else usleep(1000000); #endif if(quit>9) break; }; rc= ctp_Endproxy(); STP: #ifdef PQWAY pq_close(mq_sendmsg, 0); pq_close(mq_rec, 1); #endif printf("Calling cshmDetach()...\n"); cshmDetach(); return (rc); }
int main(int argc, char **argv) { TRBIF *grbif=NULL; int rc=0; FILE *cfgfile; char *env; char fnpath[MAXNAMELENGTH+40]; char pname[MAXNAMELENGTH]; char errmsg[300]=""; if(argc<=1) { printf("./main_TRBIF part_name\n"); return 1; } else { strcpy(pname, argv[1]); }; infolog_SetFacility("CTP"); infolog_SetStream("",0); cshmInit(); //setglobalflags(argc, argv); //if((rc=ctp_Initproxy())!=0) exit(8); rc= vmeopen("0x820000", "0xd000"); if(rc!=0) { printf("vmeopen CTP vme:%d\n", rc); exit(8); }; printf("main_TRBIF...\n"); checkCTP(); /* check which boards are in the crate - ctpboards */ readTables(); // enough only in ctp_proxy env= getenv("dbctp"); /*strcpy(fnpath, env); strcat(fnpath, "../pardefs/"); strcat(fnpath, pname); strcat(fnpath, ".pcfg"); */ sprintf(fnpath, "%s/../pardefs/%s.pcfg", env, pname); printf(":opening:%s:\n",fnpath); cfgfile=fopen(fnpath,"r"); while(1) { TRBIF *rcgrbif=NULL; char *okstr; char line[MAXLINECFG]; okstr= fgets(line, MAXLINECFG,cfgfile); if(okstr==NULL) break; if(strncmp("RBIF",line,4) == 0){ grbif=RBIF2Partition(line,grbif); if(grbif == NULL) { sprintf(errmsg,"ParseFile: RBIF2Partition error. line:%s",line); rc= 1; }; } else if(strncmp("L0F34",line, 5) == 0){ //rcgrbif= L0342Partition(line, grbif); if(rcgrbif == NULL) { sprintf(errmsg,"ParseFile: L0342Partition error."); rc= 1; }; }; }; fclose(cfgfile); vmeclose(); if(errmsg[0]!='\0') { infolog_trg(LOG_ERROR, errmsg); } else { //char m4[LEN_l0f34+1]; //printTRBIF(grbif); //combine34(grbif->lut34, m4); }; return(rc); }