Exemple #1
0
int main() {
char *eof; char line[100];
int customer;
cshmInit();
while(1) {
  printf("l cust   u cust   h[elp] p[rint] q[uit]:");
  eof=fgets(line, 100, stdin);
  if(eof==NULL) break;
  if(line[0]=='q') break;
  if(line[0]=='l') {
    customer= atoi(&line[2]);
    lockBakery(&ctpshmbase->swtriggers, customer);
  } else if(line[0]=='u') {
    customer= atoi(&line[2]);
    unlockBakery(&ctpshmbase->swtriggers, customer);
  } else if(line[0]=='p') {
    printBakery(&ctpshmbase->swtriggers);
  } else if(line[0]=='h') {
printf("Now l/u/p concerns swtriggers. bakery alg. used for\n\
2 groups of tasks (initialised in main_ctp.c):\n\
initBakery(swtriggers,4): 0:SOD/EOD 1:gcalib 2:ctp.exe 3:dims\n\
initBakery(ccread,5): 0:proxy 1:dims 2:ctp+busytool 3:smaq 4:inputs\n\
");
  } else {
    continue;
Exemple #2
0
/* ------------------------------------------------------------ GenSwtrg 
orbitn[0]: orbit number read just before the first trigger generation, i.e.
        it is always <= of ORBITID of the sw. trigger event
orbitn[1,2]: tsec tusec -ONLY IN CASE OF 'c' trigger !
RC: number of L2a successfully generated, or
    12345678: cal. triggers stopped because det. is not in global run or
    0xffffffxx: where xx is flag (see above). ONLY IN CASE of one 'c' trigger
*/
int  GenSwtrg(int ntriggers,char trigtype, int roc, w32 BC,w32 detectors, 
              int customer, w32 *orbitn ){
int flag,itr=0;
int l0=0,l1=0,l2a=0,l2r=0, lm=0;
w32 status, orbitnloc[3];
if(l0C0()) {
  status=vmer32(L0_TCSTATUS);
} else {
  status=vmer32(L0_TCSTATUS);
};
if((status&0x10)==0x10){
  printf(" GenSwtrg: TC busy. L0 TC_STATUS:0x%x\n", status);
  return 0;
}
if(detectors & 0x20000) {
  printf("GenSwtrg: CTP (ECS number 17) cannot be sw triggered, bit17 removed\n");
  detectors= detectors & (~0x20000);
};
if(trigtype=='c') {
  w32 det2runn[NDETEC];   // not used here, just to satisfy next call...
  status= cshmGlobalDets(det2runn);
  //if(strcmp("ALICE", getenv("VMESITE"))==0) 
  if(strcmp("ALICE", "ALICE")==0) {
    if((status & detectors)!=detectors) {
      printf("GenSwtrg: calibrated dets:%x but dets in global run(s):%x\n", 
        detectors,status);
      return 12345678;   //magic used in ctp/testclass.py
    };
  } else {
    status= detectors;
    if(msgpres==0) {
      printf("Presence of dets in glob. run not checked!!!\n");
      msgpres++;
    };
  };
};
lockBakery(&ctpshmbase->swtriggers, customer);
if( setswtrig(trigtype,roc,BC,detectors)!=0) {
  l2a=0; flag=11; goto RELEASERET;
};
while(((itr<ntriggers) && ((flag=startswtrig(orbitnloc))))){
  if(itr==0) {
    *orbitn= orbitnloc[0];
    if(trigtype == 'c') {   // also time in case of cal. trigger
      orbitn[1]= orbitnloc[1]; orbitn[2]= orbitnloc[2];
    };
  };
  if(flag == 1)l0++;
  else if(flag == 2)l1++;
  else if(flag == 3)l2r++;
  else if(flag == 4)l2a++;
  else if(flag ==10)lm++;
  else {
    printf(" GenSwtrg: unexpected flag %i\n",flag);
    goto RELEASERET;
  }
  itr++;
  //usleep(60000000);
};
if(DBGswtrg3==1) {
int ifo;
for(ifo=0;ifo<NFO;ifo++){   // set all FOs always
  //printf("FO:%d\n",ifo);
  if((notInCrate(ifo+FO1BOARD)==0)) {
    w32 vmeaddr,val;
    vmeaddr= FO_TESTCLUSTER+BSP*(ifo+1);
    val=vmer32(vmeaddr);
    //if((DBGswtrg3==1)&&(val!=0)) printf("setswtrig FOr:%d Raddr: 0x%x data: 0x%x\n",
    if(val!=ifoglob[ifo]) printf("ERROR setswtrig FOr:%d Raddr: 0x%x dataw r: 0x%x 0x%x\n",
      ifo, vmeaddr, ifoglob[ifo], val);
  }
};
};
RELEASERET:
unlockBakery(&ctpshmbase->swtriggers, customer);
if(DBGswtrg4) {
  printf(" GenSwtrg: %i %c-triggers generated for detectors:0x%x.\n",
    itr,trigtype, detectors);
  printf("flag lm/l0,l1,l2r,l2a: %d %i %i %i %i \n",flag,l0,l1,l2r,l2a);
};
TRIGTYPE='.';
if((trigtype=='c') && (ntriggers==1)) {
  // 1 calib. event, i.e. special RC: 0xffffff00 + flag
  // flag 0x4: ok -full cal. event successfully generated
  //           see startswtrig() for possible flags
  return(0xffffff00 | flag);
} else {
  return l2a;
};
}