diff options
-rw-r--r-- | host/examples/tx_waveforms.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/host/examples/tx_waveforms.cpp b/host/examples/tx_waveforms.cpp index 942b5df7b..af8f92607 100644 --- a/host/examples/tx_waveforms.cpp +++ b/host/examples/tx_waveforms.cpp @@ -46,7 +46,7 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ uhd::set_thread_priority_safe(); //variables to be set by po - std::string args, wave_type, ant, subdev, ref, otw, channel_list; + std::string args, wave_type, ant, subdev, ref, pps, otw, channel_list; size_t spb; double rate, freq, gain, wave_freq, bw; float ampl; @@ -66,7 +66,8 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ ("bw", po::value<double>(&bw), "analog frontend filter bandwidth in Hz") ("wave-type", po::value<std::string>(&wave_type)->default_value("CONST"), "waveform type (CONST, SQUARE, RAMP, SINE)") ("wave-freq", po::value<double>(&wave_freq)->default_value(0), "waveform frequency in Hz") - ("ref", po::value<std::string>(&ref)->default_value("internal"), "clock reference (internal, external, mimo)") + ("ref", po::value<std::string>(&ref)->default_value("internal"), "clock reference (internal, external, mimo, gpsdo)") + ("pps", po::value<std::string>(&pps), "PPS source (internal, external, mimo, gpsdo)") ("otw", po::value<std::string>(&otw)->default_value("sc16"), "specify the over-the-wire sample mode") ("channels", po::value<std::string>(&channel_list)->default_value("0"), "which channels to use (specify \"0\", \"1\", \"0,1\", etc)") ("int-n", "tune USRP with integer-N tuning") @@ -179,15 +180,33 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ std::vector<std::complex<float> *> buffs(channel_nums.size(), &buff.front()); std::cout << boost::format("Setting device timestamp to 0...") << std::endl; - if (channel_nums.size() > 1) { - // This is the worst-case setup scenario, because this example has to - // work for all configurations. set_time_now() and set_time_next_pps() - // might also work, depending on what USRPs are being used, and can - // accelerate the setup. To keep this example generic, we use - // set_time_unknown_pps() to guarantee synchronization. - usrp->set_time_unknown_pps(uhd::time_spec_t(0.0)); - } else { - usrp->set_time_now(uhd::time_spec_t(0.0)); + if (channel_nums.size() > 1) + { + // Sync times + if (pps == "mimo") + { + UHD_ASSERT_THROW(usrp->get_num_mboards() == 2); + + //make mboard 1 a slave over the MIMO Cable + usrp->set_time_source("mimo", 1); + + //set time on the master (mboard 0) + usrp->set_time_now(uhd::time_spec_t(0.0), 0); + + //sleep a bit while the slave locks its time to the master + boost::this_thread::sleep(boost::posix_time::milliseconds(100)); + } + else + { + if (pps == "internal" or pps == "external" or pps == "gpsdo") + usrp->set_time_source(pps); + usrp->set_time_unknown_pps(uhd::time_spec_t(0.0)); + boost::this_thread::sleep(boost::posix_time::seconds(1)); //wait for pps sync pulse + } + } + else + { + usrp->set_time_now(0.0); } //Check Ref and LO Lock detect |