diff options
| author | Josh Blum <josh@joshknows.com> | 2010-08-04 11:17:49 -0700 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2010-08-04 11:17:49 -0700 | 
| commit | 6b98159fb5f7af754a4e3f7e1d594cbc1a3b519f (patch) | |
| tree | 0e99676849c560e2bda061e3b6add8d14aeff53a | |
| parent | fe622fb28654e6a578395d7b688e7c1958d373be (diff) | |
| parent | 5e9555b44cfa4ee66387985a9b2b38dfeb151445 (diff) | |
| download | uhd-6b98159fb5f7af754a4e3f7e1d594cbc1a3b519f.tar.gz uhd-6b98159fb5f7af754a4e3f7e1d594cbc1a3b519f.tar.bz2 uhd-6b98159fb5f7af754a4e3f7e1d594cbc1a3b519f.zip | |
Merge branch 'rfx'
| -rw-r--r-- | host/docs/dboards.rst | 2 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_rfx.cpp | 33 | 
2 files changed, 25 insertions, 10 deletions
| diff --git a/host/docs/dboards.rst b/host/docs/dboards.rst index 9c496ebee..b85164d04 100644 --- a/host/docs/dboards.rst +++ b/host/docs/dboards.rst @@ -45,7 +45,7 @@ The user may set the receive antenna to be TX/RX or RX2.  However, when using an RFX board in full-duplex mode,  the receive antenna will always be set to RX2, regardless of the settings. -Recieve Gains: **PGA0**, Range: 0-45dB +Recieve Gains: **PGA0**, Range: 0-70dB (except RFX400 range is 0-45dB)  ^^^^^^^^^^^^^^^^^^^^^^^^^^^  XCVR 2450 diff --git a/host/lib/usrp/dboard/db_rfx.cpp b/host/lib/usrp/dboard/db_rfx.cpp index 914ca5e19..b6b44199a 100644 --- a/host/lib/usrp/dboard/db_rfx.cpp +++ b/host/lib/usrp/dboard/db_rfx.cpp @@ -43,6 +43,7 @@  #include <uhd/utils/assert.hpp>  #include <uhd/utils/static.hpp>  #include <uhd/utils/algorithm.hpp> +#include <uhd/usrp/dboard_id.hpp>  #include <uhd/usrp/dboard_base.hpp>  #include <uhd/usrp/dboard_manager.hpp>  #include <boost/assign/list_of.hpp> @@ -65,6 +66,10 @@ static const prop_names_t rfx_rx_antennas = list_of("TX/RX")("RX2");  static const uhd::dict<std::string, gain_range_t> rfx_tx_gain_ranges; //empty  static const uhd::dict<std::string, gain_range_t> rfx_rx_gain_ranges = map_list_of +    ("PGA0", gain_range_t(0, 70, float(0.022))) +; + +static const uhd::dict<std::string, gain_range_t> rfx400_rx_gain_ranges = map_list_of      ("PGA0", gain_range_t(0, 45, float(0.022)))  ; @@ -88,6 +93,7 @@ public:  private:      freq_range_t _freq_range; +    uhd::dict<std::string, gain_range_t> _rx_gain_ranges;      uhd::dict<dboard_iface::unit_t, bool> _div2;      double       _rx_lo_freq, _tx_lo_freq;      std::string  _rx_ant; @@ -166,6 +172,14 @@ rfx_xcvr::rfx_xcvr(      _div2[dboard_iface::UNIT_RX] = rx_div2;      _div2[dboard_iface::UNIT_TX] = tx_div2; +    if(this->get_rx_id() == 0x0024) { //RFX400 +        _rx_gain_ranges = rfx400_rx_gain_ranges; +    } +    else { +        _rx_gain_ranges = rfx_rx_gain_ranges; +    } + +      //enable the clocks that we need      this->get_iface()->set_clock_enabled(dboard_iface::UNIT_TX, true);      this->get_iface()->set_clock_enabled(dboard_iface::UNIT_RX, true); @@ -193,8 +207,8 @@ rfx_xcvr::rfx_xcvr(      set_tx_lo_freq((_freq_range.min + _freq_range.max)/2.0);      set_rx_ant("RX2"); -    BOOST_FOREACH(const std::string &name, rfx_rx_gain_ranges.keys()){ -        set_rx_gain(rfx_rx_gain_ranges[name].min, name); +    BOOST_FOREACH(const std::string &name, _rx_gain_ranges.keys()){ +        set_rx_gain(_rx_gain_ranges[name].min, name);      }  } @@ -227,10 +241,10 @@ void rfx_xcvr::set_tx_ant(const std::string &ant){  /***********************************************************************   * Gain Handling   **********************************************************************/ -static float rx_pga0_gain_to_dac_volts(float &gain){ +static float rx_pga0_gain_to_dac_volts(float &gain, float range){      //voltage level constants (negative slope)      static const float max_volts = float(.2), min_volts = float(1.2); -    static const float slope = (max_volts-min_volts)/45; +    static const float slope = (max_volts-min_volts)/(range);      //calculate the voltage for the aux dac      float dac_volts = std::clip<float>(gain*slope + min_volts, max_volts, min_volts); @@ -247,9 +261,10 @@ void rfx_xcvr::set_tx_gain(float, const std::string &name){  }  void rfx_xcvr::set_rx_gain(float gain, const std::string &name){ -    assert_has(rfx_rx_gain_ranges.keys(), name, "rfx rx gain name"); +    assert_has(_rx_gain_ranges.keys(), name, "rfx rx gain name");      if(name == "PGA0"){ -        float dac_volts = rx_pga0_gain_to_dac_volts(gain); +        float dac_volts = rx_pga0_gain_to_dac_volts(gain,  +                              (_rx_gain_ranges["PGA0"].max - _rx_gain_ranges["PGA0"].min));          _rx_gains[name] = gain;          //write the new voltage to the aux dac @@ -402,12 +417,12 @@ void rfx_xcvr::rx_get(const wax::obj &key_, wax::obj &val){          return;      case SUBDEV_PROP_GAIN_RANGE: -        assert_has(rfx_rx_gain_ranges.keys(), name, "rfx rx gain name"); -        val = rfx_rx_gain_ranges[name]; +        assert_has(_rx_gain_ranges.keys(), name, "rfx rx gain name"); +        val = _rx_gain_ranges[name];          return;      case SUBDEV_PROP_GAIN_NAMES: -        val = prop_names_t(rfx_rx_gain_ranges.keys()); +        val = prop_names_t(_rx_gain_ranges.keys());          return;      case SUBDEV_PROP_FREQ: | 
