Ejemplo n.º 1
0
/*FGROUP ALItools
To be written. We do not need it untill any L2 inputs exits
*/
int take3SSM(int ntimes){
 int i,dontcare;
 int boards[3];
 int offset1,offset2;
 boards[0]=1;
 boards[1]=2;
 boards[2]=3;
 setomSSM(1,0xa);
 setomSSM(2,0xa);
 setomSSM(3,0xa);
 for(i=0;i<ntimes;i++){
   if(startSSMnor(3,boards)){
    printf("startSSM error: SSMs have not started inside one ORBIT. Sync not possible \n");
   }
 }
 usleep(40000);
 readSSM(1);
 readSSM(2);
 readSSM(3);
 IDread++;
 dontcare= syncSSM(3,boards);
 printf("offsets: %i %i %i\n",sms[1].offset,sms[2].offset,sms[3].offset);
 offset1=sms[1].offset-sms[2].offset;
 offset2=sms[1].offset-sms[3].offset;
 add2SSM0(sms[1].sm,8,31,0,0);   
 add2SSM0(sms[2].sm,8,31,1,offset1);   
 add2SSM0(sms[3].sm,6,17,2,offset2);   
 return 0;
}
Ejemplo n.º 2
0
/*FGROUP ALItools
---------------------------------------------------------------------------------------
Record and read and synchronise 2 SSMs
*/
int take2SSM(int board1,int board2,int ntimes){
 int boards[2];
 int i,dontcare;
 int rare,counter;
 int chan01,chanM1,level1;
 int chan02,chanM2,level2;
 w32 offset;

 rare = (board1 == RareFlag.board) || (board2 == RareFlag.board);
 if(board2 == RareFlag.board){  // board1 assumed to have flag
   int board = board2;
   board2=board1;
   board1=board;
 }
 printf("take2SSM: rare= %i\n",rare);
  if(rare){
   counter=findcounter(RareFlag.board,RareFlag.mode,RareFlag.input);
   if(counter == 0){
    printf("take2SSM: Unknown input: %i \n",RareFlag.input);
    return 1;
   }
   setomSSM(board1,0xb);
   setomSSM(board2,0xb);
 }else{
   setomSSM(board1,0xa);
   setomSSM(board2,0xa);
 }

 board2pars(board1,&chan01,&chanM1,&level1);
 board2pars(board2,&chan02,&chanM2,&level2);
 boards[0]=board1;
 boards[1]=board2;
 
 // board2 starts first
 for(i=0;i<ntimes;i++){
   if(startSSMnor(2,boards)){
    printf("startSSM error: SSMs have not started inside one ORBIT. Sync not possible \n");
   }
   usleep(40000);
  if(rare){
    condstopSSM(board1,counter,100,10000,4);
    stopSSM(board2);
  }else{
    stopSSM(board1);
    stopSSM(board2);
  }
   readSSM(board1);
   readSSM(board2);
   IDread++;
   dontcare= syncSSM(2,boards);
   printf("offsets: %i %i\n",sms[board1].offset,sms[board2].offset);
   offset=sms[1].offset-sms[2].offset;
   add2SSM0(sms[board1].sm,chan01,chanM1,level1,0);   
   add2SSM0(sms[board2].sm,chan02,chanM2,level2,offset);   
 }
 return 0;
}
Ejemplo n.º 3
0
/*FGROUP ALItools
----------------------------------------------------------------------------
Record and read 1SSM
*/
void takerbSSM(int ntimes){
 int i,chan0=0,chanM=31,level=24;
 int rare,counter;
 int board=1;
 rare = (board == RareFlag.board) && (RareFlag.mode == 1);
 if(rare){
   counter=findcounter(RareFlag.board,RareFlag.mode,RareFlag.input);
   if(counter == 0){
    printf("take1SSM: Unknown input: %i \n",RareFlag.input);
    return;
   }
   setomSSM(board,0x3);
 }else setomSSM(board,0x2);
 for(i=0;i<ntimes;i++){   
  startSSM1(board);
  usleep(30000);
  if(rare){
    condstopSSM(board,counter,5000,13000,ccread_inputs);
  }else{
   stopSSM(board);
  }
  readSSM(board);
  IDread++;
  //filter(sms[board].sm,25);
  add2SSM0(sms[board].sm,chan0,chanM,level,0);
 }
}
Ejemplo n.º 4
0
/*FGROUP ALItools
------------------------------------------------------------------------------
Record and read 1SSM
*/
void take1SSM(int board,int ntimes){
 int i,chan0,chanM,level,rare,counter;
 rare = (board == RareFlag.board) && (RareFlag.mode == 0);
 board2pars(board,&chan0,&chanM,&level);
 if(rare){
   counter=findcounter(RareFlag.board,RareFlag.mode,RareFlag.input);
   if(counter == 0){
    printf("take1SSM: Unknown input: %i \n",RareFlag.input);
    return;
   }
   setomSSM(board,0xb);
 }
 else setomSSM(board,0xa); //before after
 printf("take1SSM: rare,board,counter: %i %i %i\n",rare,board,counter);
 for(i=0;i<ntimes;i++){   
  startSSM1(board);
  usleep(30000);
  if(rare){
    printf("take1SSM:  2 rare,board,counter: %i %i %i ",rare,board,counter);
    condstopSSM(board,counter,100,10000,ccread_inputs);
    printf(" finished succesfuly \n");
  }else{
    stopSSM(board);
  }
  readSSM(board);
  IDread++;
  add2SSM0(sms[board].sm,chan0,chanM,level,0);
 }
}
Ejemplo n.º 5
0
int main(int argc, char *argv[]) {
	SensorA sens_data;
	SSM_sid sensA_sid;
	double measured_time;
	int tid;
	double now_time;

	initSSM();
	sensA_sid = openSSM("sensor_A", 0, 0);

	while (1) {
		now_time = gettimeSSM(); //現在時刻を取得

		//現在時刻の1秒前のデータを取得
		tid = readSSM_time(sensA_sid, (char*) &sens_data, now_time - 1,
				&measured_time);
		printf("nowtime=%f\n   time=%f tid=%d a=%f b=%f c=%d\n", gettimeSSM()
				- 1, measured_time, tid, sens_data.a, sens_data.b, sens_data.c);
		//その一つ後のデータを取得
		//tid++;
		tid = readSSM(sensA_sid, (char*) &sens_data, &measured_time, tid + 1);
		printf("   time=%f tid=%d a=%f b=%f c=%d\n\n", measured_time, tid,
				sens_data.a, sens_data.b, sens_data.c);

		sleep(1);
	}
}
Ejemplo n.º 6
0
/*FGROUP SSM */
void printSSM(int words) {
w32 ssm[Mega];
int ix,rc;
rc=readSSM(ssm);
printf("readSSM rc:%d\n",rc);
for(ix=0; ix<words; ix++) {
  printf("%4d: %8x\n", ix, ssm[ix]);
};
}
Ejemplo n.º 7
0
/*FGROUP SimpleTests
vmeadd: vme address on FO
         in pedja notation to be used as trigger
e.g.: to trigger on serial number vmeadd= 0x2
timeout: number of loops to wait
         if timeout == 0, than infinite loop
busy: inmon
l0: outmon
l1: outmon
l2: inmon
fo:inmono1

NO ALIGNMENT os snapshots.
*/
int trdssmtrigger(int vmeadd,int timeout){
 int i,j,ret,n=0;
 //w32 cntmem[NCOUNTERS];
 int flag=0,flag2=1;
 int boards[NSSMBOARDS];
 //int boards[NCTPBOARDS];
 w32 cntval1,cntval2;
 int cntpos;
 int counter=0;
 if(timeout == 0){
    flag=1;
    flag2=0;
 }
 for(i=0;i<NSSMBOARDS;i++)boards[i]=0;
 vmeadd=0x1000+4*vmeadd;
 // none for backward compatibility
 setboard(&n,NSSMBOARDS-1,boards,0x0,"none");
 // L0 counters
 cntpos=counter+65;
 //L1 counters
 //cntpos=counter+165;
 //condstopSSM(board,counter,5000,13000);
 //busy board: inmon, continuos 
 setboard(&n,0,boards,0xb,"busy_inmon");
 //l0 board: inmon, continuos
 setboard(&n,1,boards,0x3,"l0_outmon");
 //l1 board:
 setboard(&n,2,boards,0x3,"l1_outmon");
 //l2 board: inmon, continuos
 setboard(&n,3,boards,0xb,"l2_inmon");
 //int board: inmon, continuos
 //setomSSM(4,0xb);
 //setsmssw(4,"int_inmon");
 //fo1 board: inmon, continuos - 
 setboard(&n,5,boards,0x13,"fo_inmonl1");
 //setboard(&n,6,boards,0x13,"fo_inmonl1");
 //setboard(&n,7,boards,0x13,"fo_inmonl1");
 //setboard(&n,8,boards,0x13,"fo_inmonl1");
 //setboard(&n,9,boards,0x13,"fo_inmonl1");
 //setboard(&n,10,boards,0x13,"fo_inmonl1");
 // read counters 1st time
 //readCounters(cntmem, NCOUNTERS, 0); cntval1=cntmem[cntpos];
 cntval1=vmer32(vmeadd);
 printf("cntval1=%u \n",cntval1);
 // start SSM
 //startBoardsN(n,boards,0,0);
 for(i=1;i<n;i++){
   int boardoffset=BSP*ctpboards[boards[i]].dial; 
    vmew32(SSMaddress+boardoffset,0);
    vmew32(SSMstart+boardoffset, DUMMYVAL);
 }
 //for(i=0;i<n;i++)printf("%i %i\n",i,boards[i]);printf("\n");
 //
 usleep(1000000);
 j=0;
 while((j<timeout) || flag){
  //readCounters(cntmem, NCOUNTERS, 0); cntval2=cntmem[cntpos];
  cntval2=vmer32(vmeadd);
  //printf("cntval2=%u \n",cntval2);
  //if(cntval2 != cntval1 || flag2){
  if(cntval2 != 0){
    //for(i=1;i<n;i++)stopSSM(boards[n-i]);
    for(i=1;i<n;i++){
       //stopSSM(boards[i]);
       w32 busy;
       int boardoffset=BSP*ctpboards[boards[i]].dial;
       vmew32(SSMstop+boardoffset,DUMMYVAL);
       busy = vmer32(SSMstatus+boardoffset);
       //printf(" 0x%x\n",busy);
       busy = busy & 0x100;
       if(busy){
         printf("HW error board %i\n",boards[i]);
         return 0;
	}
    }
    printf("Error detected: 0x%x\n",cntval2);
    break;    
  }
  j++;
 } 
 //usleep(100000);
 for(i=1;i<n;i++){
   printf("Reading board %i\n",boards[i]);
   readSSM(boards[i]);
 }

 // synchronise
 //FindOrbitChannel(NCTPBOARDS,boards);
 sms[boards[0]].orbit=33;
 for(i=1;i<n;i++){
   printf("board %i %i\n",i,boards[i]);
   sms[boards[i]].orbit = 0;   
 }
 ret=syncSSM2(n,boards);
 printf("cntval2=%u \n",cntval2);
 return ret;

}