diff options
Diffstat (limited to 'gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor')
-rw-r--r-- | gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor | 121 |
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() |