直接操作USRP属性树

在multi_usrp.hpp中以API的方式为用户提供了对USRP的操作方法,用户可以定义usrp指针后直接调用这些方法:即usrp.xxx()。然而,如果如果用户想进行API中没有提供的设置,就需要直接对USRP的属性树进行操作,通过属性树的根节点进入到叶子节点,然后调用叶子节点相应的方法:如usrp->get_device->get_tree()->access<type>("path").get()/set()等。

直接操作USRP属性树_第1张图片

编译:g++ tree.cpp -o tree -luhd

运行结果:

注意,对于射频子板的操作需要使用list()方法,比如得到射频子板的名称的程序如下:

std::string db_name=usrp->get_device()->get->tree()->list("mboards/0/dboards").at(0);

否则直接向上面使用access()会出现未进行初始化的错误。

其他的节点参考multi_usrp.cpp中的函数。

#include<uhd/usrp/multi_usrp.hpp>
//#include<uhd/property_tree.hpp>
#include<uhd/usrp/multi_usrp.hpp>
#include<iostream>
using namespace uhd;
using namespace uhd::usrp;

int main(){
	std::string args="";
	uhd::usrp::multi_usrp::sptr usrp=uhd::usrp::multi_usrp::make(args);
	//get mother board name
	std::string mb_name;
	//mb_name=usrp->get_mboard_name(0);
	mb_name=usrp->get_device()->get_tree()->access<std::string>("mboards/0/name").get();
	std::cout<<mb_name<<std::endl;
	//get time now
	time_spec_t time_now;
	time_now=usrp->get_time_now(0);
	std::cout<<time_now.get_full_secs()<<std::endl;
	std::cout<<time_now.get_frac_secs()<<std::endl;
	
	time_spec_t time_now1;
	time_now1=usrp->get_device()->get_tree()->access<time_spec_t>("mboards/0/time/now").get();
	std::cout<<time_now1.get_full_secs()<<std::endl;
	//get banks
	std::vector<std::string>banks;
	banks=usrp->get_gpio_banks(0);
	std::cout<<"banks:"<<std::endl;
	for (int i=0;i<banks.size();i++)
		std::cout<<"\t"<<banks[i]<<std::endl;
	std::cout<<std::endl;
	//get dboard name
	std::string db_name=usrp->get_device()->get_tree()->list("mboards/0/dboards").at(0);
	std::cout<<"dboard name:"<<std::endl;
	std::cout<<"\t"<<db_name<<std::endl;
	//get RX antenna
	std::vector<std::string> RX_ANT;
	RX_ANT=usrp->get_device()->get_tree()->access<std::vector<std::string> >("mboards/0/dboards/A/rx_frontends/0/antenna/options").get();
	std::cout<<"RX antenna:"<<std::endl;
	for (int j=0;j<RX_ANT.size();j++)
		std::cout<<"\t"<<RX_ANT[j]<<std::endl;
	//get gain
	const boost::uint32_t rx_gain=usrp->get_device()->get_tree()->access<boost::uint32_t>("mboards/0/dboards/A/rx_frontends/0/gains/PGA0/value").get();
	std::cout<<"RX gain:"<<std::endl;
	std::cout<<"\t"<<rx_gain<<std::endl;
	return 0;
}
直接操作USRP属性树_第2张图片

你可能感兴趣的:(USRP)