[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 10/50: controlport: more cleanup of python
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 10/50: controlport: more cleanup of python code to help generalize the interface |
Date: |
Wed, 15 Apr 2015 21:07:52 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
jcorgan pushed a commit to branch master
in repository gnuradio.
commit 8270b20580b43fd00d1f1c1df14dee1f2a2498ad
Author: Tom Rondeau <address@hidden>
Date: Mon Feb 23 11:10:23 2015 -0500
controlport: more cleanup of python code to help generalize the interface
---
.../gnuradio/ctrlport/GNURadioControlPortClient.py | 85 ++++++++++------------
.../python/gnuradio/ctrlport/GrDataPlotter.py | 6 +-
.../python/gnuradio/ctrlport/gr-ctrlport-monitor | 37 ++++++----
.../python/gnuradio/ctrlport/gr-perf-monitorx | 24 +++---
4 files changed, 71 insertions(+), 81 deletions(-)
diff --git
a/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py
b/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py
index b9d0e40..c17a427 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py
@@ -128,72 +128,63 @@ Args:
host: hostname of the connection
"""
-from gnuradio.ctrlport.GNURadio.ttypes import BaseTypes
-
class RPCConnectionThrift(RPCConnection):
def __init__(self, host=None, port=None):
- if port is None: port = 9090
+ from gnuradio.ctrlport.GNURadio.ttypes import BaseTypes
+ self.BaseTypes = BaseTypes
+
+ if port is None:
+ port = 9090
super(RPCConnectionThrift, self).__init__(method='thrift', port=port,
host=host)
self.newConnection(host, port)
+ class Knob():
+ def __init__(self, key, value):
+ (self.key, self.value) = (key, value)
+
+ self.types_dict = {
+ self.BaseTypes.BOOL: lambda k,b: Knob(k, b.value.a_bool),
+ self.BaseTypes.BYTE: lambda k,b: Knob(k, b.value.a_byte),
+ self.BaseTypes.SHORT: lambda k,b: Knob(k, b.value.a_short),
+ self.BaseTypes.INT: lambda k,b: Knob(k, b.value.a_int),
+ self.BaseTypes.LONG: lambda k,b: Knob(k, b.value.a_long),
+ self.BaseTypes.DOUBLE: lambda k,b: Knob(k, b.value.a_double),
+ self.BaseTypes.STRING: lambda k,b: Knob(k, b.value.a_string),
+ self.BaseTypes.COMPLEX: lambda k,b: Knob(k, b.value.a_complex),
+ self.BaseTypes.F32VECTOR: lambda k,b: Knob(k, b.value.a_f32vector),
+ self.BaseTypes.F64VECTOR: lambda k,b: Knob(k, b.value.a_f64vector),
+ self.BaseTypes.S64VECTOR: lambda k,b: Knob(k, b.value.a_s64vector),
+ self.BaseTypes.S32VECTOR: lambda k,b: Knob(k, b.value.a_s32vector),
+ self.BaseTypes.S16VECTOR: lambda k,b: Knob(k, b.value.a_s16vector),
+ self.BaseTypes.S8VECTOR: lambda k,b: Knob(k, b.value.a_s8vector),
+ self.BaseTypes.C32VECTOR: lambda k,b: Knob(k, b.value.a_c32vector),
+ }
+
def newConnection(self, host=None, port=None):
from gnuradio.ctrlport.ThriftRadioClient import ThriftRadioClient
self.thriftclient = ThriftRadioClient(self.getHost(), self.getPort())
def properties(self, *args):
- return self.thriftclient.radio.properties(*args)
+ knobprops = self.thriftclient.radio.properties(*args)
+ for key, knobprop in knobprops.iteritems():
+# print("key:", key, "value:", knobprop, "type:", knobprop.type)
+ knobprops[key].min = self.types_dict[knobprop.type](key,
knobprop.min)
+ knobprops[key].max = self.types_dict[knobprop.type](key,
knobprop.max)
+ knobprops[key].defaultvalue = self.types_dict[knobprop.type](key,
knobprop.defaultvalue)
- def getKnobs(self, *args):
- class Knob():
- def __init__(self, key, value):
- (self.key, self.value) = (key, value)
+ return knobprops
+ def getKnobs(self, *args):
result = {}
for key, knob in self.thriftclient.radio.getKnobs(*args).iteritems():
- if knob.type == BaseTypes.BOOL: result[key] = Knob(key,
knob.value.a_bool)
- elif knob.type == BaseTypes.BYTE: result[key] = Knob(key,
knob.value.a_byte)
- elif knob.type == BaseTypes.SHORT: result[key] = Knob(key,
knob.value.a_short)
- elif knob.type == BaseTypes.INT: result[key] = Knob(key,
knob.value.a_int)
- elif knob.type == BaseTypes.LONG: result[key] = Knob(key,
knob.value.a_long)
- elif knob.type == BaseTypes.DOUBLE: result[key] = Knob(key,
knob.value.a_double)
- elif knob.type == BaseTypes.STRING: result[key] = Knob(key,
knob.value.a_string)
- elif knob.type == BaseTypes.COMPLEX: result[key] = Knob(key,
knob.value.a_complex)
- elif knob.type == BaseTypes.F32VECTOR: result[key] = Knob(key,
knob.value.a_f32vector)
- elif knob.type == BaseTypes.F64VECTOR: result[key] = Knob(key,
knob.value.a_f64vector)
- elif knob.type == BaseTypes.S64VECTOR: result[key] = Knob(key,
knob.value.a_s64vector)
- elif knob.type == BaseTypes.S32VECTOR: result[key] = Knob(key,
knob.value.a_s32vector)
- elif knob.type == BaseTypes.S16VECTOR: result[key] = Knob(key,
knob.value.a_s16vector)
- elif knob.type == BaseTypes.S8VECTOR: result[key] = Knob(key,
knob.value.a_s8vector)
- elif knob.type == BaseTypes.C32VECTOR: result[key] = Knob(key,
knob.value.a_c32vector)
- else:
- raise exceptions.ValueError
-
+# print("key:", key, "value:", knob, "type:", knob.type)
+ result[key] = self.types_dict[knob.type](key, knob)
return result
def getRe(self,*args):
- class Knob():
- def __init__(self, key, value):
- (self.key, self.value) = (key, value)
-
result = {}
for key, knob in self.thriftclient.radio.getRe(*args).iteritems():
- if knob.type == BaseTypes.BOOL: result[key] = Knob(key,
knob.value.a_bool)
- elif knob.type == BaseTypes.BYTE: result[key] = Knob(key,
knob.value.a_byte)
- elif knob.type == BaseTypes.SHORT: result[key] = Knob(key,
knob.value.a_short)
- elif knob.type == BaseTypes.INT: result[key] = Knob(key,
knob.value.a_int)
- elif knob.type == BaseTypes.LONG: result[key] = Knob(key,
knob.value.a_long)
- elif knob.type == BaseTypes.DOUBLE: result[key] = Knob(key,
knob.value.a_double)
- elif knob.type == BaseTypes.STRING: result[key] = Knob(key,
knob.value.a_string)
- elif knob.type == BaseTypes.COMPLEX: result[key] = Knob(key,
knob.value.a_complex)
- elif knob.type == BaseTypes.F32VECTOR: result[key] = Knob(key,
knob.value.a_f32vector)
- elif knob.type == BaseTypes.F64VECTOR: result[key] = Knob(key,
knob.value.a_f64vector)
- elif knob.type == BaseTypes.S64VECTOR: result[key] = Knob(key,
knob.value.a_s64vector)
- elif knob.type == BaseTypes.S32VECTOR: result[key] = Knob(key,
knob.value.a_s32vector)
- elif knob.type == BaseTypes.S16VECTOR: result[key] = Knob(key,
knob.value.a_s16vector)
- elif knob.type == BaseTypes.S8VECTOR: result[key] = Knob(key,
knob.value.a_s8vector)
- elif knob.type == BaseTypes.C32VECTOR: result[key] = Knob(key,
knob.value.a_c32vector)
- else:
- raise exceptions.ValueError
+ result[key] = self.types_dict[knob.type](key, knob)
return result
def setKnobs(self,*args):
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
index 243cc82..661705d 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
@@ -442,8 +442,7 @@ class GrDataPlotterValueTable:
units = str(knobprops[itemKey].units)
descr = str(knobprops[itemKey].description)
- # TODO: FIX COMPLEX
- if False: #if(type(v) == GNURadio.complex):
+ if(type(v) == GNURadio.complex):
v = v.re + v.im*1j
# If it's a byte stream, Python thinks it's a string.
# Unpack and convert to floats for plotting.
@@ -469,8 +468,7 @@ class GrDataPlotterValueTable:
for k in knobs.keys():
if k not in foundKeys:
v = knobs[k].value
- # TODO: Fix Handle of Complex
- if False: #if(type(v) == GNURadio.complex):
+ if(type(v) == GNURadio.complex):
v = v.re + v.im*1j
# If it's a byte stream, Python thinks it's a string.
# Unpack and convert to floats for plotting.
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
index 5411b24..251b4bc 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
@@ -20,15 +20,12 @@
# Boston, MA 02110-1301, USA.
#
-# from gnuradio import gr, ctrlport
-
from PyQt4 import QtCore,Qt
import PyQt4.QtGui as QtGui
import os, sys, time, struct
-# from gnuradio.ctrlport.IceRadioClient import *
+from gnuradio import gr, ctrlport
from gnuradio.ctrlport.GrDataPlotter import *
-# from gnuradio.ctrlport import GNURadio
class RateDialog(QtGui.QDialog):
def __init__(self, delay, parent=None):
@@ -79,7 +76,7 @@ class MAINWindow(QtGui.QMainWindow):
self.setUnifiedTitleAndToolBarOnMac(True)
self.newCon(radioclient)
- icon = QtGui.QIcon(sys.argv[0] + "/icon.png" )
+ icon = QtGui.QIcon(ctrlport.__path__[0] + "/icon.png" )
self.setWindowIcon(icon)
# Locally turn off ControlPort export from GR. This prevents
@@ -179,8 +176,10 @@ class MAINWindow(QtGui.QMainWindow):
uid = tree.uid
knobprop = self.knobprops[uid][tag]
- r = str(tree.radio).split(" ")
- title = "{0}:{1}".format(r[3], r[5])
+ strr = str(tree.radioclient)
+ print(strr)
+# r = strr.split(" ")
+ title = strr #title = "{0}:{1}".format(r[3], r[5])
pmin,pmax = get_minmax(knobprop)
disp = knobprop.display
@@ -301,13 +300,12 @@ class MAINWindow(QtGui.QMainWindow):
def update(self, knobs, uid):
#sys.stderr.write("KNOB KEYS: {0}\n".format(knobs.keys()))
for plot in self.plots[uid]:
- print("update plotuid:", uid)
data = []
for n in plot.knobnames:
- print("update plotuid:", uid, "name:", n)
d = knobs[n].value
- if(type(d) == GNURadio.complex):
- d = [d.re, d.im]
+ # TODO: FIX COMPLEX!
+# if(type(d) == GNURadio.complex):
+# d = [d.re, d.im]
# If it's a byte stream, Python thinks it's a string.
# Unpack and convert to floats for plotting.
@@ -735,10 +733,11 @@ def get_minmax(p):
pmax = p.max.value
# Find min/max or real or imag for GNURadio::complex
- if(type(pmin) == GNURadio.complex):
- pmin = min(pmin.re, pmin.im)
- if(type(pmax) == GNURadio.complex):
- pmax = max(pmax.re, pmax.im)
+ # TODO: fix complex
+# if(type(pmin) == GNURadio.complex):
+# pmin = min(pmin.re, pmin.im)
+# if(type(pmax) == GNURadio.complex):
+# pmax = max(pmax.re, pmax.im)
# If it's a byte stream, Python thinks it's a string.
if(type(pmin) == str):
@@ -757,9 +756,15 @@ def get_minmax(p):
return pmin, pmax
+# class MyClient(IceRadioClient):
+# def __init__(self):
+# IceRadioClient.__init__(self, MAINWindow)
+#
+# sys.exit(MyClient().main(sys.argv))
+
class MyApp(object):
def __init__(self, args):
- from gnuradio.ctrlport.GNURadioControlPortClient import
GNURadioControlPortClient
+ from GNURadioControlPortClient import GNURadioControlPortClient
GNURadioControlPortClient(args, 'thrift', self.run,
QtGui.QApplication(sys.argv).exec_)
def run(self, client):
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
b/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
index c39df03..c066542 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python
#
# Copyright 2012-2013 Free Software Foundation, Inc.
#
@@ -29,17 +29,13 @@ from matplotlib.backends.backend_qt4agg import
FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as
NavigationToolbar
from matplotlib.figure import Figure
-from gnuradio import gr, ctrlport
-
from PyQt4 import QtCore,Qt,Qwt5
import PyQt4.QtGui as QtGui
import sys, time, re, pprint
import itertools
-
+from gnuradio import gr, ctrlport
from gnuradio.ctrlport.GrDataPlotter import *
-#from gnuradio.ctrlport import GNURadio
-
class MAINWindow(QtGui.QMainWindow):
def minimumSizeHint(self):
@@ -85,7 +81,7 @@ class MAINWindow(QtGui.QMainWindow):
self.mdiArea.currentSubWindow().showMaximized()
def newCon(self, csomeBool):
- child = MForm(self.radioclient, len(self.conns), self, prompt= not
csomeBool)
+ child = MForm(self.radioclient, len(self.conns), self, dialogprompt =
not csomeBool)
if(child.radioclient is not None):
child.setWindowTitle(str(child.radioclient))
self.mdiArea.addSubWindow(child)
@@ -362,8 +358,9 @@ class DataTableBuffers(DataTable):
blockport_fullness = {}
for blk in buffer_fullness:
bdata = buffer_fullness[blk]
- for port in range(0,len(bdata)):
- blockport_fullness["%s:%d"%(blk,port)] = bdata[port];
+ if bdata:
+ for port in range(0,len(bdata)):
+ blockport_fullness["%s:%d"%(blk,port)] = bdata[port];
self.table_update(blockport_fullness);
@@ -473,7 +470,7 @@ class MForm(QtGui.QWidget):
# strip values out of ctrlport response
buf_vals = dict(zip(
map(lambda x: x.split("::")[0], buf_knobs.keys()),
- map(lambda x: x, buf_knobs.values())))
+ map(lambda x: x.value, buf_knobs.values())))
# get work time for all blocks
kl = map(lambda x: "%s::%swork time" % \
@@ -503,7 +500,7 @@ class MForm(QtGui.QWidget):
# get the right output buffer/port weight for each edge
sourceport = e[2]["sourceport"];
if(e[2]["type"] == "stream"):
- newweight = buf_vals[n].value[sourceport]
+ newweight = buf_vals[n][sourceport]
e[2]["weight"] = newweight;
for n in nodes_msg:
@@ -511,7 +508,6 @@ class MForm(QtGui.QWidget):
for e in ne: # iterate over edges from this block
sourceport = e[2]["sourceport"];
if(e[2]["type"] == "msg"):
- #newweight = buf_vals[n][sourceport]
newweight = 0.01;
e[2]["weight"] = newweight;
@@ -596,12 +592,12 @@ class MForm(QtGui.QWidget):
km[self.clockKey] = k[self.clockKey];
self.radioclient.setKnobs(km);
- def __init__(self, radioclient, uid=0, parent=None, prompt = False):
+ def __init__(self, radioclient, uid=0, parent=None, dialogprompt = False):
super(MForm, self).__init__()
self.radioclient = radioclient
# print("before radioclient.getHost()", radioclient.getHost(),
radioclient.getPort(), "prompt", prompt)
- if(prompt or radioclient.getHost() is None or radioclient.getPort() is
None):
+ if(dialogprompt or radioclient.getHost() is None or
radioclient.getPort() is None):
# print("before ConInfoDialog")
askinfo = ConInfoDialog(self);
if askinfo.exec_():
- [Commit-gnuradio] [gnuradio] 13/50: controlport: using threaded server for multiple connections., (continued)
- [Commit-gnuradio] [gnuradio] 13/50: controlport: using threaded server for multiple connections., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 39/50: controlport: documentation cleanup, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 35/50: controlport: cleanup, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 33/50: controlport: more cleanup and conveniences, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 11/50: controlport: more work on the translation layer; properties and setting parameters in gr-ctrlport-monitor now working., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 45/50: controlport: ensure proper ctrlport shutdown., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 08/50: controlport: adding abstraction layer for the controlport backends; support thrift currently., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 25/50: controlport: fixing up some issues; generate thrift sources into thrift subdir., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 16/50: controlport: switching rpcpmtconverter::to_pmt() to To_PMT singleton, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 40/50: controlport: documentation cleanup, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 10/50: controlport: more cleanup of python code to help generalize the interface,
git <=
- [Commit-gnuradio] [gnuradio] 38/50: controlport: cleanup, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 41/50: controlport: cmake fixes to FindThrift for when thrift is not installed., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 43/50: controlport: more documentation and linking info., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 37/50: controlport: Some documentation, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 32/50: controlport: moving the generation of the Thrift endpoint string to the application_started() function., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 42/50: controlport: QA needs to get host and port out of the endpoint., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 27/50: controlport: cleaning up; trying to handle shutdown better., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 19/50: controlport: simple style editing., git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 36/50: controlport: renamed some functions for clairity, git, 2015/04/16
- [Commit-gnuradio] [gnuradio] 50/50: Merge branch 'ctrlport', git, 2015/04/16