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