Beispiel #1
0
int main(int argc, char *argv[]) {
	int i, size;

	if(argc == 3 && strncmp(argv[1], "-x", 2) == 0) {
	    hex++;
	    argv++;
	} else if(argc != 2) {
	    fprintf(stderr,"Usage: rmvalue variable name from rm_allocation\n");
	    exit(1);
	}
	rm_status=rm_open(antlist);
	if(rm_status != RM_SUCCESS) {
	    rm_error_message(rm_status,"rm_open()");
	    fprintf(stderr, "I can't do anything without reflective memory\n");
	    exit(1);
	}
	ParseName(argv[1]);
	fprintf(stderr, "Type %c, baseSize %d  ", type,
		baseSize);
	size = baseSize;
	if(ndims > 0) {
	    fprintf(stderr, "%d dimension(s) (", ndims);
	    for(i = ndims - 1; i >= 0; i--) {
		fprintf(stderr, " %d ", dimensions[i]);
		size *= dimensions[i];
	    }
	    putc(')', stderr);
	}
	putc('\n', stderr);
	arg = malloc(size);
	rm_status=rm_read(RM_ANT_0,argv[1], arg);
	if(rm_status != RM_SUCCESS) {
	    rm_error_message(rm_status,"rm_read()");
	}
	while(dimensions[1]-- > 0) {
	    for(i = 0; i < dimensions[0]; i++) {
		PrintValue();
	    }
	    putchar('\n');
	}
	putchar('\n');
	return(0);
}
Beispiel #2
0
int main(int argc, char **argv)
{
	float Azoff_avg,Eloff_avg,Az_avg,El_avg,Azerr_avg,Elerr_avg,Azmod_avg,Elmod_avg,Data_avg;
	float xx[20000],yy[20000],zz[20000],azyy[20000],elyy[20000],azp[20000],elp[20000],xx2[20000],yy2[20000];
	int i,j,iavg;
	char c,*t,*s,*curtim,file_n1[50],source[40];
	time_t new_time,old_time,cur_time;
	FILE *fp;
	int rm_status, antlist[RM_ARRAY_SIZE];/*variables for encoderClient*/
	float az_deg,el_deg,az_err,el_err,az_mod,el_mod,chop_angle,chop_x,chop_y,chop_z;
	double output, az_off, el_off;
	smapoptContext optCon;
	struct  smapoptOption optionsTable[] = {
		{"help",'h',SMAPOPT_ARG_NONE,0,'h'},
		{"antennas",'a',SMAPOPT_ARG_INT,&ant_num,'a'},
		{"print",'p',SMAPOPT_ARG_NONE,0,'p'},
		{NULL,0,0,NULL,0}
	};

	if(argc<2) usage(-1,"Insufficient number of arguments","");
	optCon = smapoptGetContext("chartu", argc, argv, optionsTable,0);

	while ((c = smapoptGetNextOpt(optCon)) >= 0) {
	switch(c) {
		case 'h':
		usage(0,NULL,NULL);
		break;

		case 'p':
		flag=1;
		break;
	}
	}

	if((ant_num < 1) || (ant_num > 8)){
		printf("ant %d? ant 1-8\n",ant_num);
		exit(1);
	}

	/* initializing ref. mem. */
	rm_status=rm_open(antlist);
	if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_open()");
		exit(1);
	}

	chart_stat.saveflg=0;
	chart_stat.scanflg=1; /* Az scan */
	chart_stat.chopflg=0;
	chart_stat.integtime=1;
	chart_stat.quitflg=0;

	if(-1==pthread_create(&write_statusTID, NULL , write_status, (void *) &ant_num)){
		perror("main: pthread_create CommandHandler");
		exit(-1);	
	}
	pthread_detach(write_statusTID);
	sleep(1);


	while(0==chart_stat.quitflg){
 
		if(-1==pthread_create(&read_statusTID, NULL , read_status, (void *) &ant_num)){
		perror("main: pthread_create CommandHandler");
		exit(-1);	
		}
		pthread_detach(read_statusTID);

		i=0;
		while(chart_stat.saveflg==1){
			Az_avg=0;El_avg=0;Azerr_avg=0;Elerr_avg=0;iavg=1;
			Azoff_avg=0;Eloff_avg=0;Azmod_avg;Elmod_avg=0;
			old_time=time(NULL);new_time=time(NULL);
			while((new_time-old_time)<chart_stat.integtime){
				rm_status=rm_read(ant_num,"RM_ACTUAL_AZ_DEG_F",&az_deg);
		   		if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
		   		exit(1);
				}
		   		rm_status=rm_read(ant_num,"RM_ACTUAL_EL_DEG_F",&el_deg);
				if(rm_status != RM_SUCCESS) {
		   		rm_error_message(rm_status,"rm_read()");
				exit(1);
		   		}
				rm_status=rm_read(ant_num,"RM_AZ_TRACKING_ERROR_F",&az_err);
	   			if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
	   			exit(1);
				}
		   		rm_status=rm_read(ant_num,"RM_EL_TRACKING_ERROR_F",&el_err);
				if(rm_status != RM_SUCCESS) {
		   		rm_error_message(rm_status,"rm_read()");
				exit(1);
	   			}
				rm_status=rm_read(ant_num,"RM_PMDAZ_F",&az_mod);
	   			if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
				exit(1);
				}
				rm_status=rm_read(ant_num,"RM_PMDEL_F",&el_mod);
				if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
				exit(1);
				}
				rm_status=rm_read(ant_num,"RM_CHART_AZOFF_ARCSEC_D",&az_off);
				if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
				exit(1);
				}
				rm_status=rm_read(ant_num,"RM_CHART_ELOFF_ARCSEC_D",&el_off);
				if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
				exit(1);
				}
				if(chart_stat.chopflg) rm_status=rm_read(ant_num,"RM_SYNCDET_VOLTS_D",&output);
				else rm_status=rm_read(ant_num,"RM_CHART_TOTAL_POWER_VOLTS_D",&output);
				if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
				exit(1);
				}
				Az_avg=((iavg-1)*Az_avg+az_deg)/iavg;
				El_avg=((iavg-1)*El_avg+el_deg)/iavg;
				Azoff_avg=((iavg-1)*Azoff_avg+az_off)/iavg;
				Eloff_avg=((iavg-1)*Eloff_avg+el_off)/iavg;
				Azerr_avg=((iavg-1)*Azerr_avg+az_err)/iavg;
				Elerr_avg=((iavg-1)*Elerr_avg+el_err)/iavg;
				Azmod_avg=((iavg-1)*Azmod_avg+az_mod)/iavg;
				Elmod_avg=((iavg-1)*Elmod_avg+el_mod)/iavg;
				Data_avg=((iavg-1)*Data_avg+output)/iavg;
				rm_status=rm_read(ant_num,"RM_SOURCE_C34",&source);
				if(rm_status != RM_SUCCESS) {
				rm_error_message(rm_status,"rm_read()");
				exit(1);
				}
				usleep(10000);
				iavg++;
				new_time=time(NULL);
			}
