summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/python/gnuradio/gr/gateway.py
diff options
context:
space:
mode:
authorTom Rondeau <trondeau@vt.edu>2013-02-13 13:34:58 -0500
committerTom Rondeau <trondeau@vt.edu>2013-02-13 13:34:58 -0500
commitda8abe401ae3859b07c48fb2a5dab4717b6c15cc (patch)
tree357eef8306745eabbb7a41b8d81ffe8db7ff7e6e /gnuradio-core/src/python/gnuradio/gr/gateway.py
parenta482bd9a29ba643ff148ae392dc359ff53dd7fb9 (diff)
parentaf7d55fda43746ae187bc520952eacf420f8363f (diff)
Merge branch 'next' of gnuradio.org:gnuradio into next
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
########################################################################