Exemplo n.º 1
0
/*-----------------------------------------------*/ void newclock(void *tag) {
/* this thread started with 2 events( only 1 available in one time):
- clock change
- DLL_RESYNC
*/
printf("newclock thread started. clocktran:%d tag:%d quit:%d\n", 
  clocktran, *(int *)tag, quit); fflush(stdout);
while(clocktran>=0) {
  int nclients;
  nclients= dis_update_service(MICLOCK_TRANSITIONid);
  printf("updated MICLOCK_TRANSITION clients:%d clocktran:%d\n", nclients, clocktran);
  if(clocktran==0) break;
  dtq_sleep(SLOT_S);
  clocktran--; sprintf(clocktransition,"%d", clocktran);
  if(clocktran==0) {
    if(*(int *)tag==0) {
      /*int rc;
      char cmd[]="$VMECFDIR/ttcmidaemons/sctel.py MININF";
      DLL_RESYNC(DLL_info); // commented 19092014
      //printf("DLL_RESYNC + clearing the scope persistance\n");
      rc= system(cmd);   commented 19092014
      printf("DLL_RESYNC + MININF not done!\n"); */
      DLL_RESYNC(DLL_info);
    } else {
      setbcorbit(*(int *)tag); 
      nclients= dis_update_service(MICLOCKid);
      printf("updated MICLOCK clients:%d\n", nclients);
    };
  };
  if(quit==1) clocktran=0;
};
}
Exemplo n.º 2
0
int update_qpll() {
int rc,rcret=0; w32 stat; 
//int mainerr,mainlck,bc1err,bc1lck; char buffer[50];
if(envcmp("VMESITE", "ALICE")==0) {
  if(micratepresent()& 0x2) {
    stat= readstatus();
  } else { stat=0xfff; };
  // update freqs:
  if(micratepresent()& 0x1) {
    getRFRX(vspRFRX[0], rfrx1); getRFRX(vspRFRX[1], rfrx2);
    freqs[0]= rfrx1[2].freq; freqs[1]= rfrx2[2].freq;
    freqs[2]= rfrx1[1].freq; freqs[3]= rfrx2[1].freq;
  };
  //printf("ref bc1 orbit1\n"); printf("--- bc2 orbit2\n");
} else {
  /* simulate change:
  stat= qpllstat+1;
  rfrx1[2].freq= rfrx1[2].freq + 1;
  rfrx2[2].freq= rfrx2[2].freq + 1;
  rfrx1[1].freq= rfrx1[1].freq + 10;
  rfrx2[1].freq= rfrx2[1].freq + 10; */
  ;  // do not change
};
if((freqs[0] != rfrx1[2].freq) ||
   (freqs[1] != rfrx2[2].freq) ||
   (freqs[3] != rfrx1[1].freq) ||
   (freqs[4] != rfrx2[1].freq)
) {
  rc= dis_update_service(FREQSid);
};
//stat=qpllstat+1; //simulate change
if(stat != qpllstat) {
  char msg[100];
  qpllstat= stat;
  sprintf(qpllnow,"%3.3x", qpllstat);
  rc= dis_update_service(QPLLid);
  if((stat | REF_MASK) != (qpllstat | REF_MASK)) {
    sprintf(msg, "QPLL update (ref ignored here) rc:%d qpllstat:0x%x",
      rc,qpllstat);
    prtLog(msg);
  };
  /*
  mainerr= (qpllstat & 0x2)>>1; mainlck= (qpllstat & 0x1);
  bc1err= (qpllstat & 0x80)>>7; bc1lck= (qpllstat & 0x40)>>6;
  sprintf(buffer, "mon ds006:ds007:ds008:ds009 N:%d:%d:%d:%d", 
    mainerr, mainlck, bc1err, bc1lck);
  rc= udpsend(udpsock, (unsigned char *)buffer, strlen(buffer)+1);
  prtLog(buffer); */
};
nlogqpll++;
if((nlogqpll % 36000)==0) {    // 3600:log 1 per 2 hours
  char msg[100];
  sprintf(msg, "qpllstat%d:0x%x", nlogqpll, qpllstat);
  prtLog(msg);
};
if(quit!=0) rcret=10;
return(rcret);
}
Exemplo n.º 3
0
/*-----------------------------------------------*/ void newclock(void *tag) {
/* this thread started with 2 events( only 1 available in one time):
- clock change
- DLL_RESYNC
*/
rcnewclock= 888;
newclockstarts++;
printf("newclock thread started. clocktran:%d tag:%d quit:%d\n", 
  clocktran, *(int *)tag, quit); fflush(stdout);
while(clocktran>=0) {
  int nclients;
  nclients= dis_update_service(MICLOCK_TRANSITIONid);
  printf("updated MICLOCK_TRANSITION clients:%d clocktran:%d\n", nclients, clocktran);
  if(clocktran==0) break;
  dtq_sleep(SLOT_S);
  clocktran--; sprintf(clocktransition,"%d", clocktran);
  if(clocktran==0) {
    if(*(int *)tag==0) {
      /*int rc;
      char cmd[]="$VMECFDIR/ttcmidaemons/sctel.py MININF";
      DLL_RESYNC(DLL_info); // commented 19092014
      //printf("DLL_RESYNC + clearing the scope persistance\n");
      rc= system(cmd);   commented 19092014
      printf("DLL_RESYNC + MININF not done!\n"); */
      DLL_RESYNC(DLL_info);
    } else {
#define reslen 3200
      int rc; char server[24]; char cmd[80]; char result[reslen];
      if(envcmp("VMESITE", "ALICE")==0) {
        strcpy(server, getenv("SERVER_NODE"));
      } else {
        strcpy(server, "adls");
      };
      infolog_trgboth(LOG_WARNING, "ALICE clock changed, restaring ctpproxy (25s)...");
      sprintf(cmd, "ssh trigger@%s ctpproxy.py restart nomasks", server);
      setbcorbit(*(int *)tag); 
      nclients= dis_update_service(MICLOCKid);
      printf("updated MICLOCK clients:%d\n", nclients);
      //printf("updated MICLOCK clients:%d, now ctpproxy.py restart nomasks...\n", nclients);
      rc= popenread(cmd, result, reslen);
      if(rc==EXIT_FAILURE) { 
        printf("ERROR cmd:%s rc:%d\n", cmd, rc);
      } else {
        printf("result(len:%d):%s\n", strlen(result), result);
      };  
    };
  };
  if(quit==1) clocktran=0;
}; clocktran_s=0;
rcnewclock= 0;
}
Exemplo n.º 4
0
---------------------------------------*/ int setbcorbit(int tag)  {
int rc;
char buffer[50];
printf("setting ttcmi clock:%d\n", tag);
if(micratepresent()==0) {
#define MAXdbhns 40
  char dbhns[MAXdbhns]; int ldbhns;
  ldbhns= readclockshift(dbhns, MAXdbhns);
  printf("mi crate not present. readclockshift:%d:%s:\n", ldbhns,dbhns);
  if(tag==1) {bcmvme=3; omvme=0; 
  } else if(tag==2) {bcmvme=2; omvme=1; 
  } else if(tag==3) {bcmvme=1; omvme=2; 
  } else if(tag==4) {bcmvme=0; omvme=2; 
  } else {
    printf("novme setbcorbit: bad tag:%d bcmvme:%x omvme:%x\n", tag, bcmvme, omvme);
  return(0);
  };
} else {
 setbcorbitMain(tag);
};
rc= dis_update_service(SHIFTid);
printf("TTCMI/SHIFT updated for %d clients\n", rc);  
sprintf(buffer, "mon ds005 N:%d", tag); 
rc= udpsend(udpsock, (unsigned char *)buffer, strlen(buffer)+1);
getclocknow();
return(tag);
}
Exemplo n.º 5
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); 
};
}
Exemplo n.º 6
0
/*------------------*/ void refresh(void *tag, void *msgv, int *size)  {  
Tenablemsg *msg= (Tenablemsg *)msgv;
int nclients,ixt; char base[12];
ixt= findbase(msg->name, base);
//HW_enable(base, msg->mask);
nclients= dis_update_service(fanis[ixt].dimserid);
printf("refresh: name:%s size:%d updated clients:%d\n", msg->name, *size, nclients);
fflush(stdout);
}  
Exemplo n.º 7
0
int main(void)
{
	DIR *dir;
	struct dirent *dirent;
	char dev[16];      // Dev ID
	char devPath[128]; // Path to device
	char buf[256];     // Data from device
	char tmpData[6];   // Temp C * 1000 reported by device 
	char path[] = "/sys/bus/w1/devices"; 
	ssize_t numRead;


	(void) signal(SIGINT, ex_program);

	intializeDIM();
//	initialiseDb("/usr/local/lib/dbd","/data/online/TemperatureLogger","TC08_temperatures.sqlite");

	dir = opendir (path);
	if (dir != NULL)
	{
		while ((dirent = readdir (dir)))	// 1-wire devices are links beginning with 10-
			if (dirent->d_type == DT_LNK && strstr(dirent->d_name, "10-") != NULL) 
			{ 
				strcpy(dev, dirent->d_name);
				printf("\nDevice: %s\n", dev);
			}
			(void) closedir (dir);
	}
	else
	{
		perror ("Couldn't open the w1 devices directory");
		return 1;
	}

// Assemble path to OneWire device
		sprintf(devPath, "%s/%s/w1_slave", path, dev);
	// Read temp continuously
	// Opening the device's file triggers new reading
	while(1) 
	{
		int fd = open(devPath, O_RDONLY);
		if(fd == -1)	{	perror ("Couldn't open the w1 device.");	return 1;	}
		while((numRead = read(fd, buf, 256)) > 0) 
		{
			strncpy(tmpData, strstr(buf, "t=") + 2, 5);
			float tempC = strtof(tmpData, NULL);
			printf("Device: %s  - Temp: %.3f C  \n", dev,tempC / 1000);
			FormatedData = tempC / 1000;
	 		dis_update_service(ServiceId);
		}
		usleep(1000000);
		close(fd);
	} 		
	return 0;
}
Exemplo n.º 8
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);
};
}
Exemplo n.º 9
0
void updateCNAMES() {
int nclients;
ctpc_print(CNAMESString);
nclients= dis_update_service(CNAMESid);
printf("INFO CNAMES update for %d clients\n", nclients);
}