diff options
Diffstat (limited to 'host/lib/usrp/e300')
| -rw-r--r-- | host/lib/usrp/e300/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | host/lib/usrp/e300/e300_fpga_defs.hpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/e300/e300_impl.cpp | 106 | ||||
| -rw-r--r-- | host/lib/usrp/e300/e300_impl.hpp | 12 | ||||
| -rw-r--r-- | host/lib/usrp/e300/e300_io_impl.cpp | 7 | ||||
| -rw-r--r-- | host/lib/usrp/e300/e300_regs.hpp | 2 | 
6 files changed, 44 insertions, 87 deletions
| diff --git a/host/lib/usrp/e300/CMakeLists.txt b/host/lib/usrp/e300/CMakeLists.txt index 9c8aa29b9..68c3520e4 100644 --- a/host/lib/usrp/e300/CMakeLists.txt +++ b/host/lib/usrp/e300/CMakeLists.txt @@ -24,8 +24,6 @@  ########################################################################  find_package(UDev) -LIBUHD_REGISTER_COMPONENT("E300" ENABLE_E300 OFF "ENABLE_LIBUHD" OFF OFF) -  IF(ENABLE_E300)      LIST(APPEND E300_SOURCES          ${CMAKE_CURRENT_SOURCE_DIR}/e300_impl.cpp diff --git a/host/lib/usrp/e300/e300_fpga_defs.hpp b/host/lib/usrp/e300/e300_fpga_defs.hpp index 594461518..36dd47383 100644 --- a/host/lib/usrp/e300/e300_fpga_defs.hpp +++ b/host/lib/usrp/e300/e300_fpga_defs.hpp @@ -21,7 +21,7 @@ namespace uhd { namespace usrp { namespace e300 { namespace fpga {  static const size_t NUM_RADIOS = 2; -static const boost::uint32_t COMPAT_MAJOR = 14; +static const boost::uint32_t COMPAT_MAJOR = 16;  static const boost::uint32_t COMPAT_MINOR = 0;  }}}} // namespace diff --git a/host/lib/usrp/e300/e300_impl.cpp b/host/lib/usrp/e300/e300_impl.cpp index a57c86c1d..5a589a7fd 100644 --- a/host/lib/usrp/e300/e300_impl.cpp +++ b/host/lib/usrp/e300/e300_impl.cpp @@ -48,6 +48,7 @@  using namespace uhd;  using namespace uhd::usrp; +using namespace uhd::usrp::gpio_atr;  using namespace uhd::transport;  namespace fs = boost::filesystem;  namespace asio = boost::asio; @@ -470,14 +471,14 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      BOOST_FOREACH(const std::string &name, _sensor_manager->get_sensors())      {          _tree->create<sensor_value_t>(mb_path / "sensors" / name) -            .publish(boost::bind(&e300_sensor_manager::get_sensor, _sensor_manager, name)); +            .set_publisher(boost::bind(&e300_sensor_manager::get_sensor, _sensor_manager, name));      }  #ifdef E300_GPSD      if (_gps) {          BOOST_FOREACH(const std::string &name, _gps->get_sensors())          {              _tree->create<sensor_value_t>(mb_path / "sensors" / name) -                .publish(boost::bind(&gpsd_iface::get_sensor, _gps, name)); +                .set_publisher(boost::bind(&gpsd_iface::get_sensor, _gps, name));          }      }  #endif @@ -487,7 +488,7 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      ////////////////////////////////////////////////////////////////////      _tree->create<mboard_eeprom_t>(mb_path / "eeprom")          .set(_eeprom_manager->get_mb_eeprom())  // set first... -        .subscribe(boost::bind( +        .add_coerced_subscriber(boost::bind(              &e300_eeprom_manager::write_mb_eeprom,              _eeprom_manager, _1)); @@ -495,9 +496,9 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      // clocking      ////////////////////////////////////////////////////////////////////      _tree->create<double>(mb_path / "tick_rate") -        .coerce(boost::bind(&e300_impl::_set_tick_rate, this, _1)) -        .publish(boost::bind(&e300_impl::_get_tick_rate, this)) -        .subscribe(boost::bind(&e300_impl::_update_tick_rate, this, _1)); +        .set_coercer(boost::bind(&e300_impl::_set_tick_rate, this, _1)) +        .set_publisher(boost::bind(&e300_impl::_get_tick_rate, this)) +        .add_coerced_subscriber(boost::bind(&e300_impl::_update_tick_rate, this, _1));      //default some chains on -- needed for setup purposes      _codec_ctrl->set_active_chains(true, false, true, false); @@ -517,34 +518,34 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      ////////////////////////////////////////////////////////////////////      // internal gpios      //////////////////////////////////////////////////////////////////// -    gpio_core_200::sptr fp_gpio = gpio_core_200::make(_radio_perifs[0].ctrl, radio::sr_addr(radio::FP_GPIO), radio::RB32_FP_GPIO); +    gpio_atr_3000::sptr fp_gpio = gpio_atr_3000::make(_radio_perifs[0].ctrl, radio::sr_addr(radio::FP_GPIO), radio::RB32_FP_GPIO);      BOOST_FOREACH(const gpio_attr_map_t::value_type attr, gpio_attr_map)      {          _tree->create<boost::uint32_t>(mb_path / "gpio" / "INT0" / attr.second) -            .subscribe(boost::bind(&e300_impl::_set_internal_gpio, this, fp_gpio, attr.first, _1)) +            .add_coerced_subscriber(boost::bind(&gpio_atr_3000::set_gpio_attr, fp_gpio, attr.first, _1))              .set(0);      }      _tree->create<boost::uint8_t>(mb_path / "gpio" / "INT0" / "READBACK") -        .publish(boost::bind(&e300_impl::_get_internal_gpio, this, fp_gpio)); +        .set_publisher(boost::bind(&gpio_atr_3000::read_gpio, fp_gpio));      ////////////////////////////////////////////////////////////////////      // register the time keepers - only one can be the highlander      ////////////////////////////////////////////////////////////////////      _tree->create<time_spec_t>(mb_path / "time" / "now") -        .publish(boost::bind(&time_core_3000::get_time_now, _radio_perifs[0].time64)) -        .subscribe(boost::bind(&e300_impl::_set_time, this, _1)) +        .set_publisher(boost::bind(&time_core_3000::get_time_now, _radio_perifs[0].time64)) +        .add_coerced_subscriber(boost::bind(&e300_impl::_set_time, this, _1))          .set(0.0);      //re-sync the times when the tick rate changes      _tree->access<double>(mb_path / "tick_rate") -        .subscribe(boost::bind(&e300_impl::_sync_times, this)); +        .add_coerced_subscriber(boost::bind(&e300_impl::_sync_times, this));      _tree->create<time_spec_t>(mb_path / "time" / "pps") -        .publish(boost::bind(&time_core_3000::get_time_last_pps, _radio_perifs[0].time64)) -        .subscribe(boost::bind(&time_core_3000::set_time_next_pps, _radio_perifs[0].time64, _1)) -        .subscribe(boost::bind(&time_core_3000::set_time_next_pps, _radio_perifs[1].time64, _1)); +        .set_publisher(boost::bind(&time_core_3000::get_time_last_pps, _radio_perifs[0].time64)) +        .add_coerced_subscriber(boost::bind(&time_core_3000::set_time_next_pps, _radio_perifs[0].time64, _1)) +        .add_coerced_subscriber(boost::bind(&time_core_3000::set_time_next_pps, _radio_perifs[1].time64, _1));      //setup time source props      _tree->create<std::string>(mb_path / "time_source" / "value") -        .subscribe(boost::bind(&e300_impl::_update_time_source, this, _1)) +        .add_coerced_subscriber(boost::bind(&e300_impl::_update_time_source, this, _1))          .set(e300::DEFAULT_TIME_SRC);  #ifdef E300_GPSD      static const std::vector<std::string> time_sources = boost::assign::list_of("none")("internal")("external")("gpsdo"); @@ -554,7 +555,7 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      _tree->create<std::vector<std::string> >(mb_path / "time_source" / "options").set(time_sources);      //setup reference source props      _tree->create<std::string>(mb_path / "clock_source" / "value") -        .subscribe(boost::bind(&e300_impl::_update_clock_source, this, _1)) +        .add_coerced_subscriber(boost::bind(&e300_impl::_update_clock_source, this, _1))          .set(e300::DEFAULT_CLOCK_SRC);      static const std::vector<std::string> clock_sources = boost::assign::list_of("internal"); //external,gpsdo not supported      _tree->create<std::vector<std::string> >(mb_path / "clock_source" / "options").set(clock_sources); @@ -565,13 +566,13 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      dboard_eeprom_t db_eeprom;      _tree->create<dboard_eeprom_t>(mb_path / "dboards" / "A" / "rx_eeprom")          .set(_eeprom_manager->get_db_eeprom()) -        .subscribe(boost::bind( +        .add_coerced_subscriber(boost::bind(              &e300_eeprom_manager::write_db_eeprom,              _eeprom_manager, _1));      _tree->create<dboard_eeprom_t>(mb_path / "dboards" / "A" / "tx_eeprom")          .set(_eeprom_manager->get_db_eeprom()) -        .subscribe(boost::bind( +        .add_coerced_subscriber(boost::bind(              &e300_eeprom_manager::write_db_eeprom,              _eeprom_manager, _1)); @@ -604,10 +605,10 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      _tree->create<subdev_spec_t>(mb_path / "rx_subdev_spec")          .set(subdev_spec_t()) -        .subscribe(boost::bind(&e300_impl::_update_subdev_spec, this, "rx", _1)); +        .add_coerced_subscriber(boost::bind(&e300_impl::_update_subdev_spec, this, "rx", _1));      _tree->create<subdev_spec_t>(mb_path / "tx_subdev_spec")          .set(subdev_spec_t()) -        .subscribe(boost::bind(&e300_impl::_update_subdev_spec, this, "tx", _1)); +        .add_coerced_subscriber(boost::bind(&e300_impl::_update_subdev_spec, this, "tx", _1));      ////////////////////////////////////////////////////////////////////      // do some post-init tasks @@ -631,37 +632,6 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)      _tree->access<subdev_spec_t>(mb_path / "tx_subdev_spec").set(tx_spec);  } -boost::uint8_t e300_impl::_get_internal_gpio(gpio_core_200::sptr gpio) -{ -    return boost::uint32_t(gpio->read_gpio(dboard_iface::UNIT_RX)); -} - -void e300_impl::_set_internal_gpio( -    gpio_core_200::sptr gpio, -    const gpio_attr_t attr, -    const boost::uint32_t value) -{ -    switch (attr) -    { -    case GPIO_CTRL: -        return gpio->set_pin_ctrl(dboard_iface::UNIT_RX, value); -    case GPIO_DDR: -        return gpio->set_gpio_ddr(dboard_iface::UNIT_RX, value); -    case GPIO_OUT: -        return gpio->set_gpio_out(dboard_iface::UNIT_RX, value); -    case GPIO_ATR_0X: -        return gpio->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_IDLE, value); -    case GPIO_ATR_RX: -        return gpio->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_RX_ONLY, value); -    case GPIO_ATR_TX: -        return gpio->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_TX_ONLY, value); -    case GPIO_ATR_XX: -        return gpio->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_FULL_DUPLEX, value); -    default: -        UHD_THROW_INVALID_CODE_PATH(); -    } -} -  uhd::sensor_value_t e300_impl::_get_fe_pll_lock(const bool is_tx)  {      const boost::uint32_t st = @@ -1001,7 +971,8 @@ void e300_impl::_setup_radio(const size_t dspno)      ////////////////////////////////////////////////////////////////////      // Set up peripherals      //////////////////////////////////////////////////////////////////// -    perif.atr = gpio_core_200_32wo::make(perif.ctrl, radio::sr_addr(radio::GPIO)); +    perif.atr = gpio_atr_3000::make_write_only(perif.ctrl, radio::sr_addr(radio::GPIO)); +    perif.atr->set_atr_mode(MODE_ATR, 0xFFFFFFFF);      perif.rx_fe = rx_frontend_core_200::make(perif.ctrl, radio::sr_addr(radio::RX_FRONT));      perif.rx_fe->set_dc_offset(rx_frontend_core_200::DEFAULT_DC_OFFSET_VALUE);      perif.rx_fe->set_dc_offset_auto(rx_frontend_core_200::DEFAULT_DC_OFFSET_ENABLE); @@ -1036,26 +1007,25 @@ void e300_impl::_setup_radio(const size_t dspno)      // connect rx dsp control objects      ////////////////////////////////////////////////////////////////////      _tree->access<double>(mb_path / "tick_rate") -        .subscribe(boost::bind(&rx_vita_core_3000::set_tick_rate, perif.framer, _1)) -        .subscribe(boost::bind(&rx_dsp_core_3000::set_tick_rate, perif.ddc, _1)); +        .add_coerced_subscriber(boost::bind(&rx_vita_core_3000::set_tick_rate, perif.framer, _1)) +        .add_coerced_subscriber(boost::bind(&rx_dsp_core_3000::set_tick_rate, perif.ddc, _1));      const fs_path rx_dsp_path = mb_path / "rx_dsps" / str(boost::format("%u") % dspno);      perif.ddc->populate_subtree(_tree->subtree(rx_dsp_path));      _tree->access<double>(rx_dsp_path / "rate" / "value") -        .subscribe(boost::bind(&e300_impl::_update_rx_samp_rate, this, dspno, _1)) +        .add_coerced_subscriber(boost::bind(&e300_impl::_update_rx_samp_rate, this, dspno, _1))      ;      _tree->create<stream_cmd_t>(rx_dsp_path / "stream_cmd") -        .subscribe(boost::bind(&rx_vita_core_3000::issue_stream_command, perif.framer, _1)); +        .add_coerced_subscriber(boost::bind(&rx_vita_core_3000::issue_stream_command, perif.framer, _1));      ////////////////////////////////////////////////////////////////////      // create tx dsp control objects      ////////////////////////////////////////////////////////////////////      _tree->access<double>(mb_path / "tick_rate") -        .subscribe(boost::bind(&tx_vita_core_3000::set_tick_rate, perif.deframer, _1)) -        .subscribe(boost::bind(&tx_dsp_core_3000::set_tick_rate, perif.duc, _1)); +        .add_coerced_subscriber(boost::bind(&tx_dsp_core_3000::set_tick_rate, perif.duc, _1));      const fs_path tx_dsp_path = mb_path / "tx_dsps" / str(boost::format("%u") % dspno);      perif.duc->populate_subtree(_tree->subtree(tx_dsp_path));      _tree->access<double>(tx_dsp_path / "rate" / "value") -        .subscribe(boost::bind(&e300_impl::_update_tx_samp_rate, this, dspno, _1)) +        .add_coerced_subscriber(boost::bind(&e300_impl::_update_tx_samp_rate, this, dspno, _1))      ;      //////////////////////////////////////////////////////////////////// @@ -1075,10 +1045,10 @@ void e300_impl::_setup_radio(const size_t dspno)          // This will connect all the e300_impl-specific items          _tree->create<sensor_value_t>(rf_fe_path / "sensors" / "lo_locked") -            .publish(boost::bind(&e300_impl::_get_fe_pll_lock, this, dir == TX_DIRECTION)) +            .set_publisher(boost::bind(&e300_impl::_get_fe_pll_lock, this, dir == TX_DIRECTION))          ;          _tree->access<double>(rf_fe_path / "freq" / "value") -            .subscribe(boost::bind(&e300_impl::_update_fe_lo_freq, this, key, _1)) +            .add_coerced_subscriber(boost::bind(&e300_impl::_update_fe_lo_freq, this, key, _1))          ;          // Antenna Setup @@ -1086,7 +1056,7 @@ void e300_impl::_setup_radio(const size_t dspno)              static const std::vector<std::string> ants = boost::assign::list_of("TX/RX")("RX2");              _tree->create<std::vector<std::string> >(rf_fe_path / "antenna" / "options").set(ants);              _tree->create<std::string>(rf_fe_path / "antenna" / "value") -                .subscribe(boost::bind(&e300_impl::_update_antenna_sel, this, dspno, _1)) +                .add_coerced_subscriber(boost::bind(&e300_impl::_update_antenna_sel, this, dspno, _1))                  .set("RX2");          }          else if (dir == TX_DIRECTION) { @@ -1315,11 +1285,11 @@ void e300_impl::_update_atrs(void)          if (enb_tx)              fd_reg |= tx_enables | xx_leds; -        gpio_core_200_32wo::sptr atr = _radio_perifs[instance].atr; -        atr->set_atr_reg(dboard_iface::ATR_REG_IDLE, oo_reg); -        atr->set_atr_reg(dboard_iface::ATR_REG_RX_ONLY, rx_reg); -        atr->set_atr_reg(dboard_iface::ATR_REG_TX_ONLY, tx_reg); -        atr->set_atr_reg(dboard_iface::ATR_REG_FULL_DUPLEX, fd_reg); +        gpio_atr_3000::sptr atr = _radio_perifs[instance].atr; +        atr->set_atr_reg(ATR_REG_IDLE, oo_reg); +        atr->set_atr_reg(ATR_REG_RX_ONLY, rx_reg); +        atr->set_atr_reg(ATR_REG_TX_ONLY, tx_reg); +        atr->set_atr_reg(ATR_REG_FULL_DUPLEX, fd_reg);      }  } diff --git a/host/lib/usrp/e300/e300_impl.hpp b/host/lib/usrp/e300/e300_impl.hpp index 595b42679..e9a0b4b9a 100644 --- a/host/lib/usrp/e300/e300_impl.hpp +++ b/host/lib/usrp/e300/e300_impl.hpp @@ -41,7 +41,7 @@  #include "tx_dsp_core_3000.hpp"  #include "ad9361_ctrl.hpp"  #include "ad936x_manager.hpp" -#include "gpio_core_200.hpp" +#include "gpio_atr_3000.hpp"  #include "e300_global_regs.hpp"  #include "e300_i2c.hpp" @@ -147,7 +147,7 @@ private: // types      struct radio_perifs_t      {          radio_ctrl_core_3000::sptr ctrl; -        gpio_core_200_32wo::sptr atr; +        gpio_atr::gpio_atr_3000::sptr atr;          time_core_3000::sptr time64;          rx_vita_core_3000::sptr framer;          rx_dsp_core_3000::sptr ddc; @@ -283,14 +283,6 @@ private: // methods      // get frontend lock sensor      uhd::sensor_value_t _get_fe_pll_lock(const bool is_tx); -    // internal gpios -    boost::uint8_t _get_internal_gpio(gpio_core_200::sptr); - -    void _set_internal_gpio( -        gpio_core_200::sptr gpio, -        const gpio_attr_t attr, -        const boost::uint32_t value); -  private: // members      uhd::device_addr_t                     _device_addr;      xport_t                                _xport_path; diff --git a/host/lib/usrp/e300/e300_io_impl.cpp b/host/lib/usrp/e300/e300_io_impl.cpp index 29d250c8f..c84042e98 100644 --- a/host/lib/usrp/e300/e300_io_impl.cpp +++ b/host/lib/usrp/e300/e300_io_impl.cpp @@ -87,7 +87,6 @@ void e300_impl::_update_tick_rate(const double rate)              boost::dynamic_pointer_cast<sph::send_packet_streamer>(perif.tx_streamer.lock());          if (my_streamer)              my_streamer->set_tick_rate(rate); -        perif.deframer->set_tick_rate(_tick_rate);      }  } @@ -158,10 +157,8 @@ void e300_impl::_update_subdev_spec(              const std::string conn = _tree->access<std::string>(                  mb_path / "dboards" / spec[i].db_name /                  ("rx_frontends") / spec[i].sd_name / "connection").get(); - -            const bool fe_swapped = (conn == "QI" or conn == "Q"); -            _radio_perifs[i].ddc->set_mux(conn, fe_swapped); -            _radio_perifs[i].rx_fe->set_mux(fe_swapped); +            _radio_perifs[i].ddc->set_mux(usrp::fe_connection_t(conn)); +            _radio_perifs[i].rx_fe->set_mux(false);          }      } diff --git a/host/lib/usrp/e300/e300_regs.hpp b/host/lib/usrp/e300/e300_regs.hpp index 846c759a4..74e45df00 100644 --- a/host/lib/usrp/e300/e300_regs.hpp +++ b/host/lib/usrp/e300/e300_regs.hpp @@ -41,7 +41,7 @@ static const uint32_t TIME       = 128;  static const uint32_t RX_DSP     = 144;  static const uint32_t TX_DSP     = 184;  static const uint32_t LEDS       = 195; -static const uint32_t FP_GPIO    = 200; +static const uint32_t FP_GPIO    = 201;  static const uint32_t RX_FRONT   = 208;  static const uint32_t TX_FRONT   = 216;  static const uint32_t CODEC_IDLE = 250; | 
