From 539c9b5a5560ea5d79c78954ea8e482846a5e966 Mon Sep 17 00:00:00 2001 From: Jason Abele Date: Fri, 16 Sep 2011 10:47:54 -0700 Subject: Updates to example apps Add --ref option to specify mboard clock reference source Add check for lock to mboard clock reference (where applicable) Add check of daughterboard LO lock detect (where applicable) --- host/examples/rx_samples_to_file.cpp | 38 +++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'host/examples/rx_samples_to_file.cpp') diff --git a/host/examples/rx_samples_to_file.cpp b/host/examples/rx_samples_to_file.cpp index d44315701..05d9b15b7 100644 --- a/host/examples/rx_samples_to_file.cpp +++ b/host/examples/rx_samples_to_file.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -64,7 +65,7 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ uhd::set_thread_priority_safe(); //variables to be set by po - std::string args, file, type, ant, subdev; + std::string args, file, type, ant, subdev, ref; size_t total_num_samps, spb; double rate, freq, gain, bw; @@ -83,6 +84,7 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ ("ant", po::value(&ant), "daughterboard antenna selection") ("subdev", po::value(&subdev), "daughterboard subdevice specification") ("bw", po::value(&bw), "daughterboard IF filter bandwidth in Hz") + ("ref", po::value(&ref)->default_value("INTERNAL"), "waveform type (INTERNAL, EXTERNAL, MIMO)") ; po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); @@ -99,6 +101,20 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ std::cout << boost::format("Creating the usrp device with: %s...") % args << std::endl; uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(args); + //Lock mboard clocks + if (ref == "MIMO") { + uhd::clock_config_t clock_config; + clock_config.ref_source = uhd::clock_config_t::REF_MIMO; + clock_config.pps_source = uhd::clock_config_t::PPS_MIMO; + usrp->set_clock_config(clock_config, 0); + } + else if (ref == "EXTERNAL") { + usrp->set_clock_config(uhd::clock_config_t::external(), 0); + } + else if (ref == "INTERNAL") { + usrp->set_clock_config(uhd::clock_config_t::internal(), 0); + } + //always select the subdevice first, the channel mapping affects the other settings if (vm.count("subdev")) usrp->set_rx_subdev_spec(subdev); @@ -141,6 +157,26 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ boost::this_thread::sleep(boost::posix_time::seconds(1)); //allow for some setup time + //Check Ref and LO Lock detect + std::vector sensor_names; + sensor_names = usrp->get_rx_sensor_names(0); + if (std::find(sensor_names.begin(), sensor_names.end(), "lo_locked") != sensor_names.end()) { + uhd::sensor_value_t lo_locked = usrp->get_rx_sensor("lo_locked",0); + std::cout << boost::format("Checking RX: %s ...") % lo_locked.to_pp_string() << std::endl; + UHD_ASSERT_THROW(lo_locked.to_bool()); + } + sensor_names = usrp->get_mboard_sensor_names(0); + if ((ref == "MIMO") and (std::find(sensor_names.begin(), sensor_names.end(), "mimo_locked") != sensor_names.end())) { + uhd::sensor_value_t mimo_locked = usrp->get_mboard_sensor("mimo_locked",0); + std::cout << boost::format("Checking RX: %s ...") % mimo_locked.to_pp_string() << std::endl; + UHD_ASSERT_THROW(mimo_locked.to_bool()); + } + if ((ref == "EXTERNAL") and (std::find(sensor_names.begin(), sensor_names.end(), "ref_locked") != sensor_names.end())) { + uhd::sensor_value_t ref_locked = usrp->get_mboard_sensor("ref_locked",0); + std::cout << boost::format("Checking RX: %s ...") % ref_locked.to_pp_string() << std::endl; + UHD_ASSERT_THROW(ref_locked.to_bool()); + } + //setup streaming uhd::stream_cmd_t stream_cmd((total_num_samps == 0)? uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS: -- cgit v1.2.3