summaryrefslogtreecommitdiff
path: root/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor')
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor121
1 files changed, 68 insertions, 53 deletions
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
index dfaba52c0c..b1f4f321ec 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
@@ -21,27 +21,30 @@
#
from PyQt5 import QtCore, Qt
+from argparse import ArgumentParser
+
import os, sys, time, struct
from gnuradio import gr, ctrlport
from gnuradio.ctrlport.GrDataPlotter import *
+from gnuradio.ctrlport.GNURadioControlPortClient import GNURadioControlPortClient
class RateDialog(Qt.QDialog):
def __init__(self, delay, parent=None):
super(RateDialog, self).__init__(parent)
self.gridLayout = Qt.QGridLayout(self)
- self.setWindowTitle("Update Delay (ms)");
- self.delay = Qt.QLineEdit(self);
- self.delay.setText(str(delay));
+ self.setWindowTitle("Update Delay (ms)")
+ self.delay = Qt.QLineEdit(self)
+ self.delay.setText(str(delay))
self.buttonBox = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel)
- self.gridLayout.addWidget(self.delay);
- self.gridLayout.addWidget(self.buttonBox);
+ self.gridLayout.addWidget(self.delay)
+ self.gridLayout.addWidget(self.buttonBox)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
def accept(self):
- self.done(1);
+ self.done(1)
def reject(self):
- self.done(0);
+ self.done(0)
class MAINWindow(Qt.QMainWindow):
def minimumSizeHint(self):
@@ -50,8 +53,7 @@ class MAINWindow(Qt.QMainWindow):
def __init__(self, radioclient):
super(MAINWindow, self).__init__()
- self.radioclient = radioclient
- self.updateRate = 1000;
+ self.updateRate = 1000
self.conns = []
self.plots = []
self.knobprops = []
@@ -85,16 +87,17 @@ class MAINWindow(Qt.QMainWindow):
os.environ['GR_CONF_CONTROLPORT_ON'] = 'False'
def setUpdateRate(self,nur):
- self.updateRate = int(nur);
+ self.updateRate = int(nur)
for c in self.conns:
- c.updateRate = self.updateRate;
- c.timer.setInterval(self.updateRate);
+ c.updateRate = self.updateRate
+ c.timer.setInterval(self.updateRate)
- def newCon(self, csomeBool):
- child = MForm(self.radioclient, len(self.conns), parent = self, dialogprompt = not csomeBool)
+ def newCon(self, radioclient=None):
+ child = MForm(radioclient, len(self.conns), parent = self)
if(child.radioclient is not None):
child.setWindowTitle(str(child.radioclient))
self.mdiArea.addSubWindow(child)
+ child.show()
self.mdiArea.currentSubWindow().showMaximized()
self.conns.append(child)
self.plots.append([])
@@ -316,7 +319,7 @@ class MAINWindow(Qt.QMainWindow):
def createActions(self):
self.newConAct = Qt.QAction("&New Connection",
self, shortcut=Qt.QKeySequence.New,
- statusTip="Create a new file", triggered=self.newCon)
+ statusTip="Create a new file", triggered=lambda x: self.newCon(None))
self.exitAct = Qt.QAction("E&xit", self, shortcut="Ctrl+Q",
statusTip="Exit the application",
@@ -334,13 +337,13 @@ class MAINWindow(Qt.QMainWindow):
statusTip="Change Update Rate",
triggered=self.updateRateShow)
- qks = Qt.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_T);
+ qks = Qt.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_T)
self.tileAct = Qt.QAction("&Tile", self,
statusTip="Tile the windows",
triggered=self.mdiArea.tileSubWindows,
shortcut=qks)
- qks = Qt.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_C);
+ qks = Qt.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_C)
self.cascadeAct = Qt.QAction("&Cascade", self,
statusTip="Cascade the windows", shortcut=qks,
triggered=self.mdiArea.cascadeSubWindows)
@@ -384,13 +387,13 @@ class MAINWindow(Qt.QMainWindow):
self.helpMenu.addAction(self.aboutQtAct)
def updateRateShow(self):
- askrate = RateDialog(self.updateRate, self);
+ askrate = RateDialog(self.updateRate, self)
if askrate.exec_():
- ur = float(str(askrate.delay.text()));
- self.setUpdateRate(ur);
- return;
+ ur = float(str(askrate.delay.text()))
+ self.setUpdateRate(ur)
+ return
else:
- return;
+ return
def createToolBars(self):
self.fileToolBar = self.addToolBar("File")
@@ -451,33 +454,33 @@ class ConInfoDialog(Qt.QDialog):
self.gridLayout = Qt.QGridLayout(self)
- self.host = Qt.QLineEdit(self);
- self.port = Qt.QLineEdit(self);
- self.host.setText("localhost");
- self.port.setText("43243");
+ self.host = Qt.QLineEdit(self)
+ self.port = Qt.QLineEdit(self)
+ self.host.setText("localhost")
+ self.port.setText("43243")
self.buttonBox = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel)
- self.gridLayout.addWidget(self.host);
- self.gridLayout.addWidget(self.port);
- self.gridLayout.addWidget(self.buttonBox);
+ self.gridLayout.addWidget(self.host)
+ self.gridLayout.addWidget(self.port)
+ self.gridLayout.addWidget(self.buttonBox)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
def accept(self):
- self.done(1);
+ self.done(1)
def reject(self):
- self.done(0);
+ self.done(0)
class UpdaterWindow(Qt.QDialog):
def __init__(self, key, radio, parent):
Qt.QDialog.__init__(self, parent)
- self.key = key;
+ self.key = key
self.radio = radio
self.resize(300,200)
@@ -594,16 +597,15 @@ class UpdaterWindow(Qt.QDialog):
class MForm(Qt.QWidget):
def update(self):
- # TODO: revisit this try-except block, figure out what it's doing, and if we need to keep it. at very lease makes debugging dificult
try:
- st = time.time();
+ st = time.time()
knobs = self.radioclient.getKnobs([])
- ft = time.time();
- latency = ft-st;
+ ft = time.time()
+ latency = ft-st
self.parent.statusBar().showMessage("Current GNU Radio Control Port Query Latency: %f ms"%(latency*1000))
except Exception as e:
- sys.stderr.write("ctrlport-monitor: radio.get threw exception ({0}).\n".format(e))
+ sys.stderr.write("ctrlport-monitor: lost connection ({0}).\n".format(e))
if(type(self.parent) is MAINWindow):
# Find window of connection
remove = []
@@ -614,12 +616,12 @@ class MForm(Qt.QWidget):
# Find any subplot windows of connection
for p in self.parent.mdiArea.subWindowList():
for plot in self.parent.plots[self.uid]:
- if plot.qwidget() == p.widget():
+ if plot == p.widget():
remove.append(p)
# Clean up local references to these
- self.parent.conns.remove(self.parent.conns[self.uid])
- self.parent.plots.remove(self.parent.plots[self.uid])
+ self.parent.conns[self.uid] = []
+ self.parent.plots[self.uid] = []
# Remove subwindows for connection and plots
for r in remove:
@@ -640,20 +642,24 @@ class MForm(Qt.QWidget):
self.parent.update(knobs, self.uid)
- def __init__(self, radioclient, uid=0, updateRate=2000, parent=None, dialogprompt = False):
+ def __init__(self, radioclient, uid=0, updateRate=2000, parent=None):
super(MForm, self).__init__()
- self.radioclient = radioclient
- if(dialogprompt or radioclient.getHost() is None or radioclient.getPort() is None):
- askinfo = ConInfoDialog(self);
+
+ self.radioclient = None
+ if radioclient is None:
+ askinfo = ConInfoDialog(self)
if askinfo.exec_():
- host = str(askinfo.host.text());
- port = str(askinfo.port.text());
- self.radioclient = self.radioclient.newConnection(host, port)
- if self.radioclient is None:
- print("Cannot connect to %s:%s" % (host, port))
- else:
+ host = str(askinfo.host.text())
+ port = str(askinfo.port.text())
+
+ try:
+ self.radioclient = GNURadioControlPortClient(host, port, 'thrift').client
print("Connected to %s:%s" % (host, port))
+ except:
+ print("Cannot connect to %s:%s" % (host, port))
+ else:
+ self.radioclient = radioclient
if self.radioclient is None:
return
@@ -684,7 +690,7 @@ class MForm(Qt.QWidget):
# set up timer
self.timer.timeout.connect(self.update)
- self.updateRate = updateRate;
+ self.updateRate = updateRate
self.timer.start(self.updateRate)
# set up context menu ..
@@ -737,8 +743,17 @@ def get_minmax(p):
class MyApp(object):
def __init__(self, args):
- from gnuradio.ctrlport.GNURadioControlPortClient import GNURadioControlPortClient
- GNURadioControlPortClient(args, 'thrift', self.run, Qt.QApplication(sys.argv).exec_)
+
+ parser = ArgumentParser(description="GNU Radio Control Port Monitor")
+ parser.add_argument("host", nargs="?", default="localhost", help="host name or IP")
+ parser.add_argument("port", help="port")
+ args = parser.parse_args()
+
+ try:
+ GNURadioControlPortClient(args.host, args.port, 'thrift', self.run, Qt.QApplication(sys.argv).exec_)
+ except:
+ print("Control Port failed to connect.")
+ sys.exit(1)
def run(self, client):
MAINWindow(client).show()