commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r10305 - in gnuradio/trunk/grc: . data/platforms/pytho


From: jblum
Subject: [Commit-gnuradio] r10305 - in gnuradio/trunk/grc: . data/platforms/python/blocks src/grc_gnuradio/usrp
Date: Mon, 26 Jan 2009 14:17:42 -0700 (MST)

Author: jblum
Date: 2009-01-26 14:17:41 -0700 (Mon, 26 Jan 2009)
New Revision: 10305

Added:
   gnuradio/trunk/grc/src/grc_gnuradio/usrp/common.py
   gnuradio/trunk/grc/src/grc_gnuradio/usrp/dual_usrp.py
Modified:
   gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_sink_xxxx.xml
   gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_source_xxxx.xml
   gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml
   gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_source_x.xml
   gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml
   gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_source_x.xml
   gnuradio/trunk/grc/src/grc_gnuradio/usrp/Makefile.am
   gnuradio/trunk/grc/src/grc_gnuradio/usrp/__init__.py
   gnuradio/trunk/grc/src/grc_gnuradio/usrp/simple_usrp.py
   gnuradio/trunk/grc/todo.txt
Log:
new and improved simple/dual usrp blocks and wrapper classes

Modified: gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_sink_xxxx.xml
===================================================================
--- gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_sink_xxxx.xml 
2009-01-26 20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_sink_xxxx.xml 
2009-01-26 21:17:41 UTC (rev 10305)
@@ -17,14 +17,7 @@
 #end if
 self.$(id).set_interp($interpolation)
 self.$(id).set_center_freq($frequency)
-self.$(id).set_gain($gain)
-#if $auto_tr.eval
-self.$(id).set_auto_tr($auto_tr)
-#end if
-#if $tx_enb.eval
-self.$(id).set_enable($tx_enb)
-#end if
-</make>
+self.$(id).set_gain($gain)</make>
        <callback>set_interp($interpolation)</callback>
        <callback>set_center_freq($frequency)</callback>
        <callback>set_gain($gain)</callback>
@@ -70,50 +63,6 @@
                <key>gain</key>
                <type>real</type>
        </param>
-       <param>
-               <name>Auto T/R</name>
-               <key>auto_tr</key>
-               <value></value>
-               <type>enum</type>
-               <hide>$auto_tr.hide</hide>
-               <option>
-                       <name>Ignore</name>
-                       <key></key>
-                       <opt>hide:part</opt>
-               </option>
-               <option>
-                       <name>Enable</name>
-                       <key>True</key>
-                       <opt>hide:none</opt>
-               </option>
-               <option>
-                       <name>Disable</name>
-                       <key>False</key>
-                       <opt>hide:none</opt>
-               </option>
-       </param>
-       <param>
-               <name>TX Enable</name>
-               <key>tx_enb</key>
-               <value></value>
-               <type>enum</type>
-               <hide>$tx_enb.hide</hide>
-               <option>
-                       <name>Ignore</name>
-                       <key></key>
-                       <opt>hide:part</opt>
-               </option>
-               <option>
-                       <name>Enable</name>
-                       <key>True</key>
-                       <opt>hide:none</opt>
-               </option>
-               <option>
-                       <name>Disable</name>
-                       <key>False</key>
-                       <opt>hide:none</opt>
-               </option>
-       </param>
        <sink>
                <name>in</name>
                <type>$type</type>
@@ -124,14 +73,5 @@
 To use the default ethernet device, leave interface blank. \
 For systems with only 1 USRP2, you may leave the mac address blank. \
 For multi-USRP2 systems, specify the mac address in the form 00:50:C2:85:3x:xx.
-
---- Flex RF specific ---
-The "Auto TR" and "TX Enable" settings are flex rf specific and should be left 
at "Ignore" unless this is a flex rf board.
-
-If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
-By default, "Auto TR" is disabled.
-
-The "Transmit Enable" configures the transmitter to be on or off. \
-Do not leave this unconfigured.
        </doc>
 </block>

Modified: gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_source_xxxx.xml
===================================================================
--- gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_source_xxxx.xml       
2009-01-26 20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/data/platforms/python/blocks/usrp2_source_xxxx.xml       
2009-01-26 21:17:41 UTC (rev 10305)
@@ -17,14 +17,7 @@
 #end if
 self.$(id).set_decim($decimation)
 self.$(id).set_center_freq($frequency)
-self.$(id).set_gain($gain)
-#if $auto_tr.eval
-self.$(id).set_auto_tr($auto_tr)
-#end if
-#if $rx_ant.eval
-self.$(id).select_rx_antenna($rx_ant)
-#end if
-</make>
+self.$(id).set_gain($gain)</make>
        <callback>set_decim($decimation)</callback>
        <callback>set_center_freq($frequency)</callback>
        <callback>set_gain($gain)</callback>
@@ -70,50 +63,6 @@
                <key>gain</key>
                <type>real</type>
        </param>
-       <param>
-               <name>Auto T/R</name>
-               <key>auto_tr</key>
-               <value></value>
-               <type>enum</type>
-               <hide>$auto_tr.hide</hide>
-               <option>
-                       <name>Ignore</name>
-                       <key></key>
-                       <opt>hide:part</opt>
-               </option>
-               <option>
-                       <name>Enable</name>
-                       <key>True</key>
-                       <opt>hide:none</opt>
-               </option>
-               <option>
-                       <name>Disable</name>
-                       <key>False</key>
-                       <opt>hide:none</opt>
-               </option>
-       </param>
-       <param>
-               <name>RX Antenna</name>
-               <key>rx_ant</key>
-               <value></value>
-               <type>enum</type>
-               <hide>$rx_ant.hide</hide>
-               <option>
-                       <name>Ignore</name>
-                       <key></key>
-                       <opt>hide:part</opt>
-               </option>
-               <option>
-                       <name>TX/RX</name>
-                       <key>'TX/RX'</key>
-                       <opt>hide:none</opt>
-               </option>
-               <option>
-                       <name>RX2</name>
-                       <key>'RX2'</key>
-                       <opt>hide:none</opt>
-               </option>
-       </param>
        <source>
                <name>out</name>
                <type>$type</type>
@@ -124,14 +73,5 @@
 To use the default ethernet device, leave interface blank. \
 For systems with only 1 USRP2, you may leave the mac address blank. \
 For multi-USRP2 systems, specify the mac address in the form 00:50:C2:85:3x:xx.
-
---- Flex RF specific ---
-The "Auto TR" and "RX Antenna" settings are flex rf specific and should be 
left at "Ignore" unless this is a flex rf board.
-
-If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
-By default, "Auto TR" is disabled.
-
-The "Receive Antenna Setting" selects one of the SMA connectors as the data 
source. \
-By default, 'TX/RX' is selected.
        </doc>
 </block>

Modified: gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml
===================================================================
--- gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml        
2009-01-26 20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml        
2009-01-26 21:17:41 UTC (rev 10305)
@@ -8,22 +8,34 @@
        <name>USRP Dual Sink</name>
        <key>usrp_dual_sink_x</key>
        <import>from grc_gnuradio import usrp as grc_usrp</import>
