aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/dboard_eeprom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/dboard_eeprom.cpp')
-rw-r--r--host/lib/usrp/dboard_eeprom.cpp107
1 files changed, 53 insertions, 54 deletions
diff --git a/host/lib/usrp/dboard_eeprom.cpp b/host/lib/usrp/dboard_eeprom.cpp
index 54a2ea196..7775f5300 100644
--- a/host/lib/usrp/dboard_eeprom.cpp
+++ b/host/lib/usrp/dboard_eeprom.cpp
@@ -5,9 +5,9 @@
// SPDX-License-Identifier: GPL-3.0-or-later
//
+#include <uhd/exception.hpp>
#include <uhd/types/byte_vector.hpp>
#include <uhd/usrp/dboard_eeprom.hpp>
-#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
@@ -31,97 +31,96 @@ using namespace uhd::usrp;
// ...
// 1f: .. negative of the sum of bytes [0x00, 0x1e]
-#define DB_EEPROM_MAGIC 0x00
-#define DB_EEPROM_MAGIC_VALUE 0xDB
-#define DB_EEPROM_ID_LSB 0x01
-#define DB_EEPROM_ID_MSB 0x02
-#define DB_EEPROM_REV_LSB 0x03
-#define DB_EEPROM_REV_MSB 0x04
-#define DB_EEPROM_OFFSET_0_LSB 0x05 // offset correction for ADC or DAC 0
-#define DB_EEPROM_OFFSET_0_MSB 0x06
-#define DB_EEPROM_OFFSET_1_LSB 0x07 // offset correction for ADC or DAC 1
-#define DB_EEPROM_OFFSET_1_MSB 0x08
-#define DB_EEPROM_SERIAL 0x09
-#define DB_EEPROM_SERIAL_LEN 0x09 //9 ASCII characters
-#define DB_EEPROM_CHKSUM 0x1f
-
-#define DB_EEPROM_CLEN 0x20 // length of common portion of eeprom
-
-#define DB_EEPROM_CUSTOM_BASE DB_EEPROM_CLEN // first avail offset for
- // daughterboard specific use
+#define DB_EEPROM_MAGIC 0x00
+#define DB_EEPROM_MAGIC_VALUE 0xDB
+#define DB_EEPROM_ID_LSB 0x01
+#define DB_EEPROM_ID_MSB 0x02
+#define DB_EEPROM_REV_LSB 0x03
+#define DB_EEPROM_REV_MSB 0x04
+#define DB_EEPROM_OFFSET_0_LSB 0x05 // offset correction for ADC or DAC 0
+#define DB_EEPROM_OFFSET_0_MSB 0x06
+#define DB_EEPROM_OFFSET_1_LSB 0x07 // offset correction for ADC or DAC 1
+#define DB_EEPROM_OFFSET_1_MSB 0x08
+#define DB_EEPROM_SERIAL 0x09
+#define DB_EEPROM_SERIAL_LEN 0x09 // 9 ASCII characters
+#define DB_EEPROM_CHKSUM 0x1f
+
+#define DB_EEPROM_CLEN 0x20 // length of common portion of eeprom
+
+#define DB_EEPROM_CUSTOM_BASE \
+ DB_EEPROM_CLEN // first avail offset for
+ // daughterboard specific use
////////////////////////////////////////////////////////////////////////
-//negative sum of bytes excluding checksum byte
-static uint8_t checksum(const byte_vector_t &bytes){
+// negative sum of bytes excluding checksum byte
+static uint8_t checksum(const byte_vector_t& bytes)
+{
int sum = 0;
- for (size_t i = 0; i < std::min(bytes.size(), size_t(DB_EEPROM_CHKSUM)); i++){
+ for (size_t i = 0; i < std::min(bytes.size(), size_t(DB_EEPROM_CHKSUM)); i++) {
sum -= int(bytes.at(i));
}
return uint8_t(sum);
}
-dboard_eeprom_t::dboard_eeprom_t(void){
- id = dboard_id_t::none();
+dboard_eeprom_t::dboard_eeprom_t(void)
+{
+ id = dboard_id_t::none();
serial = "";
}
-void dboard_eeprom_t::load(i2c_iface &iface, uint8_t addr){
+void dboard_eeprom_t::load(i2c_iface& iface, uint8_t addr)
+{
byte_vector_t bytes = iface.read_eeprom(addr, 0, DB_EEPROM_CLEN);
std::ostringstream ss;
- try{
+ try {
UHD_ASSERT_THROW(bytes.size() >= DB_EEPROM_CLEN);
UHD_ASSERT_THROW(bytes[DB_EEPROM_MAGIC] == DB_EEPROM_MAGIC_VALUE);
UHD_ASSERT_THROW(bytes[DB_EEPROM_CHKSUM] == checksum(bytes));
- //parse the ids
- id = dboard_id_t::from_uint16(0
- | (uint16_t(bytes[DB_EEPROM_ID_LSB]) << 0)
- | (uint16_t(bytes[DB_EEPROM_ID_MSB]) << 8)
- );
-
- //parse the serial
- serial = bytes_to_string(
- byte_vector_t(&bytes.at(DB_EEPROM_SERIAL),
- &bytes.at(DB_EEPROM_SERIAL+DB_EEPROM_SERIAL_LEN))
- );
-
- //parse the revision
- const uint16_t rev_num = 0
- | (uint16_t(bytes[DB_EEPROM_REV_LSB]) << 0)
- | (uint16_t(bytes[DB_EEPROM_REV_MSB]) << 8)
- ;
- if (rev_num != 0 and rev_num != 0xffff){
+ // parse the ids
+ id = dboard_id_t::from_uint16(0 | (uint16_t(bytes[DB_EEPROM_ID_LSB]) << 0)
+ | (uint16_t(bytes[DB_EEPROM_ID_MSB]) << 8));
+
+ // parse the serial
+ serial = bytes_to_string(byte_vector_t(&bytes.at(DB_EEPROM_SERIAL),
+ &bytes.at(DB_EEPROM_SERIAL + DB_EEPROM_SERIAL_LEN)));
+
+ // parse the revision
+ const uint16_t rev_num = 0 | (uint16_t(bytes[DB_EEPROM_REV_LSB]) << 0)
+ | (uint16_t(bytes[DB_EEPROM_REV_MSB]) << 8);
+ if (rev_num != 0 and rev_num != 0xffff) {
revision = std::to_string(rev_num);
}
- }catch(const uhd::assertion_error &){
- id = dboard_id_t::none();
+ } catch (const uhd::assertion_error&) {
+ id = dboard_id_t::none();
serial = "";
}
}
-void dboard_eeprom_t::store(i2c_iface &iface, uint8_t addr) const{
- byte_vector_t bytes(DB_EEPROM_CLEN, 0); //defaults to all zeros
+void dboard_eeprom_t::store(i2c_iface& iface, uint8_t addr) const
+{
+ byte_vector_t bytes(DB_EEPROM_CLEN, 0); // defaults to all zeros
bytes[DB_EEPROM_MAGIC] = DB_EEPROM_MAGIC_VALUE;
- //load the id bytes
+ // load the id bytes
bytes[DB_EEPROM_ID_LSB] = uint8_t(id.to_uint16() >> 0);
bytes[DB_EEPROM_ID_MSB] = uint8_t(id.to_uint16() >> 8);
- //load the serial bytes
+ // load the serial bytes
byte_vector_t ser_bytes = string_to_bytes(serial, DB_EEPROM_SERIAL_LEN);
std::copy(ser_bytes.begin(), ser_bytes.end(), &bytes.at(DB_EEPROM_SERIAL));
- //load the revision bytes
- if (not revision.empty()){
- const uint16_t rev_num = boost::lexical_cast<uint16_t>(revision);
+ // load the revision bytes
+ if (not revision.empty()) {
+ const uint16_t rev_num = boost::lexical_cast<uint16_t>(revision);
bytes[DB_EEPROM_REV_LSB] = uint8_t(rev_num >> 0);
bytes[DB_EEPROM_REV_MSB] = uint8_t(rev_num >> 8);
}
- //load the checksum
+ // load the checksum
bytes[DB_EEPROM_CHKSUM] = checksum(bytes);
iface.write_eeprom(addr, 0, bytes);