diff options
author | Josh Blum <josh@joshknows.com> | 2010-01-12 16:23:54 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-01-12 16:23:54 -0800 |
commit | 087b97e0fc28793ea39d81e60b3fddae51c5929e (patch) | |
tree | 7098f93d0a39ab50a0eea43356ac0857c584ee25 /include/usrp_uhd/usrp | |
parent | cbb8e474bb5592753a340ba31d3afbab7226f7c6 (diff) | |
download | uhd-087b97e0fc28793ea39d81e60b3fddae51c5929e.tar.gz uhd-087b97e0fc28793ea39d81e60b3fddae51c5929e.tar.bz2 uhd-087b97e0fc28793ea39d81e60b3fddae51c5929e.zip |
added interface for usrp dboards to communicate to mboards
Diffstat (limited to 'include/usrp_uhd/usrp')
-rw-r--r-- | include/usrp_uhd/usrp/dboard/Makefile.am | 4 | ||||
-rw-r--r-- | include/usrp_uhd/usrp/dboard/interface.hpp | 147 |
2 files changed, 151 insertions, 0 deletions
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 */ |