diff options
-rw-r--r-- | Makefile.common | 2 | ||||
-rw-r--r-- | include/usrp_uhd/usrp/dboard/Makefile.am | 4 | ||||
-rw-r--r-- | include/usrp_uhd/usrp/dboard/interface.hpp | 147 | ||||
-rw-r--r-- | lib/Makefile.am | 7 | ||||
-rw-r--r-- | lib/usrp/Makefile.am | 2 | ||||
-rw-r--r-- | lib/usrp/dboard/Makefile.am | 11 | ||||
-rw-r--r-- | lib/usrp/dboard/interface.cpp | 15 | ||||
-rw-r--r-- | test/Makefile.am | 2 |
8 files changed, 185 insertions, 5 deletions
diff --git a/Makefile.common b/Makefile.common index 3b1464439..91958e393 100644 --- a/Makefile.common +++ b/Makefile.common @@ -4,6 +4,8 @@ USRP_UHD_LA = $(top_srcdir)/lib/libusrp_uhd.la +USRP_UHD_USRP_DBOARD_LA = $(top_srcdir)/lib/usrp/dboard/lib.la + GENERAL_CPPFLAGS = \ -I$(top_srcdir)/include \ $(BOOST_CPPFLAGS) diff --git a/include/usrp_uhd/usrp/dboard/Makefile.am b/include/usrp_uhd/usrp/dboard/Makefile.am index 66fc4dd71..19777b11a 100644 --- a/include/usrp_uhd/usrp/dboard/Makefile.am +++ b/include/usrp_uhd/usrp/dboard/Makefile.am @@ -5,3 +5,7 @@ include $(top_srcdir)/Makefile.common SUBDIRS = + +this_includedir = $(includedir)/usrp_uhd/usrp/dboard +this_include_HEADERS = \ + interface.hpp diff --git a/include/usrp_uhd/usrp/dboard/interface.hpp b/include/usrp_uhd/usrp/dboard/interface.hpp new file mode 100644 index 000000000..f9e4c96b4 --- /dev/null +++ b/include/usrp_uhd/usrp/dboard/interface.hpp @@ -0,0 +1,147 @@ +// +// Copyright 2010 Ettus Research LLC +// + +#ifndef INCLUDED_USRP_UHD_USRP_DBOARD_INTERFACE_H +#define INCLUDED_USRP_UHD_USRP_DBOARD_INTERFACE_H + +#include <boost/shared_ptr.hpp> +#include <stdint.h> + +namespace usrp_uhd{ namespace usrp{ namespace dboard{ + +/*! + * The daughter board interface to be subclassed. + * A dboard instance interfaces with the mboard though this api. + * This interface provides i2c, spi, gpio, atr, aux dac/adc access. + * Each mboard should have a specially tailored dboard interface. + */ +class interface{ +public: + typedef boost::shared_ptr<interface> sptr; + + //tells the host which device to use + enum spi_dev_t{ + SPI_TX_DEV, + SPI_RX_DEV, + }; + + //args for writing spi data + enum spi_push_t{ + SPI_PUSH_RISE, + SPI_PUSH_FALL + }; + + //args for reading spi data + enum spi_latch_t{ + SPI_LATCH_RISE, + SPI_LATCH_FALL + }; + + //tell the host which gpio bank + enum gpio_bank_t{ + GPIO_TX_BANK, + GPIO_RX_BANK + }; + + //structors + interface(void); + virtual ~interface(void); + + /*! + * Write to an aux dac. + * \param which_dac the dac index 0, 1, 2, 3... + * \param value the value to write + */ + virtual void write_aux_dac(int which_dac, int value) = 0; + + /*! + * Read from an aux adc. + * \param which_adc the adc index 0, 1, 2, 3... + * \return the value that was read + */ + virtual int read_aux_adc(int which_adc) = 0; + + /*! + * Set daughterboard ATR register. + * The ATR register for a particular bank has 2 values: + * one value when transmitting, one when receiving. + * The mask controls which pins are controlled by ATR. + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param tx_value 16-bits, 0=FPGA input, 1=FPGA output + * \param rx_value 16-bits, 0=FPGA input, 1=FPGA output + * \param mask 16-bits, 0=ignore, 1=atr + */ + virtual void set_atr_reg(gpio_bank_t bank, uint16_t tx_value, uint16_t rx_value, uint16_t mask) = 0; + + /*! + * Set daughterboard GPIO data direction register. + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param value 16-bits, 0=FPGA input, 1=FPGA output + * \param mask 16-bits, 0=ignore, 1=set + */ + virtual void set_gpio_ddr(gpio_bank_t bank, uint16_t value, uint16_t mask) = 0; + + /*! + * Set daughterboard GPIO pin values. + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param value 16 bits, 0=low, 1=high + * \param mask 16 bits, 0=ignore, 1=set + */ + virtual void write_gpio(gpio_bank_t bank, uint16_t value, uint16_t mask) = 0; + + /*! + * Read daughterboard GPIO pin values + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \return the value of the gpio bank + */ + virtual uint16_t read_gpio(gpio_bank_t bank) = 0; + + /*! + * \brief Write to I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param buf the data to write + * Writes are limited to a maximum of of 64 bytes. + */ + virtual void write_i2c (int i2c_addr, const std::string &buf) = 0; + + /*! + * \brief Read from I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param len number of bytes to read + * \return the data read if successful, else a zero length string. + * Reads are limited to a maximum of 64 bytes. + */ + virtual std::string read_i2c (int i2c_addr, size_t len) = 0; + + /*! + * \brief Write data to SPI bus peripheral. + * + * \param dev which spi device + * \param push args for writing + * \param buf the data to write + * + * Writes are limited to a maximum of 64 bytes. + */ + virtual void write_spi (spi_dev_t dev, spi_push_t push, const std::string &buf) = 0; + + /*! + * \brief Read data from SPI bus peripheral. + * + * \param dev which spi device + * \param push args for reading + * \param len number of bytes to read. Must be in [0,64]. + * \return the data read if sucessful, else a zero length string. + * + * Reads are limited to a maximum of 64 bytes. + */ + virtual std::string read_spi (spi_dev_t dev, spi_latch_t latch, size_t len) = 0; +}; + +}}} //namespace + +#endif /* INCLUDED_USRP_UHD_USRP_DBOARD_INTERFACE_H */ diff --git a/lib/Makefile.am b/lib/Makefile.am index efb655640..6146f4025 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -8,14 +8,15 @@ SUBDIRS = usrp quadradio AM_CPPFLAGS = $(GENERAL_CPPFLAGS) -lib_LTLIBRARIES = \ - libusrp_uhd.la +lib_LTLIBRARIES = libusrp_uhd.la libusrp_uhd_la_SOURCES = \ device_addr.cpp \ usrp_uhd.cpp \ wax.cpp -libusrp_uhd_la_LIBADD = $(GENERAL_LDDFLAGS) +libusrp_uhd_la_LIBADD = \ + $(GENERAL_LDDFLAGS) \ + $(USRP_UHD_USRP_DBOARD_LA) noinst_HEADERS = diff --git a/lib/usrp/Makefile.am b/lib/usrp/Makefile.am index 913f80a6d..ac06d5b5b 100644 --- a/lib/usrp/Makefile.am +++ b/lib/usrp/Makefile.am @@ -4,4 +4,4 @@ include $(top_srcdir)/Makefile.common -SUBDIRS = mboard dboard +SUBDIRS = dboard mboard diff --git a/lib/usrp/dboard/Makefile.am b/lib/usrp/dboard/Makefile.am index 66fc4dd71..8d77dcc42 100644 --- a/lib/usrp/dboard/Makefile.am +++ b/lib/usrp/dboard/Makefile.am @@ -5,3 +5,14 @@ include $(top_srcdir)/Makefile.common SUBDIRS = + +AM_CPPFLAGS = $(GENERAL_CPPFLAGS) + +noinst_LTLIBRARIES = lib.la + +lib_la_SOURCES = \ + interface.cpp + +lib_la_LIBADD = $(GENERAL_LDDFLAGS) + +noinst_HEADERS = diff --git a/lib/usrp/dboard/interface.cpp b/lib/usrp/dboard/interface.cpp new file mode 100644 index 000000000..5575568c6 --- /dev/null +++ b/lib/usrp/dboard/interface.cpp @@ -0,0 +1,15 @@ +// +// Copyright 2010 Ettus Research LLC +// + +#include <usrp_uhd/usrp/dboard/interface.hpp> + +using namespace usrp_uhd::usrp::dboard; + +interface::interface(void){ + /* NOP */ +} + +interface::~interface(void){ + /* NOP */ +} diff --git a/test/Makefile.am b/test/Makefile.am index 3373d838c..e5b1bc1e1 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -9,7 +9,7 @@ SUBDIRS = AM_CPPFLAGS = $(GENERAL_CPPFLAGS) LDADD = \ - $(GENERAL_LDDFLAGS) + $(GENERAL_LDDFLAGS) \ $(USRP_UHD_LA) noinst_PROGRAMS = \ |