diff options
Diffstat (limited to 'host/lib/usrp')
| -rw-r--r-- | host/lib/usrp/mboard_eeprom.cpp | 30 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/mboard_impl.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/usrp1_iface.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.cpp | 57 | 
4 files changed, 48 insertions, 43 deletions
| diff --git a/host/lib/usrp/mboard_eeprom.cpp b/host/lib/usrp/mboard_eeprom.cpp index 81dc6f194..49d429674 100644 --- a/host/lib/usrp/mboard_eeprom.cpp +++ b/host/lib/usrp/mboard_eeprom.cpp @@ -94,6 +94,9 @@ static void load_nxxx(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){      mb_eeprom["name"] = bytes_to_string(iface.read_eeprom(          NXXX_EEPROM_ADDR, USRP_NXXX_OFFSETS["name"], NAME_MAX_LEN      )); + +    //empty serial correction: use the mac address +    if (mb_eeprom["serial"].empty()) mb_eeprom["serial"] = mb_eeprom["mac-addr"];  }  static void store_nxxx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){ @@ -129,37 +132,38 @@ static void store_nxxx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){  }  /*********************************************************************** - * Implementation of BXXX load/store + * Implementation of B1XX load/store   **********************************************************************/ -static const boost::uint8_t BXXX_EEPROM_ADDR = 0x50; +static const boost::uint8_t B1XX_EEPROM_ADDR = 0x50; +static const size_t B1XXX_SERIAL_LEN = 8; -static const uhd::dict<std::string, boost::uint8_t> USRP_BXXX_OFFSETS = boost::assign::map_list_of +static const uhd::dict<std::string, boost::uint8_t> USRP_B1XX_OFFSETS = boost::assign::map_list_of      ("serial", 0xf8) -    ("name", 0xf8 + SERIAL_LEN) +    ("name", 0xf8 - NAME_MAX_LEN)  ; -static void load_bxxx(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){ +static void load_b1xx(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){      //extract the serial      mb_eeprom["serial"] = bytes_to_string(iface.read_eeprom( -        BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["serial"], SERIAL_LEN +        B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["serial"], B1XXX_SERIAL_LEN      ));      //extract the name      mb_eeprom["name"] = bytes_to_string(iface.read_eeprom( -        BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["name"], NAME_MAX_LEN +        B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["name"], NAME_MAX_LEN      ));  } -static void store_bxxx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){ +static void store_b1xx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){      //store the serial      iface.write_eeprom( -        BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["serial"], -        string_to_bytes(mb_eeprom["serial"], SERIAL_LEN) +        B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["serial"], +        string_to_bytes(mb_eeprom["serial"], B1XXX_SERIAL_LEN)      );      //store the name      iface.write_eeprom( -        BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["name"], +        B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["name"],          string_to_bytes(mb_eeprom["name"], NAME_MAX_LEN)      );  } @@ -174,13 +178,13 @@ mboard_eeprom_t::mboard_eeprom_t(void){  mboard_eeprom_t::mboard_eeprom_t(i2c_iface &iface, map_type map){      switch(map){      case MAP_NXXX: load_nxxx(*this, iface); break; -    case MAP_BXXX: load_bxxx(*this, iface); break; +    case MAP_B1XX: load_b1xx(*this, iface); break;      }  }  void mboard_eeprom_t::commit(i2c_iface &iface, map_type map){      switch(map){      case MAP_NXXX: store_nxxx(*this, iface); break; -    case MAP_BXXX: store_bxxx(*this, iface); break; +    case MAP_B1XX: store_b1xx(*this, iface); break;      }  } diff --git a/host/lib/usrp/usrp1/mboard_impl.cpp b/host/lib/usrp/usrp1/mboard_impl.cpp index 86f78a7a9..952da8dce 100644 --- a/host/lib/usrp/usrp1/mboard_impl.cpp +++ b/host/lib/usrp/usrp1/mboard_impl.cpp @@ -379,7 +379,7 @@ void usrp1_impl::mboard_set(const wax::obj &key, const wax::obj &val)      case MBOARD_PROP_EEPROM_MAP:          _iface->mb_eeprom = val.as<mboard_eeprom_t>(); -        _iface->mb_eeprom.commit(*_iface, mboard_eeprom_t::MAP_BXXX); +        _iface->mb_eeprom.commit(*_iface, mboard_eeprom_t::MAP_B1XX);          return;      default: UHD_THROW_PROP_SET_ERROR(); diff --git a/host/lib/usrp/usrp1/usrp1_iface.cpp b/host/lib/usrp/usrp1/usrp1_iface.cpp index dcba3e819..691c51fe8 100644 --- a/host/lib/usrp/usrp1/usrp1_iface.cpp +++ b/host/lib/usrp/usrp1/usrp1_iface.cpp @@ -38,7 +38,7 @@ public:      usrp1_iface_impl(usrp_ctrl::sptr ctrl_transport)      {          _ctrl_transport = ctrl_transport; -        mb_eeprom = mboard_eeprom_t(*this, mboard_eeprom_t::MAP_BXXX); +        mb_eeprom = mboard_eeprom_t(*this, mboard_eeprom_t::MAP_B1XX);      }      ~usrp1_iface_impl(void) diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp index 6625cf3e7..5f549c4fd 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.cpp +++ b/host/lib/usrp/usrp2/usrp2_impl.cpp @@ -102,36 +102,37 @@ static uhd::device_addrs_t usrp2_find(const device_addr_t &hint){      while(true){          size_t len = udp_transport->recv(asio::buffer(usrp2_ctrl_data_in_mem), DISCOVERY_TIMEOUT_MS);          //std::cout << len << "\n"; -        if (len > offsetof(usrp2_ctrl_data_t, data)){ -            //handle the received data -            switch(ntohl(ctrl_data_in->id)){ -            case USRP2_CTRL_ID_WAZZUP_DUDE: -                //make a boost asio ipv4 with the raw addr in host byte order -                boost::asio::ip::address_v4 ip_addr(ntohl(ctrl_data_in->data.ip_addr)); -                device_addr_t new_addr; -                new_addr["type"] = "usrp2"; -                new_addr["addr"] = ip_addr.to_string(); -                //Attempt to read the name from the EEPROM and perform filtering. -                //This operation can throw due to COMPAT mismatch. That is OK. -                //We will allow the device to be found and the COMPAT mismatch -                //will be thrown as an exception in the factory function. -                try{ -                    new_addr["name"] = usrp2_iface::make(udp_simple::make_connected( -                        new_addr["addr"], num2str(USRP2_UDP_CTRL_PORT)) -                    )->mb_eeprom["name"]; -                    if (not hint.has_key("name") or hint["name"] == new_addr["name"]){ -                        usrp2_addrs.push_back(new_addr); -                    } +        if (len > offsetof(usrp2_ctrl_data_t, data) and ntohl(ctrl_data_in->id) == USRP2_CTRL_ID_WAZZUP_DUDE){ +            //make a boost asio ipv4 with the raw addr in host byte order +            boost::asio::ip::address_v4 ip_addr(ntohl(ctrl_data_in->data.ip_addr)); +            device_addr_t new_addr; +            new_addr["type"] = "usrp2"; +            new_addr["addr"] = ip_addr.to_string(); +            //Attempt to read the name from the EEPROM and perform filtering. +            //This operation can throw due to COMPAT mismatch. That is OK. +            //We will allow the device to be found and the COMPAT mismatch +            //will be thrown as an exception in the factory function. +            try{ +                mboard_eeprom_t mb_eeprom = usrp2_iface::make( +                    udp_simple::make_connected(new_addr["addr"], num2str(USRP2_UDP_CTRL_PORT)) +                )->mb_eeprom; +                new_addr["name"] = mb_eeprom["name"]; +                new_addr["serial"] = mb_eeprom["serial"]; +                if ( +                    (not hint.has_key("name")   or hint["name"]   == new_addr["name"]) and +                    (not hint.has_key("serial") or hint["serial"] == new_addr["serial"]) +                ){ +                    usrp2_addrs.push_back(new_addr);                  } -                catch(const std::exception &e){ -                    uhd::warning::post( -                        std::string("Ignoring discovered device\n") -                        + e.what() -                    ); -                } -                //dont break here, it will exit the while loop -                //just continue on to the next loop iteration              } +            catch(const std::exception &e){ +                uhd::warning::post( +                    std::string("Ignoring discovered device\n") +                    + e.what() +                ); +            } +            //dont break here, it will exit the while loop +            //just continue on to the next loop iteration          }          if (len == 0) break; //timeout      } | 