-       <make>grc_usrp.dual_sink_$(type.fcn)(
-       number=$number,
-       frequency_a=$frequency_a,
-       frequency_b=$frequency_b,
-       interpolation=$interpolation,
-       gain_a=$gain_a,
-       gain_b=$gain_b,
-       mux=$mux,
-       auto_tr=$auto_tr,
-       tx_enb_a=$tx_enb_a,
-       tx_enb_b=$tx_enb_b,
-)</make>
+       <make>grc_usrp.dual_sink_$(type.fcn)(number=$number)
+self.$(id).set_interp_rate($interpolation)
+self.$(id).set_frequency_a($frequency_a, verbose=True)
+self.$(id).set_frequency_b($frequency_b, verbose=True)
+self.$(id).set_gain_a($gain_a)
+self.$(id).set_gain_b($gain_b)
+##################################################
+## Flex RF A
+##################################################
+#if $tx_enb_a.eval
+self.$(id).set_enable_a($tx_enb_a)
+#end if
+#if $auto_tr_a.eval and $tx_enb_a.eval
+self.$(id).set_auto_tr_a($auto_tr_a)
+#end if
+##################################################
+## Flex RF B
+##################################################
+#if $tx_enb_b.eval
+self.$(id).set_enable_b($tx_enb_b)
+#end if
+#if $auto_tr_b.eval and $tx_enb_b.eval
+self.$(id).set_auto_tr_b($auto_tr_b)
+#end if</make>
        <callback>set_interp_rate($interpolation)</callback>
        <callback>set_frequency_a($frequency_a)</callback>
+       <callback>set_frequency_b($frequency_b)</callback>
        <callback>set_gain_a($gain_a)</callback>
-       <callback>set_frequency_b($frequency_b)</callback>
        <callback>set_gain_b($gain_b)</callback>
        <param>
                <name>Input Type</name>
@@ -47,6 +59,11 @@
                <type>int</type>
        </param>
        <param>
+               <name>Interpolation</name>
+               <key>interpolation</key>
+               <type>int</type>
+       </param>
+       <param>
                <name>Frequency A</name>
                <key>frequency_a</key>
                <type>real</type>
@@ -57,11 +74,6 @@
                <type>real</type>
        </param>
        <param>
-               <name>Interpolation</name>
-               <key>interpolation</key>
-               <type>int</type>
-       </param>
-       <param>
                <name>Gain A</name>
                <key>gain_a</key>
                <type>real</type>
@@ -71,22 +83,20 @@
                <key>gain_b</key>
                <type>real</type>
        </param>
+<!--
+###################################################
+## Flex RF A
+###################################################
+ -->
        <param>
-               <name>Mux</name>
-               <key>mux</key>
-               <value>0x0</value>
-               <type>hex</type>
-               <hide>part</hide>
-       </param>
-       <param>
-               <name>Auto T/R</name>
-               <key>auto_tr</key>
-               <value>None</value>
+               <name>TX Enable A</name>
+               <key>tx_enb_a</key>
+               <value></value>
                <type>enum</type>
-               <hide>$auto_tr.hide</hide>
+               <hide>$tx_enb_a.hide</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
+                       <name>Unconfigured</name>
+                       <key></key>
                        <opt>hide:part</opt>
                </option>
                <option>
@@ -101,36 +111,38 @@
                </option>
        </param>
        <param>
-               <name>TX Enable A</name>
-               <key>tx_enb_a</key>
-               <value>None</value>
+               <name>Auto T/R A</name>
+               <key>auto_tr_a</key>
+               <value></value>
                <type>enum</type>
-               <hide>$tx_enb_a.hide</hide>
+               <hide>#if $tx_enb_a.eval then 'none' else 'all'#</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
-                       <opt>hide:part</opt>
+                       <name>Auto</name>
+                       <key></key>
                </option>
                <option>
                        <name>Enable</name>
                        <key>True</key>
-                       <opt>hide:none</opt>
                </option>
                <option>
                        <name>Disable</name>
                        <key>False</key>
-                       <opt>hide:none</opt>
                </option>
        </param>
+<!--
+###################################################
+## Flex RF B
+###################################################
+ -->
        <param>
                <name>TX Enable B</name>
                <key>tx_enb_b</key>
-               <value>None</value>
+               <value></value>
                <type>enum</type>
                <hide>$tx_enb_b.hide</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
+                       <name>Unconfigured</name>
+                       <key></key>
                        <opt>hide:part</opt>
                </option>
                <option>
@@ -144,6 +156,25 @@
                        <opt>hide:none</opt>
                </option>
        </param>
+       <param>
+               <name>Auto T/R B</name>
+               <key>auto_tr_b</key>
+               <value></value>
+               <type>enum</type>
+               <hide>#if $tx_enb_b.eval then 'none' else 'all'#</hide>
+               <option>
+                       <name>Auto</name>
+                       <key></key>
+               </option>
+               <option>
+                       <name>Enable</name>
+                       <key>True</key>
+               </option>
+               <option>
+                       <name>Disable</name>
+                       <key>False</key>
+               </option>
+       </param>
        <sink>
                <name>Ain</name>
                <type>$type</type>
@@ -155,13 +186,10 @@
        <doc>
 The USRP sink inputs 128 Megasamples per second / interpolation.
 
---- Flex RF specific ---
-The "Auto TR" and "TX Enable" settings are flex rf specific and should be left 
at "Ignore" unless this is a flex rf board.
+Flex RF boards only: The "Transmit Enable" configures the transmitter to be on 
or off. \
+Do not leave this unconfigured.
 
-If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
+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.
-
-The "Transmit Enable" configures the transmitter to be on or off. \
-Do not leave this unconfigured.
        </doc>
 </block>