/*			printf("Ant%1d %s %3d Aoff %4.1f Eoff %4.1f Aerr%4.1f Eerr%4.1f Azmod%4.1f Elmod%4.1f Data%7.4f\n",ant_num,source,iavg,Azoff_avg,Eloff_avg,Azerr_avg,Elerr_avg,Azmod_avg,Elmod_avg,Data_avg);*/

			/* store data for fitting */
			azyy[i]=Az_avg;
			elyy[i]=El_avg;
			xx[i]=Azoff_avg;
			xx2[i]=Eloff_avg;
			zz[i]=Data_avg;
			yy[i]=Azerr_avg;
			yy2[i]=Elerr_avg;
			azp[i]=Azmod_avg;
			elp[i]=Elmod_avg;
			i++;

		if(-1==pthread_create(&read_statusTID, NULL , read_status, (void *) &ant_num)){
		perror("main: pthread_create CommandHandler");
		exit(-1);	
		}
		pthread_detach(read_statusTID);
		} /* end while save flag is on */

		if(i){	/*if there are data*/
			sprintf(file_n1,"/common/data/rpoint/ant%1d/tmp.dat",ant_num);
/*			printf("filename=%s\n",file_n1);*/
			if ((fp=fopen(file_n1,"w"))==NULL){
				printf("cannot open data file\n");
				exit(1);
			}

			rm_status=rm_read(ant_num,"RM_CHOPPER_ANGLE_F",&chop_angle);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
			}
			rm_status=rm_read(ant_num,"RM_CHOPPER_X_MM_F",&chop_x);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
			}
			rm_status=rm_read(ant_num,"RM_CHOPPER_Y_MM_F",&chop_y);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
			}
			rm_status=rm_read(ant_num,"RM_CHOPPER_Z_MM_F",&chop_z);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
			}
	
			t=ctime(&new_time);
			fprintf(fp,"#%s#%s scnflg %1d chpflg %1d itgtime %1d %5.3f %5.3f %5.3f %5.3f\n",t, source,chart_stat.scanflg,chart_stat.chopflg,chart_stat.integtime,chop_angle,chop_x,chop_y,chop_z);
			for(j=0;j<i-1;j++){
				fprintf(fp,"%10.5f %10.5f %7.2f %7.2f %7.4f %7.4f %7.2f %7.2f %7.2f\n",azyy[j],elyy[j],xx[j],xx2[j],zz[j],yy[j],yy2[j],azp[j],elp[j]);
			}
			fclose(fp);
		}

		cur_time=time(NULL);
		curtim=ctime(&cur_time);
