Houston, we have a trunk.
[debian/gnuradio] / gr-radar / src / python / usrp_rx_radar.py
1 #!/usr/bin/env python
2
3 from gnuradio import gr, gru, eng_notation
4 from gnuradio import usrp
5 from gnuradio.eng_option import eng_option
6 from optparse import OptionParser
7 import usrp_dbid
8 import time
9 import os.path
10
11
12 def make_filename(dir, freq, decim, nchan, suffix):
13     t = time.strftime('%Y%m%d-%H%M%S')
14     f = 'R%s-%s-%d-%d.%s' % (
15         t, eng_notation.num_to_str(freq), decim, nchan, suffix)
16     return os.path.join(dir, f)
17
18 class radar_graph(gr.flow_graph):
19
20     def __init__(self):
21         gr.flow_graph.__init__(self)
22
23         parser = OptionParser (option_class=eng_option)
24         #parser.add_option("-S", "--subdev", type="subdev", default=(0, None),
25         #                  help="select USRP Rx side A or B (default=A)")
26         parser.add_option("-d", "--decim", type="int", default=64,
27                           help="set fgpa decimation rate to DECIM (default=64)")
28         parser.add_option("-f", "--freq", type="eng_float", default=104.5e6,
29                           help="set frequency to FREQ (default=104.5M)", metavar="FREQ")
30         parser.add_option("", "--gain0", type="eng_float", default=0,
31                           help="set gain in dB (default 0)")
32         parser.add_option("", "--gain1", type="eng_float", default=11,
33                           help="set gain in dB (default 11)")
34         parser.add_option("-F", "--filename", default=None)
35         parser.add_option("-D", "--dir", default=None)
36         (options, args) = parser.parse_args()
37
38         if len(args) != 0:
39             parser.print_help()
40             sys.exit(1)
41
42         if options.filename is None and options.dir is None:
43             sys.stderr.write('Must specify either -F FILENAME or -D DIR\n')
44             parser.print_help()
45             sys.exit(1)
46
47         nchan = 2
48
49         # if filename was given, use it, otherwise build one.
50         if options.filename is None:
51             options.filename = make_filename(options.dir, options.freq,
52                                              options.decim, nchan, 'srd')
53
54         self.u = usrp.source_s(0, options.decim, nchan, 0, 0)
55         self.subdev = self.u.db[0]
56
57         if self.u.db[0][0].dbid() != usrp_dbid.BASIC_RX:
58             sys.stderr.write('This code requires a Basic Rx board on Side A\n')
59             sys.exit(1)
60
61         # self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.subdev))
62         self.u.set_mux(gru.hexint(0xf0f0f1f0))
63
64         dst = gr.file_sink (gr.sizeof_short, options.filename)
65         self.connect (self.u, dst)
66
67         self.subdev[0].set_gain(options.gain0)
68         self.subdev[1].set_gain(options.gain1)
69         self.set_freq(options.freq)
70
71
72     def set_freq(self, target_freq):
73         ok = True
74         for i in range(len(self.subdev)):
75             r = usrp.tune(self.u, i, self.subdev[i], target_freq)
76             if not r:
77                 ok = False
78                 print "set_freq: failed to set subdev[%d] freq to %f" % (
79                     i, target_freq)
80
81         return ok
82
83
84 if __name__ == '__main__':
85     fg = radar_graph()
86     try:
87         fg.run()
88     except KeyboardInterrupt:
89         pass