Modified: gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_source_x.xml
===================================================================
--- gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_source_x.xml      
2009-01-26 20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/data/platforms/python/blocks/usrp_dual_source_x.xml      
2009-01-26 21:17:41 UTC (rev 10305)
@@ -8,22 +8,28 @@
        <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)(
-       number=$number,
-       frequency_a=$frequency_a,
-       frequency_b=$frequency_b,
-       decimation=$decimation,
-       gain_a=$gain_a,
-       gain_b=$gain_b,
-       mux=$mux,
-       auto_tr=$auto_tr,
-       rx_ant_a=$rx_ant_a,
-       rx_ant_b=$rx_ant_b,
-)</make>
+       <make>grc_usrp.dual_source_$(type.fcn)(number=$number, 
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')
+self.$(id).set_decim_rate($decimation)
+self.$(id).set_frequency_a($frequency_a, verbose=True)
+self.$(id).set_frequency_b($frequency_b, verbose=True)
+self.$(id).set_gain_a($gain_a)
+self.$(id).set_gain_b($gain_b)
+##################################################
+## Flex RF A
+##################################################
+#if $auto_tr_a.eval and $rx_ant_a.flex
+self.$(id).set_auto_tr_a($auto_tr_a)
+#end if
+##################################################
+## Flex RF B
+##################################################
+#if $auto_tr_b.eval and $rx_ant_b.flex
+self.$(id).set_auto_tr_b($auto_tr_b)
+#end if</make>
        <callback>set_decim_rate($decimation)</callback>
        <callback>set_frequency_a($frequency_a)</callback>
+       <callback>set_frequency_b($frequency_b)</callback>
        <callback>set_gain_a($gain_a)</callback>
-       <callback>set_frequency_b($frequency_b)</callback>
        <callback>set_gain_b($gain_b)</callback>
        <param>
                <name>Output Type</name>
@@ -47,6 +53,11 @@
                <type>int</type>
        </param>
        <param>
+               <name>Decimation</name>
+               <key>decimation</key>
+               <type>int</type>
+       </param>
+       <param>
                <name>Frequency A</name>
                <key>frequency_a</key>
                <type>real</type>
@@ -57,11 +68,6 @@
                <type>real</type>
        </param>
        <param>
-               <name>Decimation</name>
-               <key>decimation</key>
-               <type>int</type>
-       </param>
-       <param>
                <name>Gain A</name>
                <key>gain_a</key>
                <type>real</type>
@@ -71,77 +77,132 @@
                <key>gain_b</key>
                <type>real</type>
        </param>
+<!--
+###################################################
+## Flex RF A
+###################################################
+ -->
        <param>
-               <name>Mux</name>
-               <key>mux</key>
-               <value>0x0</value>
-               <type>hex</type>
-               <hide>part</hide>
+               <name>RX Antenna A</name>
+               <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>
+                       <opt>flex:</opt>
+               </option>
+               <option>
+                       <name>Side A, RXB</name>
+                       <key>A_RXB</key>
+                       <opt>side:A</opt>
+                       <opt>rx_ant:RXB</opt>
+                       <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>
+               </option>
+               <option>
+                       <name>Side A, RX2</name>
+                       <key>A_RX2</key>
+                       <opt>side:A</opt>
+                       <opt>rx_ant:RX2</opt>
+                       <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>
+               </option>
        </param>
        <param>
-               <name>Auto T/R</name>
-               <key>auto_tr</key>
-               <value>None</value>
+               <name>Auto T/R A</name>
+               <key>auto_tr_a</key>
+               <value></value>
                <type>enum</type>
-               <hide>$auto_tr.hide</hide>
+               <hide>#if $rx_ant_a.flex then 'none' else 'all'#</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
-                       <opt>hide:part</opt>
+                       <name>Auto</name>
+                       <key></key>
                </option>
                <option>
                        <name>Enable</name>
                        <key>True</key>
-                       <opt>hide:none</opt>
                </option>
                <option>
                        <name>Disable</name>
                        <key>False</key>
-                       <opt>hide:none</opt>
                </option>
        </param>
+<!--
+###################################################
+## Flex RF B
+###################################################
+ -->
        <param>
-               <name>RX Antenna A</name>
-               <key>rx_ant_a</key>
-               <value>None</value>
+               <name>RX Antenna B</name>
+               <key>rx_ant_b</key>
                <type>enum</type>
-               <hide>$rx_ant_a.hide</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
-                       <opt>hide:part</opt>
+                       <name>Side B, RXA</name>
+                       <key>B_RXA</key>
+                       <opt>side:B</opt>
+                       <opt>rx_ant:RXA</opt>
+                       <opt>flex:</opt>
                </option>
                <option>
-                       <name>TX/RX</name>
-                       <key>'TX/RX'</key>
-                       <opt>hide:none</opt>
+                       <name>Side B, RXB</name>
+                       <key>B_RXB</key>
+                       <opt>side:B</opt>
+                       <opt>rx_ant:RXB</opt>
+                       <opt>flex:</opt>
                </option>
                <option>
-                       <name>RX2</name>
-                       <key>'RX2'</key>
-                       <opt>hide:none</opt>
+                       <name>Side B, TX/RX</name>
+                       <key>B_TXRX</key>
+                       <opt>side:B</opt>
+                       <opt>rx_ant:TX/RX</opt>
+                       <opt>flex:1</opt>
                </option>
+               <option>
+                       <name>Side B, RX2</name>
+                       <key>B_RX2</key>
+                       <opt>side:B</opt>
+                       <opt>rx_ant:RX2</opt>
+                       <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>
+               </option>
        </param>
        <param>
-               <name>RX Antenna B</name>
-               <key>rx_ant_b</key>
-               <value>None</value>
+               <name>Auto T/R B</name>
+               <key>auto_tr_b</key>
+               <value></value>
                <type>enum</type>
-               <hide>$rx_ant_b.hide</hide>
+               <hide>#if $rx_ant_b.flex then 'none' else 'all'#</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
-                       <opt>hide:part</opt>
+                       <name>Auto</name>
+                       <key></key>
                </option>
                <option>
-                       <name>TX/RX</name>
-                       <key>'TX/RX'</key>
-                       <opt>hide:none</opt>
+                       <name>Enable</name>
+                       <key>True</key>
                </option>
                <option>
-                       <name>RX2</name>
-                       <key>'RX2'</key>
-                       <opt>hide:none</opt>
+                       <name>Disable</name>
+                       <key>False</key>
                </option>
        </param>
        <source>
@@ -155,13 +216,12 @@
        <doc>
 The USRP source outputs 64 Megasamples per second / decimation.
 
---- Flex RF specific ---
-The "Auto TR" and "RX Antenna" settings are flex rf specific and should be 
left at "Ignore" unless this is a flex rf board.
+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. \
+All other boards use the "RXA" setting.
 
-If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
+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.
-
-The "Receive Antenna Setting" selects one of the SMA connectors as the data 
source. \
-By default, 'TX/RX' is selected.
        </doc>
 </block>

Modified: gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml
===================================================================
--- gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml      
2009-01-26 20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml      
2009-01-26 21:17:41 UTC (rev 10305)
@@ -8,16 +8,16 @@
        <name>USRP Sink</name>
        <key>usrp_simple_sink_x</key>
        <import>from grc_gnuradio import usrp as grc_usrp</import>
-       <make>grc_usrp.simple_sink_$(type.fcn)(
-       number=$number,
-       subdev_spec=$subdev_spec,
-       frequency=$frequency,
-       interpolation=$interpolation,
-       gain=$gain,
-       mux=$mux,
-       auto_tr=$auto_tr,
-       tx_enb=$tx_enb,
-)</make>
+       <make>grc_usrp.simple_sink_$(type.fcn)(number=$number, side='$side')
+self.$(id).set_interp_rate($interpolation)
+self.$(id).set_frequency($frequency, verbose=True)
+self.$(id).set_gain($gain)
+#if $tx_enb.eval
+self.$(id).set_enable($tx_enb)
+#end if
+#if $auto_tr.eval and $tx_enb.eval
+self.$(id).set_auto_tr($auto_tr)
+#end if</make>
        <callback>set_interp_rate($interpolation)</callback>
        <callback>set_frequency($frequency)</callback>
        <callback>set_gain($gain)</callback>
@@ -43,22 +43,9 @@
                <type>int</type>
        </param>
        <param>
-               <name>Subdev Spec</name>
-               <key>subdev_spec</key>
-               <value>auto</value>
-               <type>enum</type>
-               <option>
-                       <name>Auto</name>
-                       <key>None</key>
-               </option>
-               <option>
-                       <name>Side A</name>
-                       <key>(0, 0)</key>
-               </option>
-               <option>
-                       <name>Side B</name>
-                       <key>(1, 0)</key>
-               </option>
+               <name>Interpolation</name>
+               <key>interpolation</key>
+               <type>int</type>
        </param>
        <param>
                <name>Frequency</name>
@@ -66,31 +53,33 @@
                <type>real</type>
        </param>
        <param>
-               <name>Interpolation</name>
-               <key>interpolation</key>
-               <type>int</type>
-       </param>
-       <param>
                <name>Gain</name>
                <key>gain</key>
                <type>real</type>
        </param>
        <param>
-               <name>Mux</name>
-               <key>mux</key>
-               <value>0x0</value>
-               <type>hex</type>
-               <hide>part</hide>
+               <name>Side</name>
+               <key>side</key>
+               <value>A</value>
+               <type>enum</type>
+               <option>
+                       <name>Side A</name>
+                       <key>A</key>
+               </option>
+               <option>
+                       <name>Side B</name>
+                       <key>B</key>
+               </option>
        </param>
        <param>
-               <name>Auto T/R</name>
-               <key>auto_tr</key>
-               <value>None</value>
+               <name>TX Enable</name>
+               <key>tx_enb</key>
+               <value></value>
                <type>enum</type>
-               <hide>$auto_tr.hide</hide>
+               <hide>$tx_enb.hide</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
+                       <name>Unconfigured</name>
+                       <key></key>
                        <opt>hide:part</opt>
                </option>
                <option>
@@ -105,25 +94,22 @@
                </option>
        </param>
        <param>
-               <name>TX Enable</name>
-               <key>tx_enb</key>
-               <value>None</value>
+               <name>Auto T/R</name>
+               <key>auto_tr</key>
+               <value></value>
                <type>enum</type>
-               <hide>$tx_enb.hide</hide>
+               <hide>#if $tx_enb.eval then 'none' else 'all'#</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
-                       <opt>hide:part</opt>
+                       <name>Auto</name>
+                       <key></key>
                </option>
                <option>
                        <name>Enable</name>
                        <key>True</key>
-                       <opt>hide:none</opt>
                </option>
                <option>
                        <name>Disable</name>
                        <key>False</key>
-                       <opt>hide:none</opt>
                </option>
        </param>
        <sink>
@@ -133,13 +119,10 @@
        <doc>
 The USRP sink inputs 128 Megasamples per second / interpolation.
 
---- Flex RF specific ---
-The "Auto TR" and "TX Enable" settings are flex rf specific and should be left 
at "Ignore" unless this is a flex rf board.
+Flex RF boards only: The "Transmit Enable" configures the transmitter to be on 
or off. \
+Do not leave this unconfigured.
 
-If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
+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.
-
-The "Transmit Enable" configures the transmitter to be on or off. \
-Do not leave this unconfigured.
        </doc>
 </block>

Modified: 
gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_source_x.xml
===================================================================
--- gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_source_x.xml    
2009-01-26 20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/data/platforms/python/blocks/usrp_simple_source_x.xml    
2009-01-26 21:17:41 UTC (rev 10305)
@@ -8,16 +8,13 @@
        <name>USRP Source</name>
        <key>usrp_simple_source_x</key>
        <import>from grc_gnuradio import usrp as grc_usrp</import>
-       <make>grc_usrp.simple_source_$(type.fcn)(
-       number=$number,
-       subdev_spec=$subdev_spec,
-       frequency=$frequency,
-       decimation=$decimation,
-       gain=$gain,
-       mux=$mux,
-       auto_tr=$auto_tr,
-       rx_ant=$rx_ant,
-)</make>
+       <make>grc_usrp.simple_source_$(type.fcn)(number=$number, side='$side', 
rx_ant='$rx_ant')
+self.$(id).set_decim_rate($decimation)
+self.$(id).set_frequency($frequency, verbose=True)
+self.$(id).set_gain($gain)
+#if $auto_tr.eval and $rx_ant.flex
+self.$(id).set_auto_tr($auto_tr)
+#end if</make>
        <callback>set_decim_rate($decimation)</callback>
        <callback>set_frequency($frequency)</callback>
        <callback>set_gain($gain)</callback>
@@ -43,30 +40,9 @@
                <type>int</type>
        </param>
        <param>
-               <name>Subdev Spec</name>
-               <key>subdev_spec</key>
-               <value>auto</value>
-               <type>enum</type>
-               <option>
-                       <name>Auto</name>
-                       <key>None</key>
-               </option>
-               <option>
-                       <name>Side A:0</name>
-                       <key>(0, 0)</key>
-               </option>
-               <option>
-                       <name>Side B:0</name>
-                       <key>(1, 0)</key>
-               </option>
-               <option>
-                       <name>Side A:1</name>
-                       <key>(0, 1)</key>
-               </option>
-               <option>
-                       <name>Side B:1</name>
-                       <key>(1, 1)</key>
-               </option>
+               <name>Decimation</name>
+               <key>decimation</key>
+               <type>int</type>
        </param>
        <param>
                <name>Frequency</name>
@@ -74,66 +50,69 @@
                <type>real</type>
        </param>
        <param>
-               <name>Decimation</name>
-               <key>decimation</key>
-               <type>int</type>
-       </param>
-       <param>
                <name>Gain</name>
                <key>gain</key>
                <type>real</type>
        </param>
        <param>
-               <name>Mux</name>
-               <key>mux</key>
-               <value>0x0</value>
-               <type>hex</type>
-               <hide>part</hide>
-       </param>
-       <param>
-               <name>Auto T/R</name>
-               <key>auto_tr</key>
-               <value>None</value>
+               <name>Side</name>
+               <key>side</key>
+               <value>A</value>
                <type>enum</type>
-               <hide>$auto_tr.hide</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
-                       <opt>hide:part</opt>
+                       <name>Side A</name>
+                       <key>A</key>
                </option>
                <option>
-                       <name>Enable</name>
-                       <key>True</key>
-                       <opt>hide:none</opt>
+                       <name>Side B</name>
+                       <key>B</key>
                </option>
-               <option>
-                       <name>Disable</name>
-                       <key>False</key>
-                       <opt>hide:none</opt>
-               </option>
        </param>
        <param>
                <name>RX Antenna</name>
                <key>rx_ant</key>
-               <value>None</value>
+               <value>RXA</value>
                <type>enum</type>
-               <hide>$rx_ant.hide</hide>
                <option>
-                       <name>Ignore</name>
-                       <key>None</key>
-                       <opt>hide:part</opt>
+                       <name>RXA</name>
+                       <key>RXA</key>
+                       <opt>flex:</opt>
                </option>
                <option>
+                       <name>RXB</name>
+                       <key>RXB</key>
+                       <opt>flex:</opt>
+               </option>
+               <option>
                        <name>TX/RX</name>
-                       <key>'TX/RX'</key>
-                       <opt>hide:none</opt>
+                       <key>TX/RX</key>
+                       <opt>flex:1</opt>
                </option>
                <option>
                        <name>RX2</name>
-                       <key>'RX2'</key>
-                       <opt>hide:none</opt>
+                       <key>RX2</key>
+                       <opt>flex:1</opt>
                </option>
        </param>
+       <param>
+               <name>Auto T/R</name>
+               <key>auto_tr</key>
+               <value></value>
+               <type>enum</type>
+               <hide>#if $rx_ant.flex then 'none' else 'all'#</hide>
+               <option>
+                       <name>Auto</name>
+                       <key></key>
+               </option>
+               <option>
+                       <name>Enable</name>
+                       <key>True</key>
+               </option>
+               <option>
+                       <name>Disable</name>
+                       <key>False</key>
+               </option>
+       </param>
        <source>
                <name>out</name>
                <type>$type</type>
@@ -141,13 +120,12 @@
        <doc>
 The USRP source outputs 64 Megasamples per second / decimation.
 
---- Flex RF specific ---
-The "Auto TR" and "RX Antenna" settings are flex rf specific and should be 
left at "Ignore" unless this is a flex rf board.
+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. \
+All other boards use the "RXA" setting.
 
-If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
+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.
-
-The "Receive Antenna Setting" selects one of the SMA connectors as the data 
source. \
-By default, 'TX/RX' is selected.
        </doc>
 </block>

Modified: gnuradio/trunk/grc/src/grc_gnuradio/usrp/Makefile.am
===================================================================
--- gnuradio/trunk/grc/src/grc_gnuradio/usrp/Makefile.am        2009-01-26 
20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/src/grc_gnuradio/usrp/Makefile.am        2009-01-26 
21:17:41 UTC (rev 10305)
@@ -25,4 +25,6 @@
 
 ourpython_PYTHON = \
        __init__.py \
+       common.py \
+       dual_usrp.py \
        simple_usrp.py

Modified: gnuradio/trunk/grc/src/grc_gnuradio/usrp/__init__.py
===================================================================
--- gnuradio/trunk/grc/src/grc_gnuradio/usrp/__init__.py        2009-01-26 
20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/src/grc_gnuradio/usrp/__init__.py        2009-01-26 
21:17:41 UTC (rev 10305)
@@ -18,7 +18,9 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from simple_usrp import simple_source_c, simple_source_s
-from simple_usrp import dual_source_c, dual_source_s
-from simple_usrp import simple_sink_c, simple_sink_s
-from simple_usrp import dual_sink_c, dual_sink_s
+from simple_usrp import \
+       simple_source_c, simple_source_s, \
+       simple_sink_c, simple_sink_s
+from dual_usrp import \
+       dual_source_c, dual_source_s, \
+       dual_sink_c, dual_sink_s

Added: gnuradio/trunk/grc/src/grc_gnuradio/usrp/common.py
===================================================================
--- gnuradio/trunk/grc/src/grc_gnuradio/usrp/common.py                          
(rev 0)
+++ gnuradio/trunk/grc/src/grc_gnuradio/usrp/common.py  2009-01-26 21:17:41 UTC 
(rev 10305)
@@ -0,0 +1,71 @@
+# Copyright 2009 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+import sys
+from gnuradio import usrp, gr
+
+##################################################
+# Set frequency function w/ verbose option
+##################################################
+def set_frequency(u, which, subdev, frequency, verbose=False):
+       """
+       Set the carrier frequency for the given subdevice.
+       @param u the usrp source/sink
+       @param which specifies the DDC/DUC number
+       @param frequency the carrier frequency in Hz
+       @param verbose if true, print usrp tuning information
+       """
+       r = u.tune(which, subdev, frequency)
+       if not verbose: return
+       print subdev.side_and_name()
+       if r:
+               print "\tr.baseband_frequency =", r.baseband_freq
+               print "\tr.dxc_frequency =", r.dxc_freq
+               print "\tr.residual_frequency =", r.residual_freq
+               print "\tr.inverted =", r.inverted, "\n"
+       else: print >> sys.stderr, 'Error calling tune on subdevice.'
+
+##################################################
+# Classes to associate usrp constructor w/ io size
+##################################################
+class usrp_helper(object):
+       def _get_usrp_constructor(self): return self._usrp_args[0]
+       def _get_io_size(self): return self._usrp_args[1]
+class usrp_source_c(usrp_helper): _usrp_args = (usrp.source_c, 
gr.sizeof_gr_complex)
+class usrp_source_s(usrp_helper): _usrp_args = (usrp.source_s, gr.sizeof_short)
+class usrp_sink_c(usrp_helper): _usrp_args = (usrp.sink_c, 
gr.sizeof_gr_complex)
+class usrp_sink_s(usrp_helper): _usrp_args = (usrp.sink_s, gr.sizeof_short)
+
+##################################################
+# RX antenna definitions and helpers
+##################################################
+def is_flex(rx_ant): return rx_ant.upper() in ('TX/RX', 'RX2')
+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)
+       """
+       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
+       )
+       except: raise ValueError, 'Side A or B expected.'

Added: gnuradio/trunk/grc/src/grc_gnuradio/usrp/dual_usrp.py
===================================================================
--- gnuradio/trunk/grc/src/grc_gnuradio/usrp/dual_usrp.py                       
        (rev 0)
+++ gnuradio/trunk/grc/src/grc_gnuradio/usrp/dual_usrp.py       2009-01-26 
21:17:41 UTC (rev 10305)
@@ -0,0 +1,146 @@
+# Copyright 2009 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+import common
+from gnuradio import gr, usrp
+
+####################################################################
+# Dual USRP Source
+####################################################################
+class _dual_source(gr.hier_block2):
+       """A dual usrp source of IO type short or complex."""
+
+       def __init__(self, number, side_a='A', rx_ant_a='RXA', side_b='B', 
rx_ant_b='RXA'):
+               """
+               USRP dual source contructor.
+               @param number 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
+               gr.hier_block2.__init__(
+                       self, 'usrp_dual_source',
+                       gr.io_signature(0, 0, 0),
+                       gr.io_signature(2, 2, self._get_io_size()),
+               )
+               #create usrp object
+               self._u = self._get_usrp_constructor()(number, nchan=2)
+               #get the mux for output A
+               subdev_spec_a = common.to_spec(side_a, rx_ant_a)
+               self._subdev_a = usrp.selected_subdev(self._u, subdev_spec_a)
+               mux_a = usrp.determine_rx_mux_value(self._u, subdev_spec_a)
+               #get the mux for output B
+               subdev_spec_b = common.to_spec(side_b, rx_ant_b)
+               self._subdev_b = usrp.selected_subdev(self._u, subdev_spec_b)
+               mux_b = usrp.determine_rx_mux_value(self._u, subdev_spec_b)
+               #move the lower byte of the mux b into the second byte of the 
mux a
+               self._u.set_mux(((mux_b & 0xff) << 8) | (mux_a - (mux_a & 
0xff00)))
+               #connect
+               deinter = gr.deinterleave(self._get_io_size())
+               self.connect(self._u, deinter)
+               for i in range(2): self.connect((deinter, i), (self, i))
+
+       def set_decim_rate(self, decim): self._u.set_decim_rate(int(decim))
+       def set_frequency_a(self, frequency, verbose=False):
+               common.set_frequency(
+                       u=self._u,
+                       which=0, #ddc0
+                       subdev=self._subdev_a,
+                       frequency=frequency,
+                       verbose=verbose,
+               )
+       def set_frequency_b(self, frequency, verbose=False):
+               common.set_frequency(
+                       u=self._u,
+                       which=1, #ddc1
+                       subdev=self._subdev_b,
+                       frequency=frequency,
+                       verbose=verbose,
+               )
+       def set_gain_a(self, gain): self._subdev_a.set_gain(gain)
+       def set_gain_b(self, gain): self._subdev_b.set_gain(gain)
+       def set_auto_tr_a(self, auto_tr): self._subdev_a.set_auto_tr(auto_tr)
+       def set_auto_tr_b(self, auto_tr): self._subdev_b.set_auto_tr(auto_tr)
+
+class dual_source_c(_dual_source, common.usrp_source_c): pass
+class dual_source_s(_dual_source, common.usrp_source_s): pass
+
+####################################################################
+# Dual USRP Sink
+####################################################################
+class _dual_sink(gr.hier_block2):
+       """A dual usrp sink of IO type short or complex."""
+
+       def __init__(self, number):
+               """
+               USRP simple sink contructor.
+               @param number the unit number
+               """
+               #initialize hier2 block
+               gr.hier_block2.__init__(
+                       self, 'usrp_dual_sink',
+                       gr.io_signature(2, 2, self._get_io_size()),
+                       gr.io_signature(0, 0, 0),
+               )
+               #create usrp object
+               self._u = self._get_usrp_constructor()(number, nchan=2)
+               #get the mux for side A
+               subdev_spec_a = common.to_spec('A')
+               self._subdev_a = usrp.selected_subdev(self._u, subdev_spec_a)
+               mux_a = usrp.determine_tx_mux_value(self._u, subdev_spec_a)
+               #get the mux for side B
+               subdev_spec_b = common.to_spec('B')
+               self._subdev_b = usrp.selected_subdev(self._u, subdev_spec_b)
+               mux_b = usrp.determine_tx_mux_value(self._u, subdev_spec_b)
+               #set the mux
+               self._u.set_mux(mux_a | mux_b)
+               #connect
+               inter = gr.interleave(self._get_io_size())
+               self.connect(inter, self._u)
+               for i in range(2): self.connect((self, i), (inter, i))
+
+       def set_interp_rate(self, interp): self._u.set_interp_rate(int(interp))
+       def set_frequency_a(self, frequency, verbose=False):
+               common.set_frequency(
+                       u=self._u,
+                       which=self._subdev_a.which(),
+                       subdev=self._subdev_a,
+                       frequency=frequency,
+                       verbose=verbose,
+               )
+       def set_frequency_b(self, frequency, verbose=False):
+               common.set_frequency(
+                       u=self._u,
+                       which=self._subdev_b.which(),
+                       subdev=self._subdev_b,
+                       frequency=frequency,
+                       verbose=verbose,
+               )
+       def set_gain_a(self, gain): self._subdev_a.set_gain(gain)
+       def set_gain_b(self, gain): self._subdev_b.set_gain(gain)
+       def set_enable_a(self, enable): self._subdev_a.set_enable(enable)
+       def set_enable_b(self, enable): self._subdev_b.set_enable(enable)
+       def set_auto_tr_a(self, auto_tr): self._subdev_a.set_auto_tr(auto_tr)
+       def set_auto_tr_b(self, auto_tr): self._subdev_b.set_auto_tr(auto_tr)
+
+class dual_sink_c(_dual_sink, common.usrp_sink_c): pass
+class dual_sink_s(_dual_sink, common.usrp_sink_s): pass