/*		printf("type 'chartuCommand -a %1d -q' to quit %s",ant_num,curtim);*/
		sleep(1);
	} /* end while */

	printf("\n");

	/* close ref. mem. */
	rm_status=rm_close(); 
	if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_close()");
		exit(1);
	}
}
Beispiel #3
0
int main(int argc, char **argv)
{
    FILE       *fp_raw_data, *fp_raw_data2;
    union 	ad_union amp_vvm[10], pha_vvm[10];
    union 	ad_union amp_vvm2[10], pha_vvm2[10];
    char	command[35],file_name[80],file_name2[80],*cfreq,c;
    int		j, k, l, ant_scn, ant_scn2, ref_ant, n_size, n_start, offsetunit=0;
    int antennas[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    long	i, i_delay, n_delay;
    int 	adc0_fd, adc1_fd, adc0_rd, adc1_rd, count;
    int 	adc2_fd, adc3_fd, adc2_rd, adc3_rd;
    int 	OFLAG;
    int		istatus,icount;
    int		amp_read[2000],phase_read[2000],truetime2ms[20000];
    int		amp_read2[2000],phase_read2[2000];
    int         ant;
    time_t      start_time,cur_time,Start_time,time1[2000],time2[2000],time3[2000],time4[2000];
    float       az_step, el_step, azoff, eloff, freq,az_bore,el_bore, az_bore2, el_bore2; 
    float       az_off,el_off, az_ref, el_ref;
    float       contDet_a1[2], contDet_a2[2], contDet_ar[2];
    float       contDet1_a1, contDet1_a2, contDet1_ar;
    double      az_enc,el_enc,az_enc2, el_enc2;
    double      az_read[2000],el_read[2000], az_read2[2000], el_read2[2000];
    int rm_status, antlist[RM_ARRAY_SIZE];/*variables for encoderClient*/
    short	currentAzoff, currentAzoff2;
    short	handshake;
    struct tm	ts;	
    double      currentAzoffD;
    unsigned short m1009,m1010;
    smapoptContext optCon;
    struct  smapoptOption optionsTable[] = {
	    {"help",'h',SMAPOPT_ARG_NONE,0,'h'},
	    {"primary antenna",'a',SMAPOPT_ARG_INT,&ant_scn,'a'}, 
	    {"secondary antenna",'d',SMAPOPT_ARG_INT,&ant_scn2,'d'}, 
/*	    {"antennas", 'a', SMAPOPT_ARG_ANTENNAS, &antennas[0], 0, "Specify a list of antennas to move"},*/
	    {"refant",'r',SMAPOPT_ARG_INT,&ref_ant,'r'},
	    {"frequency",'f',SMAPOPT_ARG_STRING,&cfreq,'f'},
	    {"map_size",'m',SMAPOPT_ARG_INT,&n_size,'m'},
	    {"scan_speed",'s',SMAPOPT_ARG_INT,&offsetunit,'s'},
	    {"line_start",'l',SMAPOPT_ARG_INT,&n_start,'l'},
	    {NULL,0,0,NULL,0}
    };
/*     ant_scn=0;
     ant_scn2=0;
     for (ant = 0; ant < N_ANTENNAS; ant++){
	printf ("antennas[ant] %d\n", antennas[ant]);
     }
     for (ant = 0; ant < N_ANTENNAS; ant++){
        if (antennas[ant]){
          printf("%d ", ant);
        if (ant_scn == 0){
        ant_scn = ant;
	}
	else {
	ant_scn2 = ant;
	}
	}
	}
*/
	printf ("antennas: %d %d \n", ant_scn, ant_scn2);

/**********get command line arguments and initializations**************/

	count=2; /* set how many counts we read from A/D board device */
	n_start=0; /* start from the beginning as default setting */

	if(argc<7) usage(-1,"Insufficient number of arguments","");
	optCon = smapoptGetContext("holon", argc, argv, optionsTable,0);

	while ((c = smapoptGetNextOpt(optCon)) >= 0) {
	switch(c) {
		case 'h':
		usage(0,NULL,NULL);
		break;
	}
	}
	if(c<-1) {
	fprintf(stderr, "%s: %s\n",
		smapoptBadOption(optCon, SMAPOPT_BADOPTION_NOALIAS),
		smapoptStrerror(c));
	}

	if(ant_scn<1||ant_scn>8)
	{
	printf("ant should be 1-8\n");
	exit(0);
	}

	if(ref_ant<1||ref_ant>8)
	{
	printf("reference ant should be 1-8\n");
	exit(0);
	}

	freq=atof(cfreq);
	if(freq<50.0||freq>700.0)
	{
	printf("200 < freq < 700\n");
	exit(0);
	}

	if(n_size<n_start)
	{
	printf("n_start is larger than n_size.\n");
	exit(0);
	}

	if(offsetunit<1)
	{
	printf("scan_speed should be larger than 1.\n");
	exit(0);
	}

	if(freq < 500.0) n_delay=(long) 8e7/offsetunit;
	else n_delay=(long) 4e7/offsetunit;
	az_step=7734.0/freq;el_step=az_step; /*23.3 for 332 GHz, and 33.3 for 232.4 GHz*/
printf("ant_scn=%d ref_ant=%d freq=%f size=%d scanspeed=%d n_delay=%ld step=%f\n",ant_scn,ref_ant,freq,n_size,offsetunit,n_delay,az_step);
/* Dual */
printf("ant_scn=%d ref_ant=%d freq=%f size=%d scanspeed=%d n_delay=%ld step=%f\n",ant_scn2,ref_ant,freq,n_size,offsetunit,n_delay,az_step);
	azoff=0.; eloff=0.;
    	start_time = time(NULL);
	ts = *localtime(&start_time);
	sprintf(file_name, "/data/engineering/holo/ant%1d/%02d%02d_%02d%02d.holo%1d",ant_scn,ts.tm_mon+1,ts.tm_mday,ts.tm_hour,ts.tm_min,ant_scn);
	printf("freq=%4.1fGHz grid=%4.1f:%4.1f filename %s\n",freq,az_step,el_step,file_name);
/* Dual */
	sprintf(file_name2, "/data/engineering/holo/ant%1d/%02d%02d_%02d%02d.holo%1d",ant_scn2,ts.tm_mon+1,ts.tm_mday,ts.tm_hour,ts.tm_min,ant_scn2);
	printf("freq=%4.1fGHz grid=%4.1f:%4.1f filename %s\n",freq,az_step,el_step,file_name2);

	if(ant_scn==1){
		if(freq < 500.0){
			az_bore=AZ_BORE1;
			el_bore=EL_BORE1;
		}
		else{
			az_bore=AZ_BORE1H;
			el_bore=EL_BORE1H;
		}
	}

	if(ant_scn==2){
		if(freq < 500.0){
			az_bore=AZ_BORE2;
			el_bore=EL_BORE2;
		}
		else{
			az_bore=AZ_BORE2H;
			el_bore=EL_BORE2H;
		}
	}
	else if(ant_scn==3){
		if(freq < 500.0){
			az_bore=AZ_BORE3;
			el_bore=EL_BORE3;
		}
		else{
			az_bore=AZ_BORE3H;
			el_bore=EL_BORE3H;
		}
	}
	else if(ant_scn==4){
		if(freq < 500.0){
			az_bore=AZ_BORE4;
			el_bore=EL_BORE4;
		}
		else{
			az_bore=AZ_BORE4H;
			el_bore=EL_BORE4H;
		}
	}
	else if(ant_scn==5){
		if(freq < 500.0){
			az_bore=AZ_BORE5;
			el_bore=EL_BORE5;
		}
		else{
			az_bore=AZ_BORE5H;
			el_bore=EL_BORE5H;
		}
	}
	else if(ant_scn==6){
		if(freq < 500.0){
			az_bore=AZ_BORE6;
			el_bore=EL_BORE6;
		}
		else{
			az_bore=AZ_BORE6H;
			el_bore=EL_BORE6H;
		}
	}
	else if(ant_scn==7){
		if(freq < 500.0){
			az_bore=AZ_BORE7;
			el_bore=EL_BORE7;
		}
		else{
			az_bore=AZ_BORE7H;
			el_bore=EL_BORE7H;
		}
	}
	else if(ant_scn==8){
		if(freq < 500.0){
			az_bore=AZ_BORE8;
			el_bore=EL_BORE8;
		}
		else{
			az_bore=AZ_BORE8H;
			el_bore=EL_BORE8H;
		}
	}
	else if(ant_scn==0){ /* for debug */
		az_bore=AZ_BORE0;
		el_bore=EL_BORE0;
		ant_scn=4;
	}
/* Dual */
	if(ant_scn2==1){
		if(freq < 500.0){
			az_bore2=AZ_BORE1;
			el_bore2=EL_BORE1;
		}
		else{
			az_bore2=AZ_BORE1H;
			el_bore2=EL_BORE1H;
		}
	}

	if(ant_scn2==2){
		if(freq < 500.0){
			az_bore2=AZ_BORE2;
			el_bore2=EL_BORE2;
		}
		else{
			az_bore2=AZ_BORE2H;
			el_bore2=EL_BORE2H;
		}
	}
	else if(ant_scn2==3){
		if(freq < 500.0){
			az_bore2=AZ_BORE3;
			el_bore2=EL_BORE3;
		}
		else{
			az_bore2=AZ_BORE3H;
			el_bore2=EL_BORE3H;
		}
	}
	else if(ant_scn2==4){
		if(freq < 500.0){
			az_bore2=AZ_BORE4;
			el_bore2=EL_BORE4;
		}
		else{
			az_bore2=AZ_BORE4H;
			el_bore2=EL_BORE4H;
		}
	}
	else if(ant_scn2==5){
		if(freq < 500.0){
			az_bore2=AZ_BORE5;
			el_bore2=EL_BORE5;
		}
		else{
			az_bore2=AZ_BORE5H;
			el_bore2=EL_BORE5H;
		}
	}
	else if(ant_scn2==6){
		if(freq < 500.0){
			az_bore2=AZ_BORE6;
			el_bore2=EL_BORE6;
		}
		else{
			az_bore2=AZ_BORE6H;
			el_bore2=EL_BORE6H;
		}
	}
	else if(ant_scn2==7){
		if(freq < 500.0){
			az_bore2=AZ_BORE7;
			el_bore2=EL_BORE7;
		}
		else{
			az_bore2=AZ_BORE7H;
			el_bore2=EL_BORE7H;
		}
	}
	else if(ant_scn2==8){
		if(freq < 500.0){
			az_bore2=AZ_BORE8;
			el_bore2=EL_BORE8;
		}
		else{
			az_bore2=AZ_BORE8H;
			el_bore2=EL_BORE8H;
		}
	}
	else if(ant_scn2==0){ /* for debug */
		az_bore2=AZ_BORE0;
		el_bore2=EL_BORE0;
		ant_scn2=2;
	}
/* Dual End */

	if(ref_ant==1){
		if(freq < 500.0){
			az_ref=AZ_BORE1;
			el_ref=EL_BORE1;
		}
		else{
			az_ref=AZ_BORE1H;
			el_ref=EL_BORE1H;
		}
	}

	if(ref_ant==2){
		if(freq < 500.0){
			az_ref=AZ_BORE2;
			el_ref=EL_BORE2;
		}
		else{
			az_ref=AZ_BORE2H;
			el_ref=EL_BORE2H;
		}
	}
	else if(ref_ant==3){
		if(freq < 500.0){
			az_ref=AZ_BORE3;
			el_ref=EL_BORE3;
		}
		else{
			az_ref=AZ_BORE3H;
			el_ref=EL_BORE3H;
		}
	}
	else if(ref_ant==4){
		if(freq < 500.0){
			az_ref=AZ_BORE4;
			el_ref=EL_BORE4;
		}
		else{
			az_ref=AZ_BORE4H;
			el_ref=EL_BORE4H;
		}
	}
	else if(ref_ant==5){
		if(freq < 500.0){
			az_ref=AZ_BORE5;
			el_ref=EL_BORE5;
		}
		else{
			az_ref=AZ_BORE5H;
			el_ref=EL_BORE5H;
		}
	}
	else if(ref_ant==6){
		if(freq < 500.0){
			az_ref=AZ_BORE6;
			el_ref=EL_BORE6;
		}
		else{
			az_ref=AZ_BORE6H;
			el_ref=EL_BORE6H;
		}
	}
	else if(ref_ant==7){
		if(freq < 500.0){
			az_ref=AZ_BORE7;
			el_ref=EL_BORE7;
		}
		else{
			az_ref=AZ_BORE7H;
			el_ref=EL_BORE7H;
		}
	}
	else if(ref_ant==8){
		if(freq < 500.0){
			az_ref=AZ_BORE8;
			el_ref=EL_BORE8;
		}
		else{
			az_ref=AZ_BORE8H;
			el_ref=EL_BORE8H;
		}
	}
	else if(ref_ant==0){ /* for debug */
		az_ref=AZ_BORE0;
		el_ref=EL_BORE0;
		ref_ant=5;
	}

	fp_raw_data = fopen(file_name,"w");
	if(fp_raw_data==NULL){
		printf("cannot open the data file\n");
		exit(1);
	}
/* Dual */
	fp_raw_data2 = fopen(file_name2,"w");
	if(fp_raw_data2==NULL){
		printf("cannot open the data file 2\n");
		exit(1);
	}
/* End Dual */

/* initializing ref. mem. */
	rm_status=rm_open(antlist);
	if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_open()");
		exit(1);
	}

/* configure for interrupt through RM */
 	rm_status=rm_monitor(ant_scn,"RM_HOLO_ENC_HNDSHK_S");
	if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_monitor()");
		exit(1);
	}
