Merge branch 'dfsg-orig'
[debian/gnuradio] / gr-usrp / src / flexrf_debug_gui.py
diff --git a/gr-usrp/src/flexrf_debug_gui.py b/gr-usrp/src/flexrf_debug_gui.py
new file mode 100755 (executable)
index 0000000..ff32900
--- /dev/null
@@ -0,0 +1,176 @@
+#!/usr/bin/env python
+#
+# Copyright 2005 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
+import wx
+from gnuradio.wxgui import form
+
+class flexrf_debug_gui(wx.Frame):
+    def __init__(self, flexrf, title="Flexrf Debug"):
+        wx.Frame.__init__(self, None, -1, title)
+
+        self.flexrf = flexrf
+        
+        self.CreateStatusBar (1)
+
+        self.panel = wx.Panel(self, -1)
+        self.vbox = wx.BoxSizer(wx.VERTICAL)
+        self.panel.SetSizer(self.vbox)
+        self.panel.SetAutoLayout(True)
+
+        self._create_form()
+
+        self.vbox.Fit(self.panel)
+
+        self.frame_vbox = wx.BoxSizer(wx.VERTICAL)
+        self.frame_vbox.Add(self.panel, 1, wx.EXPAND)
+        self.SetSizer(self.frame_vbox)
+        self.SetAutoLayout(True)
+        self.frame_vbox.Fit(self)
+        
+    def _create_form(self):
+        self._create_set_freq()
+        self._create_write_fpga()
+        self._create_write_all()
+        self._create_write_it()
+        #self._create_set_gain()
+        
+    # ----------------------------------------------------------------
+
+    def _create_set_freq(self):
+
+        def _set_freq(kv):
+            return self.flexrf.set_freq(kv['freq'])[0]
+
+        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        #sbs.Add(wx.StaticText(self.panel, -1, "set_freq "), 0, 0)
+        #sbs.Add((5,0), 0.1)       # stretchy space
+        myform = form.form()
+        myform['freq'] = form.float_field(self.panel, sbs, "Set Frequency")
+        sbs.Add((5,0), 0.1)       # stretchy space
+        sbs.Add(form.button_with_callback(self.panel, "Do It!",
+                                          self._generic_doit(_set_freq, myform)), 1, wx.EXPAND)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        self.vbox.Add(sbs, 0, wx.EXPAND)
+
+
+    def _create_write_fpga(self):
+
+        def _write_fpga(kv):
+            return self.flexrf._u._write_fpga_reg(kv['regno'], kv['value'])
+
+        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        sbs.Add(wx.StaticText(self.panel, -1, "write_fpga_reg "), 0, 0)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        myform = form.form()
+        myform['regno'] = form.int_field(self.panel, sbs, "regno")
+        sbs.Add((5,0), 0.1)       # stretchy space
+        myform['value'] = form.int_field(self.panel, sbs, "value")
+        sbs.Add((5,0), 0.1)       # stretchy space
+        sbs.Add(form.button_with_callback(self.panel, "Do It!",
+                                          self._generic_doit(_write_fpga, myform)), 1, wx.EXPAND)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        self.vbox.Add(sbs, 0, wx.EXPAND)
+
+
+    def _create_write_all(self):
+
+        def _write_all(kv):
+            self.flexrf._write_all(kv['R'], kv['control'], kv['N'])   # void
+            return  True
+
+        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        sbs.Add(wx.StaticText(self.panel, -1, "write_all "), 0, 0)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        myform = form.form()
+        myform['R'] = form.int_field(self.panel, sbs, "R")
+        sbs.Add((5,0), 0.1)       # stretchy space
+        myform['control'] = form.int_field(self.panel, sbs, "control")
+        sbs.Add((5,0), 0.1)       # stretchy space
+        myform['N'] = form.int_field(self.panel, sbs, "N")
+        sbs.Add((5,0), 0.1)       # stretchy space
+        sbs.Add(form.button_with_callback(self.panel, "Do It!",
+                                          self._generic_doit(_write_all, myform)), 1, wx.EXPAND)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        self.vbox.Add(sbs, 0, wx.EXPAND)
+
+
+    def _create_write_it(self):
+
+        def _write_it(kv):
+            self.flexrf._write_it(kv['v'])      # void
+            return True
+
+        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        sbs.Add(wx.StaticText(self.panel, -1, "write_it "), 0, 0)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        myform = form.form()
+        myform['v'] = form.int_field(self.panel, sbs, "24-bit value")
+        sbs.Add((5,0), 0.1)       # stretchy space
+        sbs.Add(form.button_with_callback(self.panel, "Do It!",
+                                          self._generic_doit(_write_it, myform)), 1, wx.EXPAND)
+        sbs.Add((5,0), 0.1)       # stretchy space
+        self.vbox.Add(sbs, 0, wx.EXPAND)
+
+
+    # ----------------------------------------------------------------
+    
+    def _set_status_msg(self, msg):
+        self.GetStatusBar().SetStatusText(msg, 0)
+
+    def _generic_doit(self, callback, form):
+
+        def button_callback():
+            errors = form.check_input_for_errors()
+            if errors:
+                self._set_status_msg(errors[0])
+                print '\n'.join(tuple(errors))
+            else:
+                kv = form.get_key_vals()
+                if callback(kv):
+                    self._set_status_msg("OK")
+                else:
+                    self._set_status_msg("Failed")
+
+        return button_callback
+
+
+        
+if False and __name__ == '__main__':
+
+    class demo_app (wx.App):
+        def __init__ (self):
+            wx.App.__init__(self)
+
+        def OnInit (self):
+            frame = flexrf_debug_gui(None, "Debug FlexRF TX")
+            frame.Show(True)
+            self.SetTopWindow (frame)
+            return True
+
+    app = demo_app()
+    app.MainLoop()
+