Exemplo n.º 1
0
static int add_devices()
{
	FILE *fp;
	char file[PATH_MAX], name[128], path[PATH_MAX], line[PATH_MAX];
	driver_t *driver;
	device_t *device;

	if (getcfg(cfg_file, "device_cfg_file", name, GETCFG_STR) != 0) {
		syslog(LOG_INFO, "can't get device cfg file info");
		return -1;
	}

	if (getrpath(path, sizeof(path)) == -1)
		snprintf(path, sizeof(path), ".");
	snprintf(file, sizeof(file), "%s/%s", path, name);

	if ((fp = fopen(file, "r")) == NULL)
		return -1;

	device_cfg_t cfg;
	int n;
	while (fgets(line, sizeof(line), fp) != NULL) {
		if (line[0] == '#' || line[0] == '/' || strlen(line) == 1)
			continue;

		n = sscanf(line, "%d;%d;%[^;];%d;%[^;];%[^;];%d;%[^;];"
				"%d;%[^;];%d;%[^;];%[^;];%d;%d;",
				&cfg.type,
				&cfg.id,
				cfg.ip,
				&cfg.port,
				cfg.user,
				cfg.pwd,
				&cfg.channel_num,
				cfg.rec,
				&cfg.storage_device_type,
				cfg.storage_ip,
				&cfg.storage_port,
				cfg.storage_user,
				cfg.storage_pwd,
				&cfg.storage_disk,
				&cfg.baud_rate);
		if (n != 15)
			continue;

		driver = rmd_devmgr_get_driver(cfg.type);
		if (driver == NULL)
			continue;

		device = add_device(&cfg, driver);
		if (device == NULL)
			continue;
		add_channels(&cfg, driver, device);
	}
	fclose(fp);
	return 0;
}
Exemplo n.º 2
0
void decimate_data(FILE *input, FILE *output) /*includefile*/
{ 
  char string[80];
  float *fblock,min,max,realtime,fsaved[2];
  unsigned short *sblock;
  unsigned char  *cblock;
  int nsaved=0,ns,nsblk,opened=0,nout;

  nsblk=nchans*nifs*naddt;
  fblock=(float *) malloc(nsblk*sizeof(float));
  sblock=(unsigned short *) malloc(nsblk*sizeof(unsigned short));
  cblock=(unsigned char *) malloc(nsblk*sizeof(unsigned short));
  realtime=min=0.0;
  max=(float) pow(2.0,(double)obits) -1.0;

  /* main decimation loop */
  while ((ns=read_block(input,nbits,fblock,nsblk))>0) {
    add_channels(fblock,ns,naddc);
    add_samples(fblock,nifs,nchans/naddc,naddt);
    if (!opened) {
      /* open up logfile */
      open_log("decimate.monitor");
      opened=1;
    }
    nout=ns/naddt/naddc;
    switch (obits) {
    case 32:
      fwrite(fblock,sizeof(float),nout,output);
      break;
    case 16:
      float2short(fblock,nout,min,max,sblock);
      fwrite(sblock,sizeof(unsigned short),nout,output);
      break;
    case 8:
      float2char(fblock,nout,min,max,cblock);
      fwrite(cblock,sizeof(unsigned char),nout,output);
      break;
    case 4:
      if (nout==1) {
	/* must have at least two samples for four-bit packing save this one */
	fsaved[nsaved]=fblock[0];
	nsaved++;
	if (nsaved==2) {
	  /* we have 2 saved! write out */
	  float2four(fsaved,nsaved,min,max,cblock);
	  fwrite(cblock,sizeof(unsigned char),1,output);
	  nsaved=0;
	}
      } else {
	/* normal case */
	float2four(fblock,nout,min,max,cblock);
	fwrite(cblock,sizeof(unsigned char),nout/2,output);
      }
      break;
    case 2:
      float2two(fblock,nout,min,max,cblock);
      fwrite(cblock,sizeof(unsigned char),nout/4,output);
      break;
    }
    realtime+=(float) tsamp * (float) ns/(float) nchans/(float) nifs;
    sprintf(string,"time:%.1fs",realtime);
    update_log(string);
  }
  update_log("finished");
  close_log();
}
Exemplo n.º 3
0
static int _impl_setup(rh_aout_api_itf self) {

	extern AAssetManager * __rh_hack_get_android_asset_manager();

	static const SLEngineOption options[] = {
			{ SL_ENGINEOPTION_THREADSAFE, 		SL_BOOLEAN_TRUE },
			{ SL_ENGINEOPTION_LOSSOFCONTROL, 	SL_BOOLEAN_FALSE },
	};

    struct sles_api_instance * instance = (struct sles_api_instance *)self;

    instance->asset_manager = __rh_hack_get_android_asset_manager();

    if(!instance->asset_manager)
    	goto bad;

    if (SL_RESULT_SUCCESS
			!= slCreateEngine(&instance->engineObject,
					sizeof(options) / sizeof(options[0]), options, 0, NULL,
					NULL))
		goto bad;

	if (SL_RESULT_SUCCESS
			!= (*instance->engineObject)->Realize(instance->engineObject,
					SL_BOOLEAN_FALSE ))
		goto bad;

	if (SL_RESULT_SUCCESS
			!= (*instance->engineObject)->GetInterface(instance->engineObject,
					SL_IID_ENGINE, &instance->engineItf))
		goto bad;

	if (SL_RESULT_SUCCESS
			!= (*instance->engineItf)->CreateOutputMix(instance->engineItf,
					&instance->outputMix, 0, NULL, NULL))
		goto bad;

	if (SL_RESULT_SUCCESS
			!= (*instance->outputMix)->Realize(instance->outputMix,
					SL_BOOLEAN_FALSE ))
		goto bad;

    if( pipe( &instance->cmd_pipe.read ) != 0 )
        goto bad;

    if(fcntl( instance->cmd_pipe.read, F_SETFL, O_NONBLOCK) != 0)
        goto bad;

    if(bucket_create(&instance->aout_itf_bucket) != 0)
        goto bad;

    if(add_channels(self, 3) != 0)
        goto bad;

    {
        pthread_t thread;
        if(pthread_create(&thread, NULL, &api_main_loop, (void*)self) != 0)
            goto bad;
        instance->thread = thread;
    }

    pthread_detach( instance->thread );

good:
    return 0;

bad:

	if( instance->outputMix )
		(*instance->outputMix)->Destroy(instance->outputMix);

	if( instance->engineObject )
		(*instance->engineObject)->Destroy(instance->engineObject);

    if(instance->aout_itf_bucket) {
        close_all_channels(self);
        bucket_free(instance->aout_itf_bucket);
    }
    if(instance->cmd_pipe.write)
        close(instance->cmd_pipe.write);
    if(instance->cmd_pipe.read)
        close(instance->cmd_pipe.read);
    return -1;
}
Exemplo n.º 4
0
static int _play(rh_aout_api_itf self, rh_asmp_itf asmp_itf, int loop_flag) {

    struct sles_api_instance * api_instance = (struct sles_api_instance *)self;

    int len;
    rh_aout_itf * array;
    int e = 0;

    for(;;) {
        int found = 0;
        if( bucket_lock( api_instance->aout_itf_bucket, (void***)&array, &len ) == 0 ) {

            int i;

            // is this sample already assigned to a channel? try to find its channel.

            for(i=0; i<len; i++) {

                rh_asmp_itf audio_sample;
                rh_aout_itf audio_channel = array[i];

                if( (*audio_channel)->get_sample(audio_channel, &audio_sample) == 0 ) {

                    if( audio_sample == asmp_itf ) {

                        found = 1;

                        if(loop_flag)
                            e = (*audio_channel)->loop(audio_channel);
                        else
                            e = (*audio_channel)->play(audio_channel);

                        break;
                    }
                }
            }

            if(!found) {

                // sample not yet assigned to a channel, find and empty one and assign it.

                for(i=0; i<len; i++) {

                    rh_asmp_itf audio_sample;
                    rh_aout_itf audio_channel = array[i];

                    if( (*audio_channel)->get_sample(audio_channel, &audio_sample) == 0 ) {

                        if( audio_sample == NULL ) {

                            found = 1;

                            (*audio_channel)->set_sample(audio_channel, asmp_itf);

                            (*audio_channel)->open(
                                audio_channel,
                                (*asmp_itf)->channels(asmp_itf),
                                (*asmp_itf)->samplerate(asmp_itf),
                                (*asmp_itf)->samplesize(asmp_itf) );

                            if(loop_flag)
                                e = (*audio_channel)->loop(audio_channel);
                            else
                                e = (*audio_channel)->play(audio_channel);

                            break;
                        }
                    }
                }
            }

            bucket_unlock( api_instance->aout_itf_bucket );
        }

        if(!found) {
            // no empty channels available, create a new channel and try again.
            if((e = add_channels(self, 1)) != 0)
                break;
        }
        else
            break;
    }

    return e;
}
Exemplo n.º 5
0
main(int argc, char **argv) 
{
  float tsec,fmhz,peak=1.0,sum,sumsq,sigma,sig2,mean,meansq,chi2,diff;
  float *pcopy,n;
  int hh,mm,i,j,row,dummy,mbins=64,obins,first=1,idx,nprof=1,display=0,rc2=0,flux=0;
  unsigned long *indx;
  char line[240], hash, gry[10], message[80];

  strcpy(gry,"   ,:o*@$#");
  input=stdin;

  if (argc > 1) {
    print_version(argv[0],argv[1]);
    if (help_required(argv[1])) {
      profile_help();
      exit(0);
    }
    i=1;
    while (i<argc) {
      if (file_exists(argv[i])) {
	input=open_file(argv[i],"r");
      } else if (strings_equal(argv[i],"-frequency")) {
	display=1;
      } else if (strings_equal(argv[i],"-chi2")) {
	rc2=1;
      } else if (strings_equal(argv[i],"-sum")) {
	flux=1;
      } else if (strings_equal(argv[i],"-p")) {
	peak=atof(argv[++i]);
      } else {
	sprintf(message,"command-line argument %s not recognized...",argv[i]);
	error_message(message);
      }
      i++;
    }
  }

  fgets(line,sizeof(line),input);
  sscanf(line,"%c %lf %lf %lf %ld %lf %lf %d",&hash,
	 &mjdobs,&tstart,&period,&np,&fch1,&refdm,&nbins);
  if (nbins > 0) {
    while (!feof(input)) {
      profile=(float *) malloc(sizeof(float)*nbins);
      for (i=0; i<nbins; i++) {
	fscanf(input,"%d %f",&dummy,&profile[i]);
      }
      if (rc2 || flux) {
	pcopy=(float *) malloc(sizeof(float)*nbins);
	for (i=0;i<nbins;i++) pcopy[i]=profile[i];
	indx=(unsigned long *) malloc(sizeof(unsigned long)*nbins);
	indexx((unsigned long)nbins,pcopy,indx);
	if (flux) {
	  n=sum=sumsq=0.0;
	  for (i=0;i<40;i++) {
	    sum+=profile[i];
	    sumsq+=profile[i]*profile[i];
	    n+=1.0;
	  }
	  mean=sum/n;
	  meansq=sumsq/n;
	  sigma=sqrt(meansq-mean*mean)/sqrt(n-1.0);
	  n=sum=sumsq=0.0;
	  for (i=43;i<52;i++) {
	    sum+=profile[i];
	    sumsq+=profile[i]*profile[i];
	    n+=1.0;
	  }
	  printf("%f %f\n",sum/n,sigma);
	  exit(0);
	}
	n=sum=sumsq=0.0;
	for (i=0;i<nbins/2;i++) {
	  j=indx[i];
	  sum+=profile[j];
	  sumsq+=profile[j]*profile[j];
	  n+=1.0;
	}
	mean=sum/n;
	meansq=sumsq/n;
	sigma=sqrt(meansq-mean*mean);
	sig2=sigma*sigma;
	sumsq=0.0;
	for (i=0;i<nbins;i++) {
	  diff=profile[i]-mean;
	  sumsq+=diff*diff;
	}
	//chi2=sumsq/sig2/(float)(nbins-1);
	chi2=sumsq/(float)(nbins-1);
	printf("%f %f\n",period,chi2);
	exit(0);
      }
      if (nbins>mbins) {
	add_channels(profile,nbins,nbins/mbins);
	nbins=mbins;
      }
      pmin=vmin(profile,nbins);
      pmax=vmax(profile,nbins)*peak;
      prng=pmax-pmin;
      for (i=0; i<nbins; i++) profile[i]=19.0*(profile[i]-pmin)/prng+1.0;
      for (row=20; row>=1; row--) {
	for (i=0; i<nbins; i++) {
	  if (profile[i]>=(float) row) 
	    printf("#");
	  else
	    printf(" ");
	}
	printf("\n");
      }
      free(profile);
      nbins=0;
      fgets(line,sizeof(line),input);
      fgets(line,sizeof(line),input);
      sscanf(line,"%c %lf %lf %lf %ld %lf %lf %d",&hash,
	 &mjdobs,&tstart,&period,&np,&fch1,&refdm,&nbins);
      if (nbins<=0) break;
    }
  } else {
    while (!feof(input)) {
      sscanf(line,"#START %d %f %f",&nbins,&tsec,&fmhz);
      if (nbins <=0) break;
      profile=(float *) malloc(sizeof(float)*nbins);
      for (i=0; i<nbins; i++) fscanf(input,"%d %f",&dummy,&profile[i]);
      fgets(line,sizeof(line),input);
      fgets(line,sizeof(line),input);
      if (nbins>mbins) {
	obins=nbins;
	add_channels(profile,nbins,nbins/mbins);
	nbins=mbins;
      }
      if (first) {
	pmin=vmin(profile,nbins);
	pmax=vmax(profile,nbins)*peak;
	prng=pmax-pmin;
	/*first=0;*/
      }
      if (display) {
	printf("|%04d|%11.6f|",nprof,fmhz);
      } else {
	hh=(int) tsec/3600.0;
	tsec-=(float) hh*3600.0;
	mm=(int) tsec/60.0;
	tsec-=(float) mm*60.0;
	printf("|%04d|%02d:%02d:%02d|",nprof,hh,mm,(int)tsec);
      }
      for (i=0; i<nbins; i++) {
	idx=(int) (9.0*(profile[i]-pmin)/prng);
	if (idx<0) idx=0;
	if (idx>9) idx=9;
	putchar(gry[idx]);
      }
      puts("|");
      free(profile);
      fgets(line,sizeof(line),input);
      nbins=0;
      nprof++;
    }
  }
}