/* Dual */
 	rm_status=rm_monitor(ant_scn2,"RM_HOLO_ENC_HNDSHK_S");
	if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_monitor()");
		exit(1);
	}
/* */
	printf("checking the encoderServer status\n");

	handshake = 0;

	rm_status=rm_write_notify(ant_scn,"RM_HOLO_ENC_HNDSHK_S",&handshake);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_write_notify()");
		exit(1);
		} 

	sleep(1);

	rm_status=rm_read(ant_scn,"RM_HOLO_ENC_HNDSHK_S",&handshake);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_read()");
		exit(1);
		}  

/*	if (handshake==0) 
	{
	printf("encoder Server is not running on acc%1d!\n",ant_scn);
	exit(-1);
	}
*/

/* Dual */
/* Should check encoderServer for ant_scn2 here */

/* open Device tables */
	OFLAG=O_RDWR|O_NDELAY;
	adc0_fd = open("/dev/xVME564-0", OFLAG, 0); 
	if(adc0_fd<0){printf("cannot open device 0\n");exit(1);}
	adc1_fd = open("/dev/xVME564-1", OFLAG, 0); 
	if(adc1_fd<0){printf("cannot open device 1\n");exit(1);}
/* Dual */
	adc2_fd = open("/dev/xVME564-2", OFLAG, 0); 
	if(adc2_fd<0){printf("cannot open device 0\n");exit(1);}
	adc3_fd = open("/dev/xVME564-3", OFLAG, 0);
	if(adc3_fd<0){printf("cannot open device 1\n");exit(1);}
/* */
/*********************Get the antenna ready for*************************/
/* go to starting position  */
/* numbers for ant6 frozen in for now 30 Jul 2002 
	printf("frozen az_bore & el_bore for ant6\n");
	az_bore=48.25;
	el_bore=18.60; */
	printf ("Going to bore-sight position \n");
	sprintf(command, "azoff -a %d -s 0", ant_scn);
	system (command);
	sprintf(command, "eloff -a %d -s 0", ant_scn);
	system (command);
	sprintf(command, "azel -a %d -z %f -e %f", ref_ant, az_ref, el_ref);
	printf ("command: %s \n", command);
	system (command);
	sprintf(command, "azel -a %d -z %f -e %f", ant_scn, az_bore, el_bore);
	printf ("command: %s \n", command);
	system (command);
	sleep(1);
	sprintf(command, "offsetUnit -a %d -s %d", ant_scn, -offsetunit); 
	printf ("command: %s \n", command);
	system (command);
	sleep(1);
	sprintf(command, "resume -a %d", ant_scn); 
	system (command);

/* Dual */
	printf ("Going to bore-sight position \n");
	sprintf(command, "azoff -a %d -s 0", ant_scn2);
	system (command);
	sprintf(command, "eloff -a %d -s 0", ant_scn2);
	system (command);
	sprintf(command, "azel -a %d -z %f -e %f", ref_ant, az_ref, el_ref);
	printf ("command: %s \n", command);
	system (command);
	sprintf(command, "azel -a %d -z %f -e %f", ant_scn2, az_bore2, el_bore2);
	printf ("command: %s \n", command);
	system (command);
	sleep(1);
	sprintf(command, "offsetUnit -a %d -s %d", ant_scn2, -offsetunit); 
	printf ("command: %s \n", command);
	system (command);
	sleep(1);
	sprintf(command, "resume -a %d", ant_scn2); 
	system (command);
/* */
/*	printf ("Make sure encoderServer is running on acc%1d.\n",ant_scn); */
/* Dual */
	printf ("Make sure encoderServer is running on acc%1d and acc%1d\n",ant_scn,ant_scn2);
	printf ("Hit Return to continue:");
	fgetc(stdin);
	printf ("Starting raster on antennas %d and %d\n", ant_scn, ant_scn2);
	azoff=((float)n_size/2.+1.)*az_step;
	eloff=((float)n_size/2.)*el_step - n_start*el_step;
/*	sprintf(command, "azoff -a %d -s %f", ant_scn, azoff+offsetunit*3); */
/* Dual */
	sprintf(command, "azoff -a %d,%d -s %f", ant_scn, ant_scn2,azoff+offsetunit*3); 
/* */
	printf ("command: %s ", command);
	system (command);
	sleep(1);
/*	sprintf(command, "eloff -a %d -s %f", ant_scn, eloff);  */
/* Dual */
	sprintf(command, "eloff -a %d,%d -s %f", ant_scn, ant_scn2, eloff); 
/* */
	printf ("%s \n", command);
	system (command);
	sleep(5);

	
	/* The following is from Bob's ttsubs.c main */
        ttime.timeout_ticks = 2;        /* This margin should be safe */
        ttfd = open("/dev/vme_sg_simple", O_RDWR, 0);
        if(ttfd <= 0) {
            fprintf(stderr, "Error opening TrueTime - /dev/vme_sg_simple\n");
            exit(SYSERR_RTN);
        }


/*********************Start taking data*************************/
	printf ("Start raster! \n");
    	start_time = time(NULL);
	Start_time = start_time;

