aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/usrp_e
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/usrp_e')
-rw-r--r--host/lib/usrp/usrp_e/dboard_iface.cpp42
-rw-r--r--host/lib/usrp/usrp_e/dboard_impl.cpp8
-rw-r--r--host/lib/usrp/usrp_e/dsp_impl.cpp8
-rw-r--r--host/lib/usrp/usrp_e/mboard_impl.cpp15
-rw-r--r--host/lib/usrp/usrp_e/usrp_e_iface.cpp49
-rw-r--r--host/lib/usrp/usrp_e/usrp_e_iface.hpp6
-rw-r--r--host/lib/usrp/usrp_e/usrp_e_impl.cpp5
7 files changed, 73 insertions, 60 deletions
diff --git a/host/lib/usrp/usrp_e/dboard_iface.cpp b/host/lib/usrp/usrp_e/dboard_iface.cpp
index 12e8fe206..f69cdd2b4 100644
--- a/host/lib/usrp/usrp_e/dboard_iface.cpp
+++ b/host/lib/usrp/usrp_e/dboard_iface.cpp
@@ -23,6 +23,7 @@
#include <boost/assign/list_of.hpp>
#include <linux/usrp_e.h> //i2c and spi constants
+using namespace uhd;
using namespace uhd::usrp;
class usrp_e_dboard_iface : public dboard_iface{
@@ -37,8 +38,8 @@ public:
void set_gpio_ddr(unit_t, boost::uint16_t);
boost::uint16_t read_gpio(unit_t);
- void write_i2c(int, const byte_vector_t &);
- byte_vector_t read_i2c(int, size_t);
+ void write_i2c(boost::uint8_t, const byte_vector_t &);
+ byte_vector_t read_i2c(boost::uint8_t, size_t);
void write_spi(
unit_t unit,
@@ -169,41 +170,12 @@ boost::uint32_t usrp_e_dboard_iface::read_write_spi(
/***********************************************************************
* I2C
**********************************************************************/
-static const size_t max_i2c_data_bytes = 10;
-
-void usrp_e_dboard_iface::write_i2c(int i2c_addr, const byte_vector_t &buf){
- //allocate some memory for this transaction
- ASSERT_THROW(buf.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 = i2c_addr;
- data.len = buf.size();
- std::copy(buf.begin(), buf.end(), data.data);
-
- //call the spi ioctl
- _iface->ioctl(USRP_E_I2C_WRITE, &data);
+void usrp_e_dboard_iface::write_i2c(boost::uint8_t addr, const byte_vector_t &bytes){
+ return _iface->write_i2c(addr, bytes);
}
-dboard_iface::byte_vector_t usrp_e_dboard_iface::read_i2c(int i2c_addr, size_t num_bytes){
- //allocate some memory for this transaction
- ASSERT_THROW(num_bytes <= 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 = i2c_addr;
- data.len = num_bytes;
-
- //call the spi ioctl
- _iface->ioctl(USRP_E_I2C_READ, &data);
-
- //unload the data
- byte_vector_t ret(data.len);
- ASSERT_THROW(ret.size() == num_bytes);
- std::copy(data.data, data.data+ret.size(), ret.begin());
- return ret;
+byte_vector_t usrp_e_dboard_iface::read_i2c(boost::uint8_t addr, size_t num_bytes){
+ return _iface->read_i2c(addr, num_bytes);
}
/***********************************************************************
diff --git a/host/lib/usrp/usrp_e/dboard_impl.cpp b/host/lib/usrp/usrp_e/dboard_impl.cpp
index df0f1d9a9..e87a2c0a5 100644
--- a/host/lib/usrp/usrp_e/dboard_impl.cpp
+++ b/host/lib/usrp/usrp_e/dboard_impl.cpp
@@ -50,26 +50,26 @@ void usrp_e_impl::dboard_init(void){
* RX Dboard Get
**********************************************************************/
void usrp_e_impl::rx_dboard_get(const wax::obj &, wax::obj &){
-
+ UHD_THROW_PROP_GET_ERROR();
}
/***********************************************************************
* RX Dboard Set
**********************************************************************/
void usrp_e_impl::rx_dboard_set(const wax::obj &, const wax::obj &){
-
+ UHD_THROW_PROP_SET_ERROR();
}
/***********************************************************************
* TX Dboard Get
**********************************************************************/
void usrp_e_impl::tx_dboard_get(const wax::obj &, wax::obj &){
-
+ UHD_THROW_PROP_GET_ERROR();
}
/***********************************************************************
* TX Dboard Set
**********************************************************************/
void usrp_e_impl::tx_dboard_set(const wax::obj &, const wax::obj &){
-
+ UHD_THROW_PROP_SET_ERROR();
}
diff --git a/host/lib/usrp/usrp_e/dsp_impl.cpp b/host/lib/usrp/usrp_e/dsp_impl.cpp
index e32c76a3d..272ac71b3 100644
--- a/host/lib/usrp/usrp_e/dsp_impl.cpp
+++ b/host/lib/usrp/usrp_e/dsp_impl.cpp
@@ -34,14 +34,14 @@ void usrp_e_impl::rx_ddc_init(void){
* RX DDC Get
**********************************************************************/
void usrp_e_impl::rx_ddc_get(const wax::obj &, wax::obj &){
-
+ UHD_THROW_PROP_GET_ERROR();
}
/***********************************************************************
* RX DDC Set
**********************************************************************/
void usrp_e_impl::rx_ddc_set(const wax::obj &, const wax::obj &){
-
+ UHD_THROW_PROP_SET_ERROR();
}
/***********************************************************************
@@ -58,12 +58,12 @@ void usrp_e_impl::tx_duc_init(void){
* TX DUC Get
**********************************************************************/
void usrp_e_impl::tx_duc_get(const wax::obj &, wax::obj &){
-
+ UHD_THROW_PROP_GET_ERROR();
}
/***********************************************************************
* TX DUC Set
**********************************************************************/
void usrp_e_impl::tx_duc_set(const wax::obj &, const wax::obj &){
-
+ UHD_THROW_PROP_SET_ERROR();
}
diff --git a/host/lib/usrp/usrp_e/mboard_impl.cpp b/host/lib/usrp/usrp_e/mboard_impl.cpp
index 2d225c6ea..00ce4b782 100644
--- a/host/lib/usrp/usrp_e/mboard_impl.cpp
+++ b/host/lib/usrp/usrp_e/mboard_impl.cpp
@@ -58,7 +58,7 @@ void usrp_e_impl::mboard_get(const wax::obj &key_, wax::obj &val){
return;
case MBOARD_PROP_RX_DBOARD:
- ASSERT_THROW(name == "");
+ UHD_ASSERT_THROW(name == "");
val = _rx_dboard_proxy->get_link();
return;
@@ -67,7 +67,7 @@ void usrp_e_impl::mboard_get(const wax::obj &key_, wax::obj &val){
return;
case MBOARD_PROP_TX_DBOARD:
- ASSERT_THROW(name == "");
+ UHD_ASSERT_THROW(name == "");
val = _tx_dboard_proxy->get_link();
return;
@@ -80,7 +80,7 @@ void usrp_e_impl::mboard_get(const wax::obj &key_, wax::obj &val){
return;
case MBOARD_PROP_RX_DSP:
- ASSERT_THROW(name == "ddc0");
+ UHD_ASSERT_THROW(name == "ddc0");
val = _rx_ddc_proxy->get_link();
return;
@@ -89,7 +89,7 @@ void usrp_e_impl::mboard_get(const wax::obj &key_, wax::obj &val){
return;
case MBOARD_PROP_TX_DSP:
- ASSERT_THROW(name == "duc0");
+ UHD_ASSERT_THROW(name == "duc0");
val = _tx_duc_proxy->get_link();
return;
@@ -101,10 +101,7 @@ void usrp_e_impl::mboard_get(const wax::obj &key_, wax::obj &val){
val = _clock_config;
return;
- case MBOARD_PROP_TIME_NOW:
- case MBOARD_PROP_TIME_NEXT_PPS:
- throw std::runtime_error("Error: trying to get write-only property on usrp-e mboard");
-
+ default: UHD_THROW_PROP_GET_ERROR();
}
}
@@ -112,5 +109,5 @@ void usrp_e_impl::mboard_get(const wax::obj &key_, wax::obj &val){
* Mboard Set
**********************************************************************/
void usrp_e_impl::mboard_set(const wax::obj &, const wax::obj &){
-
+ UHD_THROW_PROP_SET_ERROR();
}
diff --git a/host/lib/usrp/usrp_e/usrp_e_iface.cpp b/host/lib/usrp/usrp_e/usrp_e_iface.cpp
index d4c988211..41737a716 100644
--- a/host/lib/usrp/usrp_e/usrp_e_iface.cpp
+++ b/host/lib/usrp/usrp_e/usrp_e_iface.cpp
@@ -16,11 +16,14 @@
//
#include "usrp_e_iface.hpp"
+#include <uhd/utils/assert.hpp>
#include <sys/ioctl.h> //ioctl
#include <linux/usrp_e.h> //ioctl structures and constants
#include <boost/format.hpp>
#include <stdexcept>
+using namespace uhd;
+
class usrp_e_iface_impl : public usrp_e_iface{
public:
@@ -96,11 +99,51 @@ public:
}
/*******************************************************************
+ * I2C
+ ******************************************************************/
+ static const size_t max_i2c_data_bytes = 10;
+
+ 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);
+ }
+
+ byte_vector_t read_i2c(boost::uint8_t addr, size_t num_bytes){
+ //allocate some memory for this transaction
+ UHD_ASSERT_THROW(num_bytes <= 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 = num_bytes;
+
+ //call the spi ioctl
+ this->ioctl(USRP_E_I2C_READ, &data);
+
+ //unload the data
+ byte_vector_t bytes(data.len);
+ UHD_ASSERT_THROW(bytes.size() == num_bytes);
+ std::copy(data.data, data.data+bytes.size(), bytes.begin());
+ return bytes;
+ }
+
+ /*******************************************************************
* SPI
******************************************************************/
boost::uint32_t transact_spi(
int which_slave,
- const uhd::usrp::spi_config_t &config,
+ const spi_config_t &config,
boost::uint32_t bits,
size_t num_bits,
bool readback
@@ -114,8 +157,8 @@ public:
//load the flags
data.flags = 0;
- data.flags |= (config.miso_edge == uhd::usrp::spi_config_t::EDGE_RISE)? UE_SPI_LATCH_RISE : UE_SPI_LATCH_FALL;
- data.flags |= (config.mosi_edge == uhd::usrp::spi_config_t::EDGE_RISE)? UE_SPI_PUSH_FALL : UE_SPI_PUSH_RISE;
+ data.flags |= (config.miso_edge == spi_config_t::EDGE_RISE)? UE_SPI_LATCH_RISE : UE_SPI_LATCH_FALL;
+ data.flags |= (config.mosi_edge == spi_config_t::EDGE_RISE)? UE_SPI_PUSH_FALL : UE_SPI_PUSH_RISE;
//call the spi ioctl
this->ioctl(USRP_E_SPI, &data);
diff --git a/host/lib/usrp/usrp_e/usrp_e_iface.hpp b/host/lib/usrp/usrp_e/usrp_e_iface.hpp
index 4fc3bb33d..763d19581 100644
--- a/host/lib/usrp/usrp_e/usrp_e_iface.hpp
+++ b/host/lib/usrp/usrp_e/usrp_e_iface.hpp
@@ -19,7 +19,7 @@
#define INCLUDED_USRP_E_IFACE_HPP
#include <uhd/transport/udp_simple.hpp>
-#include <uhd/usrp/dboard_iface.hpp> //spi config
+#include <uhd/types/serial.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/utility.hpp>
#include <boost/cstdint.hpp>
@@ -29,7 +29,7 @@
* Provides a set of functions to implementation layer.
* Including spi, peek, poke, control...
*/
-class usrp_e_iface : boost::noncopyable{
+class usrp_e_iface : boost::noncopyable, public uhd::i2c_iface{
public:
typedef boost::shared_ptr<usrp_e_iface> sptr;
@@ -87,7 +87,7 @@ public:
*/
virtual boost::uint32_t transact_spi(
int which_slave,
- const uhd::usrp::spi_config_t &config,
+ const uhd::spi_config_t &config,
boost::uint32_t data,
size_t num_bits,
bool readback
diff --git a/host/lib/usrp/usrp_e/usrp_e_impl.cpp b/host/lib/usrp/usrp_e/usrp_e_impl.cpp
index 4d08210e2..211b939ee 100644
--- a/host/lib/usrp/usrp_e/usrp_e_impl.cpp
+++ b/host/lib/usrp/usrp_e/usrp_e_impl.cpp
@@ -112,7 +112,7 @@ void usrp_e_impl::get(const wax::obj &key_, wax::obj &val){
return;
case DEVICE_PROP_MBOARD:
- ASSERT_THROW(name == "");
+ UHD_ASSERT_THROW(name == "");
val = _mboard_proxy->get_link();
return;
@@ -128,6 +128,7 @@ void usrp_e_impl::get(const wax::obj &key_, wax::obj &val){
val = size_t(_max_num_samples);
return;
+ default: UHD_THROW_PROP_GET_ERROR();
}
}
@@ -135,7 +136,7 @@ void usrp_e_impl::get(const wax::obj &key_, wax::obj &val){
* Device Set
**********************************************************************/
void usrp_e_impl::set(const wax::obj &, const wax::obj &){
- throw std::runtime_error("Cannot set in usrp-e device");
+ UHD_THROW_PROP_SET_ERROR();
}
/***********************************************************************