Merged r9481:9518 on jblum/grc_reorganize into trunk. Reorganized grc source under...
[debian/gnuradio] / grc / scripts / usrp_diagnostics
1 #!/usr/bin/env python
2 """
3 Copyright 2008 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.platforms.python.Platform import Platform
31 platform = Platform(block_paths_internal_only=['usrp_diagnostics.xml'])
32
33 from gnuradio.grc.platforms.gui.Platform import Platform
34 platform = Platform(platform)
35
36 flow_graph = platform.get_new_flow_graph()
37 block = flow_graph.get_new_block('usrp_diagnostics')
38
39 ##all params
40 usrp_number_param = block.get_param('usrp_number')
41 usrp_type_param = block.get_param('usrp_type')
42 side_subdev_param = block.get_param('side_subdev')
43
44 class USRPDiagnosticsWindow(gtk.Window):
45         """
46         The main window for USRP Dignostics.
47         """
48
49         def delete_event(self, widget, event, data=None): return False
50
51         def destroy(self, widget, data=None): gtk.main_quit()
52
53         def __init__(self):
54                 """
55                 USRPDiagnosticsWindow contructor.
56                 Create a new gtk Dialog with a close button, USRP input paramaters, and output labels.
57                 """
58                 gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
59                 #quit signals
60                 self.connect("delete_event", self.delete_event)
61                 self.connect("destroy", self.destroy)
62                 #set the title
63                 self.set_title('USRP Diagnostics')
64                 #create decorative frame
65                 frame = gtk.Frame()
66                 self.add(frame)
67                 #create vbox for storage
68                 vbox = gtk.VBox()
69                 frame.add(vbox)
70                 vbox.pack_start(usrp_number_param.get_input_object(), False)
71                 vbox.pack_start(usrp_type_param.get_input_object(), False)
72                 vbox.pack_start(side_subdev_param.get_input_object(), False)
73                 self.diagnose_button = gtk.Button('Query')
74                 self.diagnose_button.connect('clicked', self._diagnose_usrp)
75                 vbox.pack_start(self.diagnose_button, False)
76                 #Create a text box for USRP queries
77                 self.query_buffer = TextDisplay()
78                 self.query_buffer.set_text('Press "Query" to retrieve USRP information...')
79                 vbox.pack_start(self.query_buffer)
80                 self.show_all()
81
82         def _diagnose_usrp(self, widget=None):
83                 """Query the USRP device and copy the results into the query text box."""
84                 type = usrp_type_param.evaluate()
85                 if type == 'rx':        #for the rx query, use the source and rx methods
86                         make = usrp.source_c
87                         get_mux = usrp.determine_rx_mux_value
88                 elif type == 'tx':      #for the tx query, use the sink and tx methods
89                         make = usrp.sink_c
90                         get_mux = usrp.determine_tx_mux_value
91                 try:
92                         u = make(usrp_number_param.evaluate())
93                         subdev_spec = eval(side_subdev_param.evaluate())
94                         subdev = usrp.selected_subdev(u, subdev_spec)#get the subdev
95                         msg = ">>> USRP Query\n"
96                         msg = "%s\nName:\n\t%s\n"%(msg, str(subdev.name()))
97                         msg = "%s\nAutomated Mux:\n\t0x%08x\n"%(msg, 0xFFFFFFFFL & long(get_mux(u, subdev_spec))) #ensure that the value is displayed as: 8 nibbles, unsigned, hex
98                         msg = "%s\nConverter Rate:\n\t%s\n"%(msg, u.converter_rate())
99                         msg = "%s\nUses Quadrature:\n\t%s\n"%(msg, str(subdev.is_quadrature()))
100                         gain_min, gain_max, gain_step = subdev.gain_range()
101                         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)
102                         freq_min, freq_max, freq_step = subdev.freq_range()
103                         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)
104                         self.query_buffer.set_text(msg)
105                 except Exception, e:    #display the error message
106                         self.query_buffer.set_text('''\
107 >>> Error\n%s
108
109 If the USRP cannot be found, make sure that the USRP is plugged-in and restart this program. \
110 If the problem persists, there may be a problem with you gnuradio installation or USB 2.0.
111 '''%str(e))
112
113 #enter the mainloop
114 gtk.gdk.threads_init()
115 gtk.gdk.threads_enter()
116 USRPDiagnosticsWindow()
117 gtk.main()
118 gtk.gdk.threads_leave()