diff options
author | jblum | 2009-02-17 02:33:08 +0000 |
---|---|---|
committer | jblum | 2009-02-17 02:33:08 +0000 |
commit | 19e3114defa259f7fd941d46a6f6002db6b8a0de (patch) | |
tree | 8232ad38954c7ecc331e4a73723f0aba1b5340cc | |
parent | 9106e20f757dd22c00c0cacc242a0388323ab33e (diff) | |
download | gnuradio-19e3114defa259f7fd941d46a6f6002db6b8a0de.tar.gz gnuradio-19e3114defa259f7fd941d46a6f6002db6b8a0de.tar.bz2 gnuradio-19e3114defa259f7fd941d46a6f6002db6b8a0de.zip |
kludge the legacy: usrp subdevice 2, the 3rd subdevice
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10448 221aa14e-8319-0410-a670-987f0aec2ac5
-rw-r--r-- | gnuradio-core/src/python/gnuradio/eng_option.py | 6 | ||||
-rw-r--r-- | grc/data/platforms/python/blocks/usrp_dual_source_x.xml | 76 | ||||
-rw-r--r-- | grc/data/platforms/python/blocks/usrp_simple_source_x.xml | 10 | ||||
-rw-r--r-- | grc/src/grc_gnuradio/usrp/common.py | 13 | ||||
-rw-r--r-- | grc/src/grc_gnuradio/usrp/dual_usrp.py | 12 | ||||
-rw-r--r-- | usrp/host/lib/legacy/db_basic.cc | 2 | ||||
-rw-r--r-- | usrp/host/lib/legacy/db_boards.cc | 2 | ||||
-rw-r--r-- | usrp/host/lib/legacy/usrp_standard.cc | 30 |
8 files changed, 62 insertions, 89 deletions
diff --git a/gnuradio-core/src/python/gnuradio/eng_option.py b/gnuradio-core/src/python/gnuradio/eng_option.py index 40367d0d6..09c3e1d87 100644 --- a/gnuradio-core/src/python/gnuradio/eng_option.py +++ b/gnuradio-core/src/python/gnuradio/eng_option.py @@ -63,13 +63,13 @@ def check_subdev (option, opt, value): @returns a 2-tuple (0|1, 0|1) """ - d = { 'A' : (0, 0), 'A:0' : (0, 0), 'A:1' : (0, 1), - 'B' : (1, 0), 'B:0' : (1, 0), 'B:1' : (1, 1) } + d = { 'A' : (0, 0), 'A:0' : (0, 0), 'A:1' : (0, 1), 'A:2' : (0, 2), + 'B' : (1, 0), 'B:0' : (1, 0), 'B:1' : (1, 1), 'B:2' : (1, 2) } try: return d[value.upper()] except: raise OptionValueError( - "option %s: invalid subdev: '%r', must be one of A, B, A:0, A:1, B:0, B:1" % (opt, value)) + "option %s: invalid subdev: '%r', must be one of %s" % (opt, value, ', '.join(sorted(d.keys())))) class eng_option (Option): TYPES = Option.TYPES + ("eng_float", "intx", "subdev") diff --git a/grc/data/platforms/python/blocks/usrp_dual_source_x.xml b/grc/data/platforms/python/blocks/usrp_dual_source_x.xml index c37ae877c..7d510f7be 100644 --- a/grc/data/platforms/python/blocks/usrp_dual_source_x.xml +++ b/grc/data/platforms/python/blocks/usrp_dual_source_x.xml @@ -8,7 +8,7 @@ <name>USRP Dual Source</name> <key>usrp_dual_source_x</key> <import>from grc_gnuradio import usrp as grc_usrp</import> - <make>grc_usrp.dual_source_$(type.fcn)(which=$which, side_a='$rx_ant_a.side', rx_ant_a='$rx_ant_a.rx_ant', side_b='$rx_ant_b.side', rx_ant_b='$rx_ant_b.rx_ant') + <make>grc_usrp.dual_source_$(type.fcn)(which=$which, rx_ant_a='$rx_ant_a', rx_ant_b='$rx_ant_b') #if $format.eval self.$(id).set_format(width=$format.width, shift=$format.shift) #end if @@ -97,39 +97,29 @@ self.$(id).set_gain_b($gain_b)</make> <key>rx_ant_a</key> <type>enum</type> <option> - <name>Side A, RXA</name> - <key>A_RXA</key> - <opt>side:A</opt> - <opt>rx_ant:RXA</opt> + <name>RXA</name> + <key>RXA</key> <opt>flex:</opt> </option> <option> - <name>Side A, RXB</name> - <key>A_RXB</key> - <opt>side:A</opt> - <opt>rx_ant:RXB</opt> + <name>RXB</name> + <key>RXB</key> <opt>flex:</opt> </option> <option> - <name>Side A, TX/RX</name> - <key>A_TXRX</key> - <opt>side:A</opt> - <opt>rx_ant:TX/RX</opt> - <opt>flex:1</opt> + <name>RXAB</name> + <key>RXAB</key> + <opt>flex:</opt> </option> <option> - <name>Side A, RX2</name> - <key>A_RX2</key> - <opt>side:A</opt> - <opt>rx_ant:RX2</opt> + <name>TX/RX</name> + <key>TX/RX</key> <opt>flex:1</opt> </option> <option> - <name>Side B, RXA</name> - <key>B_RXA</key> - <opt>side:B</opt> - <opt>rx_ant:RXA</opt> - <opt>flex:</opt> + <name>RX2</name> + <key>RX2</key> + <opt>flex:1</opt> </option> </param> <!-- @@ -142,42 +132,31 @@ self.$(id).set_gain_b($gain_b)</make> <key>rx_ant_b</key> <type>enum</type> <option> - <name>Side B, RXA</name> - <key>B_RXA</key> - <opt>side:B</opt> - <opt>rx_ant:RXA</opt> + <name>RXA</name> + <key>RXA</key> <opt>flex:</opt> </option> <option> - <name>Side B, RXB</name> - <key>B_RXB</key> - <opt>side:B</opt> - <opt>rx_ant:RXB</opt> + <name>RXB</name> + <key>RXB</key> <opt>flex:</opt> </option> <option> - <name>Side B, TX/RX</name> - <key>B_TXRX</key> - <opt>side:B</opt> - <opt>rx_ant:TX/RX</opt> - <opt>flex:1</opt> + <name>RXAB</name> + <key>RXAB</key> + <opt>flex:</opt> </option> <option> - <name>Side B, RX2</name> - <key>B_RX2</key> - <opt>side:B</opt> - <opt>rx_ant:RX2</opt> + <name>TX/RX</name> + <key>TX/RX</key> <opt>flex:1</opt> </option> <option> - <name>Side A, RXB</name> - <key>A_RXB</key> - <opt>side:A</opt> - <opt>rx_ant:RXB</opt> - <opt>flex:</opt> + <name>RX2</name> + <key>RX2</key> + <opt>flex:1</opt> </option> </param> - <check>'$rx_ant_a' != '$rx_ant_b'</check> <source> <name>Aout</name> <type>$type</type> @@ -191,10 +170,7 @@ The USRP source outputs 64 Megasamples per second / decimation. The "Receive Antenna Setting" selects one of the SMA connectors as the data source. \ Flex RF boards use the "TX/RX" and "RX2" settings. \ -Basic RX and LFRX use the "RXA" and "RXB" settings. \ +Basic RX and LFRX use the "RXA", "RXB", and "RXAB" settings. \ All other boards use the "RXA" setting. - -Flex RF boards only: If enabled, "Auto Transmit/Receive Switching" handles the preference for transmit packets vs receive packets. \ -By default, "Auto TR" is disabled. </doc> </block> diff --git a/grc/data/platforms/python/blocks/usrp_simple_source_x.xml b/grc/data/platforms/python/blocks/usrp_simple_source_x.xml index 3fe6566d9..6efe330d0 100644 --- a/grc/data/platforms/python/blocks/usrp_simple_source_x.xml +++ b/grc/data/platforms/python/blocks/usrp_simple_source_x.xml @@ -103,6 +103,11 @@ self.$(id).set_gain($gain)</make> <opt>flex:</opt> </option> <option> + <name>RXAB</name> + <key>RXAB</key> + <opt>flex:</opt> + </option> + <option> <name>TX/RX</name> <key>TX/RX</key> <opt>flex:1</opt> @@ -137,12 +142,9 @@ The USRP source outputs 64 Megasamples per second / decimation. The "Receive Antenna Setting" selects one of the SMA connectors as the data source. \ Flex RF boards use the "TX/RX" and "RX2" settings. \ -Basic RX and LFRX use the "RXA" and "RXB" settings. \ +Basic RX and LFRX use the "RXA", "RXB", and "RXAB" settings. \ All other boards use the "RXA" setting. -Flex RF boards only: If enabled, "Auto Transmit/Receive Switching" handles the preference for transmit packets vs receive packets. \ -By default, "Auto TR" is disabled. - With the format set to 8 bits and the halfband filters disabled, the USRP can acheive a decimation rate of 4. \ Disabling the halfband filters requires a special USRP firmware without halfband filters or TX paths. \ For this reason, the USRP cannot transmit with the halfband filters disabled. diff --git a/grc/src/grc_gnuradio/usrp/common.py b/grc/src/grc_gnuradio/usrp/common.py index 33eda351c..65c1e7e29 100644 --- a/grc/src/grc_gnuradio/usrp/common.py +++ b/grc/src/grc_gnuradio/usrp/common.py @@ -63,10 +63,13 @@ def to_spec(side, rx_ant='RXA'): Convert the side to a spec number. @param side A or B @param rx_ant antenna type - @return the spec (0/1, 0/1) + @return the spec (0/1, 0/1/2) """ - try: return ( - {'A': 0, 'B': 1}[side.upper()], #side spec is 0 for A, 1 for B - rx_ant.upper() == 'RXB' and 1 or 0, #subdev spec is 1 for RXB - ) + #determine the side spec + try: side_spec = {'A': 0, 'B': 1}[side.upper()] except: raise ValueError, 'Side A or B expected.' + #determine the subdevice spec + if rx_ant.upper() == 'RXB': subdev_spec = 1 + elif rx_ant.upper() == 'RXAB': subdev_spec = 2 + else: subdev_spec = 0 + return (side_spec, subdev_spec) diff --git a/grc/src/grc_gnuradio/usrp/dual_usrp.py b/grc/src/grc_gnuradio/usrp/dual_usrp.py index dd1e4605e..47449ae78 100644 --- a/grc/src/grc_gnuradio/usrp/dual_usrp.py +++ b/grc/src/grc_gnuradio/usrp/dual_usrp.py @@ -27,13 +27,11 @@ from gnuradio import gr, usrp class _dual_source(gr.hier_block2): """A dual usrp source of IO type short or complex.""" - def __init__(self, which, side_a='A', rx_ant_a='RXA', side_b='B', rx_ant_b='RXA'): + def __init__(self, which, rx_ant_a='RXA', rx_ant_b='RXA'): """ USRP dual source contructor. @param which the unit number - @param side_a A or B @param rx_ant_a the antenna choice - @param side_b A or B @param rx_ant_b the antenna choice """ #initialize hier2 block @@ -44,12 +42,12 @@ class _dual_source(gr.hier_block2): ) #create usrp object self._make_usrp(which=which, nchan=2) - #get the mux for output A - subdev_spec_a = common.to_spec(side_a, rx_ant_a) + #get the mux for side A + subdev_spec_a = common.to_spec('A', rx_ant_a) self._subdev_a = usrp.selected_subdev(self._get_u(), subdev_spec_a) mux_a = usrp.determine_rx_mux_value(self._get_u(), subdev_spec_a) - #get the mux for output B - subdev_spec_b = common.to_spec(side_b, rx_ant_b) + #get the mux for side B + subdev_spec_b = common.to_spec('B', rx_ant_b) self._subdev_b = usrp.selected_subdev(self._get_u(), subdev_spec_b) mux_b = usrp.determine_rx_mux_value(self._get_u(), subdev_spec_b) #move the lower byte of the mux b into the second byte of the mux a diff --git a/usrp/host/lib/legacy/db_basic.cc b/usrp/host/lib/legacy/db_basic.cc index 9c37c438e..4bafc9396 100644 --- a/usrp/host/lib/legacy/db_basic.cc +++ b/usrp/host/lib/legacy/db_basic.cc @@ -197,7 +197,7 @@ db_basic_rx::is_quadrature() // This bit of info is useful when setting up the USRP Rx mux register. - return false; + return (d_subdev == 2); } diff --git a/usrp/host/lib/legacy/db_boards.cc b/usrp/host/lib/legacy/db_boards.cc index 1ba8b0e7f..2498f3c66 100644 --- a/usrp/host/lib/legacy/db_boards.cc +++ b/usrp/host/lib/legacy/db_boards.cc @@ -46,6 +46,7 @@ instantiate_dbs(int dbid, usrp_basic_sptr usrp, int which_side) case(USRP_DBID_BASIC_RX): db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0))); db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1))); + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 2))); break; case(USRP_DBID_LF_TX): @@ -55,6 +56,7 @@ instantiate_dbs(int dbid, usrp_basic_sptr usrp, int which_side) case(USRP_DBID_LF_RX): db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 0))); db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 1))); + db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 2))); break; case(USRP_DBID_DBS_RX): diff --git a/usrp/host/lib/legacy/usrp_standard.cc b/usrp/host/lib/legacy/usrp_standard.cc index 2cc08a8fd..d2360cc6f 100644 --- a/usrp/host/lib/legacy/usrp_standard.cc +++ b/usrp/host/lib/legacy/usrp_standard.cc @@ -585,32 +585,24 @@ usrp_standard_rx::determine_rx_mux_value(const usrp_subdev_spec &ss) // classes for the selected side. std::vector<db_base_sptr> db = this->db(ss.side); - unsigned int subdev0_uses, subdev1_uses, uses; + unsigned int uses; // compute bitmasks of used A/D's - if(db[0]->is_quadrature()) - subdev0_uses = 0x3; // uses A/D 0 and 1 - else - subdev0_uses = 0x1; // uses A/D 0 only - - if(db.size() > 1) // more than 1 subdevice? - subdev1_uses = 0x2; // uses A/D 1 only - else - subdev1_uses = 0x0; // uses no A/D (doesn't exist) - - if(ss.subdev == 0) - uses = subdev0_uses; + if(db[ss.subdev]->is_quadrature()) + uses = 0x3; // uses A/D 0 and 1 + else if (ss.subdev == 0) + uses = 0x1; // uses A/D 0 only else if(ss.subdev == 1) - uses = subdev1_uses; + uses = 0x2; // uses A/D 1 only else - throw std::invalid_argument("subdev_spec"); - + uses = 0x0; // uses no A/D (doesn't exist) + if(uses == 0){ - throw std::runtime_error("Daughterboard doesn't have a subdevice 1"); + throw std::runtime_error("Determine RX Mux Error"); } - bool swap_iq = db[0]->i_and_q_swapped(); + bool swap_iq = db[ss.subdev]->i_and_q_swapped(); truth_table_element truth_table[8] = { // (side, uses, swap_iq) : mux_val @@ -959,7 +951,7 @@ usrp_standard_tx::determine_tx_mux_value(const usrp_subdev_spec &ss) std::vector<db_base_sptr> db = this->db(ss.side); - if(db[0]->i_and_q_swapped()) { + if(db[ss.subdev]->i_and_q_swapped()) { unsigned int mask[2] = {0x0089, 0x8900}; return mask[ss.side]; } |