diff options
author | Josh Blum <josh@joshknows.com> | 2010-01-21 19:05:30 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-01-21 19:05:30 -0800 |
commit | 069a7ce0570001ea3d9512a11d238ea4d6773f1d (patch) | |
tree | cf38f9c1745d0054d8775551b1caedf5522f55b2 /lib/usrp/mboard | |
parent | e3483c7451d20b7ed1d8d4865e15751f18cdef78 (diff) | |
download | uhd-069a7ce0570001ea3d9512a11d238ea4d6773f1d.tar.gz uhd-069a7ce0570001ea3d9512a11d238ea4d6773f1d.tar.bz2 uhd-069a7ce0570001ea3d9512a11d238ea4d6773f1d.zip |
Added more to the mboard test and the usrp device.
Diffstat (limited to 'lib/usrp/mboard')
-rw-r--r-- | lib/usrp/mboard/test.cpp | 148 |
1 files changed, 142 insertions, 6 deletions
diff --git a/lib/usrp/mboard/test.cpp b/lib/usrp/mboard/test.cpp index 564f19efc..6bcbea94f 100644 --- a/lib/usrp/mboard/test.cpp +++ b/lib/usrp/mboard/test.cpp @@ -3,22 +3,158 @@ // #include <usrp_uhd/usrp/mboard/test.hpp> +#include <usrp_uhd/props.hpp> #include <stdexcept> +using namespace usrp_uhd; +using namespace usrp_uhd::usrp; using namespace usrp_uhd::usrp::mboard; -test::test(const device_addr_t &){ - // +/*********************************************************************** + * dummy interface for dboards + **********************************************************************/ +class dummy_interface : public usrp_uhd::usrp::dboard::interface{ +public: + dummy_interface(void){} + ~dummy_interface(void){} + void write_aux_dac(int, int){} + int read_aux_adc(int){return 0;} + void set_atr_reg(gpio_bank_t, uint16_t, uint16_t, uint16_t){} + void set_gpio_ddr(gpio_bank_t, uint16_t, uint16_t){} + void write_gpio(gpio_bank_t, uint16_t, uint16_t){} + uint16_t read_gpio(gpio_bank_t){return 0;} + void write_i2c (int, const std::string &){} + std::string read_i2c (int, size_t){return "";} + void write_spi (spi_dev_t, spi_push_t, const std::string &){} + std::string read_spi (spi_dev_t, spi_latch_t, size_t){return "";} +}; + +/*********************************************************************** + * shell class to act as a dboard + **********************************************************************/ +class shell_dboard : public wax::obj{ +public: + enum type_t {TYPE_RX, TYPE_TX}; + shell_dboard(dboard::manager::sptr mgr, type_t type){ + _mgr = mgr; + _type = type; + } + ~shell_dboard(void){} +private: + void get(const wax::type &key_, wax::type &val){ + //extract the index if key is an indexed prop + wax::type key = key_; size_t index = 0; + if (key.type() == typeid(indexed_prop_t)){ + boost::tie(key, index) = wax::cast<indexed_prop_t>(key); + } + + //handle the get request conditioned on the key + switch(wax::cast<dboard_prop_t>(key)){ + case DBOARD_PROP_NAME: + val = std::string("dboard test mboard"); + return; + + case DBOARD_PROP_SUBDEV: + switch(_type){ + case TYPE_RX: + val = _mgr->get_rx_subdev(index); + return; + + case TYPE_TX: + val = _mgr->get_tx_subdev(index); + return; + } + + case DBOARD_PROP_NUM_SUBDEVS: + switch(_type){ + case TYPE_RX: + val = _mgr->get_num_rx_subdevs(); + return; + + case TYPE_TX: + val = _mgr->get_num_tx_subdevs(); + return; + } + + case DBOARD_PROP_CODEC: + val = NULL; //TODO + return; + } + } + + void set(const wax::type &, const wax::type &){ + throw std::runtime_error("Cannot set on usrp test dboard"); + } + + type_t _type; + dboard::manager::sptr _mgr; +}; + +/*********************************************************************** + * test usrp mboard class + **********************************************************************/ +test::test(const device_addr_t &device_addr){ + //create a manager for each dboard + for (size_t i = 0; i < device_addr.virtual_args.num_dboards; i++){ + dboard::interface::sptr ifc(new dummy_interface()); + _dboard_managers.push_back(dboard::manager::sptr( + new dboard::manager(0x0001, 0x0000, ifc) + )); + } } test::~test(void){ - // + /* NOP */ } -void test::get(const wax::type &, wax::type &){ - // +void test::get(const wax::type &key_, wax::type &val){ + //extract the index if key is an indexed prop + wax::type key = key_; size_t index = 0; + if (key.type() == typeid(indexed_prop_t)){ + boost::tie(key, index) = wax::cast<indexed_prop_t>(key); + } + + //handle the get request conditioned on the key + switch(wax::cast<mboard_prop_t>(key)){ + case MBOARD_PROP_NAME: + val = std::string("usrp test mboard"); + return; + + case MBOARD_PROP_RX_DBOARD: + val = wax::obj::sptr( + new shell_dboard(_dboard_managers.at(index), shell_dboard::TYPE_RX) + ); + return; + + case MBOARD_PROP_NUM_RX_DBOARDS: + val = size_t(_dboard_managers.size()); + return; + + case MBOARD_PROP_TX_DBOARD: + val = wax::obj::sptr( + new shell_dboard(_dboard_managers.at(index), shell_dboard::TYPE_TX) + ); + return; + + case MBOARD_PROP_NUM_TX_DBOARDS: + val = size_t(_dboard_managers.size()); + return; + + case MBOARD_PROP_MTU: + case MBOARD_PROP_CLOCK_RATE: + case MBOARD_PROP_RX_DSP: + case MBOARD_PROP_NUM_RX_DSPS: + case MBOARD_PROP_TX_DSP: + case MBOARD_PROP_NUM_TX_DSPS: + case MBOARD_PROP_PPS_SOURCE: + case MBOARD_PROP_PPS_POLARITY: + case MBOARD_PROP_REF_SOURCE: + case MBOARD_PROP_TIME_NOW: + case MBOARD_PROP_TIME_NEXT_PPS: + throw std::runtime_error("unhandled prop is usrp test mboard"); + } } void test::set(const wax::type &, const wax::type &){ - // + throw std::runtime_error("Cannot set on usrp test mboard"); } |