/* Elevation Loop */
	for (j=n_start; j<n_size; j++){  /*do one row*/ 
		sprintf(command, "azel -a %d -z %f -e %f", ref_ant, az_ref, el_ref);
		printf ("%s \n", command);
		system (command);
		i=0; 
	currentAzoff=0;
    		start_time = time(NULL);
/*		sprintf(command, "azscan -a %d", ant_scn);*/
/* Dual */
		sprintf(command, "azscan -a %d,%d", ant_scn, ant_scn2);
/* */
		printf ("%s \n", command);
		sleep(1);
		istatus=system (command);

		printf("%6d %6d  %6f\n",istatus,currentAzoff,azoff);
		printf("%6d  %6f \n",currentAzoff,azoff); fflush(stdout);
/*		while((1.0*currentAzoff)>-azoff){ */
/*		while((1.0*currentAzoff)>(-(azoff+offsetunit))){ */
/* Dual */
		while(((1.0*currentAzoff)>(-(azoff+offsetunit)))||((1.0*currentAzoff2)>(-(azoff+offsetunit)))){
/* */

/*			 for (i_delay=1; i_delay<n_delay; i_delay++){} */ /*  delay using GetPosTime() from ttsubs.c- using interrupts from TrueTime */
                        cur_time=time(NULL);
                        time1[i]=cur_time-Start_time;

			GetPosTime();
/*
            printf("Day %d, msec %d\n", day, msec);
*/
			truetime2ms[i]=msec;
                        cur_time=time(NULL);
                        time2[i]=cur_time-Start_time;
			adc0_rd=read(adc0_fd, amp_vvm[1].byte, count);
			if(adc0_rd<=0){
				printf("cannot read device 0\n");
				exit(1);
				close(adc0_fd);
				close(adc1_fd);
			} 
/* Read total power values 10 May 2010 */
			rm_status=rm_read(ant_scn,"RM_CONT_DET_MUWATT_V2_F",&contDet_a1);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
       			}/*if end*/
			rm_status=rm_read(ant_scn2,"RM_CONT_DET_MUWATT_V2_F",&contDet_a2);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
       			}/*if end*/
			rm_status=rm_read(ref_ant,"RM_CONT_DET_MUWATT_V2_F",&contDet_ar);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
       			}/*if end*/
 /* usleep(1); */
			adc1_rd=read(adc1_fd, pha_vvm[1].byte, count);
			if(adc1_rd<=0){
				printf("cannot read device 1\n");
				exit(1);
				close(adc0_fd);
				close(adc1_fd);
			}
/* Dual */
			adc2_rd=read(adc2_fd, amp_vvm2[1].byte, count);
			if(adc2_rd<=0){
				printf("cannot read device 2\n");
				exit(1);
				close(adc2_fd);
				close(adc3_fd);
			} 
 /* usleep(1); */
			adc3_rd=read(adc3_fd, pha_vvm2[1].byte, count);
			if(adc3_rd<=0){
				printf("cannot read device 3\n");
				exit(1);
				close(adc2_fd);
				close(adc3_fd);
			}
/* End Dual */
                        cur_time=time(NULL);
                        time3[i]=cur_time-Start_time;
/* read encoders using encoderClient */
			encoderClient(ant_scn,&az_enc,&el_enc,&m1009,&m1010); 
/*		        printf("First read done\n %f %f %f\n", az_enc, el_enc, currentAzoffD); */
/* Dual */
			encoderClient(ant_scn2,&az_enc2,&el_enc2,&m1009,&m1010); 
/*		        printf("Second read done\n %f %f %f\n", az_enc2, el_enc2, currentAzoffD); */
/* */
                        cur_time=time(NULL);
                        time4[i]=cur_time-Start_time;

			az_read[i]=az_enc;el_read[i]=el_enc;
			amp_read[i]=amp_vvm[1].word;
			phase_read[i]=pha_vvm[1].word;
/* Dual */
			az_read2[i]=az_enc2;el_read2[i]=el_enc2;
			amp_read2[i]=amp_vvm2[1].word;
			phase_read2[i]=pha_vvm2[1].word;
/* End Dual */
/* adding time stamping of samples: 01 Nov 04 */

			rm_status=rm_read(ant_scn,"RM_AZOFF_D",&currentAzoffD);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
       			}/*if end*/
			currentAzoff=(short)currentAzoffD;
/* Dual */
			rm_status=rm_read(ant_scn2,"RM_AZOFF_D",&currentAzoffD);
			if(rm_status != RM_SUCCESS) {
			rm_error_message(rm_status,"rm_read()");
			exit(1);
       			}/*if end*/
			currentAzoff2=(short)currentAzoffD;
/* End Dual */
/* printf("line# %3d %3d %4d %6.2f %6.2f %6.2f %5d %d\n",j,i,currentAzoff,azoff,az_enc,el_enc,amp_read[i],icount); fflush(stdout); */

			i++;
		}/*while end*/

/*		sprintf(command, "stopScan -a %d", ant_scn); */
/* Dual */
		sprintf(command, "stopScan -a %d,%d", ant_scn, ant_scn2);
/* */
	      	system (command);
		sleep(1); 
		printf ("command: %s \n", command); 
	/*	system (command);
		usleep(10); */
		eloff = eloff - el_step;
/*		sprintf(command, "eloff -a %d -s %f", ant_scn, eloff); */
/* Dual */
		sprintf(command, "eloff -a %d,%d -s %f", ant_scn, ant_scn2, eloff); 
/* */
		system (command);
		sleep(1);
		printf ("command: %s ", command);fflush(stdout);
	/*	system (command);
		usleep(10); */
/*		sprintf(command, "azoff -a %d -s %f", ant_scn, azoff+offsetunit*3); */
/* Dual */
		sprintf(command, "azoff -a %d,%d -s %f", ant_scn, ant_scn2, azoff+offsetunit*3); 
/* */
		system (command);
		sleep(1);
		printf ("command: %s ", command);fflush(stdout);
	/*	system (command); */
/* write out also the total powers 10 May 2010 */
		for(k=1;k<i;k++){
			fprintf(fp_raw_data,"%10.6f %10.6f %6d %6d %6.4f %3d %d %d %d %d %d\n" ,\
			el_read[k],az_read[k],amp_read[k],phase_read[k],contDet_a1[0],j,time1[k],time2[k],time3[k],time4[k],truetime2ms[k]);
			fflush(fp_raw_data);
    		}/*for end*/
/* Dual */
		for(k=1;k<i;k++){
			fprintf(fp_raw_data2,"%10.6f %10.6f %6d %6d %6.4f %3d %d %d %d %d %d\n" ,\
			el_read2[k],az_read2[k],amp_read2[k],phase_read2[k],contDet_a2[0],j,time1[k],time2[k],time3[k],time4[k],truetime2ms[k]);
			fflush(fp_raw_data2);
    		}/*for end*/
/* End Dual */
		/* Place for including online dispaly command */
		printf ("Flush the data\n"); 
    		cur_time=time(NULL);
    		printf ("%3dth line: Stop time: %d time taken: %d secs samples: %d\n", \
		j, cur_time, cur_time-start_time, i);
		sleep(4);
/*		sprintf(command, "azoff -a %d -s %f", ant_scn, azoff);
		printf ("command: %s ", command);fflush(stdout);
		system (command);
		usleep(10);
		sprintf(command, "eloff -a %d -s %f", ant_scn, eloff);
		printf ("command: %s ", command);fflush(stdout);
		system (command);
		usleep(10);*/
    	} 
/* for end; El loop done */

	printf ("Start: %d Stop: %d Time taken: %d secs\n", Start_time, cur_time, cur_time - Start_time);
/*	sprintf(command, "azoff -a %d -s 0", ant_scn); */
/* Dual */
	sprintf(command, "azoff -a %d,%d -s 0", ant_scn,ant_scn2); 
