diff options
Diffstat (limited to 'host/lib/usrp')
| -rw-r--r-- | host/lib/usrp/b100/usb_zero_copy_wrapper.cpp | 1 | ||||
| -rw-r--r-- | host/lib/usrp/b200/b200_iface.cpp | 16 | ||||
| -rw-r--r-- | host/lib/usrp/common/fx2_ctrl.cpp | 6 | ||||
| -rw-r--r-- | host/lib/usrp/cores/rx_dsp_core_200.cpp | 5 | ||||
| -rw-r--r-- | host/lib/usrp/cores/rx_dsp_core_3000.cpp | 5 | ||||
| -rw-r--r-- | host/lib/usrp/cores/rx_frontend_core_200.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/cores/time64_core_200.cpp | 1 | ||||
| -rw-r--r-- | host/lib/usrp/cores/tx_dsp_core_200.cpp | 3 | ||||
| -rw-r--r-- | host/lib/usrp/cores/tx_dsp_core_3000.cpp | 5 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_dbsrx.cpp | 22 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_tvrx.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_wbx_common.hpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/gps_ctrl.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/io_impl.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/usrp1_iface.cpp | 10 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_clk_regs.hpp | 5 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_iface.cpp | 2 | 
17 files changed, 59 insertions, 32 deletions
| diff --git a/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp b/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp index 2096e4ef4..451cdae50 100644 --- a/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp +++ b/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp @@ -167,6 +167,7 @@ public:      usb_zero_copy_wrapper(zero_copy_if::sptr usb_zc, const size_t frame_boundary):          _internal_zc(usb_zc),          _frame_boundary(frame_boundary), +        _last_recv_offset(0),          _next_recv_buff_index(0)      {          for (size_t i = 0; i < this->get_num_recv_frames(); i++){ diff --git a/host/lib/usrp/b200/b200_iface.cpp b/host/lib/usrp/b200/b200_iface.cpp index a8e96f4ac..e0809998e 100644 --- a/host/lib/usrp/b200/b200_iface.cpp +++ b/host/lib/usrp/b200/b200_iface.cpp @@ -163,6 +163,9 @@ bool parse_record(std::string *record, boost::uint16_t &len, \      std::istringstream(record->substr(3, 4)) >> std::hex >> addr;      std::istringstream(record->substr(7, 2)) >> std::hex >> type; +    if (len >2 * (record->length() - 9))  // sanity check to prevent buffer overrun +        return false; +      for (i = 0; i < len; i++) {          std::istringstream(record->substr(9 + 2 * i, 2)) >> std::hex >> val;          data[i] = (unsigned char) val; @@ -219,13 +222,13 @@ public:      } -    void write_i2c(boost::uint16_t addr, const byte_vector_t &bytes) +    void write_i2c(boost::uint16_t addr __attribute__ ((unused)), const byte_vector_t &bytes __attribute__ ((unused)))      {          throw uhd::not_implemented_error("b200 write i2c");      } -    byte_vector_t read_i2c(boost::uint16_t addr, size_t num_bytes) +    byte_vector_t read_i2c(boost::uint16_t addr __attribute__ ((unused)), size_t num_bytes __attribute__ ((unused)))      {          throw uhd::not_implemented_error("b200 read i2c");      } @@ -300,7 +303,7 @@ public:      } -    void load_firmware(const std::string filestring, bool force = false) +    void load_firmware(const std::string filestring, bool force  __attribute__ ((unused)) = false)      {          const char *filename = filestring.c_str(); @@ -330,6 +333,9 @@ public:              std::string record;              file >> record; +        if (!record.length() > 0) +            continue; +              /* Check for valid Intel HEX record. */              if (!checksum(&record) || !parse_record(&record, len, \                          lower_address_bits, type, data)) { @@ -426,7 +432,9 @@ public:          UHD_THROW_INVALID_CODE_PATH(); -        fx3_control_write(B200_VREQ_FPGA_RESET, 0x00, 0x00, data, 4); +        // Below is dead code as long as UHD_THROW_INVALID_CODE_PATH(); is declared above. +        // It is preservered here in a comment in case it is needed later: +        // fx3_control_write(B200_VREQ_FPGA_RESET, 0x00, 0x00, data, 4);      }      boost::uint8_t get_usb_speed(void) { diff --git a/host/lib/usrp/common/fx2_ctrl.cpp b/host/lib/usrp/common/fx2_ctrl.cpp index 6111efea9..1cacc45cf 100644 --- a/host/lib/usrp/common/fx2_ctrl.cpp +++ b/host/lib/usrp/common/fx2_ctrl.cpp @@ -119,6 +119,9 @@ bool parse_record(std::string *record, unsigned int &len,      std::istringstream(record->substr(3, 4)) >> std::hex >> addr;      std::istringstream(record->substr(7, 2)) >> std::hex >> type; +    if (len >2 * (record->length() - 9))  // sanity check to prevent buffer overrun +        return false; +      for (i = 0; i < len; i++) {          std::istringstream(record->substr(9 + 2 * i, 2)) >> std::hex >> val;          data[i] = (unsigned char) val; @@ -181,6 +184,9 @@ public:             std::string record;             file >> record; +        if (!record.length() > 0) +            continue; +              //check for valid record              if (not checksum(&record) or not parse_record(&record, len, addr, type, data)) {                  throw uhd::io_error("usrp_load_firmware: bad record checksum"); diff --git a/host/lib/usrp/cores/rx_dsp_core_200.cpp b/host/lib/usrp/cores/rx_dsp_core_200.cpp index ef6b85de9..2fdc220b5 100644 --- a/host/lib/usrp/cores/rx_dsp_core_200.cpp +++ b/host/lib/usrp/cores/rx_dsp_core_200.cpp @@ -59,8 +59,11 @@ public:          const size_t dsp_base, const size_t ctrl_base,          const boost::uint32_t sid, const bool lingering_packet      ): -        _iface(iface), _dsp_base(dsp_base), _ctrl_base(ctrl_base), _sid(sid) +        _iface(iface), _dsp_base(dsp_base), _ctrl_base(ctrl_base),  _sid(sid)      { +        // previously uninitialized - assuming zero for all +        _tick_rate = _link_rate = _host_extra_scaling = _fxpt_scalar_correction = 0.0; +          //init to something so update method has reasonable defaults          _scaling_adjustment = 1.0;          _dsp_extra_scaling = 1.0; diff --git a/host/lib/usrp/cores/rx_dsp_core_3000.cpp b/host/lib/usrp/cores/rx_dsp_core_3000.cpp index 7b3324f74..525916032 100644 --- a/host/lib/usrp/cores/rx_dsp_core_3000.cpp +++ b/host/lib/usrp/cores/rx_dsp_core_3000.cpp @@ -50,10 +50,13 @@ public:      ):          _iface(iface), _dsp_base(dsp_base)      { +        // previously uninitialized - assuming zero for all +        _link_rate = _host_extra_scaling = _fxpt_scalar_correction = 0.0; +          //init to something so update method has reasonable defaults          _scaling_adjustment = 1.0;          _dsp_extra_scaling = 1.0; -        this->set_tick_rate(1.0); +        _tick_rate = 1.0;      }      ~rx_dsp_core_3000_impl(void) diff --git a/host/lib/usrp/cores/rx_frontend_core_200.cpp b/host/lib/usrp/cores/rx_frontend_core_200.cpp index 09b36c1a6..864b5cc53 100644 --- a/host/lib/usrp/cores/rx_frontend_core_200.cpp +++ b/host/lib/usrp/cores/rx_frontend_core_200.cpp @@ -38,7 +38,7 @@ static boost::uint32_t fs_to_bits(const double num, const size_t bits){  class rx_frontend_core_200_impl : public rx_frontend_core_200{  public:      rx_frontend_core_200_impl(wb_iface::sptr iface, const size_t base): -        _iface(iface), _base(base) +        _i_dc_off(0), _q_dc_off(0), _iface(iface), _base(base)      {          //NOP      } diff --git a/host/lib/usrp/cores/time64_core_200.cpp b/host/lib/usrp/cores/time64_core_200.cpp index 11b310362..ad5e6477c 100644 --- a/host/lib/usrp/cores/time64_core_200.cpp +++ b/host/lib/usrp/cores/time64_core_200.cpp @@ -48,6 +48,7 @@ public:      ):          _iface(iface), _base(base),          _readback_bases(readback_bases), +        _tick_rate(0.0),          _mimo_delay_cycles(mimo_delay_cycles)      {          _sources.push_back("none"); diff --git a/host/lib/usrp/cores/tx_dsp_core_200.cpp b/host/lib/usrp/cores/tx_dsp_core_200.cpp index 808f13028..f8aa87aa3 100644 --- a/host/lib/usrp/cores/tx_dsp_core_200.cpp +++ b/host/lib/usrp/cores/tx_dsp_core_200.cpp @@ -60,6 +60,9 @@ public:      ):          _iface(iface), _dsp_base(dsp_base), _ctrl_base(ctrl_base), _sid(sid)      { +        // previously uninitialized - assuming zero for all +        _tick_rate = _link_rate = _host_extra_scaling = _fxpt_scalar_correction = 0.0; +          //init to something so update method has reasonable defaults          _scaling_adjustment = 1.0;          _dsp_extra_scaling = 1.0; diff --git a/host/lib/usrp/cores/tx_dsp_core_3000.cpp b/host/lib/usrp/cores/tx_dsp_core_3000.cpp index feb749cd9..6fde70c5f 100644 --- a/host/lib/usrp/cores/tx_dsp_core_3000.cpp +++ b/host/lib/usrp/cores/tx_dsp_core_3000.cpp @@ -45,10 +45,13 @@ public:      ):          _iface(iface), _dsp_base(dsp_base)      { +        // previously uninitialized - assuming zero for all +        _link_rate = _host_extra_scaling = _fxpt_scalar_correction = 0.0; +          //init to something so update method has reasonable defaults          _scaling_adjustment = 1.0;          _dsp_extra_scaling = 1.0; -        this->set_tick_rate(1.0); +        _tick_rate = 1.0;      }      void set_tick_rate(const double rate){ diff --git a/host/lib/usrp/dboard/db_dbsrx.cpp b/host/lib/usrp/dboard/db_dbsrx.cpp index b1cee4aa7..9d04d8e16 100644 --- a/host/lib/usrp/dboard/db_dbsrx.cpp +++ b/host/lib/usrp/dboard/db_dbsrx.cpp @@ -179,7 +179,7 @@ dbsrx::dbsrx(ctor_args_t args) : rx_dboard_base(args){                  "DBSRX: incorrect dbid\n"                  "Expected dbid 0x0002 and R193\n"                  "found dbid == %d\n" -                "Please see the daughterboard app notes"  +                "Please see the daughterboard app notes"                  ) % this->get_rx_id().to_pp_string();      //warn user about incorrect DBID on non-USRP1, requires R194 populated @@ -188,7 +188,7 @@ dbsrx::dbsrx(ctor_args_t args) : rx_dboard_base(args){                  "DBSRX: incorrect dbid\n"                  "Expected dbid 0x000D and R194\n"                  "found dbid == %d\n" -                "Please see the daughterboard app notes"  +                "Please see the daughterboard app notes"                  ) % this->get_rx_id().to_pp_string();      //send initial register settings @@ -305,13 +305,13 @@ double dbsrx::set_lo_freq(double target_freq){              goto done_loop;          } -    }  +    }      done_loop: -    //Assert because we failed to find a suitable combination of ref_clock, R and N  +    //Assert because we failed to find a suitable combination of ref_clock, R and N      UHD_ASSERT_THROW(ref_clock <= 27.0e6 and ref_clock >= 0.0); -    UHD_ASSERT_THROW(ref_clock/m >= 1e6 and ref_clock/m <= 2.5e6); +    UHD_ASSERT_THROW(m and ref_clock/m >= 1e6 and ref_clock/m <= 2.5e6);      UHD_ASSERT_THROW((pfd_freq >= dbsrx_pfd_freq_range.start()) and (pfd_freq <= dbsrx_pfd_freq_range.stop()));      UHD_ASSERT_THROW((N >= 256) and (N <= 32768)); @@ -332,7 +332,7 @@ double dbsrx::set_lo_freq(double target_freq){      _max2118_write_regs.r_divider = (max2118_write_regs_t::r_divider_t) r;      _max2118_write_regs.set_n_divider(N);      _max2118_write_regs.ade_vco_ade_read = max2118_write_regs_t::ADE_VCO_ADE_READ_ENABLED; -     +      //compute prescaler variables      int scaler = actual_freq > 1125e6 ? 2 : 4;      _max2118_write_regs.div2 = scaler == 4 ? max2118_write_regs_t::DIV2_DIV4 : max2118_write_regs_t::DIV2_DIV2; @@ -377,7 +377,7 @@ double dbsrx::set_lo_freq(double target_freq){          if (_max2118_read_regs.adc == 0){              if (_max2118_write_regs.osc_band == 0){                  UHD_MSG(warning) << boost::format( -                        "DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"  +                        "DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"                          ) % int(_max2118_write_regs.osc_band);                  UHD_ASSERT_THROW(_max2118_read_regs.adc != 0); //just to cause a throw              } @@ -389,7 +389,7 @@ double dbsrx::set_lo_freq(double target_freq){          if (_max2118_read_regs.adc == 7){              if (_max2118_write_regs.osc_band == 7){                  UHD_MSG(warning) << boost::format( -                        "DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"  +                        "DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"                          ) % int(_max2118_write_regs.osc_band);                  UHD_ASSERT_THROW(_max2118_read_regs.adc != 7); //just to cause a throw              } @@ -408,7 +408,7 @@ double dbsrx::set_lo_freq(double target_freq){          //allow for setup time before checking condition again          boost::this_thread::sleep(boost::posix_time::milliseconds(10));      } -       +      UHD_LOGV(often) << boost::format(          "DBSRX: final vco %d, vtune adc %d"      ) % int(_max2118_write_regs.osc_band) % int(_max2118_read_regs.adc) << std::endl; @@ -417,7 +417,7 @@ double dbsrx::set_lo_freq(double target_freq){      if (_max2118_read_regs.adc <= 2) _max2118_write_regs.cp_current = max2118_write_regs_t::CP_CURRENT_I_CP_100UA;      else if (_max2118_read_regs.adc >= 5) _max2118_write_regs.cp_current = max2118_write_regs_t::CP_CURRENT_I_CP_400UA;      else _max2118_write_regs.cp_current = max2118_write_regs_t::CP_CURRENT_I_CP_200UA; -     +      //update charge pump bias current setting      send_reg(0x2, 0x2); @@ -524,7 +524,7 @@ double dbsrx::set_bandwidth(double bandwidth){      bandwidth = dbsrx_bandwidth_range.clip(bandwidth);      double ref_clock = this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX); -     +      //NOTE: _max2118_write_regs.m_divider set in set_lo_freq      //compute f_dac setting diff --git a/host/lib/usrp/dboard/db_tvrx.cpp b/host/lib/usrp/dboard/db_tvrx.cpp index edee46cd5..e9f60f765 100644 --- a/host/lib/usrp/dboard/db_tvrx.cpp +++ b/host/lib/usrp/dboard/db_tvrx.cpp @@ -267,7 +267,7 @@ static std::string get_band(double freq) {   * \return a voltage to feed the TVRX analog gain   */ -static double gain_interp(double gain, boost::array<double, 17> db_vector, boost::array<double, 17> volts_vector) { +static double gain_interp(double gain, const boost::array<double, 17>& db_vector, const boost::array<double, 17>& volts_vector) {      double volts;      gain = uhd::clip<double>(gain, db_vector.front(), db_vector.back()); //let's not get carried away here diff --git a/host/lib/usrp/dboard/db_wbx_common.hpp b/host/lib/usrp/dboard/db_wbx_common.hpp index 9e984dce7..d1beb160e 100644 --- a/host/lib/usrp/dboard/db_wbx_common.hpp +++ b/host/lib/usrp/dboard/db_wbx_common.hpp @@ -118,7 +118,7 @@ protected:       */      class wbx_versionx {      public: -        wbx_versionx() {} +        wbx_versionx():self_base(NULL) {}          ~wbx_versionx(void) {}          virtual double set_tx_gain(double gain, const std::string &name) = 0; diff --git a/host/lib/usrp/gps_ctrl.cpp b/host/lib/usrp/gps_ctrl.cpp index c3af75faa..105a52b30 100644 --- a/host/lib/usrp/gps_ctrl.cpp +++ b/host/lib/usrp/gps_ctrl.cpp @@ -223,7 +223,6 @@ private:          boost::this_thread::sleep(milliseconds(GPS_TIMEOUT_DELAY_MS));      }      throw uhd::value_error(str(boost::format("get_nmea(): no %s message found") % msgtype)); -    return std::string();    }    //helper function to retrieve a field from an NMEA sentence @@ -322,7 +321,6 @@ private:          boost::this_thread::sleep(milliseconds(GPS_TIMEOUT_DELAY_MS));      }      throw uhd::value_error("get_stat(): no servo message found"); -    return std::string();    }    uart_iface::sptr _uart; diff --git a/host/lib/usrp/usrp1/io_impl.cpp b/host/lib/usrp/usrp1/io_impl.cpp index d384eb13f..e1f17e5a6 100644 --- a/host/lib/usrp/usrp1/io_impl.cpp +++ b/host/lib/usrp/usrp1/io_impl.cpp @@ -63,7 +63,7 @@ static const size_t alignment_padding = 512;   * Helper struct to associate an offset with a buffer   **********************************************************************/  struct offset_send_buffer{ -    offset_send_buffer(void){ +    offset_send_buffer(void):offset(0){          /* NOP */      } diff --git a/host/lib/usrp/usrp1/usrp1_iface.cpp b/host/lib/usrp/usrp1/usrp1_iface.cpp index 9301721aa..7c64714b7 100644 --- a/host/lib/usrp/usrp1/usrp1_iface.cpp +++ b/host/lib/usrp/usrp1/usrp1_iface.cpp @@ -91,11 +91,11 @@ public:          return uhd::ntohx(value_out);      } -     +      void poke16(boost::uint32_t, boost::uint16_t) {          throw uhd::not_implemented_error("Unhandled command poke16()");      } -     +      boost::uint16_t peek16(boost::uint32_t) {          throw uhd::not_implemented_error("Unhandled command peek16()");          return 0; @@ -141,8 +141,8 @@ public:          if (readback) {              unsigned char buff[4] = { -                (bits >> 0) & 0xff, (bits >> 8) & 0xff, -                (bits >> 16) & 0xff, (bits >> 24) & 0xff +                (unsigned char)((bits >> 0) & 0xff), (unsigned char)((bits >> 8) & 0xff), +                (unsigned char)((bits >> 16) & 0xff), (unsigned char)((bits >> 24) & 0xff)              };              //conditions where there are two header bytes              if (num_bytes >= 3 and buff[num_bytes-1] != 0 and buff[num_bytes-2] != 0 and buff[num_bytes-3] == 0){ @@ -168,7 +168,7 @@ public:                                    (((boost::uint32_t)buff[1]) <<  8) |                                    (((boost::uint32_t)buff[2]) << 16) |                                    (((boost::uint32_t)buff[3]) << 24); -            return val;  +            return val;          }          else {              // Byteswap on num_bytes diff --git a/host/lib/usrp/usrp2/usrp2_clk_regs.hpp b/host/lib/usrp/usrp2/usrp2_clk_regs.hpp index 8b185eac0..45c0859d8 100644 --- a/host/lib/usrp/usrp2/usrp2_clk_regs.hpp +++ b/host/lib/usrp/usrp2/usrp2_clk_regs.hpp @@ -22,8 +22,9 @@  class usrp2_clk_regs_t {  public: -  usrp2_clk_regs_t(void) { ; } +  usrp2_clk_regs_t(void):test(0),fpga(0),adc(0),dac(0),serdes(0),exp(0),tx_db(0),rx_db(0) { ; }    usrp2_clk_regs_t(usrp2_iface::rev_type rev) { +    fpga = adc = serdes = exp = tx_db = 0;      test = 0;      fpga = 1;      dac = 3; @@ -54,7 +55,7 @@ public:          //dont throw, it may be unitialized          break;      } -     +      rx_db = 7;    } diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp index 3b230ca69..5f97045e1 100644 --- a/host/lib/usrp/usrp2/usrp2_iface.cpp +++ b/host/lib/usrp/usrp2/usrp2_iface.cpp @@ -271,7 +271,7 @@ public:          //send and recv          usrp2_ctrl_data_t in_data = this->ctrl_send_and_recv(out_data, MIN_PROTO_COMPAT_I2C);          UHD_ASSERT_THROW(ntohl(in_data.id) == USRP2_CTRL_ID_HERES_THE_I2C_DATA_DUDE); -        UHD_ASSERT_THROW(in_data.data.i2c_args.addr = num_bytes); +        UHD_ASSERT_THROW(in_data.data.i2c_args.bytes == num_bytes);          //copy out the data          byte_vector_t result(num_bytes); | 
