Esempio n. 1
0
/* line: inpupd runn ix1 ix2 ...
 * ix1: 1..60  (24+24+12)
*/
void update_ctpins(char *line) {
unsigned int runn; 
int ixc, ixl;
char value[16];
enum Ttokentype t1;
char emsg[100];
emsg[0]='\0';
ixl= 7; t1= nxtoken(line, value, &ixl);   // runn
if(t1==tINTNUM) {
  runn= str2int(value);
} else {
  sprintf(emsg,"pydim update_ctpins: bad line:%60s",line);
  infolog_trg(LOG_ERROR, emsg); printf("%s\n",emsg);
  return;
};
for(ixc=0; ixc<NCTPINPUTS; ixc++) {
  t1= nxtoken(line, value, &ixl);   // 1..60
  if(t1==tEOCMD) {break;};
  if(t1==tINTNUM) {
    int ixin;
    ixin= str2int(value);
    ctpc_addinp(ixin, runn);
  } else {
    sprintf(emsg,"pydim update_ctpins: bad line:%60s",line);
    infolog_trg(LOG_ERROR, emsg); printf("%s\n",emsg);
    ctpc_delrun(runn);
    break;
  };
};
//updateCNAMES(); it is enough to update it in updateDAQDB
}
Esempio n. 2
0
/*-----------------*/ void CORDE_SETcmd(void *tag, void *msgv, int *size)  {
char errmsg[200];
char *msg= (char *)msgv; int rc; w32 cosh;
char sshift[20]; int shift=0, origshift; 
if(*size>19) {rc=19;}
else {rc=*size; };
strncpy(sshift,msg,rc); sshift[rc]='\0';
errno= 0;
shift= strtol(sshift, (char **)NULL, 10);
if ((errno == ERANGE && (shift == LONG_MAX || shift == LONG_MIN))
     || (errno != 0 && shift == 0)) {
  sprintf(errmsg, "Error: incorrect shift:%s, not set", sshift); prtLog(errmsg); 
  return;  
};
sprintf(errmsg, "CORDE_SETcmd: size:%d msg:%5.5s :%s:%d\n", 
  *size, msg, sshift, shift); prtLog(errmsg); 
rc= authenticate("");
//rc=0; //prtLog("CORDE_SET not authenticated!\n");
if(rc!=0) {
  sprintf(errmsg, "CORDE shift forbidden\n"); prtLog(errmsg); 
  return;  
};
if(shift==0) {
  sprintf(errmsg, "Error: Bad shift:%s, not set", sshift); prtLog(errmsg); 
  return;  
};
cosh= corde_shift(CORDE_DELREG, shift, &origshift);
//sprintf(errmsg, "corde_shift(,%d, %d)", shift, origshift); prtLog(errmsg); 
if(cosh>1023) {
  sprintf(errmsg, "Error: Corde reg. not set, corde_shift rc:0x%x\n", cosh); prtLog(errmsg); 
} else {
  w32 pol,halfns; char line[80];
  // always, after shift resynchronize DLL on RF2TTC:
  // not here (called from miclock):
  //DLL_RESYNC(0);
  sprintf(errmsg, "corde_shift(%x, %d, ) orig:%d set to:%d.",
    CORDE_DELREG, shift, origshift, cosh); 
  prtLog(errmsg); 
  sprintf(errmsg,"CORDE shift: %d -> %d ps",origshift*10, cosh*10);
  infolog_trg(LOG_INFO, errmsg);
  // update $dbctp/clockshift,  daqlogbook and SHIFTid service:
  // not done here (can we use DIM client library here?), but in miclock.py
  // which is not correct (it can get unsync!)
  //rc= dic_cmnd_callback("CTPRCFG/RCFG", message, strlen(message)+1, callback, 33);
  rc= dis_update_service(SHIFTid);
  sprintf(errmsg,"TTCMI/SHIFT updated for %d clients\n", rc); prtLog(errmsg); 
  pol= i2cread_delay(BC_DELAY25_BCMAIN); halfns= pol-0x140;
  // update $dbctp/clockshift
  // run1 last values (12.2.201): 29 973 960
  sprintf(line, "%d %d %d", halfns, cosh, origshift);
  writedbfile((char *)"/home/alice/trigger/v/vme/CFG/clockshift", line);
  shiftCommentInDAQ((int)halfns, origshift, 
    (int)halfns, (int)cosh,"fine");
  sprintf(errmsg,"DAQlogbook updated (rc:void).Corde: %d -> %d\n",
    origshift, cosh);prtLog(errmsg); 
};
}
Esempio n. 3
0
int check_xcounters() {
int ix, xrc; char xpid[20]="";
char emsg[ERRMSGL];
char *environ;
environ= getenv("VMESITE"); 
if((strcmp(environ,"PRIVATE")==0) || 
   (strcmp(environ,"SERVER2")==0)) return(0);
// check xcountersdaq active:
xrc= popenread((char *)"ps --no-headers -C xcountersdaq -o pid=", xpid, 20);
for(ix=0; ix< (int)strlen(xpid); ix++) {
  if(xpid[ix]=='\n') xpid[ix]=' ';
};
sprintf(emsg,"INFO DOrcfg xpid:%s popen rc:%d\n", xpid, xrc);
printf("%s",emsg);
if(xpid[0]=='\0') {
  infolog_trg(LOG_FATAL, "xcounters problem, stop all global runs, call CTP expert");
  printf("ERROR xcounters problem, stop all global runs, call CTP expert\n");
  xrc=1;
} else {
  xrc=0;
};return(xrc);
}
Esempio n. 4
0
/* Input: class runNumber clid1 classname1 clid2 classname2 ... \n
from 28.7.2010:
   Input: class runNumber 
          clid1 cg1 cgtime1 dsc1 classname1 
          clid2 cg2 cgtime2 dsc2 classname2 ... \n
Operation:
register clid:classname in DAQDB
rc: 0: ok
   !=0: ERROR message printed to stdout
1: runNumber not found
2: classname expected
3: classid 1..NCLASS expected
4: DAQDB update call error
5: bad cg (0..20) allowed (anyhow, ctp_proxy allows only 0..9)
6: bad dsc factor. Expected: dec. number (32 bits, i.e. unsigned int)
7: bad dsc factor: >0x1fffff but bit31 not set
8: premature EOCMD (unfinished line)
*/
int updateDAQDB(char *line) {
int ixl, ixiv, rcex=8;
unsigned int runN; 
int ixc;
char value[256];
enum Ttokentype t1,t2;
printf("INFO updateDAQDB... effiout:0x%x\n", effiout);
ixl=6; t1= nxtoken(line, value, &ixl);   // runNumber
if(t1==tINTNUM) {
  runN= str2int(value);
  ixiv= find_insver(runN);
  if(ixiv == -1) {
    printf("ERROR bad line (runN not found (pcfg req. missing?) ):%s",line);
    rcex=1; return(rcex);
  };
} else {
  printf("ERROR bad line (runN expected after class ):%s",line);
  rcex=1; return(rcex);
};
infolog_SetStream(insver[ixiv].parname, runN);
updateConfig(runN, insver[ixiv].parname, insver[ixiv].insname,
  insver[ixiv].insver);
del_insver(runN);
for(ixc=0; ixc<NCLASS; ixc++) {
  unsigned int classN, cg, cgtim; int rcdaq,daqlistpn;
  float cgtime;
  char dsctxt[24];   // (0.xxx% - 100%) or xxxus or xxx.xxxms
  char *dsctxtp;
  char *daqlist[MAXALIASES]; char **daqlistp;
  char msg[300];
  t1= nxtoken(line, value, &ixl);   // class number
  //printf("INFO ixc:%d token:%d tokenvalue:%s\n",ixc,t1,value);
  if(t1==tEOCMD) {rcex=0; break;};
  if(t1==tINTNUM) {
    classN= str2int(value);
    if( (classN>NCLASS) || (classN<1) ) {
      rcex=3; break;
    };
  } else {
    rcex=3; break;
  };
  t1= nxtoken(line, value, &ixl);   // class group
  if(t1==tEOCMD) break;   
  if(t1==tINTNUM) {
    cg= str2int(value);
    if( cg>NCLASS ) {
      rcex=5; break;
    };
      } else {
    rcex=5; break;
  };
  t1= nxtoken(line, value, &ixl);   // class time group
  if(t1==tEOCMD) break;   
  if(t1==tINTNUM) {
    cgtim= str2int(value);
  } else {
    rcex=3; break;
  };
  t1= nxtoken(line, value, &ixl);   // dsc
  if(t1==tEOCMD) break;   
  if(t1==tINTNUM) {
    unsigned int dsc;
    dsc= str2int(value);
    dsctxtp= dsctxt;
    if(dsc>0x1fffff) {   // class busy
      int dscus;
      if((dsc & 0x80000000)!=0x80000000) {
        printf("ERROR in downscaling factor:0x%x\n", dsc); 
        rcex=7; break;
      };
      dscus= 10*(dsc & 0x1ffffff);
      sprintf(dsctxt, "%dus", dscus);
    } else if(dsc==0) {  // not downscaled
      dsctxt[0]='\0'; dsctxtp= NULL;
    } else {             // random downscaling
      float dscrat;
      dscrat= 100- dsc*100./0x1fffff;
      sprintf(dsctxt, "%2.3f%%", dscrat);
    }
  } else {
    rcex=6; break;
  };
  t2= nxtoken1(line, value, &ixl);   // classname
  if(t2!=tSYMNAME) {rcex=2; break;};
  cgtime= cgtim;
  getClassAliases(value, daqlist); 
  daqlistpn=0;
  if(daqlist[0]==NULL) {
    daqlistp=NULL; 
  } else {
    char *dp;
    daqlistp=daqlist; dp= daqlist[0];
    while(dp!=NULL) {
      daqlistpn++; dp=daqlist[daqlistpn];
    };
  };
  if(ignoreDAQLOGBOOK) { rcdaq=0;
  } else {
    rcdaq= daqlogbook_update_triggerClassName(runN, 
      //classN-1, value, cg, cgtime, (const char **)daqlistp);
      classN-1, value, cg, cgtime, dsctxtp, (const char **)daqlistp);
  };
  sprintf(msg,
    "DAQlogbook_update_triggerClassName(%d,%d,%s,%d,%5.1f, %s, %d) rc:%d",
    runN, classN-1, value, cg, cgtime, dsctxt, daqlistpn, rcdaq);
  if(rcdaq!=0) {
    infolog_trg(LOG_ERROR, msg);
    printf("ERROR %s\n", msg);
    rcex=4; break;
  } else {
    printf("INFO %s\n", msg);
    // without the test below, server crashes (or \n received indicating STOP)
    // ??? Possible reason: cannot print 2 consequtive INFO lines?
    if(daqlistpn>0) printalist(daqlistp);
  };
  ctpc_addclass(classN, value, runN);
  fflush(stdout);
};
if(rcex!=0) {
  ctpc_delrun(runN);
};
updateCNAMES();
infolog_SetStream("",0);
return(rcex);
}
Esempio n. 5
0
/*--------------------------------------------------- updateConfig
update following info in DAQlogbook::
- .rcfg + alignment
- col. schedule
- partition instance name/version (was sent in time of .pcfg)
*/
void updateConfig(int runn, char *pname, char *instname, char *instver) {
int rc, rl; int bm; w32 globflags;
char *mem; char *environ, *envWORK;
char cfgname[200], aliname[200], itemname[200];
char emsg[1000];

#define MAXALIGNMENTLEN 4000
#define MAXRCFGLEN 30000
char alignment[MAXALIGNMENTLEN];
environ= getenv("VMESITE");
envWORK= getenv("VMEWORKDIR"); strcpy(cfgname, envWORK);
if(strcmp(environ,"ALICE")==0) {
  strcpy(aliname, "/home/dl6/snapshot/alidcsvme001/home/alice/trigger/v/vme/WORK/");
} else if(strcmp(environ,"SERVER")==0) {
  strcpy(aliname, "/home/dl6/snapshot/altri1/home/alice/trigger/v/vme/WORK/");
} else {
  printf("INFO strange VMESITE env. var:%s using WORKDIR/WORK\n",environ);
  sprintf(aliname, "%s/WORK/", envWORK);
};
strcat(aliname, "alignment2daq");
rl= readdbfile(aliname, alignment, MAXALIGNMENTLEN); alignment[rl]='\0';
if(alignment=='\0') {
  infolog_trg(LOG_FATAL, "Alignment info in DAQlogbook is empty");
  printf("ERROR Alignment info in DAQlogbook is empty");
};
printf("INFO alignment file len:%d (MAX:%d)\n",rl, MAXALIGNMENTLEN );
sprintf(cfgname,"%s/WORK/RCFG/r%d.rcfg", envWORK, runn);
mem= (char *)malloc(MAXRCFGLEN+1); mem[0]='\0';
rl= readdbfile(cfgname, mem, MAXRCFGLEN); mem[rl]='\0';
printf("INFO %s rcfg file len:%d (MAXlen:%d)\n",cfgname, rl, MAXRCFGLEN );
printf("INFO ctpshmbase2:%p\n", ctpshmbase);
if(rl < 10) {
  sprintf(emsg, "updateConfig: File: %s read error\n",cfgname); 
  infolog_trg(LOG_FATAL, emsg);
  printf("ERROR %s", emsg);
} else {  
  if(ignoreDAQLOGBOOK) { rc=0;}
  else {
    rc= daqlogbook_update_triggerConfig(runn, mem, alignment, effiout);
    printf("INFO daqlogbook_update_triggerConfig rc:%d\n", rc);
  };
  if(rc!=0) {
    sprintf(emsg, "DAQlogbook_update_triggerConfig: rc:%d\n",rc); 
    infolog_trg(LOG_FATAL, emsg);
    printf("ERROR %s", emsg);
  };
};
free(mem);
printf("INFO ctpshmbase3:%p\n", ctpshmbase);
cshmDetach(); printf("INFO shm detached.\n");
cshmInit();   /* without this line and with daqlogbook_update_triggerConfig above, server crashes
in P2, but not in lab. In lab, repeated cshmInit leads to:
[trigger@avmes logs]$ grep -e ctpshmbase -e attached pydimserver.log 
02.10.2015 14:13:28 received:INFO shared memory attached at address 0x7f1028920000
02.10.2015 14:13:28 received:INFO ctpshmbase1:0x7f1028920000
02.10.2015 14:13:44 received:INFO ctpshmbase2:0x7f1028920000
02.10.2015 14:13:44 received:INFO ctpshmbase3:0x7f1028920000
02.10.2015 14:13:44 received:INFO shared memory attached at address 0x7f102891c000
02.10.2015 14:13:44 received:INFO ctpshmbase4:0x7f102891c000
- seems ok (reattached at diffrent address +0x4000)
 */
printf("INFO ctpshmbase4: detached+attached%p\n", ctpshmbase);
bm= cshmBM(); 
globflags= cshmGlobFlags(); 
printf("INFO beammode:%d GlobalFlags:0x%x\n", bm, globflags);   // todo:cs update only for 7(RAMP)..12(UNSTABLE BEAMS)
if(ignoreDAQLOGBOOK) { 
  rc=0;
} else {
  if((bm>=7) && (bm<=12)) {
    rc= daqlogbook_update_cs(runn, CSString);
  } else {
    printf("INFO cs not updated ( bm<7 or bm>12)\n");
  };
  do_partitionCtpConfigItem(pname, itemname);
  rc= daqlogbook_update_ACTConfig(runn, itemname,instname,instver);
};
}
Esempio n. 6
0
/*--------------------*/ void DOcmd(void *tag, void *msg, int *size)  {
/* msg: string finished by "\n\0" */
//printf("DOcmd: tag:%d size:%d msg:%s<-endofmsg\n", *tag, *size,msg);
char mymsg[400];
int stdoutyes=1;
strncpy(mymsg, (char *)msg, 400); 
mymsg[398]='\n'; mymsg[399]='\0';   // force \n (if not given)
if((strncmp(mymsg,"pcfg ",5)==0) || (strncmp(mymsg,"Ncfg ",5)==0) ||
    (strncmp(mymsg,"Acfg ",5)==0) ) {
/* pcfg RUNNUMBER partname    -try ACT download (ECS INIT)
   Ncfg RUNNUMBER partname    -NO ACT, change: Ncfg -> pcfg
   Acfg RUNNUMBER partname    - abort
   \n               -stop this server
   rcfgdel useDAQLOGBOOK
   rcfgdel ignoreDAQLOGBOOK
   rcfgdel ALL 0xc606       -ctpproxy restart
   rcfgdel PARTNAME RUNN    -process in .py, (ECS STOP)
   rcfgdel reload           -just reload parted
   csupdate
   aliasesupdate
   intupdate
   clockshift
   rcfg  -OBSOLETE!
   resetclock   -just write out
*/
  char c; unsigned int rundec=0;
  int rc, infoerr, ix=0, runnactive=0;
  char instname[100]="";
  char version[100]="";
  char pname[60]="";
  char runc[16]="";
  char emsg[500];
  //rc= getname_rn(mymsg, pname, rundec);   moved to DOrcfg()
  while(1) {
    int cix;
    c=(mymsg)[5+ix];
    if((c==' ') || (c=='\n') || (c=='\0')) {
      if(runnactive==0) {
        if(c==' ') {
          ix++; runnactive=1; cix=0;
          continue;
        } else { break; };
      } else {
        if(runc[0]!='\0') {
          rundec=atoi(runc); break;
        };
      };
    };
    if(runnactive==1) {
      runc[cix]=c; runc[cix+1]='\0'; cix++;
    } else {
      pname[ix]= c; pname[ix+1]='\0';
    };
    ix++;
    if(ix>=60) break;
  };
  infolog_SetStream(pname, rundec);
  if(mymsg[0]=='p') {
    char filter[20000]="";
    //actdb_open(); 
    rc=actdb_getPartition(pname,filter, instname, version);
    //actdb_close();
    if(rc==0) {
      sprintf(emsg,"INFO %s (run:%d inst:%s ver:%s) downloaded from ACT.", 
        pname, rundec, instname, version); 
      infoerr=LOG_INFO;
    } else if(rc==1) {
      sprintf(emsg,"ERROR %s (run:%d) not found in ACT, might be OK if shift leader disabled it in ACT (i.e. is in 'Local File' mode)", pname, rundec); 
      infoerr=LOG_ERROR;
    } else {
      sprintf(emsg,"actdb_getPartition(%s) run:%d rc:%d (-2: partition not available in ACT)", pname,rundec,rc); 
      infoerr=LOG_ERROR;
    };
  } else if(mymsg[0]=='A') {
    //printf("INFO Acfg %s %d\n", pname, rundec);
    del_insver(rundec);
  } else {   // Ncfg runnumber partname
    sprintf(emsg,"INFO %s (run:%d) not searched in ACT (ECS:ACT_CONFIG=NO)", 
      pname, rundec); 
    infoerr=LOG_INFO;
    mymsg[0]= 'p';
  };
  if(mymsg[0]=='p') {
    //prtLog(emsg);
    //myprtLog(emsg);
    infolog_trgboth(infoerr, emsg);
    rc= add_insver(rundec, pname, instname, version);
    if(rc==-1) {
      sprintf(emsg,"run:%d, instance/ver will not be stored in ACT", rundec);
      infolog_trg(LOG_FATAL, emsg);
      printf("ERROR %s", emsg);
    };
  };
  infolog_SetStream("",0);
/*---- moved to .rcfg time
  if(ignoreDAQLOGBOOK==1) {
    rcdaq=0;
  } else {
    rcdaq= daqlogbook_open(); //rcdaq=0;
    if(rcdaq!=0) {
      printf("ERROR update_cs: DAQlogbook_open failed rc:%d",rcdaq); rc=4;
      //prtError("DAQlogbook_open failed");
    }else{
      char itemname[200];
      rc= daqlogbook_update_cs(rundec, CSString);
      do_partitionCtpConfigItem(pname, itemname);
      rc_insert= daqlogbook_update_ACTConfig(rundec, itemname,instname,version);
      rcdaq= daqlogbook_close();
    };
    if((rc==0) && (rc_insert==0)) {
      infoerr=LOG_INFO;
    } else {
      infoerr=LOG_FATAL;
    };
    sprintf(emsg,"daglogbook_update_cs rc:%d _update_ACTConfig rc:%d", rc, rc_insert);
    infolog_trg(infoerr, emsg);
  };
-------- moved to .rcfg */
//                        1...,...10....,....20..3
} else if((strncmp(mymsg,"rcfgdel ignoreDAQLOGBOOK",23)==0)) {
  int rcdaq;
  ignoreDAQLOGBOOK=1;
  rcdaq= daqlogbook_close();
  if(rcdaq==-1) {
    printf("ERROR DAQlogbook_close failed\n");
  } else {
    printf("INFO DAQlogbook closed:rc:%d (ignoreDAQLOGBOOK from ctpproxy received)\n",rcdaq);
  };
  stdoutyes=0;
  //cshmSetGlobFlag(FLGignoreDAQLOGBOOK);
} else if((strncmp(mymsg,"rcfgdel useDAQLOGBOOK",20)==0)) {
  int rcdaq;
  rcdaq= daqlogbook_open(); //rcdaq=0;
  if(rcdaq!=0) {
    printf("ERROR DAQlogbook_open failed rc:%d",rcdaq);
    ignoreDAQLOGBOOK=1;
    cshmSetGlobFlag(FLGignoreDAQLOGBOOK);
  } else {
    ignoreDAQLOGBOOK=0;
    cshmClearGlobFlag(FLGignoreDAQLOGBOOK);
  };
  stdoutyes=0;
} else if((strncmp(mymsg,"rcfgdel ALL 0x...",11)==0)) {   //ctpproxy [re]start
  //int irc;
  printf("INFO rcfgdel ALL 0x... (redis, readTables...)\n");
  red_clear_detsinrun(0);
  reset_insver();
  readTables();
  ctpc_clear(); updateCNAMES();
  /*irc=*/ check_xcounters();
} else if((strncmp(mymsg,"rcfgdel reload",14)==0)) {   //reload parted
  // perhaps it is reasonable to clean (even if ctpproxy did not restart but is 
  // without active partitions)
  //reset_insver();
  //readTables();
  //ctpc_clear(); updateCNAMES();
  //printf("INFO rcfgdel reload\n");
  ;
} else if((strncmp(mymsg,"rcfgdel ",8)==0)) {   // rcfgdel partname runn
  enum Ttokentype t1; int ixl, runn; char pname[16]; char intval[16];;
  char emsg[200];
  emsg[0]='\0';
  ixl=8; t1= nxtoken(mymsg, pname, &ixl);   // runNumber
  if(t1==tSYMNAME) {
    t1= nxtoken(mymsg, intval, &ixl);   // runNumber
    if(t1==tINTNUM) {
      runn= str2int(intval);
      // from 26.2. maybe not needed here, but seems ok when INIT brings ctpproxy to LOAD_FAILURE
      del_insver(runn);  
    } else {
      sprintf(emsg,"pydimserver: bad run number in rcfgdel %s cmd", pname);
    };
  } else {
    sprintf(emsg,"pydimserver: bad part. name in %s cmd", mymsg);
  };
  if(emsg[0]=='\0') {
    red_clear_detsinrun(runn);
    ctpc_delrun(runn); updateCNAMES();
  } else {
    infolog_trg(LOG_ERROR, emsg); printf("ERROR %s\n",emsg);
  };
} else if((strncmp(mymsg,"csupdate",8)==0)) {
  int csclients; // char *cs;
  /*cs=*/ readCS();
  csclients= dis_update_service(CSid);
  printf("INFO CS update for %d clients\n", csclients);
  stdoutyes=0;
} else if((strncmp(mymsg,"aliasesupdate",13)==0)) {
  int rc;
  rc= readAliases(); 
  if(rc==-1) {
    char emsg[200];
    strcpy(emsg,"aliasesupdate: info from aliases.txt not updated correctly");
    infolog_trg(LOG_INFO, emsg); printf("ERROR %s\n",emsg);
  };
  stdoutyes=0;
} else if((strncmp(mymsg,"intupdate",9)==0)) {
  int rc1, rc2;
  rc1= getINT12fromcfg(INT1String, INT2String, MAXINT12LINE);
  printf("INFO rc:%d INT1:%s INT2:%s\n", rc1, INT1String, INT2String);
  rc1= dis_update_service(INT1id);
  rc2= dis_update_service(INT2id);
  printf("INFO INT1/INT2 update for %d/%d clients\n", rc1, rc2);
  stdoutyes=0;
} else if((strncmp(mymsg,"clockshift ",11)==0)) {
  char halfns[20]; int ix,rc;
  unsigned int hns,cordeval,last_applied;
  /* char c; halfns[0]='\0';
  for(ix=0; ix<40; ix++) {
    c= mymsg[11+ix]; 
    if((c=='\0') || (c=='\n')) {
      halfns[ix]= '\0'; break;
    };
    halfns[ix]= c;
  }; 
  halfns[20]= '\0';*/
  ix= sscanf(&mymsg[11], "%d %d %d\n", &hns, &cordeval, &last_applied);
  if( (ix<2) || (hns>63) || (cordeval>1023) ) {
    printf("ERROR set clockshift %d %d incorrect, not updated.\n",hns, cordeval);
  } else {
    //int csclients;
    sprintf(halfns, "%d %d %d", hns, cordeval, last_applied);
    rc= writedbfile("clockshift", halfns);   // 2ints: halfns cordereg
    //csclients= dis_update_service(CSid);  is not here
    printf("INFO set clockshift %s. rc(=chars):%d \n", halfns, rc);
  };
  stdoutyes=0;
} else if((strncmp(mymsg,"rcfg ",5)==0)) {   // moved to DOrcfg()
  printf("ERROR rcfg cmd ignored (processed by CTPRCFG cmd\n");
  stdoutyes=0;
} else if((strncmp(mymsg,"resetclock",9)==0)) {
  ;
};
if(strcmp(mymsg,"\n")==0) {
  //stopserving();
  myprtLog("Quitting server...");
  printf("stop\n"); fflush(stdout);
  //sleep(1);
  //exit(0);
};
if(stdoutyes==1) {   /*
  pcfg 
    -prepare .pcfg (parted.py)
    - scp .pcfg
  rcfg partName NNN clu1 clu2 ... clu6 cl1 ... clNCLASS NewLine
    -prepare .rcfg (parted.py)
    -
  smaqmv
  */
  printf("%s",mymsg); fflush(stdout);
};
}
Esempio n. 7
0
/*--------------------*/ void DOrcfg(void *tag, void *bmsg, int *size)  {
// bmsg: binary message TDAQInfo
TDAQInfo *dain; int rc; unsigned int rundec; char pname[40];
//printf("INFO DOrcfg len:%d %lu\n", *size,sizeof(TDAQInfo));
if(*size != sizeof(TDAQInfo)){
 char emsg[ERRMSGL];
 sprintf(emsg, "DOrcfg: Structure dim size different from command size.");
 infolog_trg(LOG_FATAL, emsg);
 printf("ERROR %s\n", emsg);
 return ;
} 
dain= (TDAQInfo *)bmsg;
//printTDAQInfo(dain);
printf("INFO DOrcfg msg:%s", dain->run1msg); 
rc= getname_rn(dain->run1msg, pname, &rundec);
if(check_xcounters()) return;
if(rc==0) {
  //printf("INFO effiout:0x%x\n", effiout);
  /*new from aug2015:
  effiout: bit pattern of inp. detectors effectively filtered out
  not used: prepared if DAQ wants in future 'per cluster' -in that 
    case 'per cluster' info
   -should by passed in TDAQInfo structure from ctp proxy (now it is not) or
   -somehow, pydimserver.py should deliver 'per cluster' (now delivering 'per partition')
  red_update_detsinrun() invoked also in following call
  */
  rc= daqlogbook_update_clusters(rundec, pname, dain, ignoreDAQLOGBOOK); //, effiout);
  printf("INFO Dorcfg rc=%i \n",rc);
  //printf("%s",dain->run1msg); fflush(stdout);  moved down
  if(rc==0) { // inputs -> DAQ
    int level,maxinp,ix,ind,rcu;
    for(level=0; level<3; level++) {
      if(level==2) {maxinp=12; }
      else         {maxinp=24; }
      for(ix=0; ix<maxinp; ix++) {
        ind= findInput(level, ix+1);
        if(ind==-1) continue;
        if(ignoreDAQLOGBOOK) { rcu=0;
          //printf("INFO L%d.%d %s\n", level, ix+1, validCTPINPUTs[ind].name);
        } else {
          rcu= daqlogbook_insert_triggerInput(rundec,   
            ix+1, validCTPINPUTs[ind].name, level);
          printf("INFO L%d.%d %s\n", level, ix+1, validCTPINPUTs[ind].name);
        };
        if(rcu != 0) {
          char emsg[ERRMSGL];
          sprintf(emsg, "daqlogbook_insert_triggerInput(%d,%d,%s,%d) rc:%d",
            rundec,ix+1, validCTPINPUTs[ind].name, level, rcu);
          infolog_trg(LOG_FATAL, emsg);
          printf("ERROR %s\n", emsg);
          break;
        };
      }; 
    };
    printf("%s",dain->run1msg); fflush(stdout);
  } else {
    char emsg[ERRMSGL];
    sprintf(emsg,"DAQlogbook_update_cluster failed. rc:%d", rc);
    infolog_trgboth(LOG_FATAL, emsg);
  };
};
}
Esempio n. 8
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);
}
Esempio n. 9
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);
}