/* */
	system (command);
	sleep(10);
	printf ("command: %s ", command);
/*	sprintf(command, "eloff -a %d -s 0", ant_scn); */
/* Dual */
	sprintf(command, "eloff -a %d,%d -s 0", ant_scn,ant_scn2);
/* */
	system (command);
	sleep(10);
	printf ("command: %s\n", command);

/*********************clear up everything*************************/
	fclose(fp_raw_data);
	close(adc0_fd);
	close(adc1_fd);
/* Dual */
	fclose(fp_raw_data2);
	close(adc2_fd);
	close(adc3_fd);
/* End Dual */
/* release the RM interrupt waiting */
	rm_status=rm_clear_monitor();
	if(rm_status != RM_SUCCESS) {
	rm_error_message(rm_status,"rm_clear()");
	}
	printf ("DONE!\n");
	exit(0);
}				/* end main */
void main(int argc, char *argv[])
{

    char c,*degrees,messg[100],command_n[30];
    short  pmac_command_flag=0;
    short error_flag=RUNNING;
    int gotaz=0,rm_status,antlist[RM_ARRAY_SIZE];
    float az,actual_az,actual_el;
    smapoptContext optCon;
    int i,antenna;
    int gotantenna=0,antennaArray[]={0,0,0,0,0,0,0,0,0};
    int trackStatus=0,iant;
    int tracktimestamp,timestamp;
    short antennaStatus = 0;

    /* initializing ref. mem. */
    rm_status=rm_open(antlist);
    if(rm_status != RM_SUCCESS) {
        rm_error_message(rm_status,"rm_open()");
        exit(1);
    }
    antenna = 0;

    /* check if track is running on this antenna */

    rm_status=rm_read(antenna,"RM_UNIX_TIME_L",&timestamp);
    rm_status=rm_read(antenna,"RM_TRACK_TIMESTAMP_L",&tracktimestamp);
    if(abs(tracktimestamp-timestamp)>3L) {
        trackStatus=0;
        printf("Track is not running on this antenna.\n");
        exit(1);
    }



    command_n[0]='T'; /* send 'T' command */
    az = 10;
    el = 45;
    rm_status=rm_read(antenna, "RM_ACTUAL_AZ_DEG_F",&actual_az);
    rm_status|=rm_read(antenna,"RM_ACTUAL_EL_DEG_F",&actual_el);
    if(rm_status != RM_SUCCESS) {
        rm_error_message(rm_status,"rm_read()");
        exit(1);
    }


    rm_status=rm_write(antenna, "RM_SMARTS_AZ_DEG_F",&az);
    rm_status|=rm_write(antenna, "RM_SMARTS_EL_DEG_F",&actual_el);
    if(rm_status != RM_SUCCESS) {
        rm_error_message(rm_status,"rm_write()");
        exit(1);
    }


    rm_status=rm_write(antenna,"RM_SMASH_TRACK_COMMAND_C30",
                       &command_n);
    if(rm_status != RM_SUCCESS) {
        rm_error_message(rm_status,"rm_write()");
        exit(1);
    }


    pmac_command_flag=0;

    rm_status=rm_write_notify(antenna,"RM_SMARTS_PMAC_COMMAND_FLAG_S",
                              &pmac_command_flag);
    if(rm_status != RM_SUCCESS) {
        rm_error_message(rm_status,"rm_write_notify()");
        exit(1);
    }


    error_flag=RUNNING;

    sleep(3);

    rm_status=rm_read(antenna,
                      "RM_SMARTS_COMMAND_STATUS_S",&error_flag);
    if(rm_status != RM_SUCCESS) {
        rm_error_message(rm_status,"rm_read()");
        exit(1);
    }

    if(error_flag==ERROR)
    {
        printf("Error from track:\n");
        rm_status=rm_read(antenna,
                          "RM_TRACK_MESSAGE_C100",messg);
        if(rm_status != RM_SUCCESS) {
            rm_error_message(rm_status,"rm_read()");
            exit(1);
        }
        printf("%s\n",messg);
    }

    /*
            if(error_flag==OK) printf("antenna has reached the source.\n");
    */
}
Beispiel #5
0
static int pnm_get_stream_chunk(pnm_t *p) {

  int  n;
  char keepalive='!';
  unsigned int fof1, fof2, stream;

  /* send a keepalive                               */
  /* realplayer seems to do that every 43th package */
  if ((p->packet%43) == 42)  
  {
    rm_write(p->s,&keepalive,1);
  }

  /* data chunks begin with: 'Z' <o> <o> <i1> 'Z' <i2>
   * where <o> is the offset to next stream chunk,
   * <i1> is a 16 bit index (big endian)
   * <i2> is a 8 bit index which counts from 0x10 to somewhere
   */
  
  n = rm_read (p, p->buffer, 8);
  if (n<8) return 0;
  
  /* skip 8 bytes if 0x62 is read */
  if (p->buffer[0] == 0x62)
  {
    n = rm_read (p, p->buffer, 8);
    if (n<8) return 0;
#ifdef LOG
    printf("input_pnm: had to seek 8 bytes on 0x62\n");
#endif
  }
  
  /* a server message */
  if (p->buffer[0] == 'X')
  {
    int size=be2me_16(*(uint16_t*)(&p->buffer[1]));

    rm_read (p, &p->buffer[8], size-5);
    p->buffer[size+3]=0;
    printf("input_pnm: got message from server while reading stream:\n%s\n", &p->buffer[3]);
    return 0;
  }
  if (p->buffer[0] == 'F')
  {
    printf("input_pnm: server error.\n");
    return 0;
  }

  /* skip bytewise to next chunk.
   * seems, that we dont need that, if we send enough
   * keepalives
   */
  n=0;
  while (p->buffer[0] != 0x5a) {
    int i;
    for (i=1; i<8; i++) {
      p->buffer[i-1]=p->buffer[i];
    }
    rm_read (p, &p->buffer[7], 1);
    n++;
  }

#ifdef LOG
  if (n) printf("input_pnm: had to seek %i bytes to next chunk\n", n);
#endif

  /* check for 'Z's */
  if ((p->buffer[0] != 0x5a)||(p->buffer[7] != 0x5a))
  {
    printf("input_pnm: bad boundaries\n");
    hexdump(p->buffer, 8);
    return 0;
  }

  /* check offsets */
  fof1=be2me_16(*(uint16_t*)(&p->buffer[1]));
  fof2=be2me_16(*(uint16_t*)(&p->buffer[3]));
  if (fof1 != fof2)
  {
    printf("input_pnm: frame offsets are different: 0x%04x 0x%04x\n",fof1,fof2);
    return 0;
  }

  /* get first index */
  p->seq_current[0]=be2me_16(*(uint16_t*)(&p->buffer[5]));
  
  /* now read the rest of stream chunk */
  n = rm_read (p, &p->recv[5], fof1-5);
  if (n<(fof1-5)) return 0;

  /* get second index */
  p->seq_current[1]=p->recv[5];

  /* get timestamp */
  p->ts_current=be2me_32(*(uint32_t*)(&p->recv[6]));
  
  /* get stream number */
  stream=pnm_calc_stream(p);

  /* saving timestamp */
  p->ts_last[stream]=p->ts_current;
  
  /* constructing a data packet header */
  
  p->recv[0]=0;        /* object version */
  p->recv[1]=0;

  fof2=be2me_16(fof2);
  memcpy(&p->recv[2], &fof2, 2);
  /*p->recv[2]=(fof2>>8)%0xff;*/   /* length */
  /*p->recv[3]=(fof2)%0xff;*/

  p->recv[4]=0;         /* stream number */
  p->recv[5]=stream;
  
  p->recv[10]=p->recv[10] & 0xfe; /* streambox seems to do that... */

  p->packet++;

  p->recv_size=fof1;

  return fof1;
}
Beispiel #6
0
static int pnm_get_headers(pnm_t *p, int *need_response) {

  uint32_t chunk_type;
  uint8_t  *ptr=p->header;
  uint8_t  *prop_hdr=NULL;
  int      chunk_size,size=0;
  int      nr;
/*  rmff_header_t *h; */

  *need_response=0;

  while(1) {
    if (HEADER_SIZE-size<=0)
    {
      printf("input_pnm: header buffer overflow. exiting\n");
      return 0;
    }
    chunk_size=pnm_get_chunk(p,HEADER_SIZE-size,&chunk_type,ptr,&nr);
    if (chunk_size < 0) return 0;
    if (chunk_type == 0) break;
    if (chunk_type == PNA_TAG)
    {
      memcpy(ptr, rm_header, RM_HEADER_SIZE);
      chunk_size=RM_HEADER_SIZE;
      *need_response=nr;
    }
    if (chunk_type == DATA_TAG)
      chunk_size=0;
    if (chunk_type == RMF_TAG)
      chunk_size=0;
    if (chunk_type == PROP_TAG)
        prop_hdr=ptr;
    size+=chunk_size;
    ptr+=chunk_size;
  }

  if (!prop_hdr) {
    printf("input_pnm: error while parsing headers.\n");
    return 0;
  }
  
  /* set data offset */
  {
    uint32_t be_size;

    be_size = be2me_32(size-1);
    memcpy(prop_hdr+42, &be_size, 4);
  }
  
  /* read challenge */
  memcpy (p->buffer, ptr, PREAMBLE_SIZE);
  rm_read (p, &p->buffer[PREAMBLE_SIZE], 64);

  /* now write a data header */
  memcpy(ptr, pnm_data_header, PNM_DATA_HEADER_SIZE);
  size+=PNM_DATA_HEADER_SIZE;
/*  
  h=rmff_scan_header(p->header);
  rmff_fix_header(h);
  p->header_len=rmff_get_header_size(h);
  rmff_dump_header(h, p->header, HEADER_SIZE);
*/
  p->header_len=size;
  
  return 1;
}
Beispiel #7
0
static unsigned int pnm_get_chunk(pnm_t *p, 
                         unsigned int max,
                         unsigned int *chunk_type,
                         char *data, int *need_response) {

  unsigned int chunk_size;
  int n;
  char *ptr;
 
  /* get first PREAMBLE_SIZE bytes and ignore checksum */
  rm_read (p, data, CHECKSUM_SIZE);
  if (data[0] == 0x72)
    rm_read (p, data, PREAMBLE_SIZE);
  else
    rm_read (p, data+CHECKSUM_SIZE, PREAMBLE_SIZE-CHECKSUM_SIZE);
  
  *chunk_type = be2me_32(*((uint32_t *)data));
  chunk_size = be2me_32(*((uint32_t *)(data+4)));

  switch (*chunk_type) {
    case PNA_TAG:
      *need_response=0;
      ptr=data+PREAMBLE_SIZE;
      rm_read (p, ptr++, 1);

      while(1) {
	/* The pna chunk is devided into subchunks.
	 * expecting following chunk format (in big endian): 
	 * 0x4f 
	 * uint8_t chunk_size 
	 * uint8_t data[chunk_size] 
	 *
	 * if first byte is 'X', we got a message from server
	 * if first byte is 'F', we got an error
	 */

        rm_read (p, ptr, 2);
	if (*ptr == 'X') /* checking for server message */
	{
	  printf("input_pnm: got a message from server:\n");
	  rm_read (p, ptr+2, 1);

	  /* two bytes of message length*/
	  n=be2me_16(*(uint16_t*)(ptr+1));

	  /* message itself */
	  rm_read (p, ptr+3, n);
	  ptr[3+n]=0;
	  printf("%s\n",ptr+3);
	  return -1;
	}
	
	if (*ptr == 'F') /* checking for server error */
	{
	  /* some error codes after 'F' were ignored */
	  printf("input_pnm: server error.\n");
	  return -1;
	}
	if (*ptr == 'i') /* the server want a response from us. it will be sent after these headers */
	{
	  ptr+=2;
	  *need_response=1;
	  continue;
	}
	if (*ptr != 0x4f) break;
	n=ptr[1];
	rm_read (p, ptr+2, n);
	ptr+=(n+2);
      }
      /* the checksum of the next chunk is ignored here */
      rm_read (p, ptr+2, 1);
      ptr+=3;
      chunk_size=ptr-data;
      break;
    case RMF_TAG:
    case DATA_TAG:
    case PROP_TAG:
    case MDPR_TAG:
    case CONT_TAG:
      if (chunk_size > max) {
        printf("error: max chunk size exeeded (max was 0x%04x)\n", max);
	/* reading some bytes for debugging */
        n=rm_read (p, &data[PREAMBLE_SIZE], 0x100 - PREAMBLE_SIZE);
        hexdump(data,n+PREAMBLE_SIZE);
        return -1;
      }
      rm_read (p, &data[PREAMBLE_SIZE], chunk_size-PREAMBLE_SIZE);
      break;
    default:
      *chunk_type = 0;
      chunk_size  = PREAMBLE_SIZE; 
      break;
  }

  return chunk_size;
}
int main(int argc, char **argv)
{
    FILE	*fp;
   /* union       ad_union amp_vvm[10], pha_vvm[10]; */
    union       ad_union amp_vvm, pha_vvm; 
    union       ad_union amp2_vvm, pha2_vvm; 
    long	i,l,i_delay,n_delay;
    int ant_scn,rm_status, antlist[RM_ARRAY_SIZE];/*variables for encoderClient*/
	int adc0_fd, adc1_fd, adc0_rd, adc1_rd, count;
	int adc2_fd, adc3_fd, adc2_rd, adc3_rd;
	int OFLAG;
	int amp,pha,amp_sum,pha_sum;
	int amp2,pha2,amp2_sum,pha2_sum;
    short	handshake;
    unsigned short	m1009,m1010,num_of_dat,output,num_of_ave;
    float	chop_angle,chop_x,chop_y,chop_z,chopperPosition[4];
    float	chop_angle_av,chop_x_av,chop_y_av,chop_z_av,output_av,amp_av, pha_av;
    float	amp2_av, pha2_av;
    double az_enc,el_enc,az_av,el_av;
    double az2_av,el2_av;

	count=2; /* set how many counts we read from A/D board device */

	if(argc<6)
	{
	printf("Usage: chop_vvm <filename> <antNo> <#data> <#average(10-30)> <n_delay> \n"); 
	exit(0);
	}

	ant_scn=atoi(argv[2]);
	num_of_dat=atoi(argv[3]);
	num_of_ave=atoi(argv[4]);
	n_delay=atoi(argv[5]);

	chop_angle=0;
	chop_x=0;
	chop_y=0;
	chop_z=0;

	fp = fopen(argv[1],"w");
	if(fp==NULL){
		printf("cannot open the data file\n");
		exit(1);
	}

/* initializing ref. mem. */
	rm_status=rm_open(antlist);
	if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_open()");
		exit(1);
	}
