uhd: rename identifier for usrp1 eeprom, and fix offsets, add serial support to usrp2

This commit is contained in:
Josh Blum 2010-11-05 17:39:18 -07:00
parent 3ac3457184
commit 94a492dc40
6 changed files with 50 additions and 45 deletions

View File

@ -77,7 +77,7 @@ set(eeprom1_sources
add_custom_target(usrp1_eeprom ALL
DEPENDS usrp1_boot
COMMAND objcopy -I ihex -O binary usrp1_boot.ihx usrp1_boot.bin
COMMAND ${PYTHON_EXECUTABLE} ${BUILD_EEPROM} -r2 usrp1_boot.bin usrp1_eeprom.bin
COMMAND ${PYTHON_EXECUTABLE} ${BUILD_EEPROM} -r1 usrp1_boot.bin usrp1_eeprom.bin
)
add_executable(usrp1_boot ${eeprom1_sources})

View File

@ -37,7 +37,7 @@ namespace uhd{ namespace usrp{
//! Possible EEPROM maps types
enum map_type{
MAP_NXXX,
MAP_BXXX
MAP_B1XX
};
//! Make a new empty mboard eeprom

View File

@ -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;
}
}

View File

@ -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();

View File

@ -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)

View File

@ -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
}