aboutsummaryrefslogtreecommitdiffstats
path: root/host/include
diff options
context:
space:
mode:
authorTrung N Tran <trung.tran@ettus.com>2018-02-21 13:28:50 -0800
committerMartin Braun <martin.braun@ettus.com>2018-02-21 16:59:46 -0800
commit21cc92016c4d5c3ae99e8fb49c04793feb51c21e (patch)
tree81126a5bbd40ee9e468361d8341806b9380cc398 /host/include
parentcf7667fe71c961a4656ddb961302cc5a7e5570ed (diff)
downloaduhd-21cc92016c4d5c3ae99e8fb49c04793feb51c21e.tar.gz
uhd-21cc92016c4d5c3ae99e8fb49c04793feb51c21e.tar.bz2
uhd-21cc92016c4d5c3ae99e8fb49c04793feb51c21e.zip
usrp: Add set_gpio_attr overload that use string
1/ multi_usrp.hpp; multi_usrp.cpp: added new functions - set_gpio_attr() that allow user to set certain attribute by string value. - get_gpio_string_attr() return string type value of certain attribute. 2/ gpio_defs.hpp; gpio_atr_3000.cpp : added new definition of SRC attribute. This commit enable user to use multi_usrp api to set_gpio_attr using string value. This is helpful; because the attribute can represent more than two state as of old API. This enable user to set SRC (source) that drive each GPIO bank's pin. Source can be either processing unit(PS) or radio frontend logic from FPGA logic.
Diffstat (limited to 'host/include')
-rw-r--r--host/include/uhd/usrp/gpio_defs.hpp149
-rw-r--r--host/include/uhd/usrp/multi_usrp.hpp54
2 files changed, 164 insertions, 39 deletions
diff --git a/host/include/uhd/usrp/gpio_defs.hpp b/host/include/uhd/usrp/gpio_defs.hpp
index 9fca3f185..18ccc0834 100644
--- a/host/include/uhd/usrp/gpio_defs.hpp
+++ b/host/include/uhd/usrp/gpio_defs.hpp
@@ -14,46 +14,117 @@
#include <map>
namespace uhd { namespace usrp { namespace gpio_atr {
+ static const std::string GPIO_ATTR_SRC = "SRC";
+ //! Attribute name for GPIO control.
+ static const std::string GPIO_ATTR_CTRL = "CTRL";
+ //! Attribute name for GPIO data direction register.
+ static const std::string GPIO_ATTR_DDR = "DDR";
+ //! Attribute name for GPIO ouput value.
+ static const std::string GPIO_ATTR_OUT = "OUT";
+ //! Attribute name for GPIO ATR idle state register.
+ static const std::string GPIO_ATTR_ATR0X = "ATR_0X";
+ //! Attribute name for GPIO ATR receive only register.
+ static const std::string GPIO_ATTR_ATRRX = "ATR_RX";
+ //! Attribute name for GPIO ATR transmit only register.
+ static const std::string GPIO_ATTR_ATRTX = "ATR_TX";
+ //! Attribute name for GPIO ATR full duplex state register.
+ static const std::string GPIO_ATTR_ATRXX = "ATR_XX";
+ //! Attribute name for GPIO READBACK register.
+ static const std::string GPIO_ATTR_READBACK = "READBACK";
-enum gpio_atr_reg_t {
- ATR_REG_IDLE = int('i'),
- ATR_REG_TX_ONLY = int('t'),
- ATR_REG_RX_ONLY = int('r'),
- ATR_REG_FULL_DUPLEX = int('f')
-};
-
-enum gpio_atr_mode_t {
- MODE_ATR = 0, //Output driven by the auto-transmit-receive engine
- MODE_GPIO = 1 //Output value is static
-};
-
-enum gpio_ddr_t {
- DDR_INPUT = 0,
- DDR_OUTPUT = 1
-};
-
-enum gpio_attr_t {
- GPIO_CTRL,
- GPIO_DDR,
- GPIO_OUT,
- GPIO_ATR_0X,
- GPIO_ATR_RX,
- GPIO_ATR_TX,
- GPIO_ATR_XX
-};
-
-typedef std::map<gpio_attr_t, std::string> gpio_attr_map_t;
-
-static const gpio_attr_map_t gpio_attr_map =
- boost::assign::map_list_of
- (GPIO_CTRL, "CTRL")
- (GPIO_DDR, "DDR")
- (GPIO_OUT, "OUT")
- (GPIO_ATR_0X, "ATR_0X")
- (GPIO_ATR_RX, "ATR_RX")
- (GPIO_ATR_TX, "ATR_TX")
- (GPIO_ATR_XX, "ATR_XX")
-;
+ enum gpio_atr_reg_t {
+ ATR_REG_IDLE = int('i'),
+ ATR_REG_TX_ONLY = int('t'),
+ ATR_REG_RX_ONLY = int('r'),
+ ATR_REG_FULL_DUPLEX = int('f')
+ };
+
+ enum gpio_atr_mode_t {
+ MODE_ATR = 0, //Output driven by the auto-transmit-receive engine
+ MODE_GPIO = 1 //Output value is static
+ };
+
+ enum gpio_ddr_t {
+ DDR_INPUT = 0,
+ DDR_OUTPUT = 1
+ };
+
+ enum gpio_attr_t {
+ GPIO_SRC,
+ GPIO_CTRL,
+ GPIO_DDR,
+ GPIO_OUT,
+ GPIO_ATR_0X,
+ GPIO_ATR_RX,
+ GPIO_ATR_TX,
+ GPIO_ATR_XX,
+ GPIO_READBACK
+ };
+
+
+ typedef std::map<gpio_attr_t, std::string> gpio_attr_map_t;
+
+ static const gpio_attr_map_t gpio_attr_map = {
+ {GPIO_SRC, GPIO_ATTR_SRC},
+ {GPIO_CTRL, GPIO_ATTR_CTRL},
+ {GPIO_DDR, GPIO_ATTR_DDR},
+ {GPIO_OUT, GPIO_ATTR_OUT},
+ {GPIO_ATR_0X, GPIO_ATTR_ATR0X},
+ {GPIO_ATR_RX, GPIO_ATTR_ATRRX},
+ {GPIO_ATR_TX, GPIO_ATTR_ATRTX},
+ {GPIO_ATR_XX, GPIO_ATTR_ATRXX},
+ {GPIO_READBACK, GPIO_ATTR_READBACK}
+ };
+
+ static const std::map<gpio_attr_t, std::map<uint32_t, std::string>> attr_value_map = {
+ {GPIO_CTRL, {{0, "ATR"}, {1, "GPIO"}}},
+ {GPIO_DDR, {{0, "INPUT"}, {1, "OUTPUT"}}}
+ };
+ static const std::map<std::string, gpio_attr_t> gpio_attr_rev_map ={
+ {GPIO_ATTR_SRC, GPIO_SRC},
+ {GPIO_ATTR_CTRL, GPIO_CTRL},
+ {GPIO_ATTR_DDR, GPIO_DDR},
+ {GPIO_ATTR_OUT, GPIO_OUT},
+ {GPIO_ATTR_ATR0X, GPIO_ATR_0X},
+ {GPIO_ATTR_ATRRX, GPIO_ATR_RX},
+ {GPIO_ATTR_ATRTX, GPIO_ATR_TX},
+ {GPIO_ATTR_ATRXX, GPIO_ATR_XX},
+ { GPIO_ATTR_READBACK, GPIO_READBACK}
+ };
+
+ static const gpio_attr_map_t default_attr_value_map ={
+ {GPIO_SRC, "RADIO_0/0"},
+ {GPIO_CTRL, "GPIO"},
+ {GPIO_DDR, "INPUT"}
+ };
+ static const std::map<std::string, uint32_t> gpio_level_map = {
+ {"HIGH", 1},
+ {"LOW", 0},
+ {"ON", 1},
+ {"OFF", 0},
+ {"TRUE", 1},
+ {"FALSE", 0}
+ };
+ static const std::map<std::string, uint32_t> gpio_direction = {
+ {"OUT", 1},
+ {"IN", 0},
+ {"OUTPUT", 1},
+ {"INPUT", 0}
+ };
+ static const std::map<std::string, uint32_t> gpio_ctrl_mode = {
+ {"ATR", 0},
+ {"GPIO", 1}
+ };
+ static const std::map<std::string,std::map<std::string, uint32_t>> gpio_attr_value_pair = {
+ {GPIO_ATTR_CTRL, gpio_ctrl_mode},
+ {GPIO_ATTR_DDR, gpio_direction},
+ {GPIO_ATTR_OUT, gpio_level_map},
+ {GPIO_ATTR_ATR0X, gpio_level_map},
+ {GPIO_ATTR_ATRRX, gpio_level_map},
+ {GPIO_ATTR_ATRTX, gpio_level_map},
+ {GPIO_ATTR_ATRXX, gpio_level_map},
+ {GPIO_ATTR_READBACK, gpio_level_map}
+ };
}}} //namespaces
diff --git a/host/include/uhd/usrp/multi_usrp.hpp b/host/include/uhd/usrp/multi_usrp.hpp
index d23d73e2c..2490cc7f8 100644
--- a/host/include/uhd/usrp/multi_usrp.hpp
+++ b/host/include/uhd/usrp/multi_usrp.hpp
@@ -1312,6 +1312,33 @@ public:
virtual void set_gpio_attr(const std::string &bank, const std::string &attr, const uint32_t value, const uint32_t mask = 0xffffffff, const size_t mboard = 0) = 0;
/*!
+ * Set a GPIO attribute on a particular GPIO bank.
+ * Possible attribute names:
+ * - SRC - "PS" for handling by processing system
+ * - "RADIO_N/M" for handling by radio block with N is in [0..Number of Radio]; M is in [0..Number of port per Radio]
+ * - CTRL - "ATR" for ATR mode
+ * - "GPIO" for GPIO mode
+ * - DDR - "OUT" for output
+ * - "IN" for input
+ * - OUT - a string of numbers representing GPIO output level (not ATR mode)
+ * - "HIGH"or "LOW" as GPIO output level that apply for each bit mask that is 1
+ * - ATR_0X - a string of numbers representing a value of the ATR idle state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR idle state register
+ * - ATR_RX - a string of numbers representing a value of a ATR receive only state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR receive only state register
+ * - ATR_TX - a string of numbers representing a value of the ATR transmit only state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR transmit only state register
+ * - ATR_XX - a string of numbers representing a value of the ATR full duplex state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR full duplex state register
+ * \param bank the name of a GPIO bank
+ * \param attr the name of a GPIO attribute
+ * \param value the new value for this GPIO bank
+ * \param mask the bit mask to effect which pins are changed
+ * \param mboard the motherboard index 0 to M-1
+ */
+ virtual void set_gpio_attr(const std::string &bank, const std::string &attr, const std::string &value, const uint32_t mask = 0xffffffff, const size_t mboard = 0) = 0;
+
+ /*!
* Get a GPIO attribute on a particular GPIO bank.
* Possible attribute names:
* - CTRL - 1 for ATR mode 0 for GPIO mode
@@ -1329,6 +1356,33 @@ public:
*/
virtual uint32_t get_gpio_attr(const std::string &bank, const std::string &attr, const size_t mboard = 0) = 0;
+ /*!
+ * Get a GPIO attribute on a particular GPIO bank.
+ * Possible attribute names:
+ * - SRC - "PS" for handling by processing system
+ * - "RADIO_N/M" for handling by radio block with N is in [0..Number of Radio]; M is in [0..Number of port per Radio]
+ * - CTRL - "ATR" for ATR mode
+ * - "GPIO" for GPIO mode
+ * - DDR - "OUT" for output
+ * - "IN" for input
+ * - OUT - a string of numbers representing GPIO output level (not ATR mode)
+ * - "HIGH"or "LOW" as GPIO output level that apply for each bit mask that is 1
+ * - ATR_0X - a string of numbers representing a value of the ATR idle state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR idle state register
+ * - ATR_RX - a string of numbers representing a value of a ATR receive only state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR receive only state register
+ * - ATR_TX - a string of numbers representing a value of the ATR transmit only state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR transmit only state register
+ * - ATR_XX - a string of numbers representing a value of the ATR full duplex state register
+ * - "HIGH" or "LOW" as a value set on each bit on of the ATR full duplex state register
+ * - READBACK - readback input GPIOs
+ * \param bank the name of a GPIO bank
+ * \param attr the name of a GPIO attribute
+ * \param mboard the motherboard index 0 to M-1
+ * \return the value set for this attribute in vector of strings
+ */
+ virtual std::vector<std::string> get_gpio_string_attr(const std::string &bank, const std::string &attr, const size_t mboard = 0) = 0;
+
/*******************************************************************
* Register IO methods
******************************************************************/