/* configure for interrupt through RM */
        rm_status=rm_monitor(ant_scn,"RM_HOLO_ENC_HNDSHK_S");
        if(rm_status != RM_SUCCESS) {
                rm_error_message(rm_status,"rm_monitor()");
                exit(1);
        }

        printf("checking the encoderServer status\n");
        handshake = 0;

        rm_status=rm_write_notify(ant_scn,"RM_HOLO_ENC_HNDSHK_S",&handshake);
                if(rm_status != RM_SUCCESS) {
                rm_error_message(rm_status,"rm_write_notify()");
                exit(1);
                }
        sleep(1);

        rm_status=rm_read(ant_scn,"RM_HOLO_ENC_HNDSHK_S",&handshake);
                if(rm_status != RM_SUCCESS) {
                rm_error_message(rm_status,"rm_read()");
                exit(1);
                }

        if (handshake==0)
        {
        printf("encoderServer is not running on acc%1d!\n",ant_scn);
        exit(-1);
        }

/* open Device tables */
        OFLAG=O_RDWR|O_NDELAY;
        adc0_fd = open("/dev/xVME564-0", OFLAG, 0);
        if(adc0_fd<0){printf("cannot open device 0\n");exit(1);}
        adc1_fd = open("/dev/xVME564-1", OFLAG, 0);
        if(adc1_fd<0){printf("cannot open device 1\n");exit(1);}
