Esempio n. 1
0
void lime_protocol_init(int rx,int pixels) {
    SoapySDRKwargs args;
    int rc;

    fprintf(stderr,"lime_protocol_init: receiver=%d pixels=%d\n",rx,pixels);

    receiver=(size_t)rx;
    display_width=pixels;

    outputsamples=BUFFER_SIZE/(sample_rate/48000);
    /*
      switch(sample_rate) {
        case 48000:
          outputsamples=BUFFER_SIZE;
          break;
        case 96000:
          outputsamples=BUFFER_SIZE/2;
          break;
        case 192000:
          outputsamples=BUFFER_SIZE/4;
          break;
        case 384000:
          outputsamples=BUFFER_SIZE/8;
          break;
        case 768000:
          outputsamples=BUFFER_SIZE/16;
          break;
        case 1536000:
          outputsamples=BUFFER_SIZE/32;
          break;
      }
    */




    args.size=0;

    // initialize the radio
    fprintf(stderr,"lime_protocol: receive_thread: SoapySDRDevice_make\n");
    lime_device=SoapySDRDevice_make(discovered->info.soapy.args);
    if(lime_device==NULL) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_make failed: %s\n",SoapySDRDevice_lastError());
        _exit(-1);
    }

    fprintf(stderr,"lime_protocol: set antenna to NONE\n");
    lime_protocol_set_antenna(0);

    fprintf(stderr,"lime_protocol: setting samplerate=%f\n",(double)sample_rate);
    rc=SoapySDRDevice_setSampleRate(lime_device,SOAPY_SDR_RX,receiver,(double)sample_rate);
    if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_setSampleRate(%f) failed: %s\n",(double)sample_rate,SoapySDRDevice_lastError());
    }

    actual_rate=(int)SoapySDRDevice_getSampleRate(lime_device, SOAPY_SDR_RX, receiver);
    fprintf(stderr,"lime_protocol: actual samplerate= %d\n",actual_rate);
    if(sample_rate==768000 && actual_rate==767999) {
        actual_rate=768000;
        fprintf(stderr,"lime_protocol: forced actual_rate\n");
    }

    fprintf(stderr,"lime_protocol: setting bandwidth =%f\n",bandwidth);
    rc=SoapySDRDevice_setBandwidth(lime_device,SOAPY_SDR_RX,receiver,bandwidth);
    if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_setBandwidth(%f) failed: %s\n",bandwidth,SoapySDRDevice_lastError());
    }

    if(saved_frequency!=0LL) {
        fprintf(stderr,"lime_protocol: setting save_frequency: %lld\n",saved_frequency);
        lime_protocol_set_frequency(saved_frequency);
    }

    /*
    fprintf(stderr,"lime_protocol: set baseband frequency\n");
      rc=SoapySDRDevice_setFrequencyComponent(lime_device,SOAPY_SDR_RX,receiver,"BB",0.0,&args);
      if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_setFrequencyComponent(BB) failed: %s\n",SoapySDRDevice_lastError());
      }
    */

    fprintf(stderr,"setting antennal to LNAL\n");
    lime_protocol_set_antenna(2);

    fprintf(stderr,"setting Gain LNA=30.0\n");
    rc=SoapySDRDevice_setGainElement(lime_device,SOAPY_SDR_RX,receiver,"LNA",30.0);
    if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_setGain LNA failed: %s\n",SoapySDRDevice_lastError());
    }
    fprintf(stderr,"setting Gain PGA=19.0\n");
    rc=SoapySDRDevice_setGainElement(lime_device,SOAPY_SDR_RX,receiver,"PGA",19.0);
    if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_setGain PGA failed: %s\n",SoapySDRDevice_lastError());
    }
    fprintf(stderr,"setting Gain TIA=12.0\n");
    rc=SoapySDRDevice_setGainElement(lime_device,SOAPY_SDR_RX,receiver,"TIA",12.0);
    if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_setGain TIA failed: %s\n",SoapySDRDevice_lastError());
    }

    fprintf(stderr,"lime_protocol: receive_thread: SoapySDRDevice_setupStream\n");
    size_t channels=(size_t)receiver;
    rc=SoapySDRDevice_setupStream(lime_device,&stream,SOAPY_SDR_RX,"CF32",&channels,1,&args);
    if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_setupStream failed: %s\n",SoapySDRDevice_lastError());
        _exit(-1);
    }

    max_samples=SoapySDRDevice_getStreamMTU(lime_device,stream);
    fprintf(stderr,"max_samples=%d\n",max_samples);

    buffer=(float *)malloc(max_samples*sizeof(float)*2);

    if(actual_rate!=sample_rate) {
        fprintf(stderr,"lime_protocol: creating resampler from %d to %d\n",actual_rate,sample_rate);
        resampler=create_resample (1, max_samples, resamples, resampled, actual_rate, sample_rate, 0.0, 0, 1.0);
    }

    rc=SoapySDRDevice_activateStream(lime_device, stream, 0, 0LL, 0);
    if(rc!=0) {
        fprintf(stderr,"lime_protocol: SoapySDRDevice_activateStream failed: %s\n",SoapySDRDevice_lastError());
        _exit(-1);
    }


    if(saved_antenna!=-1) {
        fprintf(stderr,"lime_protocol: setting save_antenna: %d\n",saved_antenna);
        lime_protocol_set_antenna(saved_antenna);
    }

    if(saved_frequency!=0LL) {
        fprintf(stderr,"lime_protocol: setting save_frequency: %lld\n",saved_frequency);
        lime_protocol_set_frequency(saved_frequency);
    }

    fprintf(stderr,"lime_protocol_init: audio_open_output\n");
    if(audio_open_output()!=0) {
        local_audio=false;
        fprintf(stderr,"audio_open_output failed\n");
    }

    fprintf(stderr,"lime_protocol_init: create receive_thread\n");
    rc=pthread_create(&receive_thread_id,NULL,receive_thread,NULL);
    if(rc != 0) {
        fprintf(stderr,"lime_protocol: pthread_create failed on receive_thread: rc=%d\n", rc);
        _exit(-1);
    }



}
Esempio n. 2
0
PORT
void* create_resampleV (int in_rate, int out_rate)
{
	return (void *)create_resample (1, 0, 0, 0, in_rate, out_rate, 0.0, 0, 1.0);
}