Modified: gnuradio/trunk/grc/src/grc_gnuradio/usrp/simple_usrp.py
===================================================================
--- gnuradio/trunk/grc/src/grc_gnuradio/usrp/simple_usrp.py     2009-01-26 
20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/src/grc_gnuradio/usrp/simple_usrp.py     2009-01-26 
21:17:41 UTC (rev 10305)
@@ -1,4 +1,4 @@
-# Copyright 2008 Free Software Foundation, Inc.
+# Copyright 2009 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -18,363 +18,91 @@
 # Boston, MA 02110-1301, USA.
 #
 
-import sys
-from gnuradio import usrp, gr
+import common
+from gnuradio import gr, usrp
 
 ####################################################################
-# Helper Functions
-####################################################################
-
-def _set_frequency(u, which, subdev, frequency, verbose=False):
-       """
-       Set the carrier frequency for the given subdevice.
-       @param u the usrp source/sink
-       @param which specifies the DDC/DUC number
-       @param frequency the carrier frequency in Hz
-       @param verbose if true, print usrp tuning information
-       """
-       r = u.tune(which, subdev, frequency)
-       if not verbose: return
-       print subdev.side_and_name()
-       if r:
-               print "  r.baseband_frequency =", r.baseband_freq
-               print "  r.dxc_frequency      =", r.dxc_freq
-               print "  r.residual_frequency =", r.residual_freq
-               print "  r.inverted      =", r.inverted
-       else: print >> sys.stderr, 'Error calling tune on subdevice.'
-
-def _setup_rx_subdev(u, subdev_spec, ddc, gain, frequency, auto_tr=None, 
rx_ant=None):
-       """
-       Setup a usrp receive subdevice by setting gain and frequency.
-       Add the gain and frequency callbacks to the flow graph.
-       FlexRF: Handle auto transmit/receive and set the receive antenna.
-       @param u the usrp object
-       @param subdev_spec the sub-device specification
-       @param ddc which ddc to use: 0 or 1
-       @param gain the gain to set
-       @param frequency the frequency to tune
-       @param auto_tr auto transmit/receive True, False, or None
-       @param rx_ant the receive antenna: 'TX/RX', 'RX2', or None
-       @return the subdevice
-       """
-       subdev = usrp.selected_subdev(u, subdev_spec)#get the subdev
-       subdev.set_gain(gain)
-       _set_frequency(u, ddc, subdev, frequency, verbose=True)
-       if auto_tr is not None: subdev.set_auto_tr(auto_tr)
-       if rx_ant is not None: subdev.select_rx_antenna(rx_ant)
-       return subdev
-
-def _setup_tx_subdev(u, subdev_spec, gain, frequency, auto_tr=None, 
tx_enb=None):
-       """
-       Setup a usrp receive subdevice by setting gain and frequency.
-       Add the gain and frequency callbacks to the flow graph.
-       FlexRF: Handle auto transmit/receive and enable the transmitter.
-       @param u the usrp object
-       @param subdev_spec the sub-device specification
-       @param gain the gain to set
-       @param frequency the frequency to tune
-       @param auto_tr auto transmit/receive True, False, or None
-       @param tx_enb the transmit enable: True, False, or None
-       @return the subdevice
-       """
-       subdev = usrp.selected_subdev(u, subdev_spec)#get the subdev
-       subdev.set_gain(gain)
-       _set_frequency(u, subdev.which(), subdev, frequency, verbose=True)
-       if auto_tr is not None: subdev.set_auto_tr(auto_tr)
-       if tx_enb is not None: subdev.set_enable(tx_enb)
-       return subdev
-
-##map the usrp contructors to IO sizes
-constructor_to_size = {
-       usrp.source_c: gr.sizeof_gr_complex,
-       usrp.sink_c: gr.sizeof_gr_complex,
-       usrp.source_s: gr.sizeof_short,
-       usrp.sink_s: gr.sizeof_short,
-}
-
-####################################################################
-####################################################################
-# Simple USRP Base Classes
-####################################################################
-####################################################################
-
-class _simple_usrp(object):
-       """A single usrp source/sink base class."""
-
-       def __init__(self, u, subdev, which):
-               """
-               Create a simple usrp base class.
-               @param u the usrp object
-               @param subdev the subdevice object
-               @param which specifies the DDC/DUC number when tuning
-               """
-               self._u = u
-               self._subdev = subdev
-               self._which = which
-
-       def get_u(self):
-               """
-               Get the underlying usrp object.
-               @return the usrp source/sink object.
-               """
-               return self._u
-
-       def get_subdev(self):
-               """
-               Get the underlying subdevice.
-               @return the subdev object.
-               """
-               return self._subdev
-
-       def set_frequency(self, frequency):
-               """
-               Set the frequency of the subdevice.
-               @param frequency the frequency to tune
-               """
-               _set_frequency(self.get_u(), self._which, self.get_subdev(), 
frequency)
-
-       def set_gain(self, gain):
-               """
-               Set the gain of the subdevice.
-               @param gain the gain to set
-               """
-               self.get_subdev().set_gain(gain)
-
-####################################################################
 # Simple USRP Source
 ####################################################################
-class _simple_source(gr.hier_block2, _simple_usrp):
+class _simple_source(gr.hier_block2):
        """A single usrp source of IO type short or complex."""
 
-       def __init__(self, number, subdev_spec, frequency, decimation, gain, 
mux=0x0, auto_tr=None, rx_ant=None):
+       def __init__(self, number, side='A', rx_ant='RXA'):
                """
                USRP simple source contructor.
                @param number the unit number
-               @param subdev_spec the sub-device specification tuple
-               @param frequency the frequency to tune
-               @param decimation the device decimation
-               @param gain the gain to set
-               @param mux the mux in hex or None
-               @param auto_tr auto transmit/receive True, False, or None
-               @param rx_ant the receive antenna: 'TX/RX', 'RX2', or None
+               @param side the usrp side A or B
+               @param rx_ant the antenna choice
                """
                #initialize hier2 block
                gr.hier_block2.__init__(
                        self, 'usrp_simple_source',
                        gr.io_signature(0, 0, 0),
-                       gr.io_signature(1, 1, 
constructor_to_size[self.constructor[0]]),
+                       gr.io_signature(1, 1, self._get_io_size()),
                )
                #create usrp object
-               u = self.constructor[0](number, nchan=1)
-               if subdev_spec is None: subdev_spec = usrp.pick_rx_subdevice(u)
-               u.set_decim_rate(decimation)
-               if not mux: mux = usrp.determine_rx_mux_value(u, subdev_spec)
-               u.set_mux(mux)
-               subdev = _setup_rx_subdev(u, subdev_spec, 0, gain, frequency, 
auto_tr, rx_ant)
-               _simple_usrp.__init__(self, u, subdev, 0)
+               self._u = self._get_usrp_constructor()(number, nchan=1)
+               subdev_spec = common.to_spec(side, rx_ant)
+               self._u.set_mux(usrp.determine_rx_mux_value(self._u, 
subdev_spec))
+               self._subdev = usrp.selected_subdev(self._u, subdev_spec)
+               if common.is_flex(rx_ant): 
self._subdev.select_rx_antenna(rx_ant)
                #connect
-               self.connect(u, self)
+               self.connect(self._u, self)
 
-       def set_decim_rate(self, decim): self.get_u().set_decim_rate(int(decim))
+       def set_decim_rate(self, decim): self._u.set_decim_rate(int(decim))
+       def set_frequency(self, frequency, verbose=False):
+               common.set_frequency(
+                       u=self._u,
+                       which=0, #ddc0
+                       subdev=self._subdev,
+                       frequency=frequency,
+                       verbose=verbose,
+               )
+       def set_gain(self, gain): self._subdev.set_gain(gain)
+       def set_auto_tr(self, auto_tr): self._subdev.set_auto_tr(auto_tr)
 
-class simple_source_c(_simple_source): constructor = (usrp.source_c, )
-class simple_source_s(_simple_source): constructor = (usrp.source_s, )
+class simple_source_c(_simple_source, common.usrp_source_c): pass
+class simple_source_s(_simple_source, common.usrp_source_s): pass
 
 ####################################################################
 # Simple USRP Sink
 ####################################################################
-class _simple_sink(gr.hier_block2, _simple_usrp):
+class _simple_sink(gr.hier_block2):
        """A single usrp sink of IO type short or complex."""
 
-       def __init__(self, number, subdev_spec, frequency, interpolation, gain, 
mux=0x0, auto_tr=None, tx_enb=None):
+       def __init__(self, number, side='A'):
                """
                USRP simple sink contructor.
                @param number the unit number
-               @param subdev_spec the sub-device specification tuple
-               @param frequency the frequency to tune
-               @param interpolation the device interpolation
-               @param gain the gain to set
-               @param mux the mux in hex or None
-               @param auto_tr auto transmit/receive True, False, or None
-               @param tx_enb the transmit enable: True, False, or None
+               @param side the usrp side A or B
                """
                #initialize hier2 block
                gr.hier_block2.__init__(
                        self, 'usrp_simple_sink',
-                       gr.io_signature(1, 1, 
constructor_to_size[self.constructor[0]]),
+                       gr.io_signature(1, 1, self._get_io_size()),
                        gr.io_signature(0, 0, 0),
                )
                #create usrp object
-               u = self.constructor[0](number, nchan=1)
-               if subdev_spec is None: subdev_spec = usrp.pick_tx_subdevice(u)
-               u.set_interp_rate(interpolation)
-               if not mux: mux = usrp.determine_tx_mux_value(u, subdev_spec)
-               u.set_mux(mux)
-               subdev = _setup_tx_subdev(u, subdev_spec, gain, frequency, 
auto_tr, tx_enb)
-               _simple_usrp.__init__(self, u, subdev, subdev.which())
+               self._u = self._get_usrp_constructor()(number, nchan=1)
+               subdev_spec = common.to_spec(side)
+               self._u.set_mux(usrp.determine_tx_mux_value(self._u, 
subdev_spec))
+               self._subdev = usrp.selected_subdev(self._u, subdev_spec)
                #connect
-               self.connect(self, u)
+               self.connect(self, self._u)
 
-       def set_interp_rate(self, interp): 
self.get_u().set_interp_rate(int(interp))
-
-class simple_sink_c(_simple_sink): constructor = (usrp.sink_c, )
-class simple_sink_s(_simple_sink): constructor = (usrp.sink_s, )
-
-####################################################################
-####################################################################
-# Dual USRP Base Classes
-####################################################################
-####################################################################
-
-class _dual_usrp(object):
-       """A dual usrp source/sink base class."""
-
-       def __init__(self, u, subdev_a, subdev_b, which_a, which_b):
-               """
-               Create a dual usrp base class.
-               @param u the usrp object
-               @param subdev_a the subdevice object side a
-               @param subdev_b the subdevice object side b
-               @param which_a specifies the DDC/DUC number when tuning side a
-               @param which_b specifies the DDC/DUC number when tuning side b
-               """
-               self._u = u
-               self._subdev_a = subdev_a
-               self._subdev_b = subdev_b
-               self._which_a = which_a
-               self._which_b = which_b
-
-       def get_u(self):
-               """
-               Get the underlying usrp object.
-               @return the usrp source/sink object.
-               """
-               return self._u
-
-       def get_subdev_a(self):
-               """
-               Get the underlying subdevice.
-               @return the subdev object.
-               """
-               return self._subdev_a
-
-       def get_subdev_b(self):
-               """
-               Get the underlying subdevice.
-               @return the subdev object.
-               """
-               return self._subdev_b
-
-       def set_frequency_a(self, frequency):
-               """
-               Set the frequency of the subdevice.
-               @param frequency the frequency to tune
-               """
-               _set_frequency(self.get_u(), self._which_a, 
self.get_subdev_a(), frequency)
-
-       def set_frequency_b(self, frequency):
-               """
-               Set the frequency of the subdevice.
-               @param frequency the frequency to tune
-               """
-               _set_frequency(self.get_u(), self._which_b, 
self.get_subdev_b(), frequency)
-
-       def set_gain_a(self, gain):
-               """
-               Set the gain of the subdevice.
-               @param gain the gain to set
-               """
-               self.get_subdev_a().set_gain(gain)
-
-       def set_gain_b(self, gain):
-               """
-               Set the gain of the subdevice.
-               @param gain the gain to set
-               """
-               self.get_subdev_b().set_gain(gain)
-
-####################################################################
-# Dual USRP Source
-####################################################################
-class _dual_source(gr.hier_block2, _dual_usrp):
-       """A dual usrp source of IO type short or complex."""
-
-       def __init__(self, number, frequency_a, frequency_b, decimation, 
gain_a, gain_b, mux=0x0, auto_tr=None, rx_ant_a=None, rx_ant_b=None):
-               """
-               USRP dual source contructor.
-               @param number the unit number
-               @param frequency_a the frequency to tune side a
-               @param frequency_b the frequency to tune side b
-               @param decimation the device decimation
-               @param gain_a the gain to set side a
-               @param gain_b the gain to set side b
-               @param mux the mux in hex
-               @param auto_tr auto transmit/receive True, False, or None
-               @param rx_ant_a the receive antenna side a: 'TX/RX', 'RX2', or 
None
-               @param rx_ant_b the receive antenna side b: 'TX/RX', 'RX2', or 
None
-               """
-               #initialize hier2 block
-               gr.hier_block2.__init__(
-                       self, 'usrp_dual_source',
-                       gr.io_signature(0, 0, 0),
-                       gr.io_signature(2, 2, 
constructor_to_size[self.constructor[0]]),
+       def set_interp_rate(self, interp): self._u.set_interp_rate(int(interp))
+       def set_frequency(self, frequency, verbose=False):
+               common.set_frequency(
+                       u=self._u,
+                       which=self._subdev.which(),
+                       subdev=self._subdev,
+                       frequency=frequency,
+                       verbose=verbose,
                )
-               #create usrp object
-               u = self.constructor[0](number, nchan=2)
-               u.set_decim_rate(decimation)
-               if not mux: mux = 0x3210
-               u.set_mux(mux)
-               subdev_a = _setup_rx_subdev(u, (0, 0), 0, gain_a, frequency_a, 
auto_tr, rx_ant_a)
-               subdev_b = _setup_rx_subdev(u, (1, 0), 1, gain_b, frequency_b, 
auto_tr, rx_ant_b)
-               _dual_usrp.__init__(self, u, subdev_a, subdev_b, 0, 1)
-               #connect
-               deinter = 
gr.deinterleave(constructor_to_size[self.constructor[0]])
-               self.connect(u, deinter)
-               for i in range(2): self.connect((deinter, i), (self, i))
+       def set_gain(self, gain): self._subdev.set_gain(gain)
+       def set_enable(self, enable): self._subdev.set_enable(enable)
+       def set_auto_tr(self, auto_tr): self._subdev.set_auto_tr(auto_tr)
 
-       def set_decim_rate(self, decim): self.get_u().set_decim_rate(int(decim))
+class simple_sink_c(_simple_sink, common.usrp_sink_c): pass
+class simple_sink_s(_simple_sink, common.usrp_sink_s): pass
 
-class dual_source_c(_dual_source): constructor = usrp.source_c
-class dual_source_s(_dual_source): constructor = usrp.source_s
-
-####################################################################
-# Dual USRP Sink
-####################################################################
-class _dual_sink(gr.hier_block2, _dual_usrp):
-       """A dual usrp sink of IO type short or complex."""
-
-       def __init__(self, number, frequency_a, frequency_b, interpolation, 
gain_a, gain_b, mux=0x0, auto_tr=None, tx_enb_a=None, tx_enb_b=None):
-               """
-               USRP dual sink contructor.
-               @param number the unit number
-               @param subdev_spec the sub-device specification tuple
-               @param frequency the frequency to tune
-               @param interpolation the device interpolation
-               @param gain the gain to set
-               @param mux the mux in hex or None
-               @param auto_tr auto transmit/receive True, False, or None
-               @param tx_enb the transmit enable: True, False, or None
-               """
-               #initialize hier2 block
-               gr.hier_block2.__init__(
-                       self, 'usrp_dual_sink',
-                       gr.io_signature(2, 2, 
constructor_to_size[self.constructor[0]]),
-                       gr.io_signature(0, 0, 0),
-               )
-               #create usrp object
-               u = self.constructor[0](number, nchan=2)
-               u.set_interp_rate(interpolation)
-               if not mux: mux = 0xba98
-               u.set_mux(mux)
-               subdev_a = _setup_tx_subdev(u, (0, 0), gain_a, frequency_a, 
auto_tr, tx_enb_a)
-               subdev_b = _setup_tx_subdev(u, (1, 0), gain_b, frequency_b, 
auto_tr, tx_enb_b)
-               _dual_usrp.__init__(self, u, subdev_a, subdev_b, 
subdev_a.which(), subdev_b.which())
-               #connect
-               inter = gr.interleave(constructor_to_size[self.constructor[0]])
-               self.connect(inter, u)
-               for i in range(2): self.connect((self, i), (inter, i))
-
-       def set_interp_rate(self, interp): 
self.get_u().set_interp_rate(int(interp))
-
-class dual_sink_c(_dual_sink): constructor = usrp.sink_c
-class dual_sink_s(_dual_sink): constructor = usrp.sink_s

Modified: gnuradio/trunk/grc/todo.txt
===================================================================
--- gnuradio/trunk/grc/todo.txt 2009-01-26 20:45:52 UTC (rev 10304)
+++ gnuradio/trunk/grc/todo.txt 2009-01-26 21:17:41 UTC (rev 10305)
@@ -3,7 +3,6 @@
 ##################################################
 -ofdm wrappers
 -controlled step block
--simplify simple usrp
 -probe: also non-float outputs
 -RFID, ATSC
 
@@ -37,7 +36,6 @@
 # External
 ##################################################
 -simple usrp
--tune_result in usrp.py needs __str__ method
 -global wxgui controls and top block window
 
 ##################################################





reply via email to

[Prev in Thread] Current Thread [Next in Thread]