/* Dual */
        adc2_fd = open("/dev/xVME564-2", OFLAG, 0); 
        if(adc2_fd<0){printf("cannot open device 0\n");exit(1);}
        adc3_fd = open("/dev/xVME564-3", OFLAG, 0);
        if(adc3_fd<0){printf("cannot open device 1\n");exit(1);}
/* */
	for(l=0;l<num_of_dat;l++){
    	chop_angle_av=0.;chop_x_av=0.;chop_y_av=0.;chop_z_av=0.;output_av=0.;
	amp_sum=0;pha_sum=0;amp_av=0.;pha_av=0.;az_av=0.;el_av=0.;
	amp2_sum=0;pha2_sum=0;amp2_av=0.;pha2_av=0.;az2_av=0.;el2_av=0.;
	for(i=0;i<num_of_ave;i++){
		/* send interrupt to antenna computer requesting for readings*/
/*		handshake=0; 
		rm_status=rm_write_notify(ant_scn,"RM_HOLO_ENC_HNDSHK_S",&handshake);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_write_notify()");
		exit(1);
		}
		usleep(1); */
	
		/* wait for interrupt for data-ready */
	/*	rm_status=rm_read(ant_scn,"RM_HOLO_ENC_HNDSHK_S",&handshake);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_read_wait()");
		exit(1);
		}
*/

                        for (i_delay=1; i_delay<n_delay; i_delay++){}
                        adc0_rd=read(adc0_fd, amp_vvm.byte, count);
                        if(adc0_rd<=0){
                                printf("cannot read device 0\n");
                                exit(1);
                                close(adc0_fd);
                                close(adc1_fd);
                        }
/* usleep(1); */
                        adc1_rd=read(adc1_fd, pha_vvm.byte, count);
                        if(adc1_rd<=0){
                                printf("cannot read device 0\n");
                                exit(1);
                                close(adc0_fd);
                                close(adc1_fd);
                    }
/* Dual */
                        adc2_rd=read(adc2_fd, amp2_vvm.byte, count);
                        if(adc2_rd<=0){
                                printf("cannot read device 2\n");
                                exit(1);
                                close(adc2_fd);
                                close(adc3_fd);
                        } 
 /* usleep(1); */
                        adc3_rd=read(adc3_fd, pha2_vvm.byte, count);
                        if(adc3_rd<=0){
                                printf("cannot read device 3\n");
                                exit(1);
                                close(adc2_fd);
                                close(adc3_fd);
                        }
/* End Dual */

/* read encoders using encoderClient */
                encoderClient(ant_scn,&az_enc,&el_enc,&m1009,&m1010);

/* new chopper variables in RM, NaP 13 Nov 2003 */

	        rm_status=rm_read(ant_scn,"RM_CHOPPER_POS_MM_V4_F",chopperPosition);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_read()");
		exit(1);
		}

		chop_x=chopperPosition[0];
		chop_y=chopperPosition[1];
		chop_z=chopperPosition[2];
		chop_angle=chopperPosition[3];

/*		rm_status=rm_read(ant_scn,"RM_CHOPPER_ANGLE_F",&chop_angle);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_read()");
		exit(1);
		}
		rm_status=rm_read(ant_scn,"RM_CHOPPER_X_MM_F",&chop_x);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_read()");
		exit(1);
		}
		rm_status=rm_read(ant_scn,"RM_CHOPPER_Y_MM_F",&chop_y);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_read()");
		exit(1);
		}
		rm_status=rm_read(ant_scn,"RM_CHOPPER_Z_MM_F",&chop_z);
		if(rm_status != RM_SUCCESS) {
		rm_error_message(rm_status,"rm_read()");
		exit(1);
		}
*/
		amp=amp_vvm.word;
 		pha=pha_vvm.word;
		amp_sum+=amp;
		pha_sum+=pha;
		az_av+=az_enc;
		el_av+=el_enc;
    		chop_angle_av+=chop_angle;
		chop_x_av+=chop_x;
		chop_y_av+=chop_y;
		chop_z_av+=chop_z;
/* Dual */
		amp2=amp2_vvm.word;
 		pha2=pha2_vvm.word;
		amp2_sum+=amp2;
		pha2_sum+=pha2;
/*		printf("%8.4f %7.4f %4d %6.2f %6.2f %6.2f %5d %5d\n",az_enc,el_enc,l,chop_x_av,chop_y_av,chop_z_av,amp,pha);*/
	}
		az_av/=num_of_ave;
		el_av/=num_of_ave;
		amp_av=amp_sum/num_of_ave;
		pha_av=pha_sum/num_of_ave;
    		chop_angle_av/=num_of_ave;
		chop_x_av/=num_of_ave;
		chop_y_av/=num_of_ave;
		chop_z_av/=num_of_ave;
/* Dual */
		amp2_av=amp2_sum/num_of_ave;
		pha2_av=pha2_sum/num_of_ave;
/* */
		printf("%8.4f %7.4f %4d %6.2f %6.2f %6.2f %6.2f %7.1f %7.1f %7.1f %7.1f\n",az_av,el_av,l,chop_x_av,chop_y_av,chop_z_av,chop_angle_av,amp_av,pha_av,amp2_av,pha2_av);
		fprintf(fp,"%8.4f %7.4f %4d %6.2f %6.2f %6.2f %6.2f %7.1f %7.1f %7.1f %7.1f\n",az_av,el_av,l,chop_x_av,chop_y_av,chop_z_av,chop_angle_av,amp_av,pha_av,amp2_av,pha2_av);
	}

	fclose(fp);
}