Thanks Marcus,

You are right I misunderstood the concept, I thought that they where
absolute seconds...

After correcting that plus a little other detail it seems to be working....

Thanks for your help.


>From Android Device

El mar., abr. 23, 2019 12:23, Marcus D. Leech <patchvonbr...@gmail.com>
escribió:

> On 04/23/2019 07:35 AM, Guillermo Gancio wrote:
> > Thanks Marcus for the answer and your time,
> >
> > This is the part of the code with all the configurations....the rest
> > is too messy to share I think..and its based in rx_samples_c.c
> > The UHD version is...
> >   linux; GNU C++ version 4.8.4; Boost_105400;
> UHD_003.010.003.HEAD-0-gef157678
> >
> > Thanks!
> I would update to a newer UHD, but also I think you have a logic error
> in your code that causes the start time to be in the past--
>    you sleep for 1.5 seconds after setting the USRP time to zero, which
> means that there's some possibility that when you ask for
>    an absolute time of 2 on the stream command, that time has already
> passed.
>
>
> >
> > // Set up of the B2xx
> > board---------------------------------------------------------
> >      // Create USRP
> >      uhd_usrp_handle usrp;
> >      fprintf(stderr, "Creating USRP with args \"%s\"...\n", device_args);
> >      EXECUTE_OR_GOTO(free_option_strings,
> >          uhd_usrp_make(&usrp, device_args)
> >      )
> >
> >      // Create RX streamer
> >      uhd_rx_streamer_handle rx_streamer;
> >      EXECUTE_OR_GOTO(free_usrp,
> >          uhd_rx_streamer_make(&rx_streamer)
> >      )
> >
> >      // Create RX metadata
> >      uhd_rx_metadata_handle md;
> >      EXECUTE_OR_GOTO(free_rx_streamer,
> >          uhd_rx_metadata_make(&md)
> >      )
> >
> >      // Create other necessary structs
> >      uhd_tune_request_t tune_request = {
> >          .target_freq = freq,
> >          .rf_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO,
> >          .dsp_freq_policy = UHD_TUNE_REQUEST_POLICY_AUTO,
> >      };
> >      uhd_tune_result_t tune_result;
> >      uhd_stream_args_t stream_args = {
> >          .cpu_format = "sc16",  //sc16
> >          .otw_format = "sc8",   //sc8
> >          .args = "",
> >          .channel_list = &channel,
> >          .n_channels = 0
> >      };
> > // Set rate
> >      fprintf(stderr, "Setting RX Rate: %f...\n", rate);
> >      EXECUTE_OR_GOTO(free_rx_metadata,
> >          uhd_usrp_set_rx_rate(usrp, rate, channel)
> >      )
> >
> >      // See what rate actually is
> >      EXECUTE_OR_GOTO(free_rx_metadata,
> >          uhd_usrp_get_rx_rate(usrp, channel, &rate)
> >      )
> >      fprintf(stderr, "Actual RX Rate: %f...\n", rate);
> >
> >      // Set gain
> >      fprintf(stderr, "Setting RX Gain: %f dB...\n", gain);
> >      EXECUTE_OR_GOTO(free_rx_metadata,
> >          uhd_usrp_set_rx_gain(usrp, gain, channel, "")
> >      )
> >
> >      // See what gain actually is
> >      EXECUTE_OR_GOTO(free_rx_metadata,
> >          uhd_usrp_get_rx_gain(usrp, channel, "", &gain)
> >      )
> >      fprintf(stderr, "Actual RX Gain: %f...\n", gain);
> >
> >
> >      // Set frequency
> >      fprintf(stderr, "Setting RX frequency: %f MHz...\n", freq/1e6);
> >      EXECUTE_OR_GOTO(free_rx_metadata,
> >          uhd_usrp_set_rx_freq(usrp, &tune_request, channel, &tune_result)
> >      )
> >
> >      // See what frequency actually is
> >      EXECUTE_OR_GOTO(free_rx_metadata,
> >          uhd_usrp_get_rx_freq(usrp, channel, &freq)
> >      )
> >     int64_t aux_secs=0,aux_secs_loop=0;
> >     double aux_frac_secs=0.0;
> >     uhd_rx_metadata_error_code_t error_code;
> >          if(use_PPS)
> >          {
> >                  printf("Using PPS\n");
> >                  EXECUTE_OR_GOTO(free_rx_metadata,
> >                  uhd_usrp_set_time_source(usrp, "external",channel)
> >                  )
> >                  sleep(0.25);
> >                  EXECUTE_OR_GOTO(free_rx_metadata,
> >                  uhd_usrp_set_clock_source(usrp, "internal",channel)
> >                  )
> >                  sleep(1.5);
> >                  EXECUTE_OR_GOTO(free_rx_metadata,
> >                  uhd_usrp_get_time_last_pps(usrp, channel,
> > &aux_secs,&aux_frac_secs)
> >                  )
> >                  printf("Get Last PPS.....%d -
> > %f\n",(int)aux_secs,aux_frac_secs);
> >                  do{
> >                          EXECUTE_OR_GOTO(free_rx_metadata,
> >                          uhd_usrp_get_time_last_pps(usrp, channel,
> > &aux_secs_loop,&aux_frac_secs)
> >                          )
> >                          sleep(0.25);
> >                  }while(aux_secs==aux_secs_loop);
> >                  sleep(1.5);
> >                  EXECUTE_OR_GOTO(free_rx_metadata,
> >                  uhd_usrp_set_time_next_pps(usrp,0,0.0,channel)
> >                  )
> >                  sleep(1.5);
> >          }
> >                  EXECUTE_OR_GOTO(free_rx_metadata,
> >                  uhd_usrp_get_time_now(usrp, channel,
> > &aux_secs_loop,&aux_frac_secs)
> >                  )
> >                  printf("Get Time NOW.....%d -
> > %f\n",(int)aux_secs_loop,aux_frac_secs);
> >      // Set up buffer
> >      samps_per_buff_2=samps_per_buff;
> >      EXECUTE_OR_GOTO(free_rx_streamer,
> >          uhd_rx_streamer_max_num_samps(rx_streamer, &samps_per_buff_2)
> >      )
> >
> >          uhd_stream_cmd_t        stream_cmd = {
> >          .stream_mode = UHD_STREAM_MODE_START_CONTINUOUS,
> >          .num_samps = 0,
> >          .stream_now = false,
> >          .time_spec_full_secs = 2
> >          };
> >
> >      EXECUTE_OR_GOTO(free_rx_streamer,
> >          uhd_usrp_get_rx_stream(usrp, &stream_args, rx_streamer)
> >      )
> >
> >      EXECUTE_OR_GOTO(free_buffer,
> >          uhd_rx_streamer_issue_stream_cmd(rx_streamer, &stream_cmd)
> >      )
> > // Ettus B2xx Read loop
> >     for(loop_samps=0;loop_samps<tot_samps;loop_samps++)
> >          {
> >          num_rx_samps = 0;
> >          EXECUTE_OR_GOTO(close_file,
> >                  uhd_rx_streamer_recv(rx_streamer, buffs_ptr,
> > samps_per_buff, &md, 3.0, false, &num_rx_samps) //Actual reading.
> >          )
> >
> >          EXECUTE_OR_GOTO(close_file,
> >                  uhd_rx_metadata_error_code(md, &error_code)
> >          )
> >          if(error_code != UHD_RX_METADATA_ERROR_CODE_NONE){ // If there
> > is an error in the reading it will breake the loop and jump to close
> > the file.
> >                  fprintf(stderr, "Error code 0x%x was returned during
> > streaming. Aborting.\n", return_code);
> >                  goto close_file;
> >          }
> >          num_rx_samps2=num_rx_samps;
> >
> >          if(fork_start==1){ //Wait for child process to finish, only
> > after first run..
> >                  sem_wait(fft_done);}
> >          memcpy(glob_var,buff,(samps_per_buff * 2 * sizeof(d_type)));
> >          sem_post(fft_start); // realse the child process for the FFT
> > and kept reading.
> >          fork_start=1;
> >          if (verbose) {
> >                  time_t full_secs;
> >                  double frac_secs;
> >                  uhd_rx_metadata_time_spec(md, &full_secs, &frac_secs);
> >                  fprintf(stderr, "Received packet: %zu samps request
> > %zu samples recieved, %d full secs, %f frac secs\n",
> >                                  samps_per_buff,
> >                                  num_rx_samps,
> >                                  (int)full_secs,
> >                                  frac_secs);
> >          }
> >          if(*fft_go==5)
> >                  goto close_file;
> >          num_acc_samps += num_rx_samps;
> > }
> >
> >
> >
> >
> > El lun., 22 abr. 2019 a las 23:16, Marcus D. Leech via USRP-users
> > (<usrp-users@lists.ettus.com>) escribió:
> >> On 04/22/2019 09:36 PM, Guillermo Gancio via USRP-users wrote:
> >>> Hi all,
> >>>
> >>> I have a question trying to sync the start of data burst with a PPS
> signal.
> >>> With the options....
> >>> .stream_mode = UHD_STREAM_MODE_START_CONTINUOUS,
> >>> .num_samps = 0,
> >>> .stream_now = true
> >>>
> >>> the code works ok, but when I change to....
> >>> .stream_now = false,
> >>> .time_spec_full_secs = 2
> >>> The code gives...
> >>> UHD Error:
> >>>       The receive packet handler caught a value exception.
> >>>       ValueError: bad vrt header or packet fragment
> >>> Error code 0x0 was returned during streaming. Aborting.
> >>>
> >>> Before this I set the time_source to external and set the next PPS to
> 0 with...
> >> You might need to share more of your code, and also, what version of UHD
> >> are you using?
> >>
> >>
> >>> EXECUTE_OR_GOTO(free_rx_metadata,uhd_usrp_get_time_last_pps(usrp,
> >>> channel, &aux_secs,&aux_frac_secs) )
> >>> do{
> >>>                   sleep(0.25);
> >>>                   EXECUTE_OR_GOTO(free_rx_metadata,
> >>> uhd_usrp_get_time_last_pps(usrp, channel,
> >>> &aux_secs_loop,&aux_frac_secs) )
> >>>                   }while(aux_secs==aux_secs_loop);
> >>>                   sleep(0.25);
> >>>                   EXECUTE_OR_GOTO(free_rx_metadata,
> >>> uhd_usrp_set_time_next_pps(usrp, 0, 0.0,channel))
> >>>
> >>>
> >>> Any help will be very appreciated!
> >>>
> >>> Thanks!
> >>>
> >>> _______________________________________________
> >>> USRP-users mailing list
> >>> USRP-users@lists.ettus.com
> >>> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
> >>
> >> _______________________________________________
> >> USRP-users mailing list
> >> USRP-users@lists.ettus.com
> >> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
> >
> >
>
>
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to