summaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-04-26 00:17:08 -0700
committerJosh Blum <josh@joshknows.com>2010-04-26 00:17:08 -0700
commit0c609b96574095affe12d9aaa53bead98faba4f3 (patch)
tree9e10b9d6ddabca60b33898514df5948f8ed02b18 /host/lib
parent61ec6711bb4bbae7a8a26cc631eeb88fb3e7d688 (diff)
downloaduhd-0c609b96574095affe12d9aaa53bead98faba4f3.tar.gz
uhd-0c609b96574095affe12d9aaa53bead98faba4f3.tar.bz2
uhd-0c609b96574095affe12d9aaa53bead98faba4f3.zip
Added i2c interface to serial.hpp, using in usrp2_iface for i2c and eeprom.
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/types.cpp27
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp21
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.hpp48
3 files changed, 28 insertions, 68 deletions
diff --git a/host/lib/types.cpp b/host/lib/types.cpp
index 91887840c..a1b9b21a9 100644
--- a/host/lib/types.cpp
+++ b/host/lib/types.cpp
@@ -31,6 +31,7 @@
#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/cstdint.hpp>
+#include <boost/assign/list_of.hpp>
#include <stdexcept>
#include <complex>
@@ -250,3 +251,29 @@ spi_config_t::spi_config_t(edge_t edge){
mosi_edge = edge;
miso_edge = edge;
}
+
+void i2c_iface::write_eeprom(
+ boost::uint8_t addr,
+ boost::uint8_t offset,
+ const byte_vector_t &bytes
+){
+ BOOST_FOREACH(boost::uint8_t byte, bytes){
+ //write a byte at a time, its easy that way
+ byte_vector_t cmd = boost::assign::list_of(offset)(byte);
+ this->write_i2c(addr, cmd);
+ }
+}
+
+byte_vector_t i2c_iface::read_eeprom(
+ boost::uint8_t addr,
+ boost::uint8_t offset,
+ size_t num_bytes
+){
+ byte_vector_t bytes;
+ for (size_t i = 0; i < num_bytes; i++){
+ //do a zero byte write to start read cycle
+ this->write_i2c(addr, byte_vector_t(1, offset));
+ bytes.push_back(this->read_i2c(addr, 1).at(0));
+ }
+ return bytes;
+}
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index 76ee5d6fe..27b6f8907 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -134,27 +134,6 @@ public:
}
/***********************************************************************
- * EEPROM
- **********************************************************************/
- void write_eeprom(boost::uint8_t addr, boost::uint8_t offset, const byte_vector_t &bytes){
- BOOST_FOREACH(boost::uint8_t byte, bytes){
- //write a byte at a time, its easy that way
- byte_vector_t cmd = boost::assign::list_of(offset)(byte);
- this->write_i2c(addr, cmd);
- }
- }
-
- byte_vector_t read_eeprom(boost::uint8_t addr, boost::uint8_t offset, size_t num_bytes){
- byte_vector_t bytes;
- for (size_t i = 0; i < num_bytes; i++){
- //do a zero byte write to start read cycle
- write_i2c(addr, byte_vector_t(1, offset));
- bytes.push_back(read_i2c(addr, 1).at(0));
- }
- return bytes;
- }
-
-/***********************************************************************
* Send/Recv over control
**********************************************************************/
usrp2_ctrl_data_t ctrl_send_and_recv(const usrp2_ctrl_data_t &out_data){
diff --git a/host/lib/usrp/usrp2/usrp2_iface.hpp b/host/lib/usrp/usrp2/usrp2_iface.hpp
index 938359677..7158c58d0 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.hpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.hpp
@@ -39,7 +39,7 @@
* Provides a set of functions to implementation layer.
* Including spi, peek, poke, control...
*/
-class usrp2_iface : boost::noncopyable{
+class usrp2_iface : public uhd::i2c_iface, boost::noncopyable{
public:
typedef boost::shared_ptr<usrp2_iface> sptr;
@@ -103,52 +103,6 @@ public:
) = 0;
/*!
- * Write bytes over the i2c.
- * \param addr the address
- * \param buf the vector of bytes
- */
- virtual void write_i2c(
- boost::uint8_t addr,
- const uhd::byte_vector_t &buf
- ) = 0;
-
- /*!
- * Read bytes over the i2c.
- * \param addr the address
- * \param num_bytes number of bytes to read
- * \return a vector of bytes
- */
- virtual uhd::byte_vector_t read_i2c(
- boost::uint8_t addr,
- size_t num_bytes
- ) = 0;
-
- /*!
- * Write bytes to an eeprom.
- * \param addr the address
- * \param offset byte offset
- * \param buf the vector of bytes
- */
- virtual void write_eeprom(
- boost::uint8_t addr,
- boost::uint8_t offset,
- const uhd::byte_vector_t &buf
- ) = 0;
-
- /*!
- * Read bytes from an eeprom.
- * \param addr the address
- * \param offset byte offset
- * \param num_bytes number of bytes to read
- * \return a vector of bytes
- */
- virtual uhd::byte_vector_t read_eeprom(
- boost::uint8_t addr,
- boost::uint8_t offset,
- size_t num_bytes
- ) = 0;
-
- /*!
* Get the master clock frequency.
* \return the frequency in Hz
*/