UHDでUSRPの温度やRSSI、設定値などデバイスの情報を取得する (2/2)

こんにちはドルフィンシステム福島です。

今回はUHDでUSRPの情報を取得する2回目です。
前回はuhd_usrp_probeを使って値を取得してみました。今回はC++のプログラムで取得してみます。

UHDでUSRPの温度やRSSI、設定値などデバイスの情報を取得する (1/2)
UHDでUSRPの温度やRSSI、設定値などデバイスの情報を取得する (2/2)


関連する過去の投稿

USRP B200がUSB 3.0で接続されているか、2.0で接続されているか判別する。
LibUsbDotNetを使ってUSRP B200の接続情報を取得する


プログラムでデバイス情報を取得する

ツリー名の取得

前回解説したようにUSRPデバイスマザーボードやRXドーターボード等の情報がツリー状に配置されています。このツリーを取得してから、値を取得します。

以下のようにlistメソッドでルートを渡すと、下図のように配下のデバイス名が取得できます。


uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(args);
auto list = usrp->get_device()->get_tree()->list("/");


auto list = usrp->get_device()->get_tree()->list("/");
auto list = usrp->get_device()->get_tree()->list("/mboards");
auto list = usrp->get_device()->get_tree()->list("/mboards/0/");

とすると、ツリーを徐々にたどっていけます。

以下の様にすると、デバイス名を取得できます。


auto name= usrp->get_device()->get_tree()->access<double>("/mboards/name").get();
auto name = usrp->get_device()->get_tree()->access<double>("/mboards/0/name").get();


取得値

/mboards/name = B-Series Device
/mboards/0/name = B200
/mboards/0/link_max_rate = 500000000
/mboards/0/link_max_rate = 53248000


USB接続の場合は、以下の様にすると接続しているレートを取得できます。

auto maxrate = usrp->get_device()->get_tree()->access<double>("/mboards/0/link_max_rate").get();
cout << maxrate << endl;


複数台のUSRPがあるとき

複数台のUSRPを認識している場合は、mboards以下の数値でデバイス番号を指定します。

デバイス番号は指定した順番になるので、以下の例ではaddr0が0、addr1が1となります。

uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make("addr0=192.168.10.1,addr1=192.168.10.2");
auto name0 = usrp->get_device()->get_tree()->access<double>("/mboards/0/name").get();
auto name1 = usrp->get_device()->get_tree()->access<double>("/mboards/0/name").get();

以上、ドルフィンシステム福島でした。


コメント