summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/python/gnuradio/gr/gateway.py
diff options
context:
space:
mode:
authorJohnathan Corgan <johnathan@corganlabs.com>2013-02-12 21:07:33 -0800
committerJohnathan Corgan <johnathan@corganlabs.com>2013-02-12 21:07:33 -0800
commitaf7d55fda43746ae187bc520952eacf420f8363f (patch)
tree89dc0783c1af3b0672d1789868f8d5f4d00198a5 /gnuradio-core/src/python/gnuradio/gr/gateway.py
parent2e22fb2905273cfa27ac89465366272057f206ac (diff)
parent54a850f1612537e6cd5a7e7d415bc28b959cb295 (diff)
Merge branch 'master' into next
Adjusted pmt usage for naming
Diffstat (limited to 'gnuradio-core/src/python/gnuradio/gr/gateway.py')
-rw-r--r--gnuradio-core/src/python/gnuradio/gr/gateway.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/gnuradio-core/src/python/gnuradio/gr/gateway.py b/gnuradio-core/src/python/gnuradio/gr/gateway.py
index 244b8b5925..c25755bb57 100644
--- a/gnuradio-core/src/python/gnuradio/gr/gateway.py
+++ b/gnuradio-core/src/python/gnuradio/gr/gateway.py
@@ -60,6 +60,24 @@ class gateway_handler(gr_core.feval_ll):
return 0
########################################################################
+# Handler that does callbacks from C++
+########################################################################
+class msg_handler(gr_core.feval_p):
+
+ #dont put a constructor, it wont work
+
+ def init(self, callback):
+ self._callback = callback
+
+ def eval(self, arg):
+ try: self._callback(arg)
+ except Exception as ex:
+ print("handler caught exception: %s"%ex)
+ import traceback; traceback.print_exc()
+ raise ex
+ return 0
+
+########################################################################
# The guts that make this into a gr block
########################################################################
class gateway_block(object):
@@ -91,6 +109,9 @@ class gateway_block(object):
self.__handler, name, gr_in_sig, gr_out_sig, work_type, factor)
self.__message = self.__gateway.gr_block_message()
+ #dict to keep references to all message handlers
+ self.__msg_handlers = {}
+
#register gr_block functions
prefix = 'gr_block__'
for attr in [x for x in dir(self.__gateway) if x.startswith(prefix)]:
@@ -171,6 +192,13 @@ class gateway_block(object):
def start(self): return True
def stop(self): return True
+ def set_msg_handler(self, which_port, handler_func):
+ handler = msg_handler()
+ handler.init(handler_func)
+ self.__gateway.set_msg_handler_feval(which_port, handler)
+ # Save handler object in class so it's not garbage collected
+ self.__msg_handlers[which_port] = handler
+
########################################################################
# Wrappers for the user to inherit from
########################################################################