static void load_b000(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){ //extract the serial mb_eeprom["serial"] = bytes_to_string(iface.read_eeprom( B000_EEPROM_ADDR, offsetof(b000_eeprom_map, serial), B000_SERIAL_LEN )); //extract the name mb_eeprom["name"] = bytes_to_string(iface.read_eeprom( B000_EEPROM_ADDR, offsetof(b000_eeprom_map, name), NAME_MAX_LEN )); //extract master clock rate as a 32-bit uint in Hz boost::uint32_t master_clock_rate; const byte_vector_t rate_bytes = iface.read_eeprom( B000_EEPROM_ADDR, offsetof(b000_eeprom_map, mcr), sizeof(master_clock_rate) ); std::copy( rate_bytes.begin(), rate_bytes.end(), //input reinterpret_cast<boost::uint8_t *>(&master_clock_rate) //output ); master_clock_rate = ntohl(master_clock_rate); if (master_clock_rate > 1e6 and master_clock_rate < 1e9){ mb_eeprom["mcr"] = boost::lexical_cast<std::string>(master_clock_rate); } else mb_eeprom["mcr"] = ""; }
mboard_eeprom_t usrp1_impl::get_mb_eeprom(uhd::i2c_iface::sptr iface) { mboard_eeprom_t mb_eeprom; //extract the serial mb_eeprom["serial"] = uhd::bytes_to_string(iface->read_eeprom( USRP1_EEPROM_ADDR, offsetof(usrp1_eeprom_map, serial), USRP1_SERIAL_LEN )); //extract the name mb_eeprom["name"] = uhd::bytes_to_string(iface->read_eeprom( USRP1_EEPROM_ADDR, offsetof(usrp1_eeprom_map, name), NAME_MAX_LEN )); //extract master clock rate as a 32-bit uint in Hz uint32_t master_clock_rate; const byte_vector_t rate_bytes = iface->read_eeprom( USRP1_EEPROM_ADDR, offsetof(usrp1_eeprom_map, mcr), sizeof(master_clock_rate) ); std::copy( rate_bytes.begin(), rate_bytes.end(), //input reinterpret_cast<uint8_t *>(&master_clock_rate) //output ); master_clock_rate = ntohl(master_clock_rate); if (master_clock_rate > 1e6 and master_clock_rate < 1e9){ mb_eeprom["mcr"] = std::to_string(master_clock_rate); } else mb_eeprom["mcr"] = ""; return mb_eeprom; }
void write_i2c(boost::uint8_t addr, const byte_vector_t &bytes){ //allocate some memory for this transaction UHD_ASSERT_THROW(bytes.size() <= max_i2c_data_bytes); boost::uint8_t mem[sizeof(usrp_e_i2c) + max_i2c_data_bytes]; //load the data struct usrp_e_i2c *data = reinterpret_cast<usrp_e_i2c*>(mem); data->addr = addr; data->len = bytes.size(); std::copy(bytes.begin(), bytes.end(), data->data); //call the spi ioctl this->ioctl(USRP_E_I2C_WRITE, data); }