Imported Upstream version 3.2.2
[debian/gnuradio] / grc / grc_gnuradio / usrp / dual_usrp.py
1 # Copyright 2009 Free Software Foundation, Inc.
2 #
3 # This file is part of GNU Radio
4 #
5 # GNU Radio is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3, or (at your option)
8 # any later version.
9 #
10 # GNU Radio is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with GNU Radio; see the file COPYING.  If not, write to
17 # the Free Software Foundation, Inc., 51 Franklin Street,
18 # Boston, MA 02110-1301, USA.
19 #
20
21 import common
22 from gnuradio import gr, usrp
23
24 ####################################################################
25 # Dual USRP Source
26 ####################################################################
27 class _dual_source(gr.hier_block2):
28         """A dual usrp source of IO type short or complex."""
29
30         def __init__(self, which, rx_ant_a='RXA', rx_ant_b='RXA'):
31                 """
32                 USRP dual source contructor.
33                 @param which the unit number
34                 @param rx_ant_a the antenna choice
35                 @param rx_ant_b the antenna choice
36                 """
37                 #initialize hier2 block
38                 gr.hier_block2.__init__(
39                         self, 'usrp_dual_source',
40                         gr.io_signature(0, 0, 0),
41                         gr.io_signature(2, 2, self._get_io_size()),
42                 )
43                 #create usrp object
44                 self._make_usrp(which=which, nchan=2)
45                 subdev_spec_a = common.to_spec('A', rx_ant_a)
46                 subdev_spec_b = common.to_spec('B', rx_ant_b)
47                 self._get_u().set_mux(self._get_u().determine_rx_mux_value(subdev_spec_a, subdev_spec_b))
48                 self._subdev_a = self._get_u().selected_subdev(subdev_spec_a)
49                 self._subdev_b = self._get_u().selected_subdev(subdev_spec_b)
50                 #connect
51                 deinter = gr.deinterleave(self._get_io_size())
52                 self.connect(self._get_u(), deinter)
53                 for i in range(2): self.connect((deinter, i), (self, i))
54
55         def set_decim_rate(self, decim): self._get_u().set_decim_rate(int(decim))
56         def set_frequency_a(self, frequency, verbose=False):
57                 self._set_frequency(
58                         chan=0, #ddc0
59                         subdev=self._subdev_a,
60                         frequency=frequency,
61                         verbose=verbose,
62                 )
63         def set_frequency_b(self, frequency, verbose=False):
64                 self._set_frequency(
65                         chan=1, #ddc1
66                         subdev=self._subdev_b,
67                         frequency=frequency,
68                         verbose=verbose,
69                 )
70         def set_lo_offset_a(self, lo_offset): self._subdev_a.set_lo_offset(lo_offset)
71         def set_lo_offset_b(self, lo_offset): self._subdev_b.set_lo_offset(lo_offset)
72         def set_gain_a(self, gain): self._subdev_a.set_gain(gain)
73         def set_gain_b(self, gain): self._subdev_b.set_gain(gain)
74
75 class dual_source_c(_dual_source, common.usrp_source_c): pass
76 class dual_source_s(_dual_source, common.usrp_source_s): pass
77
78 ####################################################################
79 # Dual USRP Sink
80 ####################################################################
81 class _dual_sink(gr.hier_block2):
82         """A dual usrp sink of IO type short or complex."""
83
84         def __init__(self, which):
85                 """
86                 USRP simple sink contructor.
87                 @param which the unit number
88                 """
89                 #initialize hier2 block
90                 gr.hier_block2.__init__(
91                         self, 'usrp_dual_sink',
92                         gr.io_signature(2, 2, self._get_io_size()),
93                         gr.io_signature(0, 0, 0),
94                 )
95                 #create usrp object
96                 self._make_usrp(which=which, nchan=2)
97                 subdev_spec_a = common.to_spec('A')
98                 subdev_spec_b = common.to_spec('B')
99                 self._get_u().set_mux(self._get_u().determine_tx_mux_value(subdev_spec_a, subdev_spec_b))
100                 self._subdev_a = self._get_u().selected_subdev(subdev_spec_a)
101                 self._subdev_b = self._get_u().selected_subdev(subdev_spec_b)
102                 #connect
103                 inter = gr.interleave(self._get_io_size())
104                 self.connect(inter, self._get_u())
105                 for i in range(2): self.connect((self, i), (inter, i))
106
107         def set_interp_rate(self, interp): self._get_u().set_interp_rate(int(interp))
108         def set_frequency_a(self, frequency, verbose=False):
109                 self._set_frequency(
110                         chan=self._subdev_a.which(),
111                         subdev=self._subdev_a,
112                         frequency=frequency,
113                         verbose=verbose,
114                 )
115         def set_frequency_b(self, frequency, verbose=False):
116                 self._set_frequency(
117                         chan=self._subdev_b.which(),
118                         subdev=self._subdev_b,
119                         frequency=frequency,
120                         verbose=verbose,
121                 )
122         def set_lo_offset_a(self, lo_offset): self._subdev_a.set_lo_offset(lo_offset)
123         def set_lo_offset_b(self, lo_offset): self._subdev_b.set_lo_offset(lo_offset)
124         def set_gain_a(self, gain): self._subdev_a.set_gain(gain)
125         def set_gain_b(self, gain): self._subdev_b.set_gain(gain)
126         def set_enable_a(self, enable): self._subdev_a.set_enable(enable)
127         def set_enable_b(self, enable): self._subdev_b.set_enable(enable)
128         def set_auto_tr_a(self, auto_tr): self._subdev_a.set_auto_tr(auto_tr)
129         def set_auto_tr_b(self, auto_tr): self._subdev_b.set_auto_tr(auto_tr)
130
131 class dual_sink_c(_dual_sink, common.usrp_sink_c): pass
132 class dual_sink_s(_dual_sink, common.usrp_sink_s): pass