From a6168edff9f7487251b99d3968eec41ed5bcdd4b Mon Sep 17 00:00:00 2001 From: kortke <kortke@eurecom.fr> Date: Mon, 26 Jan 2015 17:07:22 +0000 Subject: [PATCH] added support for USRP X300 (changing master clock rate) git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6430 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 54 ++++++++++++++++---- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index c786041ade..e6ad76db76 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -232,6 +232,8 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf memset(s, 0, sizeof(usrp_state_t)); // Initialize USRP device +/* thomas 26.01.205*/ +// std::string args = "type=b200"; std::string args = "type=b200"; /* std::string rx_subdev = "A:A A:B"; @@ -240,22 +242,50 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf uhd::device_addrs_t device_adds = uhd::device::find(args); size_t i; + printf("Checking for USRPs\n"); + if(device_adds.size() == 0) { - std::cerr<<"No USRP Device Found. " << std::endl; - free(s); - return -1; - } - s->usrp = uhd::usrp::multi_usrp::make(args); + double usrp_master_clock = 184.32e6; + + std::string args = "type=x300"; + + // workaround for an api problem, master clock has to be set with the constructor not via set_master_clock_rate + args += boost::str(boost::format(",master_clock_rate=%f") % usrp_master_clock); + + uhd::device_addrs_t device_adds = uhd::device::find(args); - // s->usrp->set_rx_subdev_spec(rx_subdev); - // s->usrp->set_tx_subdev_spec(tx_subdev); + if(device_adds.size() == 0) + { + std::cerr<<"No USRP Device Found. " << std::endl; + free(s); + return -1; - // lock mboard clocks - s->usrp->set_clock_source("internal"); - // set master clock rate and sample rate for tx & rx for streaming - s->usrp->set_master_clock_rate(30.72e6); + } + printf("Found USRP X300\n"); + s->usrp = uhd::usrp::multi_usrp::make(args); + // s->usrp->set_rx_subdev_spec(rx_subdev); + // s->usrp->set_tx_subdev_spec(tx_subdev); + + // lock mboard clocks + s->usrp->set_clock_source("internal"); + + // this is not working yet, master clock has to be set via constructor + // set master clock rate and sample rate for tx & rx for streaming + //s->usrp->set_master_clock_rate(usrp_master_clock); + } else { + printf("Found USRP B200"); + s->usrp = uhd::usrp::multi_usrp::make(args); + + // s->usrp->set_rx_subdev_spec(rx_subdev); + // s->usrp->set_tx_subdev_spec(tx_subdev); + + // lock mboard clocks + s->usrp->set_clock_source("internal"); + // set master clock rate and sample rate for tx & rx for streaming + s->usrp->set_master_clock_rate(30.72e6); + } @@ -297,6 +327,8 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf s->usrp->set_time_now(uhd::time_spec_t(0.0)); // display USRP settings + std::cout << boost::format("Actual master clock: %fMHz...") % (s->usrp->get_master_clock_rate()/1e6) << std::endl << std::endl; + for (i=0;i<openair0_cfg[0].rx_num_channels;i++) { if (i<openair0_cfg[0].rx_num_channels) { printf("RX Channel %lu\n",i); -- GitLab