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


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

UHD付属のツールでuhd_usrp_probeがあります。

これは指定したUSRPのデバイス情報を参照するツールで、プロダクト名、バージョン番号、搭載しているドーターボード名などが取得できます。

引数無しで実行すると以下の様に情報をまとめた形で表示してくれます。



プロパティツリーを表示する

uhd_usrp_probeで表示される各種情報はプロパティツリー内に構造的に格納されています。
プロパティツリーは以下のコマンドで取得できます。


$ uhd_usrp_probe --tree
/
/mboards
/mboards/0
/mboards/0/fw_version
/mboards/0/eeprom
/mboards/0/link_max_rate
/mboards/0/fpga_version
/mboards/0/sensors
/mboards/0/sensors/gps_gpgga
/mboards/0/sensors/gps_gprmc
/mboards/0/sensors/gps_time
/mboards/0/sensors/gps_locked
/mboards/0/sensors/gps_servo
/mboards/0/sensors/ref_locked
/mboards/0/name
/mboards/0/codename

~後略~


ファームウェアのバージョンは、

/mboard/0/fw_version

に格納されていることが推測できます。


デバイス情報を取得する

取得する情報の型によって、引数を変えて実行します。

文字列情報なら、

uhd_usrp_probe.exe --args="type=b200" --string /mboards/0/fw_version

のように実行します。


文字列で取得すべきなのか、double取得すべきなのかは分かりません。プロパティ値の型情報はありませんので、実行して試してエラーが返ってこなければ、成功です。(確定したければソースコードを見る)


以下の様エラーが表示されたら型が違っています。

Error: TypeError: Property /mboards/0/link_max_rate exists, but was accessed with wrong type


型を推測する

以下の様にsensors以下の値は、--sensorで実行します。

/mboards/0/dboards/A/rx_frontends/A/sensors
/mboards/0/dboards/A/rx_frontends/A/sensors/temp
/mboards/0/dboards/A/rx_frontends/A/sensors/rssi
/mboards/0/dboards/A/rx_frontends/A/sensors/lo_locked


以下の様にrangeが含まれている場合は、--rangeで実行します。

ちなみに以下の/freqは親ノードで、値は以下のrangeとvalueに格納されています。

/mboards/0/dboards/A/tx_frontends/A/freq
/mboards/0/dboards/A/tx_frontends/A/freq/range
/mboards/0/dboards/A/tx_frontends/A/freq/value


uhd_usrp_probe.exe  --double /mboards/0/dboards/A/tx_frontends/A/freq

は値が格納されておらず取得できないので、

uhd_usrp_probe.exe  --range /mboards/0/dboards/A/tx_frontends/A/freq/range
uhd_usrp_probe.exe  --double /mboards/0/dboards/A/tx_frontends/A/freq/value

のように取得します。


文字列情報の場合の実行例

uhd_usrp_probe.exe --args="type=b200" --string /mboards/0/fw_version

~中略~

8.0

uhd_usrp_probe.exe --args="type=b200" --string /mboards/0/dboards/A/rx_frontends/A/name

~中略~

FE-RX1


doubleの場合の実行例

uhd_usrp_probe.exe --args="type=b200" --double /mboards/0/dboards/A/rx_frontends/A/freq/value

~中略~

1e+08


sensorの場合の実行例

uhd_usrp_probe.exe --args="type=b200" --sensors /mboards/0/dboards/A/rx_frontends/A/sensors/temp

~中略~

46.608187


rangeの場合(範囲のある値)の実行例

uhd_usrp_probe.exe --args="type=b200" --range /mboards/0/dboards/A/rx_frontends/A/freq/range

~中略~

50000000.0:0.0:6000000000.0


まとめ

  • USRPのデバイス情報は、プロパティツリーに格納されている。
  • プロパティツリーはuhd_usrp_probeで読み込みが出来る。
  • 読み込む値の型に応じた引数を指定する必要がある。
  • 読み込む値の型は、不明。試しに実行して取得できるか試す。

次回はC++プログラムからプロパティツリーにアクセスする方法を紹介します。


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


コメント