Пример #1
0
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);
}   
Пример #2
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);
}
Пример #3
0
/*----------------------------------------*/ 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);
}
Пример #4
0
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);
}