985d481cedc2bb29b40cce49b010cc5228fb2993
[debian/gnuradio] / grc / scripts / usrp_probe
1 #!/usr/bin/env python
2 """
3 Copyright 2009 Free Software Foundation, Inc.
4 This file is part of GNU Radio
5
6 GNU Radio Companion is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 GNU Radio Companion is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19 """
20
21 from gnuradio import usrp
22 import os
23
24 import pygtk
25 pygtk.require('2.0')
26 import gtk
27
28 from gnuradio.grc.gui.Dialogs import TextDisplay
29
30 from gnuradio.grc.python.Platform import Platform
31 platform = Platform()
32
33 flow_graph = platform.get_new_flow_graph()
34 block = flow_graph.get_new_block('usrp_probe')
35
36 ##all params
37 usrp_which_param = block.get_param('which')
38 usrp_dboard_param = block.get_param('dboard')
39
40 def get_input(param):
41         param.validate()
42         input = param.get_input()
43         input.update()
44         return input
45
46 class USRPProbeWindow(gtk.Window):
47         """
48         The main window for USRP Dignostics.
49         """
50
51         def delete_event(self, widget, event, data=None): return False
52
53         def destroy(self, widget, data=None): gtk.main_quit()
54
55         def __init__(self):
56                 """
57                 USRPProbeWindow contructor.
58                 Create a new gtk Dialog with a close button, USRP input paramaters, and output labels.
59                 """
60                 gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
61                 #quit signals
62                 self.connect("delete_event", self.delete_event)
63                 self.connect("destroy", self.destroy)
64                 #set the title
65                 self.set_title('USRP Probe')
66                 #create decorative frame
67                 frame = gtk.Frame()
68                 self.add(frame)
69                 #create vbox for storage
70                 vbox = gtk.VBox()
71                 frame.add(vbox)
72                 vbox.pack_start(get_input(usrp_which_param), False)
73                 vbox.pack_start(get_input(usrp_dboard_param), False)
74                 self.probe_button = gtk.Button('Probe')
75                 self.probe_button.connect('clicked', self._probe_usrp)
76                 vbox.pack_start(self.probe_button, False)
77                 #Create a text box for USRP queries
78                 self.query_buffer = TextDisplay()
79                 self.query_buffer.set_text(block.get_doc())
80                 vbox.pack_start(self.query_buffer)
81                 self.show_all()
82
83         def _probe_usrp(self, widget=None):
84                 """Probe the USRP device and copy the results into the query text box."""
85                 dboard = usrp_dboard_param.evaluate()
86                 side = {'a': 0, 'b': 1}[dboard[-1]]
87                 if dboard.startswith('rx'): make = usrp.source_c
88                 elif dboard.startswith('tx'): make = usrp.sink_c
89                 try:
90                         u = make(which=usrp_which_param.evaluate())
91                         subdev_spec = (side, 0)
92                         subdev = usrp.selected_subdev(u, subdev_spec) #get the subdev
93                         msg = ">>> USRP Probe\n"
94                         msg = "%s\nName:\n\t%s\n"%(msg, str(subdev.name()))
95                         msg = "%s\nConverter Rate:\n\t%s\n"%(msg, u.converter_rate())
96                         msg = "%s\nUses Quadrature:\n\t%s\n"%(msg, str(subdev.is_quadrature()))
97                         gain_min, gain_max, gain_step = subdev.gain_range()
98                         msg = "%s\nGain Range (min, max, step size):\n\t%s\n\t%s\n\t%s\n"%(msg, gain_min, gain_max, gain_step)
99                         freq_min, freq_max, freq_step = subdev.freq_range()
100                         msg = "%s\nFreq Range (min, max, step size):\n\t%s\n\t%s\n\t%s\n"%(msg, freq_min, freq_max, freq_step)
101                         self.query_buffer.set_text(msg)
102                 except Exception, e: #display the error message
103                         self.query_buffer.set_text('''\
104 >>> Error\n%s
105
106 If the USRP cannot be found, make sure that the USRP is plugged-in and restart this program. \
107 If the problem persists, there may be a problem with you gnuradio installation or USB 2.0.
108 '''%str(e))
109
110 if __name__ == '__main__':
111         #setup icon using icon theme
112         try: gtk.window_set_default_icon(gtk.IconTheme().load_icon('gnuradio-grc', 256, 0))
113         except: pass
114         #enter the mainloop
115         USRPProbeWindow()
116